小方的Java博客

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  27 随笔 :: 17 文章 :: 115 评论 :: 0 Trackbacks
问题提出:看了不少文章处理中文,比如:在 jsp里写
// 传统方式 
<%@ page contentType="text/html; charset=gb2312" %> 
<html> 
<body> 
<form method=post action=test.jsp> 
<input type=text name=your_name> 
</form> 
<%= new String(request.getParameter("your_name").getBytes("8859_1"), "GB2312"%> 
</body> 
</html> 

// 新的方式 
<%@ page contentType="text/html; charset=gb2312" %> 
<% request.setCharacterEncoding("GB2312"); %> 
<html> 
<body> 
<form method=post action=test.jsp> 
<input type=text name=your_name> 
</form> 
<%= request.getParameter("your_name"%> 
</body> 
</html> 
那是相当不好的方法,现在介绍一个朋友教我的方法:

问题解决方法:
步骤1:先写一个servlet  EncodingFilter.java
 1import javax.servlet.FilterChain;
 2import javax.servlet.ServletRequest;
 3import javax.servlet.ServletResponse;
 4import java.io.IOException;
 5import javax.servlet.Filter;
 6import javax.servlet.http.HttpServletRequest;
 7import javax.servlet.ServletException;
 8import javax.servlet.FilterConfig;
 9
10public class EncodingFilter implements Filter {
11
12    private String targetEncoding = "gb2312";
13    protected FilterConfig filterConfig;
14
15    public void init(FilterConfig config) throws ServletException {
16        this.filterConfig = config;
17    }

18
19    public void doFilter(
20        ServletRequest srequest,
21        ServletResponse sresponse,
22        FilterChain chain)
23        throws IOException, ServletException {
24
25        HttpServletRequest request = (HttpServletRequest) srequest;
26        request.setCharacterEncoding(targetEncoding); //把请求用指定的方式编码
27        // 把处理发送到下一个过滤器
28        chain.doFilter(srequest, sresponse);
29    }

30
31    public void destroy() {
32        this.filterConfig = null;
33    }

34
35    public void setFilterConfig(final FilterConfig filterConfig) {
36        this.filterConfig = filterConfig;
37    }

38}

39

步骤2:在web.xml里这样写
<filter>
        
<filter-name>EncodingFilter</filter-name>
        
<display-name>EncodingFilter</display-name>
        
<filter-class>com.itthinker.payroll.common.EncodingFilter</filter-class>
    
</filter>
    
<filter-mapping>
        
<filter-name>EncodingFilter</filter-name>
        
<url-pattern>/*</url-pattern>
    
</filter-mapping>

总结:
这样的话,任何映射地址全部会先加载EncodingFilter,中文处理就搞定了,不用那么麻烦在每个jsp文件写那么多重复代码了,很好地做到了,代码可复用性。当然 page contentType="text/html; charset=gb2312"
还是要的

posted on 2006-06-08 17:44 方佳玮 阅读(478) 评论(4)  编辑  收藏 所属分类: 其他技术

评论

# re: 什么才是最好处理中文方法 2006-06-08 21:02 thinkbase
GB2312 已经过时来, 推荐了解一下什么叫做 UTF-8  回复  更多评论
  

# re: 什么才是最好处理中文方法 2006-06-08 21:50 方佳玮
好的,谢谢,我是新手,成长中  回复  更多评论
  

# re: 什么才是最好处理中文方法[未登录] 2007-02-09 12:26 xmlspy
还有一个重要的
那个filter一定要在web.xml配置文件中第一位,否则...... 哈哈,你就折腾吧  回复  更多评论
  

# re: 什么才是最好处理中文方法 2007-02-09 22:02 方佳玮
多谢楼上提醒  回复  更多评论
  


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


网站导航: