posts - 10, comments - 9, trackbacks - 0, articles - 17

2种中文乱码处理--方法和过滤器

Posted on 2008-12-15 14:46 wesley1987 阅读(631) 评论(1)  编辑  收藏 所属分类: struts学习项目
一. 使用 方法调用处理中文:
    public static String changeStr(String str){    
        
if(str==null)return null;
        String temp
=null;
        
try {
            temp 
= new String(str.getBytes("ISO-8859-1"));
        } 
catch (UnsupportedEncodingException e) {
            
            e.printStackTrace();
        }
        
return temp;
    }

  我们将这个方法作为静态写入了BaseAction中,使所有的方法都能调用。
    String offername = changeStr(request.getParameter("offername"));
这种方法的好处是: 无论是POST/GET的页面表单,还是重写的URL他都一并处理了。写起来也简单
可问题是:对于所有页面参数几乎都要调用一下这个方法,对于大的工程就很不合适了。
                特别是参数很多的Form中,所有的参数都要用它处理一次。虽然我把这个处理写入了验证中自动调用。
            但是还是感觉比较麻烦。

 

二. 使用 过滤器 Filter
1 新建一个java文件:SetCharacterEncodingFilter


 
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 FilterConfig config;
    
private String encoding;
 
    
public void destroy() {
        
// 销毁配置
        this.config = null;
 
    }
 
    
public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) 
throws IOException, ServletException {
        
// 如果编码已经配置, 则使用该编码.
        if(this.encoding != null) {
            request.setCharacterEncoding(
this.encoding);
        }
        
// 将资源链到下一Filter, 如果这是最后一个Filter, 则将资源链到目的位置.
        chain.doFilter(request, response);
 
    }
 
    
public void init(FilterConfig config) throws ServletException {
        
// 方便销毁配置
        this.config = config;
        
// 读取web.xml中CharacterEncodingFilter内的初始编码参数
        this.encoding = this.config.getInitParameter("encoding");
 
    }

2 在web.xml中 根节点下加入
<!-- 设置request编码方式  -->
   
<filter>
        
<filter-name>Set Character Encoding</filter-name>
        
<filter-class>com.neusoft.struts.platform.SetCharacterEncodingFilter</filter-class>
        
<init-param>
            
<param-name>encoding</param-name>
            
<param-value>GB2312</param-value>
        
</init-param>
        
<init-param>
            
<param-name>ignore</param-name>
            
<param-value>true</param-value>
        
</init-param>
    
</filter>
    
<filter-mapping>
        
<filter-name>Set Character Encoding</filter-name>
        
<url-pattern>*</url-pattern>
   
</filter-mapping>

使用过滤器 可谓是一劳永逸,所有页面表单是POST的请求,即所有struts中的Form基本都OK了。
但注意:它也仅对POST请求有效。对于GET请求和重写URL的请求,它也会去处理,但由于他们和POST的编码区别,
过滤器会把他们过滤成??

  解决方法:
找到Tomcat安装目录内conf文件夹下的server.xml文件,
给其中的连接器元素Connector添加属性: URIEncoding, 属性值为: UTF-8.

1  <Connector port="8080" protocol="HTTP/1.1" 
2                connectionTimeout="20000" 
3                redirectPort="8443"
4                URIEncoding="UTF-8" />

 

关于乱码详细问题即解决,见 乱码问题详解

Feedback

# re: 2种中文乱码处理--方法和过滤器  回复  更多评论   

2009-03-12 17:29 by 打发
支持下 谢谢,学习了!

只有注册用户登录后才能发表评论。


网站导航: