WebLogic Server 国际化
编程
关于使用 Servlet 和 JSP 的说明
编码转换、标准、范围和首选项
WebLogic Server 是一种 Java 应用程序,其中的所有字符串在内部都作为 Unicode 字符串进行处理。另一方面,对于 HTML 页使用各种字符集。在 WebLogic Server 中,在处理 HTML 数据时,会通过使用 Java 编码转换器在 Unicode 和 HTML 字符集之间执行编码转换。使用 WebLogic Server 时,一定要确定如何在应用程序中管理服务器内的 Unicode 字符串与 HTML 中所用编码之间的转换。
WebLogic Server 有许多用于根据特定范围确定编码的参数,它允许您配置自己的应用程序的系统。
而且,在 WebLogic Server 中,可以不考虑 Java VM 默认编码,而为所使用的每个模块指定不同的编码。
在 WebLogic Server 中,用来设置编码的一些方法是由 J2EE 规范定义的。其他方法由 WebLogic 的专有规范定义。在这些方法中,下面是 JSP/Servlet 的设置项目列表,您无需指定其中的所有项目。请阅读下列描述并组合最适合您的环境的编码设置。
编码设置
与 JSP/Servlet 有关的编码设置包括:
从 Servlet 输出的 HTTP 响应中使用的写入器编码
JSP 文件的编码
从 JSP 输出的写入器编码
HTTP 请求(如 GET/POST)的编码(对于特定的请求 URL)
数据(如 GET/POST)的编码(对于特定的 HTTP 请求)
JSP 容器的编码
Java 编码和 IANA 字符集之间的映射
如果指定了多个参数,可以通过一组特定的规则来确定哪个参数有效。例如,如果 UTF-8 设置为 JSP 容器的默认编码,但在特定 JSP 的 page 标记中指定了 GB2312,则将使用 GB2312。一般来说,在较小范围中指定的编码具有较高的优先级。如有必要,可以在较大的范围中设置默认编码,并在较小的范围中设置特殊编码。
建议您在整个应用程序中使用同一种编码。
使用简体中文的一般步骤
如上所述,WebLogic Server 提供一组用来指定编码的参数。在使用它时,必须指定从 HTTP 请求到 HTTP 响应的所有内容。在默认情况下,将使用 ISO-8859-1 编码。
Servlet
指定 HTTP 响应的编码 - response.setContentType()
指定浏览器显示的编码 - HTML Content-Type
指定 HTTP 请求的编码 - request.setCharacterEncoding 或 <input-charset>
JSP
指定 JSP 文件的编码 - page 标记中的 pageEncoding 指令(可选)
指定页面输出的编码 - page 标记中的 contentType 指令
指定浏览器显示的编码 - HTML Content-Type
指定 HTTP 请求的编码 - request.setCharacterEncoding 或 <input-charset>
Servlet 和 JSP
Java 编码和 IANA 字符集之间的映射(在 weblogic.xml 中设置)
下列部分详细说明了 Servlet 和 JSP 的每个设置。
Servlet
指定 HTTP 响应的编码 - response.setContentType()
要为由 Servlet 生成的 HTML 页面指定编码,请使用 setContentType() 方法。对 setContentType() 的调用指定下列内容:
用于响应的 HTTP 头中的 ContentType 特性
用于输出响应的写入器编码
因此,在获得写入器之前,必须先调用 setContentType()。
res.setContentType("text/html;charset=GB2312");
PrintWriter out = res.getWriter();
该调用指定 HTTP 头中的 contentType。这意味着同时指定了浏览器显示的编码。
指定 HTTP 请求的编码 - request.setCharacterEncoding 或 <input-charset>
现在,您已经指定了 HTTP 响应(使用上述方法从 WebLogic Server 发送到客户端的数据)的编码设置。下面描述了在将数据从客户端发送到 WebLogic Server 时,如何设置 HTTP 请求的编码。
可通过三种方法指定 HTTP 请求的编码:
将字符集写入 HTTP 请求的 contentType 中
此方法最符合 HTTP 规范。但是,不能在 Microsoft Internet Explorer 或 Netscape 浏览器中指定该值。
在服务器上指定 HTTP 请求的编码
使用 request.setCharacterEncoding() 方法。可以指定每个请求的编码。还可以执行更细化的操作(如动态控制编码)。另外,setCharacterEncoding() 符合 Servlet 2.3 规范。因此,可以实现应用程序可移植性。
request.setCharacterEncoding("GB2312");
String pval = request.getParameter(pname);
使用 Web 应用程序部署描述符 (weblogic.xml) 中的 <input-charset>,指定请求 URL 的编码。
在 WebLogic Server 6.0 中,它在 web.xml 中进行设置。在 WebLogic Server 6.1 或更高版本中,它在 weblogic.xml 中进行设置。同时,元素名称等也进行了更改。因此,如果从 WebLogic Server 6.0 迁移,需要修改 weblogic.xml 和 web.xml 文件。
对于从客户端 Web 浏览器的请求 URL 中指定的资源,<input-charset> 的值确定该资源的路径在服务器端的编码。
示例:
Obtain http://localhost:7001/webappa/path1/ in UTF-8
Obtain http://localhost:7001/webappa/path2/ in GB2312
系统允许使用这些配置。
可以按如下所示描述 <input-charset>。目标 Web 应用程序的 <charset-params> 元素应当写在部署描述符 (weblogic.xml) 文件中。
在 <charset-params>(内嵌于 <weblogic-web-app>)中,写入要为其指定编码的请求 URL 路径,以及要为 HTTP 请求指定的编码(用 IANA 名称)。
有关 Java 编码名称和 IANA 字符集之间映射的信息,请参阅“Java 编码和 IANA 字符集之间的映射(在 weblogic.xml 中设置)”部分。
下面是一个处理多个编码的 Web 应用程序的示例。
在本例中,“/*”的编码设置为 UTF-8,“/rus/jo/*”的编码设置为 GB2312。
<charset-params>
<input-charset>
<resource-path>/*</resource-path>
<java-charset-name>UTF-8</java-charset-name>
</input-charset>
</charset-params>
<charset-params>
<input-charset>
<resource-path>/rus/joe/*</resource-path>
<java-charset-name>GB2312</java-charset-name>
</input-charset>
</charset-params>
有关此设置的详细信息,请参阅“Developing Web Applications for WebLogic Server”中的 charset-params。