我有一个 servlet,它的请求调度程序包含另一个 servlet。
包含的 servlet 设置了我想在包括小服务程序。因此,我在 include() 方法中传入一个自定义 HTTPResponse 对象,该对象捕获来自 servlet 的所有反馈活动。
问题是我的自定义响应中未设置标头。我已经在调试中运行并检查了 Tomcat 用它自己的响应对象包装我的自定义响应对象的情况。 setHeader 调用转到此包装类,并且永远不会传播到我的自定义响应对象。
我想 Tomcat 这样做是为了保护客户端免于将标头设置在错误的位置。有趣的是,同样的方法在 Jetty 中的工作方式与我所期望的一样。
我已经有一段时间没有认真地做 Servlet 了,所以我在这里有点挣扎。我试图弄清楚如何从通过dispatcher.include() 调用的servlet 读取响应标头。
来自 Servlet 规范 SRV.8.3 节:
RequestDispatcher接口的include方法可以随时调用。
include方法的目标servlet可以访问请求的各个方面
对象,但它对响应对象的使用比较有限。
它只能将信息写入ServletOutputStream或Writer中
响应对象并通过在末尾写入内容来提交响应
响应缓冲区,或者通过显式调用的flushBuffer方法
ServletResponse 接口。
它无法设置标头或调用任何影响的方法
响应的标头。任何这样做的尝试 必须被忽略.
如何在请求范围内设置调用 servlet 的值request.setAttribute(...)
然后你回来后就从那里读它?那行得通吗?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)