Servlets servlet过滤器doFilter方法的生命周期

Servlets servlet过滤器doFilter方法的生命周期,servlets,http-headers,servlet-filters,Servlets,Http Headers,Servlet Filters,我试图在调用后在响应对象中设置头 chain.doFilter() 但是,未设置标题。调用chain.doFilter()后,控件是否会返回到doFilter()方法 但是,未设置标题 如果响应已经提交(读:当响应的第一部分(包括所有头)已经发送到客户端时,这可能会发生;这是一个不返回点)。一个稍微正常的servletcontainer会在任何试图为已经提交的响应设置头的尝试上抛出一个IllegalStateException。这应该在服务器日志中可见。你读过吗 调用chain.doFilt

我试图在调用后在响应对象中设置头

chain.doFilter()
但是,未设置标题。调用chain.doFilter()后,控件是否会返回到doFilter()方法

但是,未设置标题

如果响应已经提交(读:当响应的第一部分(包括所有头)已经发送到客户端时,这可能会发生;这是一个不返回点)。一个稍微正常的servletcontainer会在任何试图为已经提交的响应设置头的尝试上抛出一个
IllegalStateException
。这应该在服务器日志中可见。你读过吗


调用chain.doFilter()后,控件是否会返回到doFilter()方法

您可以通过放置断点或sysout/logger行轻松地检查它。但是是的,如果
doFilter()
调用中没有未捕获的异常,那么控件肯定会以通常的Java方式返回,其余的行将被执行


回到您的具体功能需求,您需要以这样的方式重写代码,即在提交响应之前设置头。由于没有以任何方式详细阐述具体的功能需求,因此不可能在此回答中给出一些提示或启动示例。最直接的方法是在调用
doFilter()

请求过滤器之前设置标题,请求过滤器可以:

  • 执行安全检查
  • 重新格式化请求头或正文
  • 审核或记录请求
响应过滤器可以:

  • 压缩响应流
  • 追加或更改响应流
  • 创建一个完全不同的响应