Tomcat 5环境下的jsp中文乱码问题(分别针对POST、GET方法)

本文详细介绍了在Tomcat5环境下解决中文乱码问题的方法,包括POST和GET请求的处理技巧,通过设置Filter和修改server.xml文件实现全面的字符编码控制。

请教:Tomcat 5环境下的jsp中文乱码问题(分别针对POST、GET方法)

楼主ETCN(天外来客) 2005-01-13 15:57:36 在 Java / 应用服务器 提问

我知道这个问题肯定已经问过很多次了,不过我搜索了一下,虽然帖子不少,看完以后还有些疑问想请教一下。  
   
  1、从我看过的一些相关文章来看,对于不同的jsp平台,乱码的解决方法并不相同,往往在Tomcat上挺好的办法,拿到其他平台反而更乱了。似乎确实没有一种一劳永逸的办法解决所有平台上的中文乱码问题是吗?如果有,应该怎么做呢?  
   
  2、如果仅针对Tomcat   5平台,我看到过有文章介绍的方法是通过设置一个   filter   来解决POST方法的编码问题,而通过在   server.xml   里的   Connector   里加入   URIEncoding="GBK"   来解决GET方法的编码问题。  
   
  设置   filter   比较简单,不过在修改   server.xml   文件的时候遇到了一些问题:  
  我的机器是将Tomcat与IIS整合到了一起,也就是可以通过   localhost/jsp/   来访问   tomcat目录/webapps/jsp目录下的内容。在   Connector   里加入   URIEncoding="GBK"   的结果是只针对通过     http://localhost:8080/   方法访问的内容有效,毕竟   Connector   里指定的port是   8080   。如果我将port改成80,那么整个tomcat都不能启动了。  
   
  所以上述方法来解决GET乱码似乎不成功,不知道我应该怎么做?  
   
  3、因为我修改   Connector   不能成功,所以想通过修改   filter   来解决问题,我想在其中加一个判断,如果是POST方法,就调用   setCharacterEncoding(encoding)   来处理,如果是GET方法,则通过类似   String   name   =   new   String((request.getParameter("name")).getBytes("ISO-8859-1"),"GBK")   的方法来处理。可是我该如何将整个   QueryString   处理完的结果存回到   request   中以便继续传递呢?能否请各位高手给提供一个大概思路?  
   
  4、如果上面方法再不成功,那么似乎只能将处理编码的过程作成一个bean,然后每个jsp文件通过调用该bean来处理乱码,是这样吗?  
   
   
  以上是小弟的一个在Tomcat环境下处理中文乱码的思路,不知道各位都是用什么方法解决这类问题的呢?请帮忙提示一下。谢谢!  
  问题点数:20、回复次数:4Top

1 楼ETCN(天外来客)回复于 2005-01-13 16:02:29 得分 0

下面转一下我在第2个问题里提到的文章:  
   
  tomcat5中文问题解决之道(原创)  
  mineral  
  http://www.jdon.com  
  May   9,   2004   9:20   PM  
   
   
  在tomcat5中发现了以前处理tomcat4的方法不能适用于处理直接通过url提交的请求,上网找资料终于发现了最完美的解决办法,不用每个地方都 转换了,而且无论get,和post都正常。写了个文档,贴出来希望跟我有同样问题的人不再像我一样痛苦一次:-)  
   
  上传文件有问题,只好直接贴了,难看点:-)  
   
  -------------------  
  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安装目录%/   webapps/servlets-examples/WEB-INF/classes/filters/SetCharacterEncodingFilter.class 文件拷到你的WEB-INF/classes目录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>  
  </HEAD>  
   
  <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>  
   
  测试结果如果你输入文本框或者点超链都会显示:你提交了”中国”,说明成功!!!!!  
   
  特别感谢下面这篇帖子,帮我解决了中文问题.最后祝大家好运!!!  
  参考网址:  
   
  http://www.javaworld.com.tw/jute/post/view?bid=9&id=44042&sty=1&tpg=1&age=0

【来源】
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值