【问题标题】:How do I execute multiple servlets in sequence?如何按顺序执行多个 servlet?
【发布时间】:2011-03-02 18:47:28
【问题描述】:

我刚刚开始使用 Servlet,并设法让一些 servlet 充当单独的 URL,用于填充数据库以进行一些虚拟测试。某种形式的东西:

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 设置要重定向的下一页,但不确定这是否是正确的方法,因为重定向应该在插入记录后发生。具体来说,我正在寻找这样的东西:

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
     //...
  }
}

有什么建议吗?

【问题讨论】:

    标签: servlets sequence


    【解决方案1】:

    在与 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 不能独立使用,那么这是错误的方法,您应该为此使用不扩展 HttpServlet 的独立 Java 类。在您的具体情况下,我认为Builder Pattern 可能会引起您的兴趣。

    RequestDispatcher#forward() 在这里不合适,因为它在响应标头已经提交时抛出 IllegalStateException。毫无疑问,当您通过多个 servlet 传递请求/响应时,每个 servlet 都会写入响应。

    HttpServletResponse#sendRedirect() 绝对不适合这里,因为它隐式创建了一个全新的requestresponse,从而破坏了原来的。

    另见:

    【讨论】:

    • 为此 +1。 servlet 可以独立使用。谢谢你的建议。
    【解决方案2】:

    看起来您可能需要一个服务,每个 servlet 都可以使用它来执行某些工作。那么这些 servlet 就不是一个又一个地依赖,而是都在使用该服务。

    不过,这里是forwarding or redirecting requests的解释。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-09
      • 1970-01-01
      • 1970-01-01
      • 2018-12-31
      • 2013-07-11
      • 2018-05-03
      • 2021-09-04
      • 2018-09-03
      相关资源
      最近更新 更多