servlets - 我可以在 RequestDispatcher 之后编写代码吗?
问题描述
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//some code here
}
public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//performTask(req, resp);
//some code here
}
private void insertRequestTemplate() {
HttpSession session = req.getSession();
responsePage = req.getParameter("ResponsePage");
ServletContext ctx = getServletConfig().getServletContext();
ctx.getRequestDispatcher(responsePage).forward(req,resp);
readMessage();
public void readMessage()
{
System.out.println("calling MessageTrigger_ABean");
MessageTrigger_ABean msg = new MessageTrigger_ABean();
msg.read();
}
msg.read() 具有从 MQ 读取消息的代码。在 insertRequestTemplate 方法中,我在 ctx.getRequestDispatcher(responsePage).forward(req,resp) 之后调用 readMessage 方法;这是调用它的正确方法吗?但是在 insertRequestTemplate 方法中,页面不会被转发到下一页,直到 readMessage() 被执行,因为页面会持续加载很长时间,直到从 MQ 读取消息。你能帮我解决这个问题吗?
解决方案
我见过的大多数将请求转发到另一个 servlet 的 servlet 示例forward
在方法的末尾都有调度程序调用。IE。除了方法末尾的大括号外,没有更多代码。
我猜在调用方法完成之前不会发生转发。因此,您msg.read()
将在哪里停止该insertRequestTemplate
方法的完成。这很可能是因为 msg.read 中的代码是同步执行的。导致 http 请求的 http 超时。
你如何解决这个问题取决于你想对从msg.read()
.
推荐阅读
- nuget - 项目的当前包源中没有可用的包更新
- javascript - 当我在 javascript 中调用 bit.ly 时获取 MISSING_ARG_ACCESS_TOKEN
- json - 如何使用 JSON 响应中的键名读取名称值对
- javascript - 如何在Javascript中将字符串替换存储为对象?
- php - JWT 会取代 Laravel 原生身份验证吗?我应该删除它吗?
- python - Anaconda navigator 和 Spyder 无法启动
- jekyll - 如何使用 Liquid 对 Jekyll 的数据项进行分页
- mongodb - 如何在 DynamoDB 中存储任意结构的 API 响应
- angularjs - 如何使用meteorjs、AWS s3和Angularjs下载大文件?
- angular - Filter *ngFor from array object