博客文章已经迁移:http://www.arm4u.com/read.php?tid=36
J2EE开发中,乱码问题一直都萦绕在程序员的开发过程当中。但是只要我们对各种乱码出现的情况进行分析、总结,问题就能迎刃而解。
解决这类问题,通常需要思考以下问题:
1、在什么情况(如软件环境等)下产生了乱码?
2、数据来源时的编码方式是什么?在当前环境下处理这些数据(如正常显示)需要进行什么样的转码?
3、数据被使用后,需要通过什么编码方式处理才能在转发后避免乱码的发生?
问题一:通过Http请求的URL地址传递参数(Form表单Get()方式提交)
假设,URL中的访问地址为:【http://127.0.0.1:8080/myweb/TestServlet?name=琳达】。“myweb”是我们在服务器端发布的web应用的名称,“TestServlet”是具体的Servlet的名称,问号后的“name”是向服务器端传递的参数,“琳达”是参数“name”所对应的值。
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String uname = request.getParameter("name");
System.out.println(uname);//打印时在控制台出现乱码
// 省略
}
说明:
在Servlet中,通过Servlet提供的HttpServletRequest对象的getParameter()方法来获取客户端请求的内容。通过URL请求的方式(即get()方式)传递参数时,getParameter()方法进行自动URL解码采用的编码方式取决Servlet引擎Tomcat默认用iso8859-1(或者ISO-8859-1)进行编码。
在这里,尤其要注意的是通过Http请求的URL中自带参数进行访问提交到服务器属于Get()传送,就是把数据串在请求的URL后面作为参数。当访问地址该地址后,浏览器会对URL进行URL encode(即对URL进行编码),然后发送给服务器。
代码:
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String uname = request.getParameter("name");
System.out.println(uname);//乱码
if(uname!=null){
//将uname的值通过原来的编码方式(ISO-8859-1)转换成可显示中文的编码(GB2312)
uname=new String(uname.getBytes("ISO-8859-1"),"GB2312");
}else{
uname="游客";
}
System.out.println(uname);//输出中文“琳达”
// 省略
}
问题二:Form表单Post()方式提交
假设,在index.html文件中存在一个Form表单,提交方式为Post()方式。表单中有一个元素<input name="name" value="琳达" type="text" />。通过Form表单提交至服务器端的Servlet来处理业务,其中很重要的一点就是在Servlet中如何准确获取Form表单提交的内容,比如表单中名称为“name”的值。
<form name="Name" action="TestServlet" method="post">
<input name="name" value="琳达" type="text" />
<input type="submit" name="Submit" value="GO">
</form>
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String uname = request.getParameter("name");
System.out.println(uname);//打印时在控制台出现乱码
// 省略
}
说明:
Post()提交方式下,传递参数也需要进行URL encode,编码方式取决于页面中的<meta http-equiv="Content-Type" content="text/html; charset=字符集GBK,utf-8等"/>。这个属性除了说明此网页在浏览器下是通过什么编码进行网页的解释之外,Post()方式下会用此处定义的编码方式进行编码而后提交到服务器。如果请求的页面是JSP,则<%@ page language="java" import="java.util.*" pageEncoding="GBK,utf-8等"%>可进行相应的配置。
在讲解Get()处理方式中,我们用了强制转码的方式解决乱码问题,但是通过Post()提交方式Servlet提供了解决方案:request.SetCharacterEncoding("字符集");方法。
代码:
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//请求的页面设置了GBK方式进行编码,那么通过request来设置获取的对应编码
request.setCharacterEncoding("GBK");
String uname = request.getParameter("name");
System.out.println(uname);//正常的文字
// 省略
}
本文讲解了如何对客户端发送的数据进行正常的解码方式,主要通过Get()和Post()为主的两种提交方式在服务器端对乱码的不同处理来帮助大家理解乱码产生的原因和通俗的解决方式。今后还会做更加详细、深入的探讨,比如Servlet对Get()和Post()为何要做不同处理?是否还有其他方式来解决这个问题?
期待大家的关注,也希望得到宝贵的建议。
分享到:
相关推荐
通过以上方法,基本可以解决servlet和jsp在接收和显示中文时的乱码问题。但在实际开发中,可能还需要根据具体环境和需求进行调整。了解这些知识点,对于Java Web开发者来说是非常必要的,能够提高项目的稳定性和用户...
- **处理中文问题**: 解决在编码和输出过程中可能出现的中文乱码问题。 - **处理表单数据**: 学习如何从HTML表单获取用户输入并进行处理。 - **读取HTTP请求头**: 访问和分析HTTP请求中的头部信息,以满足特定需求。...
根据提供的文件信息,以下是对达内servlet/jsp/jquery培训资料中的关键知识点的详细解析: ### 1. 架构 - **C/S 架构(Client-Server 架构)**: - 客户端和服务端通过TCP/IP协议进行通信。 - 特点包括:需要...
本文将深入探讨Servlet和JSP中的乱码问题及其解决方法。 首先,我们需要理解字符编码的基础知识。在计算机中,字符编码是用来表示文本的方式,常见的有ASCII、GBK、UTF-8等。不同的编码格式可能导致相同字符的二...
jsp 传参 servlet 接收中文乱码问题是一个经常遇到的问题,特别是在使用 Hibernate+Servlet 框架时。当我们在 jsp 页面传参到 servlet 时,中文字符经常会出现乱码问题。这是因为在 HTTP 请求中,默认的编码方式是 ...
知识点:Servlet输出JS乱码问题解析与解决方案 一、Servlet与JS输出背景 Servlet是Java Web应用中的核心组件,主要用于处理客户端发送的HTTP请求,并生成响应。在Web开发中,Servlet经常被用来处理业务逻辑,然后...
### javaweb servlet(jsp)的乱码问题原理及解决 #### HTTP协议的基本理解与乱码问题背景 HTTP协议作为互联网应用中最为广泛使用的通信协议之一,它定义了客户端和服务端之间的交互规则。HTTP请求主要分为GET和...
jsp+servlet+mysql乱码解决方案 jsp+servlet+mysql乱码解决方案是指在使用jsp+servlet+mysql...jsp+servlet+mysql乱码解决方案是一个非常重要和实用的解决方案,对于jsp+servlet+mysql开发的web应用程序非常有价值。
### Servlet及JSP解决中文乱码问题 #### 一、引言 在Web开发中,中文乱码问题一直是困扰开发者的一大难题。特别是在使用Java技术栈(如Servlet与JSP)进行开发时,如果处理不当,很容易出现中文字符显示乱码的情况...
在IT领域,尤其是在Web开发中,遇到中文乱码问题是开发者们常见的挑战之一。尤其是在使用Java Server Pages(JSP)和Servlet进行中文处理时,字符编码的设置不当往往会导致页面显示出现乱码。本文将深入探讨JSP和...
### Servlet过滤器解决乱码问题 在Web应用开发过程中,字符编码问题经常出现,尤其是在处理中文等多字节字符时。如果不正确地设置字符编码,可能会导致页面显示乱码。本文将详细介绍如何通过Servlet过滤器来解决这...
为了有效解决这一问题,关键在于确保所有相关组件均采用同一字符集进行编码和解码操作。 #### 解决方案 ##### 1. 浏览器显示中文时的乱码 当浏览器尝试解析一个包含中文的JSP页面时,如果页面和浏览器的字符集设置...
3. **JSP页面乱码**:如果你的Servlet转发到一个JSP页面,JSP页面也需要设置正确的字符集。在JSP头部添加以下指令: ```jsp <%@ page contentType="text/html;charset=UTF-8" language="java" %> ``` 4. **IDE...
在Java Web开发中,尤其是在处理中文参数时,经常会遇到一个常见问题——**jspservlet取参数乱码**。这一现象通常发生在当用户从客户端提交包含中文字符的表单至服务器端时,服务器端接收到的参数显示为乱码。这种...
#### 一、中文乱码问题概述 在使用Servlet和Tomcat进行Web开发时,经常会遇到中文乱码的问题。这主要是因为客户端(如浏览器)与服务器之间使用的字符编码不一致导致的。 #### 二、乱码原因分析 1. **字符编码不...
jsp乱码问题是jsp开发中常见的问题之一,该问题可能会导致jsp页面显示乱码,影响用户体验。解决jsp乱码问题的方法有多种,以下是一些常见的解决方案: 1. 设置pageEncoding参数 设置pageEncoding参数可以解决jsp...
在Web开发中,尤其是涉及到Java和JSP的项目,中文乱码问题常常困扰着开发者。本文将深入探讨这个问题,提供解决方案。 首先,我们需要理解乱码的根源。乱码通常由于字符编码不一致导致,尤其是在JSP文件中,不同的...
本文将深入探讨如何在Servlet中解决乱码问题,确保数据正确无误地进行编码和解码。 首先,我们需要了解Java Servlet生命周期中的两个关键阶段:`service()`方法和`doGet()`或`doPost()`方法。在这些方法中,我们...
在开发基于JSP和Servlet的Web应用时,中文乱码问题是一个常见的困扰许多开发者的难题。尤其是当JSP页面向Servlet传递中文参数时,如果不正确地处理,很容易出现乱码的情况,影响用户使用体验和数据准确性。下面,我...
本文将深入探讨“JSP乱码”的多种解决方案,并提供实用的解决策略。 1. **理解字符编码的基本概念** - 字符编码是计算机对文字进行存储和处理的标准,常见的有ASCII、GBK、UTF-8等。 - JSP页面默认使用ISO-8859-1...