Filter使用全站解决中文乱码问题

11 篇文章 0 订阅
11 篇文章 0 订阅

很多文章介绍解决中文乱码问题,一般是解决post提交方式的乱码问题。get方式的乱码是去修改Tomcat内部文件这样一般是不可取得。今天我们学习用Filter来解决中文乱码问题。

第一步:

编写一个过滤器:在是src下的文件中创建CharacterEncodingFilter2:

package cn.bjyy;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * Created by YYBJ on 2018/9/18.
 * ZCL
 */
//真正解决中文乱码
public class CharacterEncodingFilter2 implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request= (HttpServletRequest) servletRequest;
        HttpServletResponse response= (HttpServletResponse)servletResponse;
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        filterChain.doFilter(new MyRequest(request),response);

    }
    /*
    * 1.写一个类实现与被增强对象相同的接口
    * 2.定义一个变量,记住被增强的对象
    * 3.定义一个构造方法,接受被增强对象
    * 4.覆盖想增强的方法
    * 5.对于不想增强的方法,直接调用被增强对象(目标对象)的方法
    * */
     class MyRequest extends HttpServletRequestWrapper{
        private HttpServletRequest request;
        public MyRequest(HttpServletRequest request){
            super(request);
            this.request=request;
        }

        @Override
        public String getParameter(String name) {
            String value = this.request.getParameter(name);
            if (!request.getMethod().equalsIgnoreCase("get")){
                return value;
            }
            if (value==null){
                return null;
            }
            try {
                return new String(value.getBytes("UTF-8"), request.getCharacterEncoding());

            }catch (Exception e){
                throw new RuntimeException(e);
            }
        }
     }
    @Override
    public void destroy() {

    }
}

第二步:

在web.xml文件中配置CharacterEncodingFilter2以及Servlet的路径。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
   
    <filter>
        <filter-name>CharacterEncodingFilter2</filter-name>
        <filter-class>cn.bjyy.CharacterEncodingFilter2</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>CharacterEncodingFilter2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <servlet>
        <servlet-name>ServletDemo</servlet-name>
        <servlet-class>cn.bjyy.Servlet.ServletDemo</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>ServletDemo</servlet-name>
        <url-pattern>/ServletDemo</url-pattern>
    </servlet-mapping>


</web-app>

第三步:

编写Servlet方法:

package cn.bjyy.Servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * Created by YYBJ on 2018/9/18.
 * ZCL
 */
public class ServletDemo extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String username = req.getParameter("username");
        System.out.println("username===="+username);
        resp.getWriter().write(username);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

第四步:

编写jsp页面。为了简单我直接将index.jsp页面改成测试页面在页面中添加表单提交。

后边测试的时候将post方式改为get方式。两种方式的提交都不会出现中文乱码。

<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <title>使用字符过滤器解决解决get、post请求方式下的中文乱码问题</title>
</head>
<body>
<form action="/ServletDemo" method="post">
  <input type="text" name="username"><br/>
  <input type="submit" value="提交">
</form>
</body>
</html>

 

 

第五步:

启动Tomcat容器测试代码:

输入字符提交返回页面显示和控制台输出都是中文没有任何问题。

 

转载请说明转载来源:https://blog.csdn.net/weixin_41092717/article/details/82755601

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值