ITPub博客

首页 > IT基础架构 > 网络安全 > Tomcat5里出现的中文问题

Tomcat5里出现的中文问题

原创 网络安全 作者:panpa 时间:2005-04-05 21:16:14 0 删除 编辑

    今天给一家客户安装系统,用了新下载的Tomcat5.0,将web包麻利地配置上,一切那么顺利地完成后,然后给客户试用功能,丑事发生,居然输入的中文存盘后居然成乱码了,郁闷。原来系统在resin2、tomcat4.1下都很正常啊,怎么换了更新版本的tomcat就出问题了呢?没工夫研究,只好先拷贝自己机器上的resin到用户服务器上应付先:)

    晚上回来研究一下,我的系统是这样处理中文录入的问题的,在所有servlet对request参数进行调用前,都调用了request.setCharacterEncoding("GBK");怎么会不好使呢?网上搜搜看有啥方案,嗯,处理中文问题还真一大把,很快就找到我的问题,在tomcat的server.xml里的Connector标签块里增加了URIEncoding=”GBK”就搞定了我系统中的中文问题。更多内容看看转载的人家的文章如何说:D

[@more@]

-------------------
Tomcat 5中文问题
author:kiss__sky@163.com
-------------------

问题描述:

1 表单提交的数据,用request.getParameter(“xxx”)返回的字符串为乱码或者??
2 直接通过url如http://localhost/a.jsp?name=中国,这样的get请求在服务端用request. getParameter(“name”)时返回的是乱码;按tomcat4的做法设置Filter也没有用或者用request.setCharacterEncoding("GBK");也不管用

原因:
1 tomcat的j2ee实现对表单提交即post方式提示时处理参数采用缺省的iso-8859-1来处理
2 tomcat对get方式提交的请求对query-string 处理时采用了和post方法不一样的处理方式。(与tomcat4不一样,所以设置setCharacterEncoding(“gbk”))不起作用。


解决办法:

首先所有的jsp文件都加上:
1 实现一个Filter.设置处理字符集为GBK。(在tomcat的webapps/servlet-examples目录有一个完整的例子。请参考web.xml和SetCharacterEncodingFilter的配置。)

1)只要把%TOMCAT安装目录%/ webappsservlets-examplesWEB-INFclassesfiltersSetCharacterEncodingFilter.class文件拷到你的webapp目录/filters下,如果没有filters目录,就创建一个。
2)在你的web.xml里加入如下几行:

   〈filter〉

        〈filter-name〉Set Character Encoding〈/filter-name〉

        〈filter-class〉filters.SetCharacterEncodingFilter〈/filter-class〉

        〈init-param〉

            〈param-name〉encoding〈/param-name〉

            〈param-value〉GBK〈/param-value〉

        〈/init-param〉

    〈/filter〉

        〈filter-mapping〉

        〈filter-name〉Set Character Encoding〈/filter-name〉

        〈url-pattern〉/*〈/url-pattern〉

    〈/filter-mapping〉

3)完成.

2 get方式的解决办法
1) 打开tomcat的server.xml文件,找到区块,加入如下一行:
URIEncoding=”GBK”
完整的应如下:

〈Connector port="80"  maxThreads="150" minSpareThreads="25" maxSpareThreads="75" 

              enableLookups="false" redirectPort="8443" acceptCount="100" 

              debug="0" connectionTimeout="20000" 

               disableUploadTimeout="true" 

               URIEncoding="GBK"/〉


2)重启tomcat,一切OK。

执行如下jsp页页测试是否成功


〈%@ page contentType="text/html;charset=gb2312"%〉〈%@ page import="java.util.*"%〉〈% 

               String q=request.getParameter("q");      q = q == null? "没有值" : q; 

                   %〉〈HTML〉

〈HEAD〉

〈TITLE〉新闻列表显示〈/TITLE〉

〈META http-equiv=Content-Type content="text/html; charset=gb2312"〉

〈META http-equiv=pragma content=no-cache〉

〈body〉

你提交了:〈%=q%〉〈br〉

〈form action="tcnchar.jsp" method="post"〉

 输入中文:〈input type="text" name="q"〉

〈input type="submit" value="确定"〉 〈br〉 

〈a href="tcnchar.jsp?q=中国"〉通过get方式提交〈/a〉 

〈/form〉

〈/BODY〉

〈/HTML〉

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/67736/viewspace-795061/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    20
  • 访问量
    56024