几个servlet过滤器改变了响应

时间:2014-10-12 09:50:58

标签: java servlets servlet-filters

考虑使用多个过滤器来更改响应

f1应该调试响应,f2应该重新格式化内容,然后f3应该压缩它们。 我几乎所有博客都关于过滤器和oracle的基本知识,但总是没有成功。

问题1:据我所知,在任何情况下都必须调用getWriter才能将更改的响应写回原始响应。

这导致了一个问题,即getWriter已被调用--exception被抛出链中。

问题2:即使没有改变,是否有必要编写回复? 想想让过滤器中的响应保持不变的条件。

我试着用一种伪代码来展示我现在正在做的事情

  //VERSION 01:
         doFilter(){
            if (condition to change response is true){
               Printwriter out = response.getWriter();
               OutputStreamResponseWrapper wrappedResponse = new OutputStreamResponseWrapper(httpServletResponse);
               doFilter(originalRequest,wrappedResponse);
               String convertedResponse = convertResponse(wrappedResponse.getContent());
               out.write(convertedResponse);
               out.close(); // without this it seems not to be send to the client??       
            }else{
              doFilter(originalRequest,originalRequest);  
            }
        }
 //VERSION 02:
         doFilter(){
            Printwriter out = response.getWriter();
            OutputStreamResponseWrapper wrappedResponse = new OutputStreamResponseWrapper(httpServletResponse);
            doFilter(originalRequest,wrappedResponse);
            if (condition to change response is true){
               String convertedResponse = convertResponse(wrappedResponse.getContent());
               out.write(convertedResponse);
            }else{
               out.write(wrappedResponse.getContent());              
            }
            out.close(); // without this it seems not to be send to the client??       

        }

现在使用不同的转换相互调用其中3个过滤器。我总是得到" getWriter已经被调用" -Exception。

我不明白,因为我总是传递一个包裹的响应对象? 也许有人暗示我的方法完全错了。非常感谢。

0 个答案:

没有答案