【问题标题】:Sending response after chain.doFilter in filters在过滤器中的 chain.doFilter 之后发送响应
【发布时间】:2015-11-04 18:53:07
【问题描述】:

我是 Servlet 的新手。在我现在正在阅读的书中写道,我们需要包装器,因为在完成 chain.doFilter() 方法后对响应做任何事情都为时已晚,因为响应已经发送。

我编写了以下 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 的末尾)?因此,如果我必须压缩响应,它会无法正常工作(因为会发送第一个未压缩的部分)?

【问题讨论】:

  • 请格式化您的代码,使其更具可读性。有关详细信息,请参阅this 页面。

标签: servlets response wrapper servlet-filters


【解决方案1】:
猜你喜欢
  • 2016-03-09
  • 1970-01-01
  • 2014-08-13
  • 2020-04-28
  • 1970-01-01
  • 2018-11-22
  • 2023-03-05
  • 1970-01-01
  • 2020-08-01
相关资源
最近更新 更多