Я попытался реализовать упаковщик ответа сервлета, чтобы изменить ответ.Моя цель - добавить пару тегов в 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);
}
}