最近使用Springmvc,GET传输参数的时候,经常出错误,下面介绍添加一个Filter的方法,可以解决这个问题。既支持POST方式也支持GET方式。

首先写一个Filter

package com.qunar.filter;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
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;
import javax.servlet.http.HttpServletResponse; public class CharacterEncodingFilter implements Filter {
private String encode = "UTF-8";// 默认UTF-8编码 public void init(FilterConfig filterConfig) throws ServletException {
String encoding = filterConfig.getInitParameter("encode");
if (encoding != null) {
encode = encoding;
}
} public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp;
// 设置request编码
request.setCharacterEncoding(encode);
// 设置相应信息
response.setContentType("text/html;charset=" + encode);
response.setCharacterEncoding(encode);
chain.doFilter(new CharacterEncodingRequest(request), response);
} public void destroy() { } } /**
* 对Get方式传递的请求参数进行编码
*/
class CharacterEncodingRequest extends HttpServletRequestWrapper {
private HttpServletRequest request = null; public CharacterEncodingRequest(HttpServletRequest request) {
super(request);
this.request = request;
} /**
* 对参数重新编码
*/
@Override
public String getParameter(String name) {
String value = super.getParameter(name);
if(value == null)
return null;
String method = request.getMethod();
if ("get".equalsIgnoreCase(method)) {
try {
value = new String(value.getBytes("ISO8859-1"), request.getCharacterEncoding());
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
return value;
} }

然后在xml里面添加这个filter

<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>com.qunar.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encode</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

当然有一些人为了单纯解决GET的编码问题,修改整个站点的编码,直接修改Connector也可以。

<Connector connectionTimeout="" port="" protocol="HTTP/1.1" redirectPort="" URIEncoding="UTF-8"/>

最新文章

  1. [原] KVM 虚拟化原理探究(5)— 网络IO虚拟化
  2. Runtime Error---Description: An application error occurred on the server....
  3. .Net魔法堂:史上最全的ActiveX开发教程——开发篇
  4. 如何解决div层被flash遮盖的问题
  5. APP推广入门之AppStore数据分析
  6. No Dialect mapping for JDBC type: -1
  7. ArcGIS for Android 中MapView的地图背景设置
  8. 【科研论文】W5100在远程电力质量监测设备中的应用
  9. Java宝典(一)
  10. GridView动态构建OrderBy进行排序
  11. SQL查询 addScalar()或addEntity()
  12. apache实现301永久性重定向代码
  13. pig的一些实例(我常用的语法)
  14. Spring的断言工具类Assert的基本使用
  15. SDN网络中hypervisor带来的控制器时延(Hypervisor位置的优化)
  16. mybatis入门篇:Mybatis注解方式的基本用法
  17. Confluence 6 配置快捷链接
  18. 九、Sql Server 基础培训《进度9-复杂查询练习》(实际操作)
  19. easyui equals验证代码
  20. linux如何使make输出makefile中所有的规则和变量

热门文章

  1. excel System.Runtime.InteropServices.COMException (0x80010105): 服务器出现意外情况。 (异常来自 HRESULT:0x80010105 (RPC_E
  2. SharePoint 获取详细Log信息
  3. 好汉两个半第十二季/全集Two and a Half Men迅雷下载
  4. 代码实现Android5.0的下拉刷新效果
  5. 将java中数组转换为ArrayList的方法实例(包括ArrayList转数组)
  6. Docker 常用命令与操作
  7. cannot import name &#39;main&#39; 解决方案
  8. [转]Sqoop-1.4.4工具import和export使用详解
  9. MD5加密算法中的加盐值 ,和彩虹表攻击 防止彩虹表撞库
  10. maven单测生成覆盖率报告---Jacoco的使用