首页 > 解决方案 > 我可以在 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 读取消息。你能帮我解决这个问题吗?

标签: servletsjakarta-eeibm-mqrequestdispatcher

解决方案


我见过的大多数将请求转发到另一个 servlet 的 servlet 示例forward在方法的末尾都有调度程序调用。IE。除了方法末尾的大括号外,没有更多代码。

我猜在调用方法完成之前不会发生转发。因此,您msg.read()将在哪里停止该insertRequestTemplate方法的完成。这很可能是因为 msg.read 中的代码是同步执行的。导致 http 请求的 http 超时。

你如何解决这个问题取决于你想对从msg.read().


推荐阅读