在过滤器中执行和呈现 JSP

Posted

技术标签:

【中文标题】在过滤器中执行和呈现 JSP【英文标题】:Execute and render JSP inside a Filter 【发布时间】:2011-08-24 09:52:29 【问题描述】:

我有一个包含页面顶部内容的 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,并以字符串格式取回其输出?

【问题讨论】:

【参考方案1】:

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

过滤器中肯定有。

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

【讨论】:

啊,我一直在研究 HttpServletRequest 提供的功能子集。谢谢,我试试看。 继承自ServletRequest。另请参阅 javadocs:download.oracle.com/javaee/6/api/javax/servlet/http/… 和 download.oracle.com/javaee/6/api/javax/servlet/…。

以上是关于在过滤器中执行和呈现 JSP的主要内容,如果未能解决你的问题,请参考以下文章

JSP使用过滤器防止SQL注入

java web项目中过滤器的使用(过滤器执行多次)????

JSP-Runoob:JSP 过滤器

JSP的过滤器

JSP ---[过滤器]

Filter过滤器