软件环境:
win2003
MyEclipse 7.1
apache-tomcat-6.0.20
在项目中建立一个类,名称:SetCharacterEncodingFilter
SetCharacterEncodingFilter.java代码如下:
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;
import javax.servlet.UnavailableException;
public class SetCharacterEncodingFilter implements Filter {
protected FilterConfig filterConfig;
protected String encodingName;
protected boolean enable;
public SetCharacterEncodingFilter() {
this.encodingName = "";
this.enable = false;
}
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
loadConfigParams();
}
private void loadConfigParams() {
this.encodingName = this.filterConfig.getInitParameter("encoding");
String strIgnoreFlag = this.filterConfig.getInitParameter("enable");
if (strIgnoreFlag.equalsIgnoreCase("true")) {
this.enable = true;
} else {
this.enable = false;
}
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
if(this.enable) {
request.setCharacterEncoding(this.encodingName);
}
chain.doFilter(request, response);
}
public void destroy() {
}
}
2.在包资源管理器中双击web.xml文件。
选择 Filters 过滤器,然后点击右边filter-name的add按钮。
在弹出的对话框中,
filter-name:SetCharacterEncodingFilter
filter-class:SetCharacterEncodingFilter
然后单击“完成”。
在随后的“Init Params”栏目右边单击“Add”
Param-Name:encoding
Param-Value:UTF-8
点击完成。
还要在Init Params栏目中添加另一个参数和值。add
Param-Name:enable
Param-Value:true
单击完成。
3.单击web栏中的Filters,在右边的Filters Mappings栏目右边单击add
在弹出的对话框中只填写两个参数,
filter-name:SetCharacterEncodingFilter
URL-Pattern:/*
点击完成,之后保存web.xml配置文件。重启Tomcat后就能生效了。
经过以下处理之后,所有的请求都会被转换成 UTF-8 的编码格式,这样表单中的中文输入也可以正常获取并显示,不必对每个输入项再进行转换编码处理。
网上流行的方法都是直接用记事本打开web.xml文件添加代码,但是我用的MyEclipse 7.1中的web.xml被记事本打开之后有乱码,用记事本编辑之后,MyEclipse 7.1无法正确加载web.xml,工程也无法正常运行了。就出此下策。
切忌 如果发现有时页面的乱码并没有正确转换的话 你一定要保证 filter配置信息在所有servlet配置的上面。
因为 web.xml的读取机制是从上到下读取的所以要保证 filter最先读取 才能启动中文过滤的作用。