`
freewxy
  • 浏览: 342811 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

jsp与servlet传递产生乱码的根源及解决方案

    博客分类:
  • J2EE
阅读更多

一、基本概念 

1Jsp页面指令也叫做page指令。Page指令是在<%...%>l里面。以下属性在page指令中:

  1pageEncoding: 指定JSP页面的编码方式,默认情况下为ISO-8859-1,在页面上显示中文时,必须修改为gbk或者2312.

  2)contentType: 设置MIME类型和字符集,格式为<%@page contentType="MIME,charset=字符集"%>。默认情况下,MIME类型为text/html,字符集为ISO-8859-1,如需要显示中文,需要设置为gbk或者gb2312

  (什么是MIME类型?  描述被传输文档的类型的一种方法。因其格式借用了多用途网际邮件扩展(MIME)而得名。由以斜杠分隔的一个主类型和一个副类型组成。例如: text/html , image/gif , application/octet-stream 。在HTTP中,MIME类型包含在 Content-Type (header)中被传输。)   

2、servlet通过request对象获取客户端的请求信息。

   jspservlet传递参数有两种方式,GETPOSTjsp通过response内部对象对用户进行相应,在servlet中也是使用response对象(doGet方法或者doPost方法中的第二个参数)完成对用户的响应。设置响应内容的MIME类型:

   response.setContentType("text/html;charset=gb2312");

 

   二、问题Servlet接收JSP传递的参数后乱码问题。

解析:

  jspservlet传递参数有两种方式,GETPOST。而这两种传递机制又有所不同(这是产生乱码的根源,想从根本上解决问题就要深刻理解这点)

  当用GET方式发送参数的时候,Tomcat会以get的缺省编码方式iso8859-1对汉字进行编码,编码后追加到url,web浏览器先将参数转码为ISO-8859-1格式,然后再发送出去,因此servlet接收到得get请求的参数是ISO-8859-1格式的,要想得到中文格式,必须对参数进行转码

当用POST方式发送参数的时候,参数会按照页面的编码方式发送参数出去,servlet只要与jsp页面编码方式一致就可以得到相应的文字格式了。 post提交时,如果没有设置提交的编码格式,则会以iso8859-1(Tomcat默认编码格式)方式进行提交,如果接受的jsp或者servlet却以utf-8或者gbk或者gb2312的方式接受则会导致乱码。

 

三、解决方案及代码说明

EncodingTest.jsp:

  

 

<%@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=gbk"> 
                <title>中文传递</title> 
        </head> 
        <body> 
                <h1>页面提交中文测试!</h1> 
                <h2>GET方式</h2> 
                <a href="servlet?param=jsp-->中文">GET方式提交中文测试</a> 
                <h2>POST方式</h2> 
                <form action="servlet" method="post"> 
                        <input type="text" name="param" value="jsp-->中文"/> 
                        <button type="submit" name="提交中文参数测试" value="提交中文参数测试"/> 
                </form> 
        </body> 
</html>

 

 

EncodingServlet:

 

public class servlet extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		 String param = request.getParameter("param"); 
		  System.out.println("GET方式获取的中文参数值(转码前):" + 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);
	}

}

 测试结果:

    GET方式获取的中文参数值(转码前):jsp-->????
    GET方式获取的中文参数值:jsp-->中文
    POST方式获取的中文参数值:jsp-->中文

 

搞清楚问题的本质,从根源处解决问题就不会像一个救火队员一样在自己的项目开发中到处救火了(解决乱码问题)

分享到:
评论

相关推荐

    jsp+servlet+mysql乱码解决的这天

    jsp+servlet+mysql乱码解决方案是指在使用jsp+servlet+mysql开发web应用程序时,如何解决中文乱码问题的解决方案。该方案通过设置每个页面的编码格式为utf-8,控制器servlet中的请求编码格式为utf-8,数据库连接url...

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

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

    JSP乱码 N种解决方案

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

    servlet与jsp中文乱码处理

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

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

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

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

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

    Jsp和Servlet中文乱码问题

    本文将深入探讨JSP和Servlet中文乱码问题的根源、解决方案以及预防策略。 ### JSP和Servlet中的中文乱码问题根源 中文乱码问题通常源于字符编码不一致或配置错误。在Web应用中,数据流经多个环节,包括客户端...

    JSP乱码解决方案

    本文将深入探讨JSP乱码的原因及其解决方案,帮助开发者有效地处理这类问题。 ### 1. JSP乱码的成因 - **字符集设置不一致**:JSP文件、HTML页面、HTTP头、Servlet输出以及数据库存储等环节的字符集设置不一致,...

    Java Web开发(JSP、Servlet)乱码终极解决方案.txt

    通过上述步骤,我们可以在Java Web开发中(使用JSP和Servlet)彻底解决乱码问题,确保数据从输入到输出的整个过程中都使用一致的UTF-8编码。这不仅提高了数据处理的准确性,也提升了用户体验,特别是在涉及多语言...

    JSP中文乱码的产生原因及解决方案

    主要的乱码问题分为两类:一是Java和JSP源文件在编译时产生的乱码,二是Java程序与其他媒介交互时产生的乱码。 **1. 源文件编译乱码** Java和JSP源文件中可能存在中文字符。由于源文件通常以特定的字符集(如GBK、...

    jsp中文乱码的解决方案

    文档《JSP各种乱码的处理(一).doc》和《JSP各种乱码的处理(二).doc》中可能详细列举了各种JSP乱码问题的实例及解决方法,包括但不限于文件上传、读取流、数据库操作等方面,建议参考学习,以便更全面地理解并解决...

    JSP解决乱码与数据库乱码解决

    ### JSP解决乱码与数据库乱码解决方案 #### 一、引言 在Web开发中,尤其是使用Java Server Pages (JSP)技术时,字符编码问题是开发者常常遇到的一个难题。字符编码错误会导致页面显示乱码,严重影响用户体验。本文...

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

    尤其是当JSP页面向Servlet传递中文参数时,如果不正确地处理,很容易出现乱码的情况,影响用户使用体验和数据准确性。下面,我将详细介绍如何解决JSP向Servlet传参中文乱码的问题。 1. 确保项目文件编码统一 首先,...

    JSP页面传参出现中文乱码的解决方案

    在开发Java Web应用程序时,尤其是使用JSP技术时,经常遇到的一个问题是中文字符在传递过程中出现乱码。这个问题主要是由于字符编码不一致导致的。在本文中,我们将深入探讨JSP页面传参出现中文乱码的原因,并提供...

    jsp乱码解决方案 本方案解决了jsp常见的乱码问题

    在深入探讨解决方案之前,首先需要了解乱码产生的原因。通常来说,乱码是由于客户端和服务器端之间的字符集不一致导致的。具体来说: 1. **客户端编码与服务器端编码不一致**:当用户提交表单或发送请求时,如果...

    servlet输出JS乱码问题

    一、Servlet与JS输出背景 Servlet是Java Web应用中的核心组件,主要用于处理客户端发送的HTTP请求,并生成响应。在Web开发中,Servlet经常被用来处理业务逻辑,然后通过重定向或包含的方式将结果呈现给用户。在MVC...

    对jsp两个页面间传递变量出现变量乱码的解决

    将`pageEncoding="ISO-8859-1"`改为`pageEncoding="GBK"`,可以确保该JSP文件内部的编码方式与乱码问题相匹配。然而,这种方法仅适用于当前JSP页面,如果其他页面也有类似问题,还需要逐个修改。 最后,我们来看...

    Servlet及jsp解决中文乱码问题

    本文将详细介绍如何在Servlet与JSP中彻底解决中文乱码问题,并给出具体的解决方案。 #### 二、中文乱码的原因分析 中文乱码主要由以下几个原因引起: 1. **服务器端编码设置不正确**:如果服务器端的字符集设置与...

    教学视频--JSP中URL传递中文乱码问题的解决演示.rar

    本教学视频将详细讲解如何解决JSP中URL传递中文乱码的问题。 首先,我们要理解为何会出现乱码。HTTP协议的URL部分是基于ASCII编码的,而非Unicode。这意味着非ASCII字符在URL中需要进行编码才能正确传输。默认情况...

    JSP&Servlet学习笔记.pdf

    本书是作者多年来教学实践经验的总结,汇集了教学过程中学生在学习JSP & Servlet时遇到的概念、操作、应用或认证考试等问题及解决方案。  本书针对Servlet 3.0的新功能全面改版,无论是章节架构与范例程序代码,都...

Global site tag (gtag.js) - Google Analytics