我是Servlets的新手。在我正在阅读的书中,我们正在阅读,我们需要包装器,因为在完成chain.doFilter()
方法之后,由于响应已经发送而在响应中做任何事情都迟到了。
我编写了以下Servlet和Filter:
public class MyServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
PrintWriter writer = response.getWriter();
writer.println("In Servlet");
}
}
public class MyFilter implements Filter{
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException{
PrintWriter writer = response.getWriter();
chain.doFilter(request, response);
writer.println("After chain");
}
}
我在浏览器中看到两个字符串。
我的问题是:为什么我们需要包装纸?即使在chain.doFilter
之后,我仍然可以写回复,而我仍然会看到结果?
是因为响应是分两部分发送的(第一部分在chain.doFilter
的末尾,第二部分在Filter.doFilter
的末尾)?因此,如果我必须压缩响应,它将无法正常工作(因为第一个未压缩的部分将被发送)?
答案 0 :(得分:2)
这本书正在讨论响应标题。
你误解了它是反应主体。
以下是响应包装器的一些实际用例,以便您了解我们可能需要它们的原因:
有关更多示例,请参阅this search。