Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用HttpServletResponseWrapper捕获整个响应,包括标头_Java_Jsp_Tomcat - Fatal编程技术网

Java 使用HttpServletResponseWrapper捕获整个响应,包括标头

Java 使用HttpServletResponseWrapper捕获整个响应,包括标头,java,jsp,tomcat,Java,Jsp,Tomcat,提前感谢大家- 因此,我继续执行并实现了以下代码: 这给了我响应的主体(html等),但我没有得到任何标题-这可能与HttpServletResponseWrapper有关吗?我需要捕获整个请求到所有的头修改等 谢谢 Sam一个简单的解决方案是使用Tomcat的。这将转储所有元信息,包括每个传入HttpServletRequest和传出HttpServletReply的头字段。如果要捕获头,最好的方法是覆盖HttpServletResponseWrapper中的所有addHeader()/se

提前感谢大家-

因此,我继续执行并实现了以下代码:

这给了我响应的主体(html等),但我没有得到任何标题-这可能与HttpServletResponseWrapper有关吗?我需要捕获整个请求到所有的头修改等

谢谢


Sam

一个简单的解决方案是使用Tomcat的。这将转储所有元信息,包括每个传入HttpServletRequest和传出HttpServletReply的头字段。

如果要捕获头,最好的方法是覆盖HttpServletResponseWrapper中的所有addHeader()/setHeader()(日期、int和字符串),并将它们存储在HashMap或Properties实例中(如果您使用的是Google Collections,则使用MultiMap)。

然后,在处理响应后,您可以在过滤器中对它们执行任何操作。您还需要在包装器中以某种方式公开它们(例如,编写一个getHeaders()方法)因为regular
HttpServletResponse
没有这样做。

感谢您的回复-我实际上需要它来允许在发送到客户端的过程中修改头文件-感谢您的回复-感谢您的回复-我继续并覆盖了所有头文件修改方法-并使用包含“response.addHeader(”myheader“,”headervalue“;”这个头被捕获了,但是看起来下面的头没有通过这些方法设置:Status=OK-200 Server=Apache Coyote/1.1 Content Type=text/html Content Length=0 Date=Sun,02 Aug 2009 02:05:36 GMT看起来tomcat正在其他地方设置这些头,我遗漏了什么吗?再次感谢您的帮助!这些是由您的服务器和/或servlet容器。您应该能够覆盖它们(也就是说,如果您将内容类型设置为其他内容,服务器将保持这种方式),但您不会在包装器中捕获它们,因为它们是在您的filterChain(和您的过滤器)之后添加的已经被处理。我测试了出来,看起来标题没有被覆盖或替换,请查看以下示例:Status=OK-200 Server=Apache Coyote/1.1 Status=500 Content Type=text/html Content Length=0 Date=Sun,02 Aug 2009 02:40:30 GMT状态500是我调用doFilter()后设置的状态,但正如您所看到的,它没有替换tomcat正在设置的status=200标题(我想)-有什么想法吗?再次感谢您的帮助您选择了一个错误的标题进行测试:-)抱歉,我以前没有提到过-您在问题中说了“headers”,我认为您不会更改状态。Status是通过setStatus()或sendError()设置的第一个对象,因此如果要更改它,还需要重写这些方法。请记住,这些方法具有处理提交响应的非常特定的行为:还有sendRedirect()和setContentType(),尽管后者应该可以通过普通的headerThanks进行重写。再次感谢您的帮助,这非常有帮助!