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

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

阅读更多
有个朋友写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属性。
-
分享到:
评论
5 楼 hq_love 2008-11-24  
谢谢 ,学习了。呵呵
4 楼 xixix2004 2008-11-19  
好的经验,谢谢分享
3 楼 lel08090 2008-11-19  
后台servlet使用前台传递的参数需要使用encodeURI()转码另外,项目从数据库到页面显示最好使用同一的编码
2 楼 toeo 2008-11-18  
这个是由于IE发送的时候没有进行编码转换问题.

使用js.进行字符转换

encodeURI('中文');

后台使用

URLDecoder进行编码转换.
1 楼 daniel2009 2008-11-18  
很好的分析,学习了,感谢楼主

相关推荐

    Tomcat中Get和Post出现乱码的解决办法

    在 Tomcat 中,Get 和 Post 方法都可能出现乱码问题,这主要是由于编码问题引起的。在本文中,我们将详细介绍 Tomcat 中 Get 和 Post 方法出现乱码的解决办法。 一、乱码问题的出现 在 JSP 程序中,当我们使用 GET...

    解决post get 请求乱码问题

    解决 POST GET 请求乱码问题 在 Web 开发中,POST 和 GET 请求可能会出现乱码...解决 POST 和 GET 请求乱码问题需要对服务器和应用程序进行配置和编码处理。在实际开发中,我们需要根据具体情况选择合适的解决方法。

    SpringMVC解决GET请求时中文乱码的问题.rar

    浏览器在构建这个URL时,会按照默认的字符集(非UTF-8)对中文参数进行编码,而Spring MVC在处理请求时,默认可能并未正确设置解码方式。 2. 字符编码:HTTP协议允许服务器和客户端之间约定字符编码,但如果没有...

    完美解决Get和Post请求中文乱码的问题

    在处理POST请求时,确保调用`setCharacterEncoding`方法;处理GET请求时,需要手动对URL参数进行解码。同时,配置服务器的编码设置也是避免乱码的有效手段。通过这些方法,可以有效地解决Web开发中的中文乱码问题。

    解决Tomcat修改get提交请求乱码问题

    本文主要讨论如何解决Tomcat在处理GET提交请求时出现的乱码问题。 首先,我们要明白GET请求与POST请求的区别。GET请求通常用于获取资源,而POST请求则用于向服务器发送数据。对于POST请求,Spring框架提供了`...

    03.SpringMVC中如何解决POST请求中文乱码问题GET的又如何处理呢.zip

    在Spring MVC框架中,处理POST和GET请求时可能会遇到中文乱码的问题,这通常是由于字符编码设置不正确导致的。本文将详细阐述如何解决这些问题。 首先,我们需要理解HTTP请求中的编码原理。HTTP协议本身并不规定...

    Tomcat PostGet 中文編碼處理方法

    在Web应用开发过程中,中文字符编码问题一直是个常见的技术难题,尤其是在处理HTTP请求中的POST和GET方法时。对于使用Apache Tomcat服务器的应用程序来说,确保中文字符正确编码是提升用户体验、避免数据损坏的关键...

    如何解决Tomcat下中文乱码问题?

    在IT行业中,尤其是在Java Web开发领域,Tomcat服务器在处理中文字符时经常遇到乱码问题。这主要涉及两个方面:JSP页面显示中文乱码和表单提交乱码。为了解决这些问题,我们需要理解字符编码的基本原理,并采取相应...

    java乱码综合解决方法(不区分get和post)

    Java中的乱码问题是一个常见的编程挑战,特别是在处理网络请求(如GET和POST)时。本文将深入探讨如何解决这些问题,并且不局限于特定的请求类型。首先,我们需要理解字符编码的基本概念,然后分析Java中可能出现...

    Tomcat和weblogic中文乱码问题解决方案

    Tomcat和WebLogic中文乱码问题解决方案 在 Java Web 开发中,中文乱码问题一直是困扰开发者的主要问题之一。 Tomcat 和 WebLogic 是两个常用的 web 服务器,都是支持 Servlet 和 JSP 的。然而,在使用这些服务器时...

    解决tomcat中文乱码问题.doc

    通过上述步骤,无论用户提交的数据是以GET还是POST方式发送的,都能正确地以GBK编码进行解码,从而避免乱码问题。 #### 三、额外处理 对于某些特殊情况,如直接从数据库中读取中文数据时也可能遇到乱码问题。此时...

    解决tomcat中文乱码问题

    ### 解决Tomcat中文乱码问题的详尽指南 ...以上步骤和技巧覆盖了在Tomcat环境下处理中文乱码的主要场景,遵循这些建议可以有效避免或解决中文乱码问题,确保中文字符在Web应用中的正确展示和处理。

    J2EE以GET和POST方式提交表单的乱码解决(受教了)

    然而,在处理中文字符时,可能会遇到乱码问题。这个问题通常涉及到字符编码的设置和处理,尤其是对于从表单提交的数据。下面我们将深入探讨如何解决J2EE环境下GET和POST方式提交表单时出现的乱码问题。 首先,我们...

    Struts2中文乱码问题最终解决方案

    然而,中文乱码问题一直是困扰开发者的一个常见问题,特别是在处理POST和GET请求时。以下是对标题和描述中涉及知识点的详细解释: 1. **StrutsPrepareAndExecuteFilter**: Struts2框架中的`...

    tomcat request.getParameter 乱码

    通过对Tomcat服务器的适当配置,可以有效地解决`request.getParameter`方法在处理中文参数时出现的乱码问题。具体而言,通过在`server.xml`文件中修改`Connector`元素的相关属性,以及在程序中设置合适的字符编码,...

    java开发乱码问题处理大全

    在Java开发中,乱码问题是开发者常遇到的挑战之一,尤其是在处理多语言、跨平台应用时更为显著。本文将深入探讨Java开发中常见的乱码问题及其解决策略,帮助你迅速掌握处理乱码的技巧,提升开发效率。 #### 一、...

    JAVA过滤器filter request.setCharacterEncoding仅对POST提交起作用,对GET提交还是会出现乱码问题

    在Java Web开发中,字符编码问题常常困扰着开发者,尤其是当涉及到HTTP请求的处理时。标题和描述中提到的问题——"JAVA过滤器filter request.setCharacterEncoding仅对POST提交起作用,对GET提交还是会出现乱码问题...

    Tomcat中文乱码处理方法.docx

    Tomcat中文乱码处理方法是指在使用Tomcat服务器时,遇到中文乱码问题的解决方法。中文乱码是指在网页中显示的中文字符被错误地显示为乱码,影响用户体验和网站的可读性。 第一种解决方法是通过contentType、...

    乱码问题的解决

    在本文中,我们将详细介绍乱码问题的原因、类型和解决方法。 一、编码不一致的原因 编码不一致是乱码问题的主要原因。编码不一致可能出现在多个方面: * 页面编码:jsp 默认 iso8859-1 * 服务器编码:tomcat 默认...

Global site tag (gtag.js) - Google Analytics