编码问题:
在介绍编码问题前,先介绍一下java平台(JVM)上的编码转化情况。首先要说明的一点,在JVM中,即java平台 上,运行的程序一定都是Unicode编码方式的。对于代码中的字符串常量,根据代码页的设置,转化为Unicode编码。对于输入,在输入进程序中 JVM已经把输入的内容根据原先输入的编码方式转化为Unicode。若未指明,则是用系统默认的编码方式去转化为Unicode。对于输出,则是把 Unicode编码按指定的编码方式输出,未指明则按系统默认编码输出。
编码问题出现的位置:
1、web浏览器发送请求 对于此请求中的参数要进行编码。区分get方式和post方式。
Get方式:由于get方式下的参数是放置于消息头中,而消息头是由浏览器根据自身特性去进行编码的,一般是UTF-8,但也有的浏览器不是。
Post方式:根据HTML页面Content-Type属性,如:Content-Type设置为“text/html;charset=”gb2312””则浏览器按gb2312去编码。
2、服务器接收到请求,这里假设服务器为Tomcat且运行的是servlet(jsp——jsp运行时仍编译成servlet,所以这里直接用servlet来表示)。
对 于Post方式的请求,servlet默认会用ISO-8859-1将消息体中的参数转化为Unicode。如果是汉字,这是很不合理的,因为ISO- 8859-1只有一个字节,是不支持汉字。所以在对HttpServletRequest对象利用getParameter()方法获取参数值时,必须先 要用setCharacterEncoding()方法设置其解码方式,如req.setCharacterEncoding("UTF-8"),这样调 用的getParameter()方法会按UTF-8的方式把参数转化为Unicode。
对于Get方式的请求,首先要说明的,get方式 下的请求,上述用setCharacterEncoding()方法设置解码方式是行不通的。其原因在于:get方式的请求参数放在消息头中,而消息头是 在web容器的任何servlet接受前就已经先被web容器解释了,因为只有这样web容器才可以知道去具体调用哪个servlet。至于web容器如 何解释消息的,serlvet
标准中并没用明确规定,所以有的web容器按ISO-8859-1去解释为Unicode,有的则是按系统默认编码。
所以对于get方式下用setCharacterEncoding()方法设置解码方式是无用的。而相反,对于post方式,消息体一般是在第一次调用HttpServletRequest对象的getParameter()方法时,才开始实际处理。
所 以由于get方式解码的未知性,一般所带参数都是不带中文的,若要带中文,则用post方式比较方便。但若要追求高效,非要用get方式时,则可以使用 String类中getBytes()方法转为字节数,再用String(byte[],”编码”)构造函数去获取字符串。
3、服务器输出响应
服 务器输出响应比较简单。由于servlet程序中所有字符都是统一码Unicode,所以输出时,按照response对象设定的Content- type中的字符集,response.setCharacterEncoding("UTF-8"),servlet会自动根据其字符集将 Unicode编码转为指定字符集输出。仍要说明的一定是,对于servlet程序中的常量字符串,则是按照代码页将其转化为Unicode。
编码问题的关键:
需要把接收的数据转化为Unicode编码,再由java处理;输出的数据由Unicode编码转化为指定编码后输出。
具 体来说,对于接收的数据,web容器一般按默认的ISO-8859-1去解码。对于汉字,需要用GBK等去解码,再转换成Unicode。但对于URL后 的参数无法设置解码方式,故一般不要用汉字。对于Post方式的消息体,可以用setCharacterEncoding方式去设置解码方式。
但JavaScript等脚本语言中,没用对编码方式转换成Unicode,而是直接保存、返回的。所以写代码过程中,若有汉字,一定要注意使代码页和HTML中的字符集相同。代码页的作用是:能够对程序中的常量字符串正确的解码。
相关推荐
本文将深入探讨JSP和Servlet中的几个关键编码设置的作用及原理,帮助开发者更好地理解和解决实际开发中遇到的编码问题。 #### 二、主要编码设置及其作用 ##### 1. `pageEncoding="UTF-8"` - **作用**:`...
在本教程中,我们将深入探讨如何实现一个Servlet编码过滤器,并理解其工作原理。 首先,让我们了解为什么需要编码过滤器。在Web应用中,用户输入的数据可能包含非ASCII字符,如中文、日文等,这些字符在HTTP请求中...
### Servlet工作原理详解 #### 一、Servlet简介与工作流程 Servlet是一种服务器端的Java应用程序,主要用于接收客户端发送的HTTP请求,并返回响应结果。Servlet在Java Web开发中扮演着核心角色,它负责处理用户...
Servlet编码是Java Web开发中的重要一环,它主要用于构建动态Web应用程序。Servlet是一个Java类,遵循Servlet API规范,由Web服务器加载并执行以响应客户端(通常是浏览器)的请求。在这个教案中,我们将深入探讨...
Filter可以用于实现权限控制、字符编码转换、日志记录等功能,它们通过`web.xml`中的配置与Servlet串联起来。 9. **会话管理**:Servlet可以通过`HttpSession`接口来管理客户端的会话。会话在客户端通常由一个...
标题 "JSP在Servlet中的几个编码的作用及原理" 指向的是Java Server Pages (JSP) 和 Servlet 技术中关于字符编码的关键概念。在Web开发中,尤其是在处理多语言用户输入时,正确的编码处理至关重要,以避免乱码问题。...
以上知识点分别涵盖了Servlet文件上传的技术实现、HTTP缓存策略的运用、Java编码的最佳实践以及企业级工作流管理系统的运作原理。通过深入学习这些内容,开发者可以提升Web应用的开发能力,优化服务器性能,并实现...
### 方立勋servlet学习笔记知识点总结 #### 一、Servlet概述与生命周期 - **Service方法**:在Servlet中,`service`...这些知识点对于初学者来说非常有价值,能够帮助他们更好地理解Servlet的工作原理及其应用场景。
Servlet是Java Web开发中的核心组件,它用于处理...掌握这些概念有助于理解Web应用的工作原理,以及如何在实际项目中有效地使用Servlet和容器提供的功能。通过深入学习和实践,开发者可以构建出高效、可靠的Web服务。
### JSP与Servlet中的编码处理及其原理 #### 标题:JSP在Servlet中的几个编码的作用及原理 #### 描述:本文将通过代码与理论相结合的方式深入探讨在实际开发过程中遇到的中文乱码问题。 #### 标签:j2ee jsp ...
#### 二、Servlet的工作原理 Servlet的工作流程主要包括以下几个步骤: 1. **加载和实例化**:当Servlet容器(通常是Web服务器)接收到客户端的请求时,如果发现该请求与某个Servlet相关联,则会加载并实例化该...
通过对字符集、编码原理的理解以及采取适当的解决方案,可以有效地避免乱码问题的发生。对于开发人员而言,掌握正确的编码知识是非常重要的,尤其是在开发面向全球用户的多语言应用时更是如此。
本篇文章将围绕jakarta-servletapi-4-src.zip这个源码包,深入剖析Servlet API 4.0的关键特性与实现原理。 一、Servlet接口与生命周期 Servlet接口是所有Servlet的基础,它定义了Servlet的主要方法,如`init()`, `...
Servlet是Java Web开发中的核心组件之一,主要...这对于初学者理解Servlet的工作原理和生命周期至关重要。在实际项目中,Servlet常常用于处理业务逻辑,与数据库交互,或者与其他Web服务通信,构建复杂的Web应用程序。
在本示例中,"servlet作为服务器响应请求.zip"包含了一个实现登录注册界面的Servlet应用,这将帮助我们深入理解Servlet的工作原理及其在实际应用中的运用。 1. **Servlet基础** Servlet是Java编程语言中的一组接口...
过滤器允许在请求到达Servlet之前进行预处理,或在响应离开Servlet之后进行后处理,可以用于实现登录检查、内容编码转换等功能。而监听器则可以监听Web应用中的各种事件,如会话创建、销毁、请求上下文初始化等,...
在Servlet框架中,Filter(过滤器)可以拦截请求和响应,进行预处理或后处理,比如字符编码转换、权限控制等。通过在web.xml中配置Filter,并使用`@WebFilter`注解,可以实现对多个Servlet的统一处理。 7. **MVC...
5. **Filter过滤器**:Servlet可以与Filter一起使用,Filter在Servlet处理请求之前和之后执行,可用于登录验证、GZIP压缩、字符编码转换等。 6. **异步处理**:Servlet 3.0引入了异步处理,允许在`service()`方法...
### javaweb servlet(jsp)的乱码问题原理及解决 #### HTTP协议的基本理解与乱码问题背景 HTTP协议作为互联网应用中最为广泛使用的通信协议之一,它定义了客户端和服务端之间的交互规则。HTTP请求主要分为GET和...