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传值中文都没有问题,现拿出来与大家分享,不妥之处欢迎批评指正。
Tomcat中用Filter解决JSP提交中文信息到Servlet的乱码问题
最新推荐文章于 2019-09-27 14:39:55 发布