`
caleb_520
  • 浏览: 246990 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

利用过滤器进行中文转码

阅读更多
Servlet过滤器是一个Web应用组件,和Servlet类似,也需要在Web应用配置文件中进行配置:首先是过滤器的Web应用定义包含在<filter>…</filer>元素中,其次是Web应用的过滤器映射配置文件<filter-mapping>…</filter-mapping>

过滤器的应用很广泛,在这里介绍利用过滤器进行中文转码。一般在JavaWeb应用中,当利用request.getParameter(String str)方法获取从表单或是页面传过来的中文参数都会是一个乱码。通常会采用如下的转码方式在Servlet或是JSP中进行转码设置:
(1)request.setCharacterEncoding("gb2312");
(2)String username = request.getParameter("username");
username = new String(username.getBytes("ISO-8859-1"), "GB2312");

假设:一个表单有多数据传到Servlet或是JSP,那么就可能在这些Servlet或是JSP中写下多个request.setCharacterEncoding("gb2312")或是多个类似于String username = request.getParameter("username");
username = new String(username.getBytes("ISO-8859-1"), "GB2312");这样子肯定加大代码工作量。


针对上面的一些常见的问题,下面利用过滤器进行中文转码就可以迎刃而解。配置Filter的步骤如下:

(1)现在web.xml文件中配置如下信息
<filter>
	<filter-name>CharactsetConversion</filter-name>
	<filter-class>com.gxa.edu.servlet.CharactsetConversion</filter-class>
		
	<init-param>
		<param-name>flag</param-name>
		<param-value>true</param-value>
	</init-param>
		
	<init-param>
		<param-name>charcode</param-name>
		<param-value>gb2312</param-value>
	</init-param>
		
</filter>
	
<filter-mapping>
      <!-- 配置需要过滤的URL,这里主要是对所有的文件进行过滤 -->
	<filter-name>CharactsetConversion</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>


当配置好web.xml文件后,就创建一个过滤器类,名称CharactsetConversion,该类必须实现Filter接口,同时Filter接口提供了3个方法
(1)void doFilter(ServletRequest req,ServletResponse res,FilterChain filterChain)
(2)void init(FilterConfig filterConfig)
(3)void destroy()

(2)创建一个CharactsetConversion.java文件,该文件了实现Filter接口
package com.gxa.edu.servlet;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class CharactsetConversion implements Filter{
	private FilterConfig filterConfig = null;
	private boolean flag = true;
	private String charcode = "gb2312";

	public void init(FilterConfig filterConfig) {
		this.filterConfig = filterConfig;
		String temp = this.filterConfig.getInitParameter("flag");
		String str = this.filterConfig.getInitParameter("charcode");
		if(temp != null){
			if(temp.equals("true")){
				this.flag = true;
			}else if(temp.equals("false")){
				this.flag = false;
			}else{
				this.flag = true;
			}
		}
		if(str != null){
			this.charcode = str;
		}
	}
	public void doFilter(ServletRequest request,ServletResponse response,FilterChain filterChain) {
		try {
			if (flag) {
				String c = request.getCharacterEncoding();
				if (c == null) {
					request.setCharacterEncoding(charcode);
				} else if (!c.equals(this.charcode)) {
					request.setCharacterEncoding(charcode);
				}
			}
			filterChain.doFilter(request, response);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	public void destroy() {
		this.filterConfig = null;
	}
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics