`
chinahnzhou
  • 浏览: 353303 次
  • 性别: 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

分享到:
评论

相关推荐

    ASP.NET中使用一般处理程序ashx作为后台处理实现响应get和post请求示例代码.zip

    本示例代码着重展示了如何使用ASHX来处理GET和POST请求,这在构建RESTful API或实现异步数据通信时非常常见。 首先,让我们了解GET和POST请求的基本概念。GET请求通常用于获取资源,是幂等的,意味着多次发送相同的...

    IIS和tomcat整合神器

    整合IIS和Tomcat,主要是为了让IIS作为前端服务器处理静态资源请求,而将动态Java应用的请求转发给Tomcat处理。这通常通过AJP(Apache JServ Protocol)协议来实现,AJP提供了一种高效的方式让Web服务器与应用服务器...

    iis 整合 tomcat

    - IIS在处理静态资源(如HTML、CSS、JavaScript等)时表现出色,且与Windows操作系统紧密集成,提供良好的管理工具。 - Tomcat是纯Java应用服务器,对Servlet和JSP支持优秀,适合运行Java Web应用。 - 整合两者,...

    IIS与JSP整合TOMCAT

    ISAPI Redirector的工作原理是:当IIS接收到一个请求时,它会检查该请求是否需要由Tomcat处理。如果需要,ISAPI Redirector会将请求转发到配置好的Tomcat实例。这个过程通过配置文件(如worker.properties和isapi_...

    Tomcat+IIS整合配置文件

    这种整合通常用于在同一个服务器上运行静态内容(由IIS处理)和动态内容(由Tomcat处理,如Java应用)。 首先,我们来了解下这两个组件。Apache Tomcat是一款开源的Java应用服务器,主要用于部署和运行Java Web应用...

    IIS、TOMCAT和APACHE整合

    在IT行业中,IIS(Internet Information Services)、Tomcat和Apache都是常见的Web服务器,它们各自有着不同的特性和用途。本文将详细探讨如何实现这三种服务器的整合,以及它们共用同一个端口的可能性。 首先,让...

    iis与tomcat捆起来

    标题中的"IIS与Tomcat捆起来"指的是在Windows操作系统中,将Internet Information Services (IIS) 和Apache Tomcat集成在一起的场景。IIS是微软公司提供的一个强大的Web服务器,而Tomcat则是Apache软件基金会开发的...

    jakarta iis tomcat整合

    通过整合IIS和Tomcat,可以将静态文件的请求直接由IIS处理,动态内容的请求则转发给Tomcat,提高整体系统性能和响应速度。 **整合步骤:** 1. **安装和配置IIS:** 首先确保系统上已经安装了IIS,并且设置好必要...

    win2008 iis tomcat 配置

    为了更好地结合两者的优点,我们可以通过配置IIS作为前端代理服务器,将特定的请求转发到后端的Tomcat服务器上进行处理,然后再由IIS将处理结果返回给客户端。这种方式可以有效提升Web应用的安全性、可维护性和扩展...

    IIS整合多个tomcat

    1. 安装ISAPI Filter和ISAPI Extension:如使用JkMount或mod_jk,它们是Apache的Apache Tomcat连接器,负责在IIS和Tomcat之间传递请求。 2. 配置ISAPI Filter和Extension:设置相应的注册表项,以及在IIS中添加过滤...

    IIS整合tomcat工具

    在进行IIS和Tomcat的整合时,还需要注意以下几点: 1. **性能监控**:整合后,应定期检查两个服务器的性能指标,确保它们的负载均衡,避免某一个服务器过载。 2. **安全设置**:配置时需确保所有通信都是安全的,...

    IIS Tomcat 整合步骤

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

    IIS6和Tomcat6整合

    本文将深入探讨如何在IIS6和Tomcat6整合环境中解决伪静态页面处理的问题。IIS(Internet Information Services)是微软提供的一个强大的Web服务器,而Tomcat则是Apache软件基金会开发的开源Java Servlet容器,两者...

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

    在本文中,我们将探讨如何成功地整合IIS7.0和Tomcat6.0,以实现Windows Server 2008环境下JSP应用的部署。整合这两种服务的主要目的是利用IIS作为前端Web服务器,处理静态内容,而将动态内容如JSP交给Tomcat处理。 ...

    IIS集成tomcat

    在Windows环境中,IIS常被用作前端服务器,负责静态内容的处理,而Tomcat作为后端应用服务器,处理动态Java应用。 **IIS集成Tomcat的原因**: 1. **性能优化**:IIS处理静态内容(如HTML、CSS、JavaScript文件)...

    IIS与TOMCAT集成文档

    本文将详细介绍如何将微软的Internet Information Services(IIS)与Apache Tomcat服务器集成,使得IIS能够处理静态内容,而Tomcat负责处理动态内容,如Java Servlets和JSP。 首先,集成工作前的准备至关重要。确保...

    将Tomcat与IIS整合在一起,共用80端口

    在本案例中,`isapi_redirector2.dll`是一个ISAPI扩展,它作为桥梁,使得IIS能够将对`.jsp`、`.servlet`和`.do`等文件的请求转发给Tomcat处理。 接着,配置文件`jk2.properties`和`workers2.properties`起着关键...

    Tomcat IIS HowTo将Tomcat装入IIS全攻略

    通过这样的集成,不仅可以充分利用IIS在处理静态资源和部分动态内容上的优势,还能利用Tomcat在处理Java应用上的高效性,从而为用户提供更稳定、更快速的服务体验。对于那些既需要支持Java应用又想利用IIS优势的Web...

    IIS整合TOMCAT

    本文档详细介绍如何在Windows 7和Windows XP操作系统下实现IIS(Internet Information Services)与Tomcat的整合。通过整合,可以利用IIS作为前端服务器,而将动态内容如JSP、Servlet等请求转发至后端的Tomcat服务器...

    IIS7+Tomcat7整合配置

    7. **故障排查**:当整合遇到问题时,日志文件(如IIS的日志和Tomcat的`catalina.out`日志)是排查错误的重要工具。此外,了解如何通过工具如`httpcfg.exe`和`netstat`来检查ISAPI扩展的状态和网络连接状态也很重要...

Global site tag (gtag.js) - Google Analytics