JSP 是 Servlets 类的变型 类的变型) *Servelets 类 *EJB 类 *其它不可以直接运行的支持类 这些类文件中,都有可能含有中文字符串,并且我们常用前三类 JAVA 程序和用户直接交互,用于输出 和输入字符,如:我们在 JSP 和 Servlet 中得到客户端送来的字符,这些字符也包括中文字符。无论这些 程序的生命周期都是这样的: JAVA 类的作用如何,这些 JAVA 程序的生命周期都是这样的 *编程人员在一定的操作系统上选择一个合适的编辑软件来实现源程序代码并以.java 扩展名保存在操 作系统中,例如我们在中文 win2k 中用记事本编辑一个 java 源程序; *编程人员用 JDK 中的 javac.exe 来编译这些
源代码,形成.class 类(JSP 文件是由容器调用 JDK 来编译 的); *直接运行这些类或将这些类布署到 WEB 容器中去运行,并输出结果。
那么,在这些过程中,JDK 和 JVM 是如何将这些文件如何编码和解码并运行的呢? 这里,我们以中文 win2k 操作系统为例说明 JAVA 类是如何来编码和被解码的。 第一步, 我们在中文 win2k 中用编辑软件如记事本编写一个 Java 源程序文件(包括以上五类 JAVA 程序), 第一步, 程序文件在保存时默认采用了操作系统默认支持 GBK 编码格式(操作
系统默认支持的格式为 file.encoding 格式)形成了一个.java 文件,也即,java 程序在被编译前,我们的 JAVA 源程序文件是采用操作系统默认 支持的 file.encoding 编码格式保存的,java 源程序中含有中
文信息字符和英文程序代码;要查看系统的 file.encoding 参数,可以用以下代码: public class ShowSystemDefaultEncoding { public static void main(String[] args) { String encoding = System.getProperty("file.encoding"); System.out.println(encoding); }} 第二步, 第二步,我们用 JDK 的 javac.exe 文件编译我们的 Java 源
程序,由于 JDK 是国际版的,在编译的时候, 如果我们没有用-encoding 参数指定我们的 JAVA 源程序的编码格式,则 javac.exe 首先获得我们操作系统 默认采用的编码格式,也即在编译 java 程序时,若我们不指定源程序文件的编码格式,JDK 首先获得操作 系统的 file.encoding 参数(它保存的就是操作系统默认的编码格式,如 WIN2k,它的值为 GBK),然后 JDK 就把我们的 java 源程序从 file.encoding 编码格式转化为 JAVA 内部默认的 UNICODE 格式放入内存中。然 后,javac 把转换后的 unicode 格式的文件进行编译成.class 类文件,此时.class 文件是 UNICODE 编码的, 它暂放在内存中,紧接着,JDK 将此以 UNICODE 编码的编译后的 class 文件保存到我们的操作系统中形 成我们见到的.class 文件。对我们来说,我们最终获得的.class 文件是内容以 UNICODE 编码格式保存的类 文件,它内部包含我们源程序中的中文字符串,只不过此时它己经由 file.encoding 格式转化为 UNICODE 格式了。 这一步中,对于 JSP 源程序文件是不同的,对于 JSP,这个过程是这样的:即 WEB 容器调用 JSP 编译 器,JSP 编译器先查看 JSP 文件中是否设置有文件编码格式,如果
JSP 文件中没有设置 JSP 文件的编码格 式,则 JSP 编译器调用 JDK 先把 JSP 文件用 JVM 默认的字符编码格式(也即 WEB 容器所在的操作系统的 默认的 file.encoding)转化为临时的 Servlet 类,然后再把它编译成 UNICODE 格式的 class 类,并保存在临 时文件夹中。如:在中文 win2k 上,WEB 容器就把 JSP 文件从 GBK 编码格式转化为 UNICODE 格式,然 后编译成临时保存的 Servlet 类,以响应用户的请求。 第三步,运行第二步编译出来的类,分为三种情况: 第三步,运行第二步编译出来的类,分为三种情况:
A、 直接在 console 上运行的类 B、 EJB 类和不可以直接运行的支持类(如 JavaBean 类) C、 JSP 代码和 Servlet 类 D、 JAVA 程序和数据库之间 下面我们分这四种情况来看。
a) 直接在 console 上运行的类
这种情