Velocity 和 Filter 一起使用,在Filter中用response.getOutputStream()输出静态内容报错
我现在的一个项目中前端使用 Velocity 模板作为视图展示,项目中定义了一个Filter,该Filter 拦截 css文件请求,然后将 css 文件中的变量替换掉再输出给response响应,结果报错:
java.lang.NullPointerException at org.apache.coyote.http11.InternalOutputBuffer.realWriteBytes
Filter代码如下:
public void doFilter( request, response, filterChain ) { String css_file = req.getServletPath(); if( !css_file.endsWith(".css") ){ filterChain.doFilter(request, response); return; } // 读取css文件内容 InputStream is = servletContext.getResourceAsStream(css_file); // 处理css文件内容,替换其中的变量,然后返回修改后的css字符串内容 String new_css = CssParser.parse( is, request ); // 将新的css内容输出给response响应 res.getWriter().write( new_css ); res.getWriter().flush(); }
一展示velocity页面,就报错,不是 realWriteBytes空指针异常,就是realWriteBytes数组越界。
提示:res.getWriter().write( new_css ); 这一行造成的。
但是,访问静态html页面,或测试的jsp页面,都不会报错,就是访问Velocity页面就报错;
网上搜了下,说是什么 Velocity 冲突,我尝试了很多方法都无用。
网上有一个方法:
<%
out.clear();
out = pageContext.pushBody() ;
%>
但是在 Filter 中无法使用什么 out.clear(); out = pageContext.pushBody() ;
现在请教大家,这个问题该如何解决??很急啊,谢谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
红薯个,我的代码中就是使用的 res.getWriter() 方法啊
红薯个 == 红薯哥,呵呵
统一用 getWriter 方法