我想通过一个JSP页面来调用一个Servlet,应该使用什么方法调用?
我想通过一个JSP页面来调用一个Servlet,应该使用什么方法调用?
你 可以 使用 <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>
现在通过匹配其在web.xml
中的<url-pattern>
的URL来调用Servlet,例如http://example.com/contextname/servletURL。
请注意JSP文件明确放置在/WEB-INF
文件夹中。这将防止用户单独打开JSP文件。用户只能调用servlet以打开JSP文件。
如果您的实际问题是“如何将表单提交给servlet?”,那么您只需要在HTML表单action
中指定servlet URL。
<form action="servletURL" method="post">
接着调用doPost()
方法。
RequestDispatcher
:<%@ 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
。
没有直接调用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"/>
response.sendRedirect("")
。 - Harry Joy您可以将HTML表单发布到映射到Servlet的URL,或将数据插入传递给JSP页面的HttpServletRequest对象中。