如何配置Filter过滤器处理JSP中文乱码

参考Tomcat服务器目录webapps的examples示例


简单配置步骤:
1.在项目web.xml文件添加过滤器标记<filter>和<filter-mapping>;
2.实现过滤器代码;
3.对Tomcat服务器conf目录里的Server.xml文件配置URIEncoding;
4.前台页面设置contentType的charset值与web.xml里设置的值一致。


详细配置步骤:
1.配置web.xm文件,在web-app标签内添加过滤器的配置<filter>和<filter-mapping>

[html]  view plain copy
  1.   <!--中文乱码处理过滤-->    
  2.     <filter>  
  3.         <filter-name>EncodingFilter</filter-name><!--过滤器名称,自己起 -->  
  4.         <filter-class>com.filters.SetCharacterEncodingFilter</filter-class><!--过滤器类名称,包括包名一致、写全 -->  
  5.         <init-param><!--初始化参数,要指定的字符集编码 -->  
  6.             <param-name>encoding</param-name><!--参数名称 -->  
  7.             <param-value>GBK</param-value><!--参数值 -->  
  8.         </init-param>  
  9.         <init-param><!--初始化参数,指定是否忽略大小写 -->  
  10.             <param-name>ignore</param-name>  
  11.             <param-value>true</param-value>  
  12.         </init-param>  
  13.     </filter>  
  14.     <filter-mapping>  
  15.         <filter-name>EncodingFilter</filter-name>  
  16.         <url-pattern>/*</url-pattern> <!--“/*”表示项目下所有资源 -->  
  17.     </filter-mapping>  
  18.   <!--中文乱码处理过滤 -->    

2.实现过滤器代码,创建一个SetCharacterEncodingFilter

[java]  view plain copy
  1. package com.filters;  
  2.   
  3. import java.io.IOException;  
  4.   
  5. import javax.servlet.Filter;  
  6. import javax.servlet.FilterChain;  
  7. import javax.servlet.FilterConfig;  
  8. import javax.servlet.ServletException;  
  9. import javax.servlet.ServletRequest;  
  10. import javax.servlet.ServletResponse;  
  11.   
  12. /** 
  13.  * 自定义字符处理过滤器 
  14.  * 参考自Tomcat目录webapps\examples\WEB-INF\classes\filters 
  15.  * @author coderlu 
  16.  * @since 2012-12-10 
  17.  */  
  18. public class SetCharacterEncodingFilter implements Filter {  
  19.   
  20.     protected FilterConfig filterConfig = null//初始化配置  
  21.     protected String encoding = null;           //接收字符编码  
  22.     protected boolean ignore = true;            //是否忽略大小写  
  23.       
  24.     /* 析构函数 
  25.      * @see javax.servlet.Filter#destroy() 
  26.      */  
  27.     @Override  
  28.     public void destroy() {  
  29.         this.encoding = null;  
  30.         this.filterConfig = null;  
  31.     }  
  32.   
  33.     /* 执行过滤操作 
  34.      * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain) 
  35.      */  
  36.     @Override  
  37.     public void doFilter(ServletRequest request, ServletResponse response,  
  38.             FilterChain chain) throws IOException, ServletException {  
  39.           
  40.         if (ignore || (request.getCharacterEncoding() == null)) {  
  41.             String encoding = selectEncoding(request);  //如果为空先从web.xml中得到  
  42.             if (encoding != null){  
  43.                 request.setCharacterEncoding(encoding); //设置字符集编码  
  44.             }  
  45.         }  
  46.         chain.doFilter(request, response);  
  47.     }  
  48.   
  49.     /* 初始化过滤器 
  50.      * @see javax.servlet.Filter#init(javax.servlet.FilterConfig) 
  51.      */  
  52.     @Override  
  53.     public void init(FilterConfig filterConfig) throws ServletException {  
  54.         this.filterConfig = filterConfig;     
  55.         this.encoding = filterConfig.getInitParameter("encoding");  //从web.xml文件中读取encoding的值  
  56.         String value = filterConfig.getInitParameter("ignore");     //从web.xml文件中读取ignore的值  
  57.         //以下三种情况均为忽略大小写  
  58.         if (value == null)  
  59.             this.ignore = true;  
  60.         else if (value.equalsIgnoreCase("true"))  
  61.             this.ignore = true;  
  62.         else if (value.equalsIgnoreCase("yes"))  
  63.             this.ignore = true;  
  64.         else  
  65.             this.ignore = false;  
  66.     }  
  67.       
  68.     /** 
  69.      * 得到字符编码 
  70.      * @param request 
  71.      * @return 
  72.      */  
  73.     protected String selectEncoding(ServletRequest request) {  
  74.         return (this.encoding);  
  75.     }  
  76. }  

3.修改Tomcat服务器conf\Server.xml文件,加入一个URIEncoding="GBK" 

[html]  view plain copy
  1.     <!--URIEncoding 配置服务器反应编码集-->  
  2.     <Connector port="8080" protocol="HTTP/1.1"   
  3.                connectionTimeout="20000"   
  4.                redirectPort="8443"   
  5.                URIEncoding="GBK"/>  


4.设置前台页面字符编码集

[html]  view plain copy
  1. <%@ page contentType="text/html;charset=GBK" %>  
//此处的charset的值要和web.xml里的   <param-value></param-value>值一样
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值