我如何依次执行多个servlet?

我刚刚开始使用Servlet,并设法将一些servlet作为单独的URL来填充数据库以进行一些虚拟testing。 一些forms的东西:

public class Populate_ServletName extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { resp.setContentType("text/plain"); //Insert records //Print confirmation } } 

我有大约6个这样的servlet,我想依次执行。 我正在考虑使用setLocation来设置下一个页面被redirect,但不知道这是否是正确的方法,因为redirect应该发生在插入logging之后。 具体来说,我正在寻找这样的东西:

 public class Populate_ALL extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { resp.setContentType("text/plain"); //Call Populate_1 //Call Populate_2 //Call Populate_3 //... } } 

有什么build议么?

在匹配Servlet的url-pattern的URL上使用RequestDispatcher#include()

 public class Populate_ALL extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/plain"); request.getRequestDispatcher("/populateServlet1").include(request, response); request.getRequestDispatcher("/populateServlet2").include(request, response); request.getRequestDispatcher("/populateServlet3").include(request, response); //... } } 

注意:如果这些servlet不能独立使用,那么这是错误的方法,你应该使用独立的Java类来实现这个不扩展HttpServlet 在你的具体情况下,我认为Builder模式可能是有趣的。

RequestDispatcher#forward()在这里是不合适的,因为当响应头已经被提交时它抛出IllegalStateExceptionexception。 当您通过多个servlet传递请求/响应,每个servlet都写入响应时,情况就会如此。

HttpServletResponse#sendRedirect()在这里是绝对不适合的,因为它隐含地创build了一个全新的requestresponse ,因此摧毁了原来的requestresponse

也可以看看:

  • 如何在第一个JSP servlet中调用第二个JSP servlet?
  • RequestDispatcher.forward()vs HttpServletResponse.sendRedirect()
  • 远程servlet之间的通信

看起来你可能需要的是每个servlet可以用来执行一些工作的服务。 然后servlet不依赖于另一个,而是全部使用该服务。

但是,这里是转发或redirect请求的解释。