文档章节

动态代理解决全局乱码问题

mouos
 mouos
发布于 02/15 13:44
字数 338
阅读 18
收藏 0

EncodingFilter

package com.company.web.filter;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

@WebFilter(filterName = "EncodingFilter")
public class EncodingFilter implements Filter {

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {

        final HttpServletRequest request = (HttpServletRequest) req;

        //使用动态代理完成全局编码
        HttpServletRequest enhanceRequset = (HttpServletRequest) Proxy.newProxyInstance(
                request.getClass().getClassLoader(),
                request.getClass().getInterfaces(),
                new InvocationHandler() {

                    @Override
                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                        //对getParameter方法进行增强
                        String name = method.getName();//获得目标对象的方法名称

                        if (request.getMethod().equalsIgnoreCase("post")) {
                            if ("getParameter".equals(name)) {
                                String invoke = (String) method.invoke(request, args);//乱码
                                //转码
                                invoke = new String(invoke.getBytes("iso8859-1"), "UTF-8");
                                return invoke;
                            }
                        }
                        return method.invoke(request, args);
                    }
                }
        );

        chain.doFilter(enhanceRequset, resp);
    }
}

EncodingServlet

package com.company.web.servlet;

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

@WebServlet(name = "EncodingServlet")
public class EncodingServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        String name = request.getParameter("username");
        System.out.println(name);
    }
}

web.xml

<?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_4_0.xsd"
         version="4.0">


    <filter>
        <filter-name>EncodingFilter</filter-name>
        <filter-class>com.company.web.filter.EncodingFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>EncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>


    <servlet>
    <servlet-name>EncodingServlet</servlet-name>
        <servlet-class>com.company.web.servlet.EncodingServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>EncodingServlet</servlet-name>
        <url-pattern>/encodingServlet</url-pattern>
    </servlet-mapping>

</web-app>

encoding.jsp

<%--
  Created by IntelliJ IDEA.
  User: mac
  Date: 2019-02-13
  Time: 14:31
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="/filter_war_exploded/encodingServlet" method="post">
    <input type="text" name="username">
    <input type="submit" value="提交">
</form>
</body>
</html>

 

© 著作权归作者所有

mouos
粉丝 1
博文 256
码字总数 134183
作品 0
其它
私信 提问
Activiti快速入门项目 kft-activiti-demo 1.7.2 发布

本次更新包含两个小版本的更改:1.7.1和1.7.2,changelog如下: 1.7.2(2013-04-17) 升级Activiti至5.12.1-kft版本 添加全局监听器演示 1.7.1(2013-04-10) 解决流程引擎自动生成的图片跟踪...

咖啡兔
2013/04/19
5.3K
10
【Cocos2d-x】开发实战-Cocos中的字符串、标签和中文乱码

本篇博客讲解: 1.Ccocos2d-x中的字符串 2.使用标签 3.中文乱码问题 Ccocos2d-x中的字符串 使用标签 源代码下载地址 Ccocos2d-x中的字符串 使用const char*和std::string const char是C风格的...

qq_26525215
2017/08/24
0
0
IE下Ajax 提交中文乱码问题

今天碰到个乱码问题,在IE下post提交中文乱码,firefox下不会 对比两边提交的请求头信息发现问题出现在Content-Type, IE下是Content-Type application/x-www-form-urlencoded; 而firefox下是...

zwt
2013/04/25
2.2K
0
Python locals() 的陷阱

在工作中, 有时候会遇到一种情况: 动态地进行变量赋值, 不管是局部变量还是全局变量, 在我们绞尽脑汁的时候, Python已经为我们解决了这个问题. Python的命名空间通过一种字典的形式来体现, 而...

xjtuhit
2018/05/31
0
0
git status 显示中文和解决中文乱码

目录 git status 显示中文和解决中文乱码 解决git status不能显示中文 解决git bash 终端显示中文乱码 通过修改配置文件来解决中文乱码 git status 显示中文和解决中文乱码 解决git status不...

铁乐猫
2018/08/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

从0搭建自己的webpack开发环境(五)

往期回顾: 从0搭建自己的webpack开发环境(一) 从0搭建自己的webpack开发环境(二) 从0搭建自己的webpack开发环境(三) 从0搭建自己的webpack开发环境(四) 前四篇文章我们已经掌握了w...

前端优选
昨天
4
0
docker 构建php-fpm 7.2(swoole) 镜像

mkdir -p ~/mnt/docker/phpmkdir -p ~/mnt/docker/php#下载swoole-2.2.0.tgz安装包到software 下载地址:http://pecl.php.net/package/swoole/2.2.0#创建Dockerfilevim ~/docker/......

Jack088
昨天
3
0
简单工厂

定义:由一个工厂对象决定创建出哪一种产品类的实例 类型:创建型,但不属于GOF23种设计模式 工厂类负责创建的对象比较少 客户端(应用层)只知道传入工厂类的参数,对于如何创建对象,不关心...

东风破2019
昨天
4
0
SSH安全加强两步走

从 OpenSSH 6.2 开始已经支持 SSH 多因素认证,本文就来讲讲如何在 OpenSSH 下启用该特性。 OpenSSH 6.2 以后的版本多了一个配置项 AuthenticationMethods。该配置项可以让 OpenSSH 同时指定...

Linux就该这么学
昨天
7
0
聊聊nacos的TcpSuperSenseProcessor

序 本文主要研究一下nacos的TcpSuperSenseProcessor TcpSuperSenseProcessor nacos-1.1.3/naming/src/main/java/com/alibaba/nacos/naming/healthcheck/TcpSuperSenseProcessor.java @Compon......

go4it
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部