gpt4 book ai didi

servlets - 如何按顺序执行多个 servlet?

转载 作者:行者123 更新时间:2023-12-02 20:05:01 28 4
gpt4 key购买 nike

我刚刚开始使用 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
//...
}
}

有什么建议吗?

最佳答案

使用RequestDispatcher#include()与 Servlet 的 url-pattern 匹配的 URL。

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()在这里不适合,因为当响应 header 已经提交时它会抛出 IllegalStateException 。当您通过多个 servlet 传递请求/响应(每个 servlet 都写入响应)时,无疑会出现这种情况。

HttpServletResponse#sendRedirect()在这里绝对不适合,因为它隐式创建了一个全新的请求响应,从而废弃了原始的。

另请参阅:

关于servlets - 如何按顺序执行多个 servlet?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3024949/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com