在java中设置请求标头

时间:2012-01-03 07:23:30

标签: java jsp java-ee struts struts-1

有没有办法在动作类中修改或设置请求标头?我想修改它,或者你可以说我想把标志置于请求标题内,就像我们在'属性'和参数中放置值一样。

7 个答案:

答案 0 :(得分:3)

您可以使用HttpServletRequestWrapper执行此操作。但这是一个相当肮脏的解决方案。真的没有办法解决你的问题吗?

答案 1 :(得分:1)

你做不到。从servlet返回的请求参数是不可修改的Map。您无法添加/删除从请求返回的内容(通过servlet)。

为了设置一个标志,我的建议是将它存储在一个会话中,并在另一个动作上检索标志&从会话中删除它。

答案 2 :(得分:1)

我认为您需要将原始请求包装到包含您希望的更改的请求类中。

可能更好的设计是在处理之前将请求参数解析为对应用程序逻辑更有意义的对象,然后在您现在想要修改原始头的位置设置这些对象的状态

答案 3 :(得分:1)

如果您尝试使用Java打开URL连接, 你可以这样What is the proper way of setting headers in a URLConnection?

如果您可以使用浏览器发出请求, 您可以使用此Firefox插件添加/修改任意数量的请求标头。

https://addons.mozilla.org/en-US/firefox/addon/modify-headers/

祝你好运

答案 4 :(得分:1)

答案取决于你要解决的问题。

你的一条评论表明你正试图测试;如果是这种情况,您有两个基本选项:

  1. 使用模拟请求(单元式测试)。
  2. 从客户端更改标头(集成式测试)。
  3. 要从真实客户端进行测试,请在客户端设置标头。

    对于模拟客户端交互,您应该使用某种形式的模拟。例如,StrutsTestCase提供MockStrutsTestCase(外部容器)和CactusStrutsTestCase(内部容器)类,允许轻松操作请求属性和特性。

答案 5 :(得分:0)

您需要提供更多详细信息。听起来您希望在服务器收到请求后操纵请求标头。我不确定我理解你为什么要那样做。修改响应头是有意义的。但不是请求。

答案 6 :(得分:0)

我认为他们只有通过HttpServletRequestWrapper

才能做到这一点

只需覆盖getHeader,getHeaders,getHeaderNames就可以了。