【发布时间】:2009-07-31 03:01:44
【问题描述】:
提前感谢大家-
我还没有找到一种简单的方法来做到这一点,但是,是否可以接管写入 JspWriter 的数据(标题和所有内容)的处理?有点像动态管理缓冲区然后控制输出到 JspWriter 的联络员?我遇到了重定向问题,由于我的一些包含,状态标头已经被刷新(我认为它是包含,但不管它肯定会刷新缓冲区)。
我知道设置缓冲区大小等
我没有使用框架,只是tomcat上的纯jsp。
谢谢,
山姆
【问题讨论】:
提前感谢大家-
我还没有找到一种简单的方法来做到这一点,但是,是否可以接管写入 JspWriter 的数据(标题和所有内容)的处理?有点像动态管理缓冲区然后控制输出到 JspWriter 的联络员?我遇到了重定向问题,由于我的一些包含,状态标头已经被刷新(我认为它是包含,但不管它肯定会刷新缓冲区)。
我知道设置缓冲区大小等
我没有使用框架,只是tomcat上的纯jsp。
谢谢,
山姆
【问题讨论】:
您可以尝试编写 Filter 并将其映射以拦截您的 JSP:
(excerpt from web.xml)
<filter>
<filter-name>jspFilter</filter-name>
<filter-class>com.mypackage.JspFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>jspFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
在您的doFilter() 方法实现中,您可以通过扩展HttpServletResponseWrapper 并覆盖其getWriter() / getOutputStream() 方法以使用StringWriter 来缓冲响应,从而将servlet 响应包装到您自己的响应中。在您调用 doFilter() 方法并返回(或引发异常)后,您可以对缓冲的响应做任何您想做的事情 - 打印它,重定向到另一个页面,您有什么。
【讨论】:
BufferedHttpResponseWrapper 就是我所说的。我不确定“在 jsp 的上下文中覆盖”是什么意思 - 你想将过滤器实现为 JSP?那是做不到的,它必须是一个java类。您的链接中有一个示例(MyFilter),您也可以在这里查看:java.sun.com/javaee/5/docs/tutorial/doc/bnagb.html 已编译的过滤器类必须部署为您的 Web 应用程序的一部分(您可以将其放在 /WEB-INF/classes 中), servlet 容器(Tomcat)会自动调用 doFilter() 方法。