栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Servlet过滤器包装器-更改内容类型时遇到麻烦

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Servlet过滤器包装器-更改内容类型时遇到麻烦

我找到了答案。诀窍是防止我的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 {}}

我不确定这是否是打算使用包装器的方式,但确实可行。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/495196.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号