我一直在搜索net和stackoverflow,以获取使用servlet过滤器将内容插入响应的示例,但只能找到捕获/压缩输出和/或更改标头的人的示例.我的目标是在所有HTML响应的结束</ body>之前附加一大块HTML.
我正在研究扩展HttpServletResponseWrapper的解决方案,以使用我自己的PrintWriter,然后覆盖其上的write方法.在write方法中,我存储了最后7个字符,看它是否等于关闭body标签,然后我写了我的HTML块加上关闭的body标签,然后继续对文档的其余部分进行正常的写操作.
我觉得有人必须已经解决了这个问题,而且可能比我更优雅.我很欣赏如何使用servlet过滤器将内容插入响应的任何示例.
更新
回应评论,我也试图从http://www.oracle.com/technetwork/java/filters-137243.html实现CharResponseWrapper .这是我的代码:
PrintWriter out = response.getWriter();
CharResponseWrapper wrappedResponse = new CharResponseWrapper(
(HttpServletResponse)response);
chain.doFilter(wrappedRequest, wrappedResponse);
String s = wrappedResponse.toString();
if (wrappedResponse.getContentType().equals("text/html") &&
StringUtils.isNotBlank(s)) {
CharArrayWriter caw = new CharArrayWriter();
caw.write(s.substring(0, s.indexOf("</body>") - 1));
caw.write("WTF</body></html>");
response.setContentLength(caw.toString().length());
out.write(caw.toString());
}
else {
out.write(wrappedResponse.toString());
}
out.close();
Run Code Online (Sandbox Code Playgroud)
我也在包装请求,但该代码有效,不应影响响应.