Servlets 在筛选器中的chain.doFilter之后发送响应
我是个新手。我现在读的书中写到,我们需要包装,因为在完成Servlets 在筛选器中的chain.doFilter之后发送响应,servlets,response,wrapper,servlet-filters,Servlets,Response,Wrapper,Servlet Filters,我是个新手。我现在读的书中写到,我们需要包装,因为在完成chain.doFilter()method之后,对响应进行任何处理都为时已晚,因为响应已经发送 我编写了以下Servlet和过滤器: public class MyServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOEx
chain.doFilter()
method之后,对响应进行任何处理都为时已晚,因为响应已经发送
我编写了以下Servlet和过滤器:
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
的末尾)?因此,如果我必须压缩响应,它将无法正常工作(因为第一个未压缩的部分将被发送)这本书讨论的是响应头
你把它误解为反应体
以下是响应包装器的一些实际使用案例,您可以了解我们可能需要它们的原因:
有关更多示例,请参阅。请格式化代码,使其更具可读性。有关更多信息,请参见第页。