`
chinahnzhou
  • 浏览: 347343 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

iis Tomcat在处理GET和POST请求时产生的乱码问题

    博客分类:
  • java
阅读更多

有个朋友写JSP程序时,在Servlet中取请求参数时出现了乱码,当然,这种乱码问题再简单不过了。由于在JSP中使用了GBK作用页面的编码,那么提交的中文信息自然也会被按着GBK进行编码,为%xx格式的GBK编码。 
    要解决这个问题可以说是方法多多。最简单的就是使用request.setCharacterEncoding方法设置编码格式,如下面的代码所示: 
request.setCharacterEncoding("GBK"); 
    在设置完编码格式之后,就可以直接通过request.getParameter方法来获得请求参数中的中文信息了。当然,为了方便,还可以在过滤器中加入上面的语句,这样所有的Servlet都可以直接使用request.getParameter方法来获得请求参数中的中文信息了。 除了这两种方法,还可以不使用request.setCharacterEncoding("GBK"),而使用下面的语言来转换编码: 
String name = new String(request.getParameter("name").getBytes("ISO-8859-1"), "GBK"); 
    但为了更快解决这个问题,我就直接告诉这位朋友使用了setCharacterEncoding方法来设置编码。但是说来奇怪,还是出现乱码,没有任何解决问题的迹象。 最郁闷的事就是使用了自己认为100%能解决问题的方法,而这种方法却一点都没起作用。 
    最后又让朋友试了最后一种方法,说来奇怪,竟然好使了。当然,这也没什么可奇怪的,本来就应该好使,但奇就奇在setCharacterEncoding方法并没有去掉,也就是说,同时使用了下面两条语句,竟然得到了正常的中文请求参数值: 
    按着常理来说,这是不可能的,既然使用了setCharacterEncoding方法设置成了GBK,再使用new String(request.getParameter("name").getBytes("ISO-8859-1"), "GBK")来转换,得到的应该是?????,不可能是正常的中文,只有将setCharacterEncoding方法去了,以ISO-8859-1格式保存的字符串才可以用ISO-8859-1格式还原,再用GBK重新保存成Java字符串(这一步实际上就是GBK转Unicode)。 
    但经过仔细思考后,决定看下JSP代码是如何写的。不看不知道,一看吓一跳,原来<form>在提交时使用的是GET,而未用POST,这当然没什么了不起的,用什么都可以,但对编码就有问题了。自从Tomcat5.x开始,GET和POST方法提交的信息,tomcat采用了不同的方式来处理编码,对于POST请求,Tomcat会仍然使用request.setCharacterEncoding方法所设置的编码来处理,如果未设置,则使用默认的iso-8859-1编码。而GET请求则不同,Tomcat对于GET请求并不会考虑使用request.setCharacterEncoding方法设置的编码,而会永远使用iso-8859-1编码,而这位朋友使用的正好是GET请求,因此,tomcat将会使用iso-8859-1将提交的字节转换成字符串。 
解决的方法有三个: 
1.  将GET请求改成POST请求,然后就可以使用request.setCharacterEncoding方法设置编码,并使用request.getParameter方法直接获得中文请求参数了。 
2.  不用改GET请求,在Servlet中使用如下的代码来得到中文请求参数。 
String name = new String(request.getParameter("name").getBytes("ISO-8859-1"), "GBK"); 
3.为了保证get数据采用UTF8编码,在server.xml中进行了如下设置 
<Connector port="8080" maxThreads="150" minSpareThreads="25" 
maxSpareThreads="75" enableLookups="false" redirectPort="8443" 
acceptCount="100" debug="99" connectionTimeout="20000" 
disableUploadTimeout="true" URIEncoding="UTF-8"/> 
这里指定了get时候的数据编码。但是,当使用IIS作为webserver转发servlet/jsp请求给Tomcat时候,这个设置却失效了。其实原因很简单:IIS是通过AJP协议,把请求转发到Tomcat监听的8009端口上的,所以这里针对8080的设置自然就无效了。正确的方法是进行下面的设置: 
<Connector port="8009" enableLookups="false" redirectPort="8443" 
debug="0" protocol="AJP/1.3" URIEncoding="UTF-8"/> 
综上所述:通常在处理中文乱码问题时我们要编写自己的过滤器,不管是get请求还是post请求一律都经过此过滤器,此过滤器的作用是设置request.setCharacterEncoding()同时设置server.xml的URIEncoding属性。 

 

http://coolyongzi.iteye.com/blog/269548

分享到:
评论

相关推荐

    IIS Tomcat 整合步骤

    手工配置 IIS Tomcat 整合。 压缩文件中有操作过程 readme, jk2连接器, worker.properties, 需要导入的注册表文件模板。 iis tomcat 傻瓜配置工具可参见:、 http://download.csdn.net/source/928779

    iis 整合 tomcat

    iis tomcat 整合 非常全面 iis tomcat 整合 非常全面

    IIS、TOMCAT和APACHE整合

    IIS、TOMCAT和APACHE三者之间的整合,共用同一个端口

    Tomcat+IIS整合配置文件

    非常好的TOMCAT+IIS整合方案,这个压缩包里包含了各种配置文件,有需要的兄弟们可以好好看看和测试一下呀。

    Windows7系统IIS7+Tomcat集成

    通过 iis 和 tomcat 的集成可以让 tomcat 处理 jsp,iis 处理 asp 和 html 静态页面。 一、 安装 tomcat 我所用的 Tomcat 是最新版的 7.0.27 直接安装版,安装的位置是 D:\Program Files\Tomcat7, 记住这个路径会多...

    Tomcat和IIS集成

    isapi_redirect isapi_redirector tomcat和iis集成 tomcat虚拟主机 使用两种方法集成IIS和tomcat doc文档

    iis与tomcat捆起来

    iis与tomcat捆起来

    IIS与TOMCAT集成文档

    IIS与TOMCAT集成文档 IIS与TOMCAT集成文档 IIS与TOMCAT集成文档

    IIS7.0和tomcat6.0整合成功案例笔记(有图)

    一、整合环境:Windows Service 2008、JDK1.60、IIS7.0 和tomcat6.0 二、使用技术:IIS7.0和TOMCAT6.0的默认端口不用改变,使用原有的80和8080即可,采用isapi_redirect-1.2.26.dll文件作为iis和tomcat的接口,使用...

    Tomcat IIS HowTo将Tomcat装入IIS全攻略

    Tomcat IIS HowTo将Tomcat装入IIS全攻略

    IIS6和Tomcat的整合yyif

    IIS6和Tomcat的整合

    IIS整合tomcat工具

    自动整合IIS和tomcat 共用80端口的问题。用isapi_redirect.dll 手工配置很容易出错,改工具直接安装 ,选择需要整合TOMCAT的站点 就直接好用了!!!

    IIS与JSP整合TOMCAT

    IIS与JSP整合TOMCAT,isapi_redirect下载

    IIS8集成Tomcat

    下载好ISAPI文件存放在C:\tomcat_iis_connector目录下 修改conf\workers.properties.minimal,增加一行tomcat的位置。 。。。。。 选择到你的站点。单击右键。选择“属性(Properties)” “HTTP头(HTTPHeaders)...

    IIS与Tomcat整合

    IIS和tomcat整合,适合从asp网站向jsp过渡,还想保留asp一些功能

    tomcat 和iis 80端口共用

    tomcat 和iis 80端口共用 tomcat iis 80 8080

    Tomcat和IIS的配合

    Windows平台下最常用的Web服务器无疑是IIS(包括PWS),对于IIS,Tomcat也提供了配合 工作的方法,使用这种方法,可以为本来不具有Java Servlet和JSP功能的IIS增加处理JSP和Java

    iis7.5与tomcat7整合

    详细描述了iis7.5与tomcat7的整合步奏和细节方法,url请求iis,通过jaraka拦截跳转tomcat

    win2008 iis tomcat 配置

    win200864位系统下IIS与tomcat的联动,日文资料。z中文资料有了的话一起提交

    tomcat和IIS80端口冲突解决方法

    tomcat和IIS80端口冲突解决方法,如果有的需要下载的可以用

Global site tag (gtag.js) - Google Analytics