在Glassfish上强制JSF web应用的特定响应头



我们有一个Java EE 6 web应用,JSF 2.0运行在Glassfish 3.1上。

我们遇到了一个奇怪的错误:Glassfish发送给客户端的响应头的Mime类型取决于浏览器发送的请求头中允许的Mime类型的顺序。因此,在某些情况下(取决于浏览器),响应的Mime类型是错误的,导致损坏的html页面。但要解释那件事需要很长时间。为了解决这个问题,我们现在只需要做一件事:

强制整个web应用的响应头类型为"text/html"。

目前,我们使用在Web.xml中配置的Servlet过滤器来实现:

@WebFilter("/BaseFilter")
public class BaseFilter implements Filter {
     public BaseFilter() {
     }
     public void destroy() {
     }
     public void doFilter(ServletRequest request, ServletResponse response, 
                          FilterChain chain) throws IOException, ServletException {
         response.setContentType("text/html;charset=UTF-8");
         chain.doFilter(request, response);
     }
     public void init(FilterConfig fConfig) throws ServletException {
     }
 }
web.xml中的

配置:

<filter>
  <filter-name>BaseFilter</filter-name>
  <filter-class>com.company.web.filter.BaseFilter</filter-class>
</filter>
<filter-mapping>
  <filter-name>BaseFilter</filter-name>
  <url-pattern>/*</url-pattern> 
  <!-- these patterns should match cached resources -->
  <dispatcher>REQUEST</dispatcher>
  <dispatcher>FORWARD</dispatcher>
</filter-mapping>

所以我的问题是,是否有更好的方法来强制执行特定的响应头,特别是通过配置它而不是实现ServletFilter?

是否有一个Glassfish选项来做到这一点?

可以通过<f:view>contentType属性在默认模板中指定。

<f:view contentType="text/html">

相关内容

  • 没有找到相关文章

最新更新