专栏首页Alone88Servlet 通过Filter拦截器解决全站编码问题

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

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

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

创建代理类

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;
    }
}

创建拦截器

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 实现全站拦截

<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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java Servlet 做一个简单的分IP访问统计系统

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

    Alone88
  • InstantClick,让你的网站快到起飞,PJAX技术

    instantclick.js 是一种ajax无刷新和预加载页面的技术,对于普通博客程序,有着明显的加速作用。(instantclick.js ≈ pjax +...

    Alone88
  • 文件同步工具 GoodSync,限时免费了

    GoodSync 是一款知名的局域网同步/备份工具,同时也支持将文件同步到主流网盘,拥有 Windows、macOS、Linux、服务器版本、西部数据 MyCl...

    Alone88
  • Django Admin输出JSON

    Django 自带Admin后台这是Django的优势所在, 这样的话我们可以开箱即用后台功能。 有人说Django重, 可能设计就是这样, 过度的封装就是让开...

    用户1416054
  • CAS 5.3.1系列之客户端对接(五)

    我们要接入客户端可以常用第三方的库cas-client-autoconfig-support来对接,比较快捷,迅速实现,或者可以用cas-client-supp...

    SmileNicky
  • Intent传递对象的两种方法

    听着music睡
  • 如何理解Python中包的引入

    Python的from import *和from import *,它们的功能都是将包引入使用,但是它们是怎么执行的以及为什么使用这种语法呢?

    砸漏
  • Singularity入门之运行图形应用

    要在 Singularity 中运行图形程序需要重新制作一个镜像,使其包含执行图形应用程序需要的环境和程序,这里还是通过 sandbox 的方式来制作一个可以运...

    kongxx
  • 投融资汇总 | 本周(1.29-2.4)时空电动获IDG资本10亿元投资

    镁客网
  • Angular 2 + 折腾记 :(3)初步了解服务及使用

    不探究高深理论,只探究实际使用,有更好的写法或者经验请指出; 有些暂时没涉及到的知识我可能会顺着例子解释;

    CRPER

扫码关注云+社区

领取腾讯云代金券