Tomcat中用Filter解决JSP提交中文信息到Servlet的乱码问题

JSP或者是HTML提交中文信息到Servlet会出现乱码一直是困扰初学者的一大问题,网上关于这个问题的处理方法颇多,最简单的方法莫过于在每个Servlet里添加下面的一句话:request.setCharacterEncoding(“GBK”);不过简单的方面未必不麻烦,这需要我们在每个Servlet里都加入这句话,工作量太大。所以为了减轻大家的工作量,有人提出使用Filter来解决这个问题,代码如下:   public void doFilter(ServletRequest req, ServletResponse res,    FilterChain chain) throws IOException, ServletException {    req.setCharacterEncoding("GBK");      chain.doFilter(req, res); } 这样就不用在每个Servlet里都加入刚才那就句话了,省去了很多麻烦。当然要求我们在写JSP的时候要设置正确的字符集,这个在课堂上已经讲了很多次了,相信大家已经掌握。 不过,这种方法对使用GET方式提交的FORM并不适用,问题依旧,所以建议不要使用GET方式提交中文信息。不过有的同学说,就喜欢用GET方式或者URL传中文,那怎么解决呢?可以修改Tomcat的配置,这个在网上很容易找到。不过我不太喜欢修改Tomcat的原有配置,因为它对所有的项目都起作用,网站管理员未必总是听我的!所以我尝试了一下,弄出来一个方案,旨在抛砖引玉,希望大家积极讨论。源码如下 package filters;import java.io.IOException;import java.util.Iterator;import java.util.Map;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;/** * 编码过滤器类 * 解决从HTML或JSP向Servlet传递中文信息的乱码问题。 * * @author coombe */public class CharsetFilter implements Filter { /** 保存用户指定编码 */ protected String encoding = null; /**   * 初始化过滤器方法,由系统创建Filter时自动调用  * 把web.xml中用户指定的编码保存在本类的属性中  */ public void init(FilterConfig filterConfig) throws ServletException {  this.encoding = filterConfig.getInitParameter("encoding"); } /**  * 执行过滤功能  * 将参数信息按指定的编码进行转换  */ public void doFilter(ServletRequest req, ServletResponse res,   FilterChain chain) throws IOException, ServletException {  Map parameterMap = req.getParameterMap();  if (!parameterMap.isEmpty()) {   Iterator it = parameterMap.keySet().iterator();   String value[] = null;   while (it.hasNext()) {    value = (String[]) parameterMap.get(it.next());    for (int i = 0; i < value.length; i++) {     value[i] = new String(value[i].getBytes("ISO-8859-1"),       encoding);    }   }  }  chain.doFilter(req, res); } /**  * 销毁方法,在系统销毁Filter之前由系统自动调用  */ public void destroy() {  this.encoding = null; }}    并且需要在项目的web.xml里加入下面的配置:<filter>      <filter-name>CharsetFilter</filter-name>     <filter-class>filters.CharsetFilter</filter-class>     <init-param>          <param-name>encoding</param-name>         <param-value>GBK</param-value>     </init-param></filter> <filter-mapping>     <filter-name>CharsetFilter</filter-name>     <url-pattern>/*</url-pattern></filter-mapping> 我简单试验了一下,GET、POST或URL传值中文都没有问题,现拿出来与大家分享,不妥之处欢迎批评指正。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值