我是servlet新手,並閱讀一些關於過濾器和包裝器的文章。我可以理解過濾器,但對包裝器感到困惑。在本書中,作者舉了一個例子:ServletResponse和HttpServletResponseWrapper的區別?
如果沒有包裝:
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
throws IOException, ServletException {
String name = request.getParameter("name").trim();
try {
chain.doFilter(request, response);
PrintWriter out = response.getWriter();
if (name.length() == 0) {
out.println("Some message");
out.println("</body>");
out.println("</html>");
out.close();
}
} catch (Throwable t) {
}
}
在包裝的情況下:
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
throws IOException, ServletException {
String name = request.getParameter("name").trim();
HttpServletResponse httpRes = (HttpServletResponse) response;
HttpServletResponseWrapper resWrapper = new HttpServletResponseWrapper(httpRes);
try {
chain.doFilter(request, response);
PrintWriter out = resWrapper.getWriter(); // why dont we just use response.getWriter();
if (name.length() == 0) {
out.println("<h3>Some message");
out.println("</body>");
out.println("</html>");
out.close();
}
} catch (Throwable t) {
}
}
我們爲什麼需要HttpServletResponseWrapper
,而我們可以做同樣的事情案例1中的ServletResponse
?任何人都可以給我一個明確的例子,我們必須使用HttpServletResponseWrapper
而不是ServletResponse
?我試圖谷歌,但發現沒有運氣。
此代碼看起來很奇怪。包裝servlet響應的目的是進一步傳遞它('chain.doFilter(request,resWrapper);')並攔截包裝器中的選定調用。例如,通過這種方式,您可以返回不同的響應編寫器,以便隨時更改或壓縮內容並將其發送到目標「響應」。這個例子沒有多少意義......你能提供這個(頁面,書嗎?)的來源 –
我發現自己也很奇怪。這段代碼是我從一位大學講師的幻燈片中截取的。如果我們做chain.doFilter(request,resWrapper);作爲你的建議 – ipkiss