前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Servlet 通过Filter拦截器解决全站编码问题

Servlet 通过Filter拦截器解决全站编码问题

作者头像
Alone88
发布2019-10-22 16:46:39
5590
发布2019-10-22 16:46:39
举报
文章被收录于专栏:Alone88Alone88

请求 参数 public string import void 编码 问题 utf-8 request matcher

Servlet 通过Filter解决全站编码问题

创建代理类

代码语言:javascript
复制
package cn.facade;
import    java.util.regex.Matcher;
import java.util.regex.Matcher;
import    java.util.regex.Pattern;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import java.io.UnsupportedEncodingException;


public class CharSetHttpRequest extends HttpServletRequestWrapper {

    public CharSetHttpRequest(HttpServletRequest request) {
        super(request);
    }

    @Override
    public String getParameter(String name) {

        ServletContext context = getServletContext();//获取ServletContext
        String value = super.getParameter(name);//获取参数

        // 正则判断Tomcat版本
       String reg = ".*(Tomcat/8).*";

       String ServerInfo = context.getServerInfo();

       Pattern pattern = Pattern.compile(reg);

        Matcher matcher = pattern.matcher(ServerInfo);

        //如果是Tomcat8的版本则不进行编码转换
       if(!matcher.find()){
           // 判断是否Get方式
           if(getMethod().equalsIgnoreCase("GET")){
               try {
                   // 转换编码
                   value = new String(value.getBytes("iso-8859-1"),"utf-8");
               } catch (UnsupportedEncodingException e) {
                   e.printStackTrace();
               }

           }
       }

       return value;
    }
}

创建拦截器

代码语言:javascript
复制
package cn.alone88;

import cn.facade.CharSetHttpRequest;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

@WebFilter(filterName = "CharSetFilter")
public class CharSetFilter implements Filter {
    public void destroy() {
    }

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
        CharSetHttpRequest request = new CharSetHttpRequest((HttpServletRequest) req);
        chain.doFilter(request, resp);
    }

    public void init(FilterConfig config) throws ServletException {

    }

}

编辑web.xml 实现全站拦截

代码语言:javascript
复制
<filter>
        <filter-name>charset</filter-name>
        <filter-class>cn.alone88.CharSetFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>charset</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

这样所有的请求都会先拦截处理后在进入Servlet

本文由 Alone88 创作,采用 知识共享署名4.0 国际许可协议进行许可 本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名 最后编辑时间为: Sep 16, 2019 at 04:29 pm

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Servlet 通过Filter解决全站编码问题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档