【问题标题】:Can I write code after RequestDispatcher?我可以在 RequestDispatcher 之后编写代码吗?
【发布时间】:2021-01-02 01:51:16
【问题描述】:
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 读取消息。你能帮我解决这个问题吗?

【问题讨论】:

    标签: servlets jakarta-ee ibm-mq requestdispatcher


    【解决方案1】:

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

    我猜在调用方法完成之前不会发生转发。所以你有你的msg.read() 将阻止insertRequestTemplate 方法完成。这很可能是因为 msg.read 中的代码是同步执行的。导致 http 请求的 http 超时。

    您如何解决这个问题取决于您想如何处理从msg.read() 获得的消息。

    【讨论】:

    • 使用 msg.read() 我正在处理这些消息并更新请求状态。有什么办法可以解决这个问题。
    猜你喜欢
    • 2015-11-03
    • 2020-06-15
    • 2023-03-07
    • 2013-08-27
    • 2019-02-11
    • 1970-01-01
    • 2011-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多