Velocity 和 Filter 一起使用,在Filter中用response.getOutputStream()输出静态内容报错

山哥 发布于 2012/02/29 17:46
阅读 1K+
收藏 0

我现在的一个项目中前端使用 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() ;

现在请教大家,这个问题该如何解决??很急啊,谢谢!

加载中
0
红薯
红薯
统一用 getWriter 方法
山哥
山哥
红薯个 == 红薯哥,呵呵
山哥
山哥
红薯个,我的代码中就是使用的 res.getWriter() 方法啊
返回顶部
顶部