解决tomcat7中request会对中文重新编码,导致后台接收到为encode编码后参数问题
package xxx; import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper; public class SetCharacterEncodingFilter implements Filter{
String encoding = null;
FilterConfig filterConfig = null; /** 初始化方法 */
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
this.encoding = filterConfig.getInitParameter("encoding");
} /** 过滤处理方法 */
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
if (encoding!=null){
//对请求进行编码设置
request.setCharacterEncoding(encoding);
HttpServletRequest httprequest=(HttpServletRequest) request;
if(httprequest.getMethod().equalsIgnoreCase("get")){
MyRequest myRequest = new MyRequest(httprequest);
myRequest.setEncoding(encoding); chain.doFilter(myRequest, response);
}else{
//将处理权转交给下一个处理器
chain.doFilter(request,response);
}
}else{
//将处理权转交给下一个处理器
chain.doFilter(request,response);
}
} /**
* Wrapper包装类,装饰设计模式,内部有个真实对象的引用
*/
class MyRequest extends HttpServletRequestWrapper{
private HttpServletRequest request;
private String encoding; public MyRequest(HttpServletRequest request) {
super(request);
this.request = request;
} public void setEncoding(String encoding) {
this.encoding = encoding;
} @Override
//重写父类的方法
public String getParameter(String name) {
String[] p = getParameterMap().get(name);
if(p!=null&&p.length>0){
return p[0];
}else{
return null;
}
} @Override
//获取参数的方法
public Map<String, String[]> getParameterMap() {
//获取客户端传过来的参数数据,并且包装成一个Map集合
Map<String, String[]> resMap = new HashMap<String, String[]>();
Map map = request.getParameterMap();
Set set = map.keySet();
Iterator it = set.iterator();
while(it.hasNext()){
String key=(String) it.next();
Object value= map.get(key);
if(value instanceof String[]){
String[] values=(String[]) value;
for(int i=0;i<values.length;i++){
try {
values[i] = java.net.URLDecoder.decode(values[i], encoding);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} //翻页参数中的中文解码,编码在dbpage.java中进行的
} resMap.put(key, values);
}
}
return resMap;
}
} /** 销毁方法 */
public void destroy() {
this.encoding = null;
this.filterConfig = null;
}}
解决tomcat7中request会对中文重新编码,导致后台接收到为encode编码后参数问题的更多相关文章
- Web jsp开发学习——终极解决jsp中request和response中文乱码的问题(加个过滤器)
		
中文乱码真的很烦人的.而且每次都要写,可麻烦了,而且有时候写了还不一定管用,所以我们可以试试过滤器 1.每个jsp头上当然要写上utf8啦 <%@ page language="jav ...
 - 解决Docker中运行的MySQL中文乱码
		
docker exec -it mysql bash 如果没有安装vim,请参考 解决Docker容器中不能用vim编辑文件 vim /etc/mysql/mysql.conf.d/mysql.cnf ...
 - 解决mac 中的myeclipse控制台中文乱码问题
		
http://www.myexception.cn/eclipse/1742588.html 解决 http://my.oschina.net/u/555006/blog/195013
 - 解决ubantu中sublime不支持中文的方法
		
更新然后将系统升级到最新版本,在linux终端输入 sudo apt-get update && sudo apt-get 在本地目录中克隆此repo: 如果你没有git的话就安 ...
 - 解决PHP中json_encode()不支持中文的替代函数
		
json_encode()是PHP中将数组转换成JSON格式的函数,因为各种原因只要是中文就会乱码= = 找到了这么一个函数替代了原有的json_encode(),能很好地输出中文~ function ...
 - 解决ArcGIS中因SDE或数据库配置问题而导致服务宕掉的一种思路
		
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.背景 最近连续有两个项目现场出现了AGS服务荡掉的问题,一个是通州 ...
 - 解决Hibernate中不同包内有形同实体导致映射失败的问题
		
报错代码如下: Caused by: org.hibernate.DuplicateMappingException: duplicate import: Engin refers to both t ...
 - request、response 中文乱码问题与解决方式
		
request乱码指的是:浏览器向服务器发送的请求参数中包含中文字符,服务器获取到的请求参数的值是乱码: response乱码指的是:服务器向浏览器发送的数据包含中文字符,浏览器中显示的是乱码: ...
 - java中可以出现的中文乱码的集中解决
		
从学习javaweb开始就会经常遇到中文乱码,今天就做以下记录: 1. 要避免项目中遇到乱码,首先就是在搭建项目的设置工作空间的字符编码,若是多人开发,就更应该做到统一,在eclipse中选择widn ...
 
随机推荐
- 测试基础(四)Jmeter基础使用
			
前言 通过测试基础(三) Jmeter安装 - 大风北吹 - 博客园 (cnblogs.com)安装完成Jmeter后,就可以使用Jmeter进行性能测试. 一.线程组 (1).线程组分类 Jmete ...
 - 深入理解Java并发类——AQS
			
目录 什么是AQS 为什么需要AQS AQS的核心思想 AQS的内部数据和方法 如何利用AQS实现同步结构 ReentrantLock对AQS的利用 尝试获取锁 获取锁失败,排队竞争 参考 什么是AQ ...
 - 【分布式】CAP理论及其应用
			
CAP Theorem CAP 指的就是 "consistency 一致性","availability 可用性" "partition-tolera ...
 - C语言:九宫格
			
#include <stdio.h> /* 如下排列表示 A00 A01 A02 A10 A11 A12 A20 A21 A22 */ int main() { unsigned char ...
 - Redis的持久化机制你学会了吗
			
大家都知道Redis经常被使用在缓存的场景中,那有没有想过这么一个问题,一旦服务器宕机,内存中的数据全部丢失,我们该如何进行恢复呢?如果直接从后端数据库恢复,不仅会给数据库带来巨大的压力,还会使上层应 ...
 - [刘阳Java]_CSS数字分页效果
			
先给出效果图,见下图.下图主要的完成当鼠标放到分页数字的上会呈现一个变大的效果 实现思路: (1). 使用浮动属性,以便让li元素水平排列. (2).将a元素设置为块级元素,然后设置它们的尺寸. (3 ...
 - LeetCode 895. Maximum Frequency Stack
			
题目链接:https://leetcode.com/problems/maximum-frequency-stack/ 题意:实现一种数据结构FreqStack,FreqStack需要实现两个功能: ...
 - Requests方法 -- Blog流程类进行关联
			
1.接口封装关联 1.有些接口经常会用到比如登录的接口,这时候我们可以每个接口都封装成一个方法,如:登录.保存草稿.发帖.删帖,这四个接口就可以写成四个方法2.接口封装好了后,后面我们写用例那就直接调 ...
 - 小程序框架WePY 从入门到放弃踩坑合集
			
小程序框架WePY 从入门到放弃踩坑合集 一点点介绍WePY 因为小程序的语法设计略迷, 所以x1 模块化起来并不方便, 所以x2 各厂就出了不少的框架用以方便小程序的开发, 腾讯看到别人家都出了框架 ...
 - vue组件之间通信总结(超详细)
			
组件通信在我们平时开发过程中,特别是在vue和在react中,有着举足轻重的地位.本篇将总结在vue中,组件之间通信的几种方式: props.$emit $parent.$children $attr ...