package util;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class MyHttpServletRequest extends HttpServletRequestWrapper {

protected Log log = LogFactory.getLog(getClass());
private static final String ENCODED = "UTF-8",DECODE="ISO8859-1";

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

@Override
public String getQueryString() {
String queryString = super.getQueryString();
if(queryString != null){
try {
return new String(queryString.getBytes(DECODE),ENCODED);
} catch (UnsupportedEncodingException e) {
log.info(e.getMessage(),e);
}
}
return queryString;
}

@Override
public String getParameter(String name) {
String value = super.getParameter(name);
if (value != null) {
try {
return new String(value.getBytes(DECODE), ENCODED);
} catch (UnsupportedEncodingException e) {
log.info(e.getMessage(),e);
}
}
return value;
}

@SuppressWarnings("unchecked")
@Override
public Map getParameterMap() {
Map<String, String[]> values = super.getParameterMap();
Map<String, String[]> valuesMap = new HashMap<String, String[]>();
Set<String> names = values.keySet();
for (Iterator<String> iter = names.iterator(); iter.hasNext();) {
String name= iter.next();
String[] v = values.get(name);
if(v != null) {
String[] valuesCopy = new String[v.length];
for(int i = 0; i < v.length; i++) {
try {
valuesCopy[i] = new String(v[i].getBytes(DECODE), ENCODED);
} catch (UnsupportedEncodingException e) {
log.info(e.getMessage(),e);
}
}
valuesMap.put(name, valuesCopy);// 向新Map放入转码过的值
}
}
return valuesMap;// 返回是副本
}

@Override
public String[] getParameterValues(String name) {
String[] values = super.getParameterValues(name);
if(values != null) {
String[] valuesCopy = new String[values.length];//原数组是只读的,不能修改
for(int i = 0; i < values.length; i++) {
try {
valuesCopy[i] = new String(values[i].getBytes(DECODE), ENCODED);
} catch (UnsupportedEncodingException e) {
log.info(e.getMessage(),e);
}
}
return valuesCopy;
}
return values;
}
}

后台调用

request = new MyHttpServletRequest(request);

来自:http://bbs.csdn.net/topics/320081498  回答的二楼作者

A标签中传递的中文参数到Servlet 后台request.getParameter()接收时出现中文乱码的更多相关文章

  1. SpringMVC中使用Ajax POST请求以json格式传递参数服务端通过request.getParameter("name")无法获取参数值问题分析

    SpringMVC中使用Ajax POST请求以json格式传递参数服务端通过request.getParameter("name")无法获取参数值问题分析 一:问题demo展示 ...

  2. css pre如果同时运用了css的border-radius、 overflow两个属性且标签中内容太多时,外部div滚动条在firefox下滚动时很卡

    pre如果同时运用了css的border-radius. overflow两个属性且标签中内容太多时,外部div滚动条在firefox下滚动时很卡. 解决方法:去掉css中border-radius. ...

  3. MyBatis 中传递多个参数的 4 种方式

    方式 1 :封装成对象入参  #{对应实体类的属性} //UserMapper.java 接口 /** * 多条件查询:根据用户名称(模糊查询)和用户角色查询用户列表(参数:对象入参) * @para ...

  4. Mybatis中传递多个参数的方法总结

    一.单个参数: public List<XXBean> getXXBeanList(String xxCode); <select id="getXXXBeanList&q ...

  5. Mybatis接口中传递多个参数

    1.接口 public interface MemberMapper { public boolean insertMember(Members member); public Members sel ...

  6. 分享url带中文参数,打开html操作完毕跳转jsp页面中文乱码解决

    1.在app端分享参数组合时不对传递的url进行任何编码. 2.打开html页面时使用 escape函数对有中文的参数进行编码 escape(GetQueryString("paramete ...

  7. 过滤器中处理multipart/form-data头部的post请求request.getParameter(")获取不到参数问题

    如果不是文件类型请求,我们使用request.getParameter("");方法是可以获取到参数内容的,如果是文件类型的请求即请求的头部信息为“multipart/form-d ...

  8. request.getParameter()及解决数据库中文乱码问题——实习第七天

    今天老师让我们自己做一个小项目,我开始着手于实现这个小项目.途中遇到过几个小问题,在此做个小记录, 相信后期还是会借鉴的. 1,从前台传入数据给后台传入数据,并没有传入成功: 输出的为Null. 当然 ...

  9. 通过重写request.getParameter方法来解决中文乱码问题。

    在原生servlet的商城项目中,BeanUtils.populate方法封装不上注册的参数. 已知BeanUtils.populate方法是封装不上date对象的,于是自定义了一个转换器用来封装Da ...

随机推荐

  1. ABAP-BarCode-3-调用第三方控件BarTender实现打印

    1.BarTender软件安装及注册 2.BarTender设置好打印模板 3.ABAP生成TXT文件放置FTP服务器指定文件夹 4.BarTender轮询FTP服务器文件夹中的TXT,并按照模板打印 ...

  2. centos7 jenkins 安装

    前提: 安装了 jdk ,我的是jdk8 第一步: https://jenkins.io/download/ 下载 可以下载 rpm文件, 标红处, 也可以下载war包(Generic Java pa ...

  3. groovy 环境配置

    win7: 下载 http://www.groovy-lang.org/download.html 将解压后的文件夹里的bin目录加入path环境变量

  4. Python运维开发基础10-函数基础

    一,函数的非固定参数 1.1 默认参数 在定义形参的时候,提前给形参赋一个固定的值. #代码演示: def test(x,y=2): #形参里有一个默认参数 print (x) print (y) t ...

  5. IE6、IE7、Firefox中margin问题及input解决办法

    margin不居中的问题 .div{ margin:10px;/*ff*/ *margin:15px;/*ie7*/ _margin:15px;/*ie6*/  尺寸会变为正常的两倍,按道理应为5px ...

  6. 使用UUID方法生成全球唯一标识

    需要生成唯一字符串,如生成应用标识等,可以直接用java.util.UUID类实现. UUID(Universally Unique Identifier)全局唯一标识符,是指在一台机器上生成的数字, ...

  7. Alberta family's QR code is world's largest corn maze

    BY DARREN WEIR     SEP 10, 2012 IN ODD NEWS Link:http://www.digitaljournal.com/article/332512   Laco ...

  8. Dreamweaver 调字体大小

    编辑--首选参数--字体 这里是指调代码字体的大小,就是为了编码时看的清楚些

  9. 在不用重做系统下,把硬盘IDE模式修改为AHCI模式

    Win10自2015年7月29日诞生以来已经3年多了,虽然截至到现在Win7用户使用者仍然比Win10用户多,但是Win10用户也在逐渐增加 所使用的硬件--硬盘   用户为了更好的体验,也逐步的从H ...

  10. win10下安装oracle11G Examples出错[INS-32025][INS-52001]

    安装oracle examples时提示出错:[INS-32025] 所选安装与指定 Oracle 主目录中已安装的软件冲突.[INS-52001] Oracle Database Examples ...