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

发布于 2021-11-14 15:35:16 字数 1316 浏览 931 评论 3

我现在的一个项目中前端使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

半世蒼涼 2021-11-18 11:55:58

红薯个,我的代码中就是使用的 res.getWriter() 方法啊

挽清梦 2021-11-18 05:54:07

红薯个 == 红薯哥,呵呵

各自安好 2021-11-18 04:55:29

统一用 getWriter 方法

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文