考虑使用多个过滤器来更改响应
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。
我不明白,因为我总是传递一个包裹的响应对象? 也许有人暗示我的方法完全错了。非常感谢。