`
jiangzhenghua
  • 浏览: 602716 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Servlet接收JSP参数乱码问题解决办法

    博客分类:
  • web
阅读更多
环境:
apache-tomcat-6.0.24.zip
jdk1.6.0_16
WindosXP 简体中文版
Netbeans6.8

目标:
解决Servlet接收到JSP传递的参数后乱码问题,乱码发生在Servlet一方。

JSP向Serlvet传递参数有两种方式,一种是GET方式,另一种是POST方式,为了解决乱码问题,必须对这两种方式工作原理有个深刻理解才行。

这里先写一个简单的JSP(工程所有的源代码文件编码均为GBK),里面有两种提交参数的方式:
<%@page contentType="text/html" pageEncoding="GBK"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
     "http://www.w3.org/TR/html4/loose.dtd">

<html>
        <head>
                <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
                <title>JSP Page</title>
        </head>
        <body>
                <h1>页面提交中文测试!</h1>
                <h2>GET方式</h2>
                <a href="/testweb/TestServlet?param=中文">GET方式提交中文测试</a>
                <h2>POST方式</h2>
                <form action="/testweb/TestServlet" method="post">
                        <input type="text" name="param" value="中文"/>
                        <button type="submit" name="提交中文参数测试" value="提交中文参数测试"/>
                </form>
        </body>
</html>

然后定义一个Servlet接收提交的参数。

这里强调一点,在此使用的tomcat没有经过任何的修改与配置。
当页面通过两种方式请求Servlet的时候,参数的编码原本为GBK,在通过HTTP服务将请求发送出去的时候,会将参数重新按照ISO-8859-1编码后发送。因此,不管GET或POST方式,Servlet接收到的参数数据的编码均为ISO-8859-1,必须重新转码为GBK,才能正确显示中文参数。


1、GET方式的请求与接收过程
页面中参数“param=中文”的编码原本为GBK,当用GET方式发送参数的时候,参数值会被Web服务器从GBK转码为ISO-8859-1。
Servlet接收到的GET请求参数的编码当然为ISO-8859-1了,对于中文肯定显示不了,因此要将ISO-8859-1转换为GBK就可以正常显示中文了。
                String param = request.getParameter("param");
                String x = new String(param.getBytes("ISO-8859-1"), "GBK");
                System.out.println("GET方式获取的中文参数值:" + x);


2、POST方式请求与接收过程
页面中参数“param=中文”的编码原本为GBK,当点击页面中提交按钮后,参数会以GBK编码格式发送给Servlet,因此Servlet接收参数的时候必须将请求的编码明确设定为GBK,这样才能正确接收中文。
                request.setCharacterEncoding("GBK");
                String param = request.getParameter("param");
                System.out.println("POST方式获取的中文参数值:" + param);

或者,可以按照get方式来接收post的参数:
                String param = request.getParameter("param");
                String x = new String(param.getBytes("ISO-8859-1"), "GBK");
                System.out.println("GET方式获取的中文参数值:" + x);


疑问:为什么在GET方式下不设定请求的编码格式呢?原因是GET方式使用的编码为ISO-8859-1,用GBK、UTF-8等接收效果都是一样的(都是一堆字母和符号),编不编都一个样,如果指定ISO-8859-1编码是多一翻手续,如果指定了非ISO-8859-1编码,是脑子还不清醒,没搞明白这个原理,因此,GET方式就不要指定请求的编码了。

下面看看Servlet的写法:
package jweb.lavasoft;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class DealPageParamServlet extends HttpServlet {

        protected void doGet(HttpServletRequest request, HttpServletResponse response)
                        throws ServletException, IOException {
                String param = request.getParameter("param");
                String x = new String(param.getBytes("ISO-8859-1"), "GBK");
                System.out.println("GET方式获取的中文参数值:" + x);
        }

        protected void doPost(HttpServletRequest request, HttpServletResponse response)
                        throws ServletException, IOException {
                request.setCharacterEncoding("GBK");
                String param = request.getParameter("param");
                System.out.println("POST方式获取的中文参数值:" + param);
        }
}

其实,只要搞明白了编码过程,遇到乱码问题就能从容应对了。
常常见到有人遇到乱码了,就开始修改Tocmat的server.xml的配置文件,或者添加过滤器等等,糊里糊涂搞,大多数情况问题都能解决掉,其实也仅仅是个瞎猫逮住个死耗子。
分享到:
评论

相关推荐

    jsp传参 servlet接收中文乱码问题的解决方法.docx

    jsp 传参 servlet 接收中文乱码问题的解决方法 jsp 传参 servlet 接收中文乱码问题是一个经常遇到的问题,特别是在使用 Hibernate+Servlet 框架时。当我们在 jsp 页面传参到 servlet 时,中文字符经常会出现乱码...

    servlet与jsp中文乱码处理

    通过以上方法,基本可以解决servlet和jsp在接收和显示中文时的乱码问题。但在实际开发中,可能还需要根据具体环境和需求进行调整。了解这些知识点,对于Java Web开发者来说是非常必要的,能够提高项目的稳定性和用户...

    Servlet及jsp解决中文乱码问题

    ### Servlet及JSP解决中文乱码问题 #### 一、引言 在Web开发中,中文乱码问题一直是困扰开发者的一大难题。特别是在使用Java技术栈(如Servlet与JSP)进行开发时,如果处理不当,很容易出现中文字符显示乱码的情况...

    解决jsp+servlet开发中的中文乱码问题

    ### 解决JSP+Servlet开发中的中文乱码问题 #### 概述 在基于JSP(Java Server Pages)和Servlet技术的Java Web应用开发过程中,中文乱码问题一直是困扰开发者的一大难题。由于Java Web应用程序涉及多个组件之间的...

    jsp传参 servlet接收中文乱码问题的解决方法

    如果上述方法依然无法解决问题,可能需要考虑在获取请求参数后进行二次编码转换。例如,将获取到的参数再通过特定编码转换为正确的UTF-8字符串。这通常是一种备选方案,不推荐作为主要的处理方式: ```java String ...

    javaweb servlet(jsp)的乱码问题原理及解决

    ### javaweb servlet(jsp)的乱码问题原理及解决 #### HTTP协议的基本理解与乱码问题背景 HTTP协议作为互联网应用中最为广泛使用的通信协议之一,它定义了客户端和服务端之间的交互规则。HTTP请求主要分为GET和...

    Jsp和Servlet中文乱码问题

    在IT领域,尤其是在Web开发中,遇到中文乱码问题是开发者们常见的挑战之一。尤其是在使用Java Server Pages(JSP)和...通过上述方法,可以有效地解决JSP和Servlet中的中文乱码问题,提高Web应用的用户体验和稳定性。

    Servlet中的中文乱码问题

    当客户端(浏览器)发送包含中文字符的请求(如GET参数或POST数据)到Servlet时,如果Servlet没有正确设置接收的字符编码,就会出现乱码。解决方法是在`doGet`或`doPost`方法中,使用`request.setCharacterEncoding...

    servlet中文乱码问题

    通过修改Tomcat配置文件中的`URIEncoding`属性以及在Servlet中通过`response.setContentType()`和`request.setCharacterEncoding()`方法来设置字符编码,可以有效解决中文乱码问题。此外,还可以通过字符集转换的...

    servlet过滤器解决乱码问题

    ### Servlet过滤器解决乱码问题 在Web应用开发过程中,字符编码问题经常出现,尤其是在处理中文等多字节字符时。如果不正确地设置字符编码,可能会导致页面显示乱码。本文将详细介绍如何通过Servlet过滤器来解决这...

    JSP页面中文乱码几个解决办法

    总结来说,解决JSP页面中文乱码问题的关键在于保持字符编码的一致性,从编辑器保存文件的编码、JSP页面的编码声明、Servlet的响应编码、POST请求的参数编码,到服务器处理GET请求的编码,都需要进行适配和统一。...

    JSP乱码 N种解决方案

    本文将深入探讨“JSP乱码”的多种解决方案,并提供实用的解决策略。 1. **理解字符编码的基本概念** - 字符编码是计算机对文字进行存储和处理的标准,常见的有ASCII、GBK、UTF-8等。 - JSP页面默认使用ISO-8859-1...

    servlet输出JS乱码问题

    知识点:Servlet输出JS乱码问题解析与解决方案 一、Servlet与JS输出背景 Servlet是Java Web应用中的核心组件,主要用于处理客户端发送的HTTP请求,并生成响应。在Web开发中,Servlet经常被用来处理业务逻辑,然后...

    解决中文乱码问题

    对于Servlet接收Form/Request传递的参数时显示为乱码的问题,我们可以通过在用到request方法的前面加上:request.setCharacterEncoding("GBK");来解决。 在数据库存取的时候产生乱码的问题,我们可以通过选择UTF-8...

    利用过滤器解决JavaWeb(JSP)的乱码问题

    总之,解决JavaWeb中的乱码问题需要从多个层面进行考虑:设置过滤器统一请求和响应的编码,确保JSP页面的编码正确,以及在处理文件时注意文件内容的编码。通过这些方式,我们可以有效防止和解决乱码问题,提高应用...

    web项目乱码问题 jsp乱码问题解决

    解决JSP页面显示中文乱码的问题,关键在于确保所有环节使用相同的字符编码。可以按照以下步骤操作: 1. 使用统一的文件编码:确保JSP文件以UTF-8或其他支持中文的编码格式存储,并且IDE(如Eclipse)配置为使用该...

    jsp页面传值中文乱码问题处理.docx

    jsp页面传值中文乱码问题处理 在 JSP 页面中传值时,中文字符可能会出现乱码问题,这...JSP 页面传值中文乱码问题可以通过修改编码方式、设置输出编码、接收参数编码、Get 提交编码和数据库连接参数编码等方式来解决。

    JSP中文乱码问题综述,中文乱码解决大全

    【JSP中文乱码问题综述】 在JSP开发中,中文乱码是一个常见的问题,主要是由于编码不一致和处理不当导致的。Java语言和JSP文件基于Unicode,但保存和处理时可能会采用不同的编码,这就会引发乱码。本文将深入探讨...

Global site tag (gtag.js) - Google Analytics