002——Filter解决乱码问题

来源:互联网 发布:淘宝领的话费券在哪 编辑:程序博客网 时间:2024/06/04 18:11

字符编码Filter是最常用的Filter之一,常用来解决Tomcat等服务器里request,response乱码的问题。字符编码Filter是在request提交到Servlet之前对request进行制定编码方式的编码,代码如下:

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 {//如果启用该filterif(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"/>


0 0
原创粉丝点击