`

JSP和Servlet设置编码

 
阅读更多

本文转载自:http://hi.baidu.com/shengchen1357/item/1b933e370343a93b2f20c456

 

 

在JSP和Servlet中有几个地方都可以设置编码,各个编码的功能也不一样,本文将对各个编码做一个小结。 
各种编码一览

A. JSP/Servlet都有的编码设置

1. request.setCharacterEncoding("UTF-8")

2. response.setCharacterEncoding("UTF-8")

3. response.setContentType("text/html; charset=UTF-8");

4. response.setHeader("Content-Type", "text/html; charset=UTF-8");

B. JSP专有的编码设置

1. <%@ page pageEncoding="UTF-8" %>

2. <%@ page contentType="text/html; charset=UTF-8" %>

C. HTML页面中的编码设置

1. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

※以下内容用到本部分编码设置时,将使用A1, A3, B2的方式

--------------------------------------------------------------------------------

浏览器如何确定编码格式来显示页面


web服务器在接收到浏览器的请求信息后,经过处理,会发送一个应答消息给浏览器。应答消息包含一般三个部分:状态行,应答首部,应答主体。下面是一个示例:

HTTP/1.0 200 OK
Last-Modified: Mon: 20 Dec 2001 23:26:42 GET
Date: Tue 11 Jan 2002 20:52:40 GMT
Status: 200
Content-Type: text/html; charset=UTF-8
Servlet-Engine: Tomcat Web Server/4.0.1
Content-Length: 59

<html>
  <body>
    <h1>Hello World!</h1>
  </body>
</html>
其中,第一行是状态行,最后的一部分是应答主体,而中间的部分就是应答首部了。而应答主体部分的Content-Type中的charset就指定了浏览器应该采用什么编码格式来显示页面。如果没有指定charset的话,浏览器会根据C1(meta中的charset)来显示页面;如果C1也没有的话,就采用本地默认的编码格式显示页面(应该与客户端的操作系统有关)

★浏览器显示页面所用的格式可以通过菜单 -> 查看 -> 编码来查看具体是哪种编码格式 
--------------------------------------------------------------------------------

web服务器如何决定编码

从上面可以知道,服务器在发送给客户端的应答主体中一般会包含charset。而这个charset的值有几个来源,我们从高优先级到低优先级排列。

注:下面的结论是采用Tomcat 5.5确认的结论,不一定全部适用于其他服务器。
1. A2, A3, A4

如果你的JSP或者Servlet中包含以上3中类型的代码,那么charset就是它们。如果有多条语句设置,那么charset就是最后一条所设置的值。

2. B2

B2的代码在编译成class文件时会自动转换为A3,但是是位于所有代码的最前面部分。所以,如果JSP中包含A2, A3, A4的代码,B2就不会再起作用,如果没有的话,那么值就是B2所设定的charset的值。

3. B1

如果1和2都不存在的话,B1的值就会被采用。

4. web服务器默认值

一般是ISO-8859-1

 

--------------------------------------------------------------------------------

 

JSP的编译过程

JSP在被访问时,需要编译成Java的bytecode才会被执行,而这个编译过程是分两步进行的。第一步是:JSP -> Java文件的转换过程,第二步是Java -> class文件的编译过程。

其中,第一步的JSP -> Java文件的转换过程,就会使用B1和B2的两部分内容。web服务器会根据B1的pageEncoding的设置来读取jsp文件,并且把它转换为以 UTF-8格式编码的java文件。如果JSP中有汉字,而pageEncoding设置的是ISO-8859-1,或者没有设置的话,出来的java文件中就会有乱码。至于B2呢,web服务器会把它转换为A3一样的代码,并且把它放在代码的最前面部分。

而第二步就是普通的Java文件的编译过程,javac使用UTF-8格式读取java文件,再编译成UTF-8格式的class文件。

★用过MyEclipse写JSP的可能就知道,如果你的pageEncoding设置的值与JSP文件本身的编码格式不一致的话,MyEclipse会报错,并且无法保存成功。它这样做就可以保证你写在JSP中的文字一定能被正确解析,因为你肯定敲一堆乱码出来给自己看的。

 

--------------------------------------------------------------------------------


其他相关知识

★上面的内容基本上都是关于页面输出时的编码,而没有输入时的编码说明,因为不是本文的重点,所以只在这里稍微补充以下。页面输入的编码主要是指用户在页面上输入一些内容,然后发送到服务器端,服务器端要采用某种编码方式来解码用户的请求。这个部分根据用户请求的类型(POST/GET)不同有不同的处理方式。

对于POST方式来说,因为客户端请求前一张页面时,就已经得到Web服务器设置的编码格式,此时用户以POST方式发送请求时,所有的数据将自动采用当前页面设置的编码格式编码。那么,服务器端只要用同样的编码格式解码就可以了。如,使用A1是可行的一种方法。

对于GET方式来说,客户端在请求时是没有使用编码格式的,Web服务器将采用默认的编码格式解码。如Tomcat 5.0中默认采用ISO-8859-1编码格式。如果需要配置成其他格式,需要修改Tomcat的配置文件中的Connector tag中的useBodyEncodingForURI或者URIEncoding。

不过在J2EE系统中,类似于A1这样的代码一般不会写在JSP/Servlet中,而是使用一个Filter类来实现。

 


★我们可以写java代码访问某JSP或者Servlet来查看具体的应答消息内容。

url = new URL("http://localhost:8080/Encoding/page/test.jsp");
URLConnection urlConn = url.openConnection();
System.out.println(urlConn.getHeaderFields());
输出地结果就是类似于下面这样的信息:

{Content-Length=[265], Set-Cookie=[JSESSIONID=367DB3A663B8F6B0D84C6EF3FDB1BF43; Path=/Encoding], null=[HTTP/1.1 200 OK], Date=[Sat, 06 Mar 2010 09:01:27 GMT], Server=[Apache-Coyote/1.1], Content-Type=[text/html;charset=UTF-8]}

--------------------------------------------------------------------------------

 

分享到:
评论

相关推荐

    JSP和Servlet中的几个编码的作用及原理

    本文将深入探讨JSP和Servlet中的几个关键编码设置的作用及原理,帮助开发者更好地理解和解决实际开发中遇到的编码问题。 #### 二、主要编码设置及其作用 ##### 1. `pageEncoding="UTF-8"` - **作用**:`...

    JSPServlet 中的汉字编码问题

    本文主要针对JSP (Java Server Pages) 和 Servlet 中汉字编码问题的解决方法进行详细阐述。 #### 二、字符编码基础知识 1. **字符集**: 指的是用于存储和传输字符的一套规则,包括字符的编码方式。例如ASCII码、GB...

    基于jsp+servlet的博客

    【基于jsp+servlet的博客系统】是一个典型的Web应用程序,它结合了JavaServer Pages(JSP)和Servlet技术,用于构建动态、交互式的博客平台。在这个系统中,JSP主要用于展示用户界面,而Servlet则承担了业务逻辑处理...

    jsp和servlet留言板

    Eclipse则为开发人员提供了一个集成了编码、调试、测试和部署功能的平台,支持对JSP和Servlet的开发。 为了实现这个留言板应用,首先需要在Eclipse中创建一个新的Dynamic Web Project,然后配置项目引用JDK和Tomcat...

    JSP在Servlet中的几个编码的作用及原理

    在处理文件上传时,文件名可能包含非ASCII字符,需要正确编码和解码。Apache Commons FileUpload库提供了解决这个问题的方法。 7. **数据库操作**: 在JSP和Servlet中,连接数据库时,还要考虑数据库的字符集设置...

    Jsp和Servlet中文乱码问题

    尤其是在使用Java Server Pages(JSP)和Servlet进行中文处理时,字符编码的设置不当往往会导致页面显示出现乱码。本文将深入探讨JSP和Servlet中文乱码问题的根源、解决方案以及预防策略。 ### JSP和Servlet中的...

    JSP源码——音乐网站(JSP+SERVLET).zip

    2. **指令元素**:JSP有三种指令元素,包括`&lt;%@page&gt;`(页面指令),`&lt;%@include&gt;`(包含指令)和`&lt;jsp:directive.include&gt;`(JSP动作指令),它们用于设置页面属性,导入其他文件等。 3. **脚本元素**:JSP脚本...

    jsp+servlet实现增删改查

    例如,设置请求和响应的编码格式为UTF-8,避免中文乱码的出现。 分页功能是大数据量展示的常用手段,它可以帮助用户逐步加载和浏览大量内容,提高网页加载速度。实现分页通常需要在后端计算每页的记录数和页码,...

    jsp与Servlet跳转实例

    以Index.jsp为例,页面首先设置了一系列元数据,如字符编码、基路径等,然后通过一个链接指向InputServlet,触发后续的流程。当用户点击链接时,会调用InputServlet,该Servlet通常会检查必要的参数,然后重定向到...

    jsp和servlet请求与响应

    ### JSP和Servlet请求与响应详解 #### 一、JSP内置对象概述 JSP(Java Server Pages)是一种用于创建动态网页的技术。它基于Java Servlet规范,并提供了许多内置对象,以便开发者可以更方便地处理HTTP请求和响应。...

    jsp和servlet知识点总结

    1. **page指令**:`&lt;%@ page ... %&gt;`,用于设置整个JSP页面的属性,如语言、导入的包、编码格式等。 2. **include指令**:`&lt;%@ include file="..." %&gt;`,静态包含其他文件,一般用于包含HTML片段或JSP片段。 3. **...

    自学jsp+servlet读书心得

    EL(Expression Language)是JSP 2.0引入的一种轻量级表达式语言,用于从页面作用域中获取和设置对象属性。EL简化了在JSP中获取和使用JavaBean属性的过程,使页面更加简洁。 JSTL是一套标准的JSP标签库,提供了一...

    JSP-Servlet中的汉字编码问题-JSP教程

    JSP和Servlet环境下处理汉字编码问题是一项复杂的工作,涉及到多个层面的设置与调整。开发者需要具备扎实的基础知识,才能有效地解决这些问题。通过本文的学习,希望能够帮助大家更好地理解和应对实际开发中遇到的...

    jsp+servlet实现图片上传

    在本文中,我们将深入探讨如何使用Java的JSP(JavaServer Pages)和Servlet技术来实现一个图片上传功能。这是一个常见的Web开发任务,特别是在构建交互性强、动态内容丰富的网站时。以下是一些关键知识点: 1. **...

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

    该方案通过设置每个页面的编码格式为utf-8,控制器servlet中的请求编码格式为utf-8,数据库连接url中添加useUnicode=true&characterEncoding=UTF-8参数,编写filter过滤器设置请求和响应的编码格式为gb2312,最后...

    自己写的比较简单的留言板(jsp+ servlet+源码和数据库)

    3. 请求和响应处理:理解HttpServletRequest和HttpServletResponse接口,以及如何从中获取和设置请求参数、设置响应头和内容。 4. 数据库交互:使用Java的JDBC API连接数据库,执行SQL语句(如INSERT、SELECT),...

    《Jsp&Servlet入门级项目全程实录》源码

    在IT行业中,JSP(JavaServer Pages)和Servlet是用于构建动态Web应用程序的两种核心技术,尤其在企业级Java开发中广泛应用。《Jsp&Servlet入门级项目全程实录》源码是一个非常适合初学者深入理解这两门技术的实践...

    jsp/servlet个人学习笔记

    它简化了获取和设置页面上下文中的属性,例如 `${user.name}` 可以直接获取 `user` 对象的 `name` 属性,无需使用 `&lt;%= %&gt;` 或 `&lt;jsp:getProperty&gt;` 标签。 3. **JSP 标签库** JSP 标签库提供了可重用的组件,增强...

    jsp + servlet 级联菜单

    在Java Web开发中,JSP(JavaServer Pages)和Servlet是两种常见的技术,它们结合使用可以构建动态网页应用。在这个“jsp + servlet 级联菜单”项目中,我们将探讨如何利用这两者来创建交互式的级联(或下拉)菜单,...

Global site tag (gtag.js) - Google Analytics