Servlet包括Tomcat中的swallows HTTP头

时间:2010-10-01 19:44:45

标签: java tomcat servlets

我有一个servlet执行请求调度程序包含另一个servlet。

包含的servlet设置我想在包含 servlet中读取的标头。所以我在include()方法中传入一个自定义的HTTPResponse对象,它捕获来自servlet的所有反馈活动。

问题是我的自定义响应中没有设置标头。我在调试中运行并检查了Tomcat包含我自己的响应对象的自定义响应对象。 setHeader调用转到此包装类,从不传播到我的自定义响应对象。

我想Tomcat这样做是为了保护客户端免受错误位置的标头设置。有趣的是,同样的方法就像我在Jetty中所期望的那样。

自从我认真对待Servlets以来已经有一段时间了,所以我在这里苦苦挣扎。我正在试图弄清楚如何从通过dispatcher.include()调用的servlet读取响应头。

1 个答案:

答案 0 :(得分:4)

来自Servlet规范部分SRV.8.3:

可以随时调用RequestDispatcher接口的include方法。 include方法的目标servlet可以访问请求的所有方面 对象,但它对响应对象的使用更加有限。

它只能将信息写入ServletOutputStream或Writer 响应对象并通过写入内容超过结束时提交响应 响应缓冲区,或通过显式调用的flushBuffer方法 ServletResponse接口。

它无法设置标头或调用任何影响的方法 响应的标题。任何尝试 都必须忽略

如何使用request.setAttribute(...)在请求范围内设置调用servlet的值,然后在返回后从那里读取它?这可行吗?