JavaServlet过滤器响应处理

JavaServlet过滤器响应处理,java,servlet-filters,Java,Servlet Filters,请注意:如果这个问题的答案取决于实现,那么请假设Tomcat或Jetty的最新/现代版本 我读过的任何教程(如、和)都没有涉及到一些关于基础知识的细节 具体来说,有两种情况下,doFilter的行为似乎在任何地方都没有记录: 当doFilter基本上什么都不做时(不向ServletResponse打印任何内容,也不调用FilterChain#doFilter),我称之为无操作过滤器;及 当doFilter打印对ServletResponse的响应并调用FilterChain#doFilter时

请注意:如果这个问题的答案取决于实现,那么请假设Tomcat或Jetty的最新/现代版本

我读过的任何教程(如、和)都没有涉及到一些关于基础知识的细节

具体来说,有两种情况下,
doFilter
的行为似乎在任何地方都没有记录:

  • doFilter
    基本上什么都不做时(不向
    ServletResponse
    打印任何内容,也不调用
    FilterChain#doFilter
    ),我称之为无操作过滤器;及
  • doFilter
    打印对
    ServletResponse
    的响应并调用
    FilterChain#doFilter
    时,我称之为触发并忘记过滤器
对于无操作过滤器:

  • 如果既没有调用
    FilterChain#doFilter
    ,也没有写入
    ServletResponse
    ,那么我假设过滤器会阻止请求,是吗
  • 无论如何,在这个场景中,返回的HTTP状态码是什么
  • 响应中返回的实体是什么?空的
对于Fire and Forget过滤器:

  • 当一个人同时写入
    ServletResponse
    并调用
    FilterChain#doFilter
    时会发生什么?例外?过滤器是否以某种方式缓存写入的响应,然后在上游过滤器/资源返回响应时附加到它
  • 返回的HTTP状态码是什么
  • 当抛出
    ServletException
    时,是否会自动映射到HTTP 404,并使用异常的
    getMessage()
    响应实体

这里是指向Servlet 3.1规范的链接:。您可以阅读规范,试图找到特定问题的答案,也可以下载参考实现并运行简单的测试实现,以了解发生了什么。然后,您可以使用Tomcat和Jetty运行相同的应用程序,以查看任何差异。我建议你读一读,把这道多选题删减到尚未回答的部分。