您的位置:首页 > 其它

通过Filter解决字符编码问题

2012-06-20 17:50 387 查看
字符编码是最常用的Filter之一了,常用来解决Tomcat等服务器里request、response乱码问题。字符编码Filter是在request提交到Servlet之前对request进行制定编码方式的编码。通过CharacterEncodingFilter.java解决,web.xml进行相应的配置即可。

CharacterEncodingFilter.java代码如下:

package demo.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{
private String characterEncoding;	//编码方式,配置在web.xml中
private boolean enabled;	//是否开启用该Filter,配置在web.xml中

public void init(FilterConfig config)throws ServletException{	//初始化时加载参数
characterEncoding = config.getInitParameter("characterEncoding");
//编码方式
enabled = "true".equalsIgnoreCase(config.getInitParameter("enabled").trim());
//启用
}

public void destroy() {
characterEncoding = null;	//销毁时清空资源

}

public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
if(enabled || characterEncoding != null){	//如果启用该Filter
request.setCharacterEncoding(characterEncoding);	//设置request编码
response.setCharacterEncoding(characterEncoding);	//设置response编码
}

}

}


web.xml的配如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>

<!-- Filter的编码应用 -->
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>demo.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>

</web-app>
PS:页面编码方式与Filter编码方式必须一致。另外,如果表单时GET方式提交的,还需修改Tomcat下的/conf/server.xml配置文件,制定URIEncoding;否则,依然会乱码。修改如下:

<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8"/>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐