JAVA WEB 解决编码问题的filter
最近使用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"/>
JAVA WEB 解决编码问题的filter的更多相关文章
- JAVA WEB 三器之过滤器(Filter)
过滤器(Filter) 1. 简介 过滤器可以动态地拦截请求和响应,以变换或使用包含在请求或响应中的信息,它是 Servlet 技术中最实用的技术,属于系统级别,主要是利用函数的回调实现.对 Jsp, ...
- [原创]java WEB学习笔记44:Filter 简介,模型,创建,工作原理,相关API,过滤器的部署及映射的方式,Demo
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- Java Web解决跨域请求
要知道跨域请求就要先了解同源策略,那么什么是同源?什么是不同源?简单来说就是,如果两个资源,包括HTML页面.JavaScript脚本.css样式,对应的协议.域名和端口完全相同,那么这两个资源就是同 ...
- java web 解决Form表单乱码问题
JSP和Servlet的六种中文乱码处理方法 一.表单提交时出现乱码: 在进行表单提交的时候,经常提交一些中文,自然就避免不了出现中文乱码的情况,对于表单来说有两种提交方式:get和post提交方式. ...
- java web.xml listener servlet 和filter加载顺序
在该项目中总会遇到一些关于加载的优先问题.最近遇到了同样的类别似的,所以,如果你发现信息汇总下,以下是转载其他一些人,毕竟,人们写的不错.它不重复创建的轮.只是略作修改自己的观点. 首先能够肯定的是, ...
- JAVA WEB项目中开启流量控制Filter
Flow Control:控流的概念 主要是用来限定server所能承载的最大(高并发)流量峰值,以免在峰值是Server过载而宕机,对于WEB系统而言 通常是分布式部署,如果请求并发量很大,会导致整 ...
- Java Web解决解析乱码和响应乱码
package cn.edu.aynu.rjxy.servlet; import java.io.IOException; import java.io.PrintWriter; import jav ...
- java web解决表单重复提交问题
我们大家再进行web开发的时候,必不可少会遇见表单重复提交问题.今天就来给总结如何解决表单提交问题,欢迎大家交流指正. 首先我们在讨论如何解决表单重复提交问题之前先来解决三个问题:1.什么叫表单重复提 ...
- java web url编码解码问题(下载中文名文件)
问题描述:需要url直接访问中文名的文件,类似于在地址栏里直接输入http://localhost:8080/example/丽江旅游攻略.doc 来进行文件下载,tomcat的server.xml文 ...
随机推荐
- 某个 页面覆盖了 UITabBar 的tabItem的解决办法
将这个页面的背景色设置为无色: [self.view setBackgroundColor:[UIColor clearColor]]; 或者 self.view.frame = CGRectMake ...
- iOS 各种控件默认高度(图示)
1.状态栏 状态栏一般高度为20像素,在打手机或者显示消息时会放大到40像素高,注意,两倍高度的状态栏在好像只能在纵向的模式下使用.如下图 用户可以隐藏状态栏,也可以将状态栏设置为灰色,黑色或者半透明 ...
- 【工具类】怎么进入阿里云docker仓库
进入阿里云docker仓库. 1.进入官网 2.选择 开发者 --->点击 阿里开源项目 3.选择 服务 点击代码托管.仓库 下的 容器镜像服务 4.点击进入 管理控制台 5.点击镜像搜索, ...
- C#学习笔记:预处理指令
C#和C/C++一样,也支持预处理指令,下面我们来看看C#中的预处理指令. #region 代码折叠功能,配合#endregion使用,如下: 点击后如下: 条件预处理 条件预处理可以根据给出的条件决 ...
- cloudera项目源代码
以下项目都需要安装git,Linux的git还是比较容易安装的,windows的git安装参考项目区域:软件版本控制-在Windows中使用Git视频介绍 git相关软件安装参考win7安装 git软 ...
- java.security.InvalidKeyException: Illegal key size aes解密失败
使用微信时定期提示:java.security.InvalidKeyException: Illegal key size和 com.qq.weixin.mp.aes.AesException: ae ...
- spring4 quartz2 集群动态任务
实现定时任务的执行,而且要求定时周期是不固定的.测试地址:http://sms.reyo.cn 生产环境:nginx+tomcat+quartz2.2.1+spring4.2.1 集群. 实现功能:可 ...
- 波士顿法律第一至五季/全集Boston Legal迅雷下载
本季第一至五季Boston Legal(2004-2008)看点:<波士顿法律>(Boston Legal)是讲述的是美国波士顿市一家律师事务所的故事,主要是两位活宝Alan(James ...
- Java并发编程的艺术(四)——线程的状态
线程的状态 初始态:NEW 创建一个Thread对象,但还未调用start()启动线程时,线程处于初始态. 运行态:RUNNABLE 在Java中,运行态包括就绪态 和 运行态. 就绪态 该状态下的线 ...
- 限制EditText必须输入中文的方法
给EditText做限制时,我们想要输入的字符串必须都是中文,不出现任何其他字符,下面的类可以很好的实现这个要求. InputLenLimit.java package com.kale.button ...