我尝试实现servlet响应包装器来修改响应。 我的目标是在html中添加几个标签
此代码工作正常,标签已正确添加到html。 但问题是,在非IE7浏览器中,一切都可以预期。 IE9 / Firefox根本不存在任何问题。即使是来自其他桌面的IE7也没有问题。只有我的IE7浏览器有这个问题,它只显示空白页面 - 完整的白色屏幕。 甚至右键单击视图源也会显示带有空头/主体的html。
通过Fiddler,我看到响应代码为200,但内容长度为0。
如果我同时进行两次F5,Fidder会显示此错误
Fiddler在会话#3中检测到协议违规。
服务器未返回格式正确的HTTP标头。 HTTP标头 应以CRLFCRLF终止。这些都是以LFLF终止的。
我没有操纵任何标头属性。虽然它可以在我浏览器以外的其他地方使用,但我想知道问题是什么,因为我们无法像我一样预测浏览器的存在。
这是我的代码。
HttpServletRequest httpServletRequest = (HttpServletRequest)request;
HttpServletResponse httpServletResponse = (HttpServletResponse)response;
BrowserRequestWrapper requestWrapper = new BrowserRequestWrapper(httpServletRequest);
BrowserResponseWrapper responseWrapper = new BrowserResponseWrapper(httpServletResponse);
PrintWriter responsePrintWriter = response.getWriter();
filterChain.doFilter(requestWrapper,responseWrapper);
try {
String responseString = responseWrapper.toString();
String processedResponse = getProcessedResponse(responseString);
response.setContentLength( processedResponse.length() );
responsePrintWriter.write(processedResponse);
//responsePrintWriter.flush();
responsePrintWriter.close();
} catch (Throwable t) {
Logger.getLocation().errorT("doFilter","An exception has occured");
Logger.getStackTrace(t);
}
这是包装类。
public class BrowserResponseWrapper extends HttpServletResponseWrapper {
private CharArrayWriter output;
public String toString() {
return output.toString();
}
public BrowserResponseWrapper(HttpServletResponse response){
super(response);
output = new CharArrayWriter();
}
public PrintWriter getWriter(){
return new PrintWriter(output);
}
}