Java 如何更改特定内容类型的HTTP标头?

Java 如何更改特定内容类型的HTTP标头?,java,internet-explorer,ssl,richfaces,flash,Java,Internet Explorer,Ssl,Richfaces,Flash,我使用的是RichFaces,我在fileUpload flash组件+IE+SSL方面遇到了问题。根据我所做的研究,我需要更改“Pragma”和“Cache-Control”HTTP头 如何仅为flash内容更改这些标题? 我尝试使用Servlet过滤器。这是doFilter()方法: chain.doFilter(request, response); HttpServletResponse resp = (HttpServletResponse) response; if (resp.ge

我使用的是RichFaces,我在fileUpload flash组件+IE+SSL方面遇到了问题。根据我所做的研究,我需要更改“Pragma”和“Cache-Control”HTTP头

如何仅为flash内容更改这些标题? 我尝试使用Servlet过滤器。这是
doFilter()
方法:

chain.doFilter(request, response);
HttpServletResponse resp = (HttpServletResponse) response;
if (resp.getContentType() != null && resp.getContentType().contains("flash")) { // application/x-shockwave-flash
resp.setHeader("Pragma", "");
}
过滤器正在执行,标头正在更改,但我用firebug检查,标头返回到“无缓存”。这是我在
web.xml
中使用的最后一个过滤器,但它的发生就像其他过滤器将标题放回一样

我也在使用JBoss5。
我怎样才能解决这个问题?谢谢。

尝试执行指令,在
doFilter()前面设置标题。
。这样:

HttpServletResponse resp = (HttpServletResponse) response;
if ( // .. your test ) {
  resp.setHeader("Pragma", "");
}
chain.doFilter(request, response);
因为一旦服务器开始向客户端发送数据,就无法设置头字段


当然,通过这种方式,您必须找到另一种方法来检查所请求资源的contentType。也许您可以根据此值中的和文件扩展名进行检查。

我认为我所做的将在服务器处理请求之后,但在发送响应之前更改标题。我首先测试了所有响应的标题设置,但只有部分响应(不包括flash)保留了更改。没有,
doFilter
中的代码已经写入客户端。有时,如果您为响应设置了一个大的缓冲区,它就可以工作,但是当您超过这个限制时,它就会开始发送数据。所以你不能肯定,你的建议奏效了。但是我从过滤器中删除了if条件,并将
*.swf
添加到部署描述符中。谢谢。请记住,如果需要,您可以在同一个筛选器上添加许多
url模式。