日期:2014-05-16  浏览次数:20321 次

JSP页面编译成Servlet类文件过程中所涉及到的编码问题

当请求一个JSP页面时,一般的都需要经历下面几个阶段:

1、应用服务器根据JSP页面生成一个Java文件

2、应用服务器调用java.exe将Java文件编译成一个Servlet对应的class文件

3、用户的浏览器请求JSP对应的Servlet,Web容器起一个线程执行Servlet,将数据返回给客户端浏览器

4、用户的IE根据返回的数据,将结果显示给用户。

?

??? 第一步中应用服务器根据Jsp页面生成一个Java文件时,需要读取源Jsp页面到内存中,然后以某种编码方式生成Servlet类文件,这一读的过程会涉及到采用什么编码方式来读取的问题?这里先看一下结论:如页面中设置了pageEncoding="XX",则服务器在读取Jsp页面时,就会使用上面设置的XX来读取,如果没有设置,再看是否设置了contentType="text/html; charset=XXX" ,如果设置了,则用charset中指定的编码方式来读取。如果这两个都没有指定时,则使用默认的编码方式ISO8859-1来读取

以上是读取的过程,当把Jsp页面读取到内存后,在内存中以Unicode编码存在,这时需要根据Jsp文件生成Servlet类文件,既然要定文件,这里又会涉及到编码问题,这里该使用什么编码方式来输出到文件呢?先看结论:Tomcact是使用UTF-8编码方式来输出的 ,这也是理所当然的,因为页面上会有不同的各种语言。

?

?

下面来证实上面的两个结论。

?

??? 首先我们写一个Jsp页面gbk.jsp,从文件名就可知我们创建一个以GBK编码方式保存的Jsp文件。

下面是我创建并设置好编码方式的过程:

?

Jsp代码 复制代码
  1. <%@?page?language="java"?%> ??
  2. <html> ??
  3. ????<body> ??
  4. ????????<form?name=form1?action=""?method="get"> ??
  5. ????????????<input?type="text"?name="textParam1"?size=