包括来自JavaEE过滤器的JSP文件

包括来自JavaEE过滤器的JSP文件,java,jakarta-ee,jetty,servlet-filters,Java,Jakarta Ee,Jetty,Servlet Filters,我试图在过滤器结束后包含一个JSP页面。我有以下代码: public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException { try { chain.doFilter(request, response);

我试图在过滤器结束后包含一个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,各种各样的关闭,但还是不明白。有什么想法会有帮助吗?

有太多的未知数和很多事情只有通过调试才能解决,我无法给出任何答案。马蒂·霍尔(Marty Hall)的《Moreservlets》一书可能会对你有所帮助。你可以在免费阅读。阅读关于过滤器的第9章

可能是因为要将包装好的请求和响应传递给请求分派器,请尝试通过转换将请求传递给HttpServletResponse和HttpServletRequest


我将尝试创建一个简单的java应用程序,看看是否会发生上述情况。如果没有,那么这个应用程序肯定有什么特别之处。否则,一定会有别的事情发生。我想也许在链的最后,响应已经提交,所以它不起作用。这不是真的。强制转换不会更改/复制具体实例或其他内容。Java是面向对象的。
 dispatcher.include((HttpServletRequest) request, (HttpServletResponse)response)