Servlets 我可以在RequestDispatcher之后编写代码吗?
msg.read()具有从MQ读取消息的代码。在insertRequestTemplate方法中,我在ctx.getRequestDispatcher(responsePage).forward(req,resp)之后调用readMessage方法;这是正确的称呼吗?Servlets 我可以在RequestDispatcher之后编写代码吗?,servlets,jakarta-ee,ibm-mq,requestdispatcher,Servlets,Jakarta Ee,Ibm Mq,Requestdispatcher,msg.read()具有从MQ读取消息的代码。在insertRequestTemplate方法中,我在ctx.getRequestDispatcher(responsePage).forward(req,resp)之后调用readMessage方法;这是正确的称呼吗? 但在insertRequestTemplate方法中,在执行readMessage()之前,页面不会被转发到下一个页面,因为页面会持续加载很长时间,直到从MQ读取消息为止。您能在这方面帮助我吗。我所看到的大多数servlet将请求
但在insertRequestTemplate方法中,在执行readMessage()之前,页面不会被转发到下一个页面,因为页面会持续加载很长时间,直到从MQ读取消息为止。您能在这方面帮助我吗。我所看到的大多数servlet将请求转发给另一个servlet的示例都在方法的末尾有dispatcher
forward
调用。也就是说,除了方法末尾的大括号外,没有其他代码了
我猜在调用方法完成之前,转发不会发生。因此,msg.read()
将停止insertRequestTemplate
方法的完成。这很可能是因为msg.read中的代码是同步执行的。导致http请求上的http超时
如何解决此问题将取决于您希望如何处理从msg.read()
获取的消息。使用msg.read()我正在处理这些消息并更新请求状态。解决这个问题的办法是什么。
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();
}