【发布时间】:2012-10-07 19:54:00
【问题描述】:
我正在尝试在调用后在响应对象中设置标头
chain.doFilter()
但是,没有设置标题。调用 chain.doFilter() 后,控制权是否会返回到 doFilter() 方法?
【问题讨论】:
标签: servlets http-headers servlet-filters
我正在尝试在调用后在响应对象中设置标头
chain.doFilter()
但是,没有设置标题。调用 chain.doFilter() 后,控制权是否会返回到 doFilter() 方法?
【问题讨论】:
标签: servlets http-headers servlet-filters
请求过滤器可以:
响应过滤器可以:
【讨论】:
但是,标题没有设置。
如果响应已经提交,就会发生这种情况(阅读:当响应的第一部分,包括所有标头,已经发送到客户端时;这是一个不归路)。有点理智的 servletcontainer 会在任何尝试在已提交的响应上设置标头时抛出IllegalStateException。这应该在服务器日志中可见。你读过吗?
在调用 chain.doFilter() 之后,控制权是否会返回到 doFilter() 方法?
您可以通过放置断点或 sysout/logger 行轻松地自行检查。但是,是的,如果没有来自 doFilter() 调用的未捕获异常,则控件肯定会以通常的 Java 方式返回,并且将执行剩余的行。
回到您的具体功能要求,您需要重写代码,以便在响应提交之前设置标头。由于没有以任何方式详细说明具体的功能要求,因此无法在此答案中给出一些提示或启动示例。最直接的方法是在调用doFilter() 之前设置标题。
【讨论】: