如何通过JSP页面调用servlet
我想通过一个JSP页面调用一个Servlet。 什么是调用方法?
你可以使用<jsp:include>
来做到这一点。
<jsp:include page="/servletURL" />
但是通常是相反的。 您可以调用servlet,然后转发到JSP以显示结果。 创build一个在doGet()
方法中执行如下操作的Servlet。
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 。
如果您的实际问题是“如何将表单提交给servlet?” 那么您只需在HTML表单action
指定servlet URL即可。
<form action="servletURL" method="post">
它的doPost()
方法将被调用。
也可以看看:
- Servlets信息页面 – 包含一个hello世界
- 如何从HTML表单调用servlet类
- 如何通过单击JSP页面中的超链接或button将当前项传递给Java方法?
- 在JSP页面中使用MVC和DAO模式在HTML中显示JDBC ResultSet
- devise模式基于Web的应用程序
您可以像使用Servlet
一样使用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"/>
你为什么想做这个? 你不应该在视图中执行控制器代码,当然也不应该试图把另一个servlet里面的代码放入视图中。
首先完成应用程序的所有处理和重构,然后将结果传递给视图。 使视图尽可能愚蠢,你甚至不会遇到这些问题。
如果这种devise对你来说很难,试试Freemarker甚至像Velocity(尽pipe我不推荐它)来强制你这样做。 你永远不必做这种事情。
更准确地说,你试图解决的问题只是一个更大问题的症状 – 你的servlet的架构/devise。
您可以将您的jsp页面提交给servlet。 为此使用<form>
标签。
并redirect使用:
response.sendRedirect("servleturl")
您可以将HTML表单发布到映射到servlet的URL,也可以将数据插入到传递给jsp页面的HttpServletRequest对象中。