
我找到了答案。诀窍是防止我的Web服务使用包装器设置内容类型:
public class IE8FilterResponseWrapper extends HttpServletResponseWrapper { public IE8FilterResponseWrapper(HttpServletResponse response) { super(response); } public void forceContentType(String type) { super.setContentType(type); } public void setContentType(String type) { } public void setHeader(String name, String value) { if (!name.equals("Content-Type")) { super.setHeader(name, value); } } public void addHeader(String name, String value) { if (!name.equals("Content-Type")) { super.addHeader(name, value); } } public String getContentType() { return super.getContentType(); } }现在我的过滤器如下所示:
public class IE8Filter implements Filter { private Logger logger = LoggerHelper.getLogger(); @Override public void destroy() {} @Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) res; String userAgent = request.getHeader("User-Agent"); logger.debugf("User Agent = '%s'", userAgent); IE8FilterResponseWrapper wrapper = new IE8FilterResponseWrapper(response); if (userAgent.contains("MSIE 8") || userAgent.contains("MSIE 7")) { wrapper.forceContentType("text/html"); chain.doFilter(req, wrapper); } else { chain.doFilter(req, res); } } @Override public void init(FilterConfig arg0) throws ServletException {}}我不确定这是否是打算使用包装器的方式,但确实可行。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)