【问题标题】:Including a JSP file from a Java EE Filter包括来自 Java EE 过滤器的 JSP 文件
【发布时间】:2011-09-11 04:59:08
【问题描述】:

我试图在过滤器结束后包含一个 JSP 页面。我有以下代码:

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws ServletException, IOException {
        try {            
            chain.doFilter(request, response);
        }
        finally {                                
                HttpServletRequest httpRequest = (HttpServletRequest) request;
                RequestDispatcher dispatcher = httpRequest.getRequestDispatcher("/WEB-INF/logging/logAppender.jsp");
                dispatcher.include(request, response); // This does not work!
                dispatcher.include(request, response); // The second time it works?                
        }
    }

我认为非常简单的过滤器。但是,正如您在上面看到的,出于某种原因,第一次调用 include 并没有做任何事情。我只是对调试感到困惑和厌倦。我试过调用 .flushBuffer()、getWriter().flush()、各种 close() 还是不明白。有什么想法会有所帮助吗?

【问题讨论】:

    标签: java jakarta-ee jetty servlet-filters


    【解决方案1】:

    可能是因为您将包装的请求和响应传递给请求调度程序,请尝试将 by 强制转换传递给 HttpServletResponseHttpServletRequest

     dispatcher.include((HttpServletRequest) request, (HttpServletResponse)response) 
    

    【讨论】:

    • 这不是真的。铸造不会更改/复制具体实例或其他东西。 Java 是面向对象的。
    【解决方案2】:

    有太多的未知数,很多事情只能通过调试才能弄清楚,我无法给出任何答案。 Marty Hall 的 Moreservlets 书是一个可以帮助您的好资源。您可以在http://pdf.moreservlets.com/ 免费阅读。阅读第 9 章过滤器。

    【讨论】:

    • 我将尝试创建一个简单的 Java 应用程序,看看是否会发生与上述相同的情况。如果没有,那么这个应用程序一定有什么特别之处。否则,一定有其他事情发生。我想也许在链的末端,响应已经提交,所以它不起作用。
    猜你喜欢
    • 1970-01-01
    • 2018-07-09
    • 1970-01-01
    • 2018-01-21
    • 1970-01-01
    • 2017-12-07
    • 1970-01-01
    • 2023-01-01
    • 2023-04-05
    相关资源
    最近更新 更多