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

时间:2012-10-17 14:12:40

标签: servlets http-headers servlet-filters

我在调用

后尝试在响应对象中设置标题
chain.doFilter()

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

2 个答案:

答案 0 :(得分:1)

  

但是,标题未设置。

如果响应已经提交,则会发生这种情况(读取:响应的第一部分,包括所有标头,已经发送到客户端;这是一个不归路的点)。一个有点理智的servletcontainer会在任何尝试为已经提交的响应设置标头时抛出IllegalStateException。这应该在服务器日志中可见。你读过它们吗?


  

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

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


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

答案 1 :(得分:0)

请求过滤器可以:

  • 执行安全检查
  • 重新格式化请求标题或正文
  • 审核或记录请求

响应过滤器可以:

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