002——Filter解决乱码问题
2016-06-22 08:11
281 查看
字符编码Filter是最常用的Filter之一,常用来解决Tomcat等服务器里request,response乱码的问题。字符编码Filter是在request提交到Servlet之前对request进行制定编码方式的编码,代码如下:
characterEncoding表示编码方式,enabled表示是否启用编码,分别从初始化参数中取得。web.xml中的配置代码如下:
注意:页面编码方式与Filter编码方式必须一致。另外,如果表单时get方式提交的,还需要修改Tomcat的/conf/server.xml配置文件,指定、URIEncoding(默认为ISO-8859-1);
否则,依然会乱码。修改如下:
package com.java.filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; public class CharacterEncodingFilter implements Filter { //编码方式,配置在web.xml中 private String characterEncoding; //是否启用该Filter,配置在web.xml中 private boolean enabled; public void destroy() { //销毁时清空资源 characterEncoding = null; } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { //如果启用该filter if(enabled || characterEncoding != null) { //设置request编码 request.setCharacterEncoding(characterEncoding); //设置response编码 response.setCharacterEncoding(characterEncoding); } chain.doFilter(request, response); } /** * 初始化时加载参数 */ public void init(FilterConfig config) throws ServletException { //编码方式 characterEncoding = config.getInitParameter("characterEncoding"); //启用 enabled = "true".equalsIgnoreCase(config.getInitParameter("enabled").trim()); } }
characterEncoding表示编码方式,enabled表示是否启用编码,分别从初始化参数中取得。web.xml中的配置代码如下:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <display-name></display-name> <filter> <filter-name>characterEncodingFilter</filter-name> <filter-class>com.java.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>characterEncoding</param-name> <param-value>utf-8</param-value> </init-param> <init-param> <param-name>enabled</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>characterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
注意:页面编码方式与Filter编码方式必须一致。另外,如果表单时get方式提交的,还需要修改Tomcat的/conf/server.xml配置文件,指定、URIEncoding(默认为ISO-8859-1);
否则,依然会乱码。修改如下:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="utf-8"/>
相关文章推荐
- 每天一个Linux命令(55)systemctl命令
- C programming-------exit() 函数
- osgi + felix example1编写
- http://www.360doc.com/content/12/1014/00/7471983_241330790.shtml
- Regional 2015 - Asia EC Final - C Suffixes and Palindromes
- 高德地图——搜索
- FPGA 程序130例-->例10.7~例10.7
- 《人月神话》阅读笔记--02
- http://my.oschina.net/u/2007041/blog/508520
- 国内外PHP开源建站程序一览
- xshell 缺少MSVCP110.dll
- linux系统安装rsync和sersync实现数据实时同步详细步骤(rsync实时同步)
- listview.selection()
- Maven配置pom文件
- [易飞]供应商料件认定
- Docker 1.12迎来内置编排机制
- Asp.NET的Trace追踪
- ios加载第三方库:横竖屏切换错误
- php phpize报错
- docker容器资源配额控制