在Filter中执行并呈现JSP

时间:2011-05-12 19:25:22

标签: jsp servlets servlet-filters

我有一个包含页面顶部内容的JSP,我们称之为header.jsp。出于性能原因,我想在构建页面的其余部分之前呈现此JSP并将其刷新给用户。 (有关性能优势的解释,请参阅here。)

我能想到的最好方法是创建一个名为FlushingFilter的过滤器,让它将JSP的内容写入响应,然后在执行链的其余部分之前将其刷新。作为一个概念验证,我手动将header.jsp转换为我的FlushingFilter内的一堆response.getWriter()。println()调用,之后我调用response.getWriter()。flush()然后调用doFilter()继续过滤链。这个println()设置产生了所需的行为,页面速度要快得多。

但是在启动之前,我想通过以编程方式调用过滤器内部的JSP而不必使用手动println()调用来使其更清晰。我发现的最接近的解决方案是this question的第一个答案,但它涉及在RequestDispatcher上调用include()方法。据我所知,我无法访问我的过滤器中的任何RequestDispatcher,尽管这可能只是我的JSP / servlet经验不足。

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

1 个答案:

答案 0 :(得分:6)

  

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

它绝对可用于过滤器。

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