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()
请求过滤器之前设置标题,请求过滤器可以:
- 执行安全检查
- 重新格式化请求头或正文
- 审核或记录请求
- 压缩响应流
- 追加或更改响应流
- 创建一个完全不同的响应