我们有一个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">