Tomcat中用Filter解决JSP提交中文信息到Servlet的乱码问题
2008-06-20 18:30
791 查看
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的原有配置,因为它对所有的项目都起作用,网站管理员未必总是听我的!所以我尝试了一下,弄出来一个方案,旨在抛砖引玉,希望大家积极讨论。
源码如下
并且需要在项目的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传值中文都没有问题,现拿出来与大家分享,不妥之处欢迎批评指正。
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的乱码问题
- Tomcat中用Filter解决JSP提交中文信息到Servlet的乱码问题
- Tomcat中用Filter解决JSP提交中文信息到Servlet的乱码问题
- Tomcat JSP提交参数中文乱码问题解决
- JSP+Servlet学习经验1:解决form表单提交后相应页面中文乱码的问题
- 中文乱码问题解决,过滤器配置,get post提交乱码,filter,struts乱码,jsp乱码
- [JSP] 利用Filter解决Servlet输出中文乱码的问题
- 利用tomcat解决get提交中文乱码问题
- JSP中乱码问题解决(一、JSP页面显示乱码,二、表单提交中文时出现乱码,三、数据库连接出现乱码,四、数据库的显示乱码 )
- 基于Tomcat的JSP开发过程中的中文乱码问题解决
- jsp+servlet 文件上传 解决中文乱码问题
- 解决servlet到jsp中文乱码问题
- jsp和servlet操作mysql中文乱码问题的解决办法
- 解决JSP提交表单保存到Mysql中文乱码的问题
- Android 向Tomcat服务器提交中文乱码问题解决
- jsp servlet mysql fckeditor等配合使用时出现中文乱码的解决问题!
- Eclipse,tomcat及jsp页面编码的设定解决的中文乱码问题
- 关于jsp中文提交到后台乱码问题解决办法
- SmartUpload控件 中文乱码问题 jsp+servlet解决办法
- tomcat + servlet解决中文乱码问题