一尘不染

在Filter内执行和渲染JSP

jsp

我的JSP包含页面顶部的内容,我们将其称为header.jsp。出于性能原因,我想在构建页面的其余部分之前呈现此JSP并将其冲洗给用户。(有关性能优势的说明,请参见此处。)

我能想到的最好的方法是创建一个名为FlushingFilter的Filter,并使其将JSP的内容写入响应,然后在执行其余链之前将其清空。作为概念验证,我在FlushingFilter内部手动将header.jsp转换为一堆response.getWriter()。println()调用,然后再调用response.getWriter()。flush()和doFilter()继续过滤链。此println()设置会产生所需的行为,并且页面要快得多。

但是在启动之前,我希望通过以编程方式在过滤器内部调用JSP来使其变得更整洁,而不必使用手动的println()调用。我找到的最接近的解决方案是此问题的第一个答案,但这涉及在RequestDispatcher上调用include()方法。据我所知,我没有访问过滤器中的任何RequestDispatcher的权限,尽管那可能只是我的JSP/ servlet经验不足而引起的。

有谁知道我如何以编程方式调用这样的JSP,并以String格式获取其输出?


阅读 268

收藏
2020-06-08

共1个答案

一尘不染

我知道,我无法访问过滤器中的任何RequestDispatcher,尽管这可能只是我的JSP / servlet经验不足

绝对可以在过滤器中使用。

request.getRequestDispatcher("/WEB-INF/header.jsp").include(request, response);
response.flushBuffer();
2020-06-08