JSP和Servlet对中文的处理过程(4)_JSP教程

编辑Tag赚U币
教程Tag:暂无Tag,欢迎添加,赚取U币!

推荐:困扰JSP的一些问题与解决方法
如今每一个使用servlets的开发者都知道JSP,一种由Sun公司发明并花费大量精力加以推行并建构在servlet技术之上的web技术。JSP将servlet中的html代码脱离了出来,从而可以加速web应用开发

下节先讨论Servlet从JAVA文件到CLASS文件的转化过程,然后再解释从CLASS文件如何输出到客户端。之所以这样安排,是因为JSP和Servlet在输出时处理方法是一样的。

Servlet:从源文件到Class的过程

Servlet源文件是以“.java”结尾的文本文件。本节将讨论Servlet的编译过程并跟踪其中的中文变化。

用“javac”编译Servlet源文件。javac可以带“-encoding ”参数,意思是“用< Compile-charset >中指定的编码来解释Serlvet源文件”。

源文件在编译时,用来解释所有字符,包括中文字符和ASCII字符。然后把字符常量转变成Unicode字符,最后,把Unicode转变成UTF。

在Servlet中,还有一个地方设置输出流的CharSet。通常在输出结果前,调用HttpServletResponse的setContentType方法来达到与在JSP中设置一样的效果,称之为。

注意,文中一共提到了三个变量:、和。其中,JSP文件只与有关,而和只与Servlet有关。

看下例:

import javax.servlet.*;

import javax.servlet.http.*;

class testServlet extends HttpServlet

{

public void doGet(HttpServletRequest req,HttpServletResponse resp)

throws ServletException,java.io.IOException

{

resp.setContentType("text/html; charset=GB2312");

java.io.PrintWriter out=resp.getWriter();

out.println("");

out.println("#中文#");

out.println("");

}

}


该文件也是用UltraEdit for Windows编写的,其中的“中文”两个字保存为“D6 D0 CE C4”(GB2312编码)。

开始编译。下表是不同时,CLASS文件中“中文”两字的十六进制码。在编译过程中,不起任何作用。只对CLASS文件的输出产生影响,实际上是和一起,达到与JSP文件中的相同的效果,因为对编译和CLASS文件的输出都会产生影响。

表3 “中文”从Servlet源文件到Class的转变过程

Compile-charset
Servlet源文件中
Class文件中
等效的Unicode码

GB2312
D6 D0 CE C4

(GB2312)
E4 B8 AD E6 96 87 (UTF)
\u4E2D\u6587 (在Unicode中=“中文”)

ISO-8859-1
D6 D0 CE C4

(GB2312)
C3 96 C3 90 C3 8E C3 84 (UTF)
\u00D6 \u00D0 \u00CE \u00C4 (在D6 D0 CE C4前面各加了一个00)

无(默认)
D6 D0 CE C4

(GB2312)
同ISO-8859-1
同ISO-8859-1


普通Java程序的编译过程与Servlet完全一样。

分享:JavaBean 在jsp和serlvle中传递技术要点
javaBean 在jsp和serlvle中的传递技术要点 一、 初始化javaBean 1、 在jsp中 在上一段的代码中执行过程如下: ? 按照scope的参数寻找相同id的javabean,如果找到了就跳出该; ?

来源:模板无忧//所属分类:JSP教程/更新时间:2008-08-22
相关JSP教程