如何通过JSP页面调用servlet

时间:2011-04-13 13:05:09

标签: jsp servlets

我想通过JSP页面调用Servlet。要打电话的方法是什么?

6 个答案:

答案 0 :(得分:32)

可以使用<jsp:include>

<jsp:include page="/servletURL" />
然而,这通常是反过来的。您调用servlet,然后转发到JSP以显示结果。创建一个Servlet,它在doGet()方法中执行类似的操作。

request.setAttribute("result", "This is the result of the servlet call");
request.getRequestDispatcher("/WEB-INF/result.jsp").forward(request, response);

并在/WEB-INF/result.jsp

<p>The result is ${result}</p>

现在通过与<url-pattern>中的web.xml匹配的网址调用Servlet,例如http://example.com/contextname/servletURL


如果实际问题是“如何将表单提交给servlet?”然后你只需要在HTML表单action中指定servlet URL。

<form action="servletURL" method="post">

然后将调用其doPost()方法。


另见:

答案 1 :(得分:4)

您可以使用RequestDispatcher,因为您通常会在Servlet中使用它:

<%@ page contentType="text/html"%>
<%@ page import = "javax.servlet.RequestDispatcher" %>
<%
     RequestDispatcher rd = request.getRequestDispatcher("/yourServletUrl");
     request.setAttribute("msg","HI Welcome");
     rd.forward(request, response);
%>

请务必注意,在使用forward之前不要提交任何回复,因为它会导致IllegalStateException

答案 2 :(得分:3)

没有调用Servlet的方法。您应该在web.xml中进行映射,然后触发此映射。

示例:web.xml:

  <servlet>
    <servlet-name>hello</servlet-name>
    <servlet-class>test.HelloServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello</url-pattern>
  </servlet-mapping>

此映射表示每次调用http://yoursite/yourwebapp/hello都会触发此servlet 例如这个jsp:

<jsp:forward page="/hello"/> 

答案 3 :(得分:2)

你为什么要这样做?您不应该在视图中执行控制器代码,并且当然也不应该尝试将另一个servlet中的代码拉入视图中。

首先对应用程序进行所有处理和重构,然后将结果传递给视图。让视图尽可能愚蠢,你甚至不会遇到这些问题。

如果这种设计对你来说很难,那么试试Freemarker甚至像Velocity这样的东西(虽然我不推荐它)来强迫你这样做。你永远不必做这种事情。

更准确地说,您尝试解决的问题只是一个更大问题的症状 - 您的servlet的架构/设计。

答案 4 :(得分:1)

您可以将jsp页面提交给servlet。对于此用途<form>标记。

并重定向使用:

response.sendRedirect("servleturl")

答案 5 :(得分:0)

您可以将HTML表单发布到URL,映射到servlet或将数据插入到传递给jsp页面的HttpServletRequest对象中。