如何通过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对象中。