- 浏览: 124502 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
wangxc:
使用第一种方法解压到指定命令下的命令是什么?
如何解压cpio.gz 文件 -
actan:
谢谢!很有用!
linux下如何使用sftp命令。 -
johnnyhg:
上游决定下游,先了解这个,才能谈。技术啊、需求啊、系统啊、设计 ...
项目型软件公司将死 -
phoenix007:
public static LinkedList list=n ...
JSP高访问量下的计数程序
国际化概述
WebLogic Server 中 I18n 的主要特性:
在 WebLogic Server 内部,所有字符都按 Unicode 进行处理。只要输入或输出字符数据,就执行代码转换。 必须分别为 WebLogic Server、J2EE 组件和 WebLogic Server 容器上的资源指定适当的编码转换。 如果不指定编码转换,系统将应用默认的编码转换。 存在各种类型的默认编码转换,其中的一些编码转换不符合操作系统的区域设置。 在使用 WebLogic Server 生成用于处理多字节字符数据的分布式系统之前,应该了解如何指定有关 Java 和 J2EE 的适当编码。而且,在控制编码转换时,应该适当考虑连接到 WebLogic Server 的系统(例如,操作系统、Internet、后端系统)的编码处理。
下面简要描述了 WebLogic Server 中的编码处理。
Unicode 的使用
WebLogic Server 是一种 100% 纯 Java 应用服务器程序,它使用 Unicode 进行服务器内部编码。
这样 WebLogic Server 就能同时处理所有语言的字符(只要 Unicode 能够处理这些字符)。
编码转换
当 WebLogic Server 与外部交换字符数据时,需要进行编码转换。
Unicode 是 Java 的内部编码,而在普通的操作系统中,几乎没有任何环境使用 Unicode,它们使用的是为每个平台单独定义的称为“本地编码”的编码。例如,Windows 系统的本地编码是一个与语言有关的代码页,Unix 系统的本地编码是与用 LANG 环境变量指定的区域设置相对应的编码,数据库的本地编码是在创建数据库时指定的字符集或者由客户端指定的字符集。
因此,在 WebLogic Server 中进行输入和输出时,需要进行本地编码与 Unicode 之间的编码转换。当 WebLogic Server 与操作系统或外部资源交换字符数据时,总会发生这种编码转换。
注意:序列化的 Java 类流中包含的字符作为(UTF-8 编码的)Unicode 保存在该类的内部信息中。这意味着无需考虑序列化流的代码转换。例如,对于 EJB 或 RMI 无需考虑编码。
因为编码转换是针对单个字符进行的,所以转换过程会占用大量 CPU 资源。在设计应用程序时,最好避免进行代码转换,以确保系统性能较高。
WebLogic Server 服务器自身的编码转换与应用程序组件和资源的编码转换是相互独立的
在 WebLogic Server 中,服务器本身的编码转换与 WebLogic Server 上应用程序组件和资源的编码转换是分开的。
在 WebLogic Server 中,服务器日志或管理控制台的编码是由服务器的 Java VM 或浏览器的语言设置的默认编码确定的,而与应用程序组件的编码或 WebLogic Server 提供的内容所用的语言无关。
而且,在配置 WebLogic Server 的行为时,可以不考虑 WebLogic Server 使用的区域设置或语言设置。
还可以为在 WebLogic Server 容器上配置的资源单独设置编码转换。
WebLogic Server 本身的编码转换包括:
WebLogic Server 的系统日志输出 管理控制台的页面编码 WebLogic Server 和本地文件系统之间的文件 I/O 单个应用程序的编码转换包括:
JSP 文件 Servlet DD 文件 XML Web Service WebLogic Server 上的资源包括:
JDBC 连接 WTC 连接等 为 WebLogic Server 指定编码时,需要弄清楚要为哪些类别指定编码,然后需要查看是否可以创建有效的 Character 对象,以及 WebLogic Server 中的 Character 对象是否可以正确地转换为所需的编码。
如上所述,您应该了解编码转换行为,以便进行正确的设置。如果不指定编码转换,应用程序将无法正确处理多字节字符。
如果不指定编码,将使用适合情况的默认编码。默认编码可能因目标的规范或环境而异。
默认编码示例
影响 WebLogic Server 行为的默认编码包括:
服务器 VM 的默认编码 J2EE 的默认编码 XML 的默认编码 HTTP 协议的默认编码 浏览器的默认编码 Web Service(例如,SOAP、WSDL、UDDI)的默认编码等 示例:
在简体中文版的 Windows 中,服务器 VM 的默认编码通常是 MS936。 J2EE 的默认编码通常是 ISO-8859-1。 XML 的默认编码通常是 UTF-8。 HTTP 的默认编码通常是 US-ASCII。 因为不同的默认编码用于不同的目标(如上所述),所以,如果没有指定适当的编码,WebLogic Server 就无法正确地处理简体中文。为了能够控制编码转换,您应该先了解下列内容。
在 Java 语言术语中,编码意味着“字符集”。描述字符集的词很多,但是每个词的定义略有不同。
编码或字符集意味着一种定义,根据这种定义,将计算机可读代码分配给特定语言的字符集合,以便计算机可以处理这些字符。
Java 语言在其 I/O 部分中包括了这些差异,以便可以在其内部以 Unicode 形式处理所有字符。这意味着对于任何字符集来说,只要它的编码定义存在,Java 就可以处理它。Java 基本上可以包括各种系统之间存在的任何编码差异。但是,目前还没有一个编码转换表可以处理目前全部现有编码之间的所有细微差异。同样,现有的编码表存在一些限制,这些限制源自与 Unicode 的一致性问题。
在 Java Web 应用程序服务器中,Java 编码名称和 MIME 字符集(由 IANA 定义并在 Internet 和 XML 中使用)之间的差异尤其重要。WebLogic Server 使用一个映射表将 Java 编码名称与 IANA 字符集名称相关联,从而包括这种差异。使用该映射表,WebLogic Server 可以将 JSP 上定义为“Shift_JIS”的文件作为具有 Java 编码名称的“MS932”来处理。可以修改 WebLogic Server 的映射表,让其将“Shift_JIS”字符集作为“cp943”Java 编码来处理。
Xerces 是 WebLogic Server 的内置 XML 解析器,它具有自己的 IANA-Java 映射表。用户不能对这种映射进行自定义。
WebLogic Server 主要使用 Java 编码名称来指定编码。J2EE、Internet 或 XML 主要使用 IANA 字符集名称,您可以根据需要修改这种映射。
安装
WebLogic Server 提供简体中文版安装程序和英语版安装程序。两者均可从 BEA Systems, Inc. 网站下载。
简体中文版安装程序和英语版安装程序之间的区别在于:就影响 WebLogic Server 行为的程序文件而言,这两个安装程序是相同的,您可以将它们视为具有相同的软件。而且,从英语版安装程序启动的 WebLogic Server 实例和从简体中文版安装程序启动的另一个实例之间没有任何互操作性问题。
共性:
所有的 WebLogic Server 类文件(weblogic.jar 和其他文件) 版本字符串 消息目录和管理控制台联机帮助中的语言 区别:
一些经过翻译的文本文件 about_wls/readme.txt/index.jsp 或 html WebLogic Builder 联机帮助 简体中文版的 WebLogic Server 8.1 不支持下列功能:
智能更新 网络安装程序
WebLogic Server 系统管理
下列项目使用 WebLogic Server 的 JVM 默认编码:
WebLogic Server 的错误日志输出 与本地文件系统之间的文件输入和输出 下列项目使用浏览器的默认语言:
管理控制台 要更改日志输出等的编码,使其使用服务器的默认编码,请执行下列过程:
WebLogic Server 和 Java Virtual Machine 中的编码
在 WebLogic Server 中,可以设置范围不同的编码。例如,JSP 有一个用来指定页面特定编码的 page 标记,该 page 标记符合 JSP 1.2 规范。在使用 WebLogic jDriver 时,还可以使用 weblogic.codeset 属性来为 JDBC 连接指定编码。请注意,为特定范围指定的编码与 WebLogic Server 所在的 Java VM 的默认编码没有任何关系。即便 Java VM 以英语区域设置运行,使用简体中文 JSP 文件提供服务也不会出现问题。但是,对下列字符串的处理取决于 Java VM 默认编码:
WebLogic Server 的错误日志输出 与本地文件系统之间的文件输入和输出 这些字符串使用每个平台的 Java VM 默认编码(由 file.encoding Java 系统属性指定的编码)。例如,WebLogic Server 输出到终端控制台的日志消息的语言和编码取决于在 Java VM 中指定的编码。file.encoding java 系统属性基于平台环境和系统区域设置。如果希望切换 WebLogic Server 日志消息的语言和编码,则需要对系统区域设置进行相应切换。一旦 VM 启动,就不能动态切换 Java VM 默认编码。在重新启动 WebLogic Server 之前,请确保进行了下列设置。
Windows 2000/Windows NT
在“控制面板”的“区域选项”中选择“英语(美国)”或“简体中文”。这允许服务器使用 CP1252 或 MS936 作为默认编码。
UNIX
在 LANG 环境变量中指定您的平台支持的区域设置。
下面列出了服务器编码和 LANG 环境变量的设置:
表 2-1 服务器编码和 LANG 环境变量的设置
平台
编码
LANG 环境变量
Solaris
GB2312、GBK、GB18030
zh_CN、zh_CN.GBK 或 zh_CN.GB18030
HP
GB2312
zh_CN.hp15CN
例如,如果为 Solaris 指定 GB2312,则 LANG 设置应如下所示:
LANG=zh_CN如何检查服务器编码
Java VM 默认编码变成 WebLogic Server 默认编码。可以通过参考管理控制台中的日志消息来检查编码。检查步骤如下:
在管理控制台上,在左窗格中用鼠标右键单击服务器名,然后选择“查看服务器日志”。 单击“自定义此视图”。 在“子字符串”框中,输入“file.encoding”。 单击“应用”按钮。
所显示的编码是服务器编码。
关于配置管理和受管服务器的说明
在 WebLogic Server 中,对于一个域中的所有服务器必须使用相同的编码。
如果某个服务器的编码不同于群集中存在的其他编码,则该服务器的日志将无法正确显示。
例如,如果域中有一个 Windows 平台,则该域中所有的编码都应当是相同的 GB2312 类型的编码,如 MS936。如果某个服务器的编码不同于该域中存在的其他编码,则该服务器的日志将无法正确显示。
关于配置群集的说明
在 WebLogic Server 中,对于一个群集中的所有服务器必须使用相同的编码。
在使用 WebLogic Server 时,应当用相同的编码配置该群集中的所有服务器。
例如,如果群集中有一个 Windows 平台,则该群集中所有的编码都应当是相同的 GB2312 类型的编码,如 MS936。如果某个服务器的编码不同于存在的其他编码,则该服务器的日志将无法正确显示。
config.xml 的编码
config.xml 文件是 UTF-8 形式的输入/输出。在用文本编辑器直接编辑该文件时,请以 UTF-8 形式进行读取和保存。
关于将 WebLogic Server 用作 Web 服务器的说明
下面列出了关于将 WebLogic Server 用作 Web 服务器的说明:
要将 contentType 字符集参数添加到 HTTP 头中以提供 HTML 文件,请在 web.xml 文件中插入下列定义,这些定义可以为 HTML 文件显式指定编码:
<mime-mapping> <extension>html</extension> <mime-type>text/html;charset=GB2312</mime-type></mime-mapping>这允许您通过使用如下所示的 META 标记来忽略 HTML 文件中的字符集设置:
<META HTTP-EQUIV="content-type" CONTENT="text/html; charset=GB2312">JDBC 连接
在创建 JDBC 连接池时,对于使用多字节字符的数据库,必须为到该数据库的连接指定适当的编码。您可能需要对 Web 层和 DB 层之间的编码转换映射进行匹配。
有关详细信息,请参阅“Configuring and Using WebLogic jDriver for Oracle”中 Advanced Oracle Features 一章的“Codeset Support”。
部署
在 WebLogic Server 的 J2EE 组件的 DD 文件中,多字节字符的编码按照 XML 声明中指定的编码进行处理。如果 DD 文件中没有 XML 声明或者 XML 声明中没有编码特性,将以 UTF-8 编码处理该文件。
在 WebLogic Builder 或管理控制台中编辑 DD 文件并保存所做的更改时,该文件的编码将与初始文件中的相同。
在 WebLogic Builder 或管理控制台中创建的 DD 文件没有 XML 声明。更改这些文件的编码时,请在 XML 声明中设置编码特性,并为该文件设置相应的编码转换。
关于使用管理控制台的说明
管理控制台启动时使用的语言
管理控制台首次启动时显示的语言是在 Web 浏览器中指定的首选语言。例如,如果使用的是简体中文版本的 Windows 和 Internet Explorer,则管理控制台在首次启动时将显示简体中文。如果希望将首次显示的语言更改为英语,可以将浏览器中的首选语言设置为英语。
在 WebLogic Server 8.1 中可以选择的管理控制台语言
简体中文/EUC-CN 简体中文/GBK 简体中文/GB18030 英语 请根据管理控制台所连接到的管理服务器的编码,选择 GB2312、GBK 或 GB18030。
在管理控制台启动之后切换语言
在管理控制台主页的“首选项”页上,从“语言”下拉列表中选择所需的语言。
编程
关于使用 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。
JSP
指定 JSP 文件的编码 - pageEncoding(可选)
要指定 WebLogic Server JSP 容器或 JSP 编译器用来读取 JSP 文件的编码,请在 page 标记中指定 pageEncoding 指令,如下所示:
<%@ page contentType="text/html; charset=GB2312" pageEncoding="GB2312" %>指定页面输出的编码 - page 标记中的 contentType 指令
要指定页面输出的编码,请在 page 标记中指定 contentType 指令,如下所示:
<%@ page contentType="text/html; charset=GB2312" %>另外,当您在 page 指令中指定 contentType 时,会在 HTTP 响应的 HTTP 头中指定同样的 contentType,这意味着同时指定了浏览器显示的编码。
如果未设置 pageEncoding 指令,会将 contentType 指令用作读取 JSP 文件的编码。
如果 JSP 容器找到 contentType 设置,会停止解析 JSP 文件,将文件读取器切换到这个新指定的编码,重新从头解析 JSP 页。如果在一个文件中指定了多个 contentType,就会出现解析错误。因此,使用静态包含将一个文件包含在另一个文件中时,如果这两个文件都有各自的编码规范,就会出现错误。在动态包含中,不会出现错误,但是将生成乱码字符。
注意:如果在一个文件中发现多个 contentType 实例,这两个实例都使用相同的值,则是有效的,不会导致解析错误。(有关详细信息,请参阅静态与动态包含以及编码差异)。
<jsp-param> <param-name>backwardCompatible</param-name> <param-value>true</param-value></jsp-param>例如,当使用静态包含 (<%@ include) 执行包含操作时,如果“包含源”和“包含目标”都有各自的 page 指令,并且一个转换单元有多个 page 指令,则只要每个 page 指令都指定相同的编码,就不会发生任何问题。
指定 HTTP 请求的编码
可以像在 Servlet 中一样,在 JSP 中指定 HTTP 请求的编码。有关详细信息,请参阅 Servlet 部分。
<% request.setCharacterEncoding("GB2312"); String pval = request.getParameter(pname); %>request.setCharacterEncoding or <input-charset>Servlet 和 JSP
Java 编码与 IANA 字符集之间的映射(在 weblogic.xml 中设置)
在 page 标记中使用 setContentType() 方法或 contentType 指令指定编码时,请使用 IANA 字符集名称。但是,在 Java 应用程序 WebLogic Server 中处理这些编码时,这些值必须是 Java 编码名称。WebLogic Server 内部还有默认映射,通常情况下会使用默认映射。默认映射还包含 IANA 中未定义(但通常在 HTML 的 Content-Type 中使用)的映射。(请参阅 WebLogic Server 中定义的 MIME-Java 编码映射表。)
示例:x-sjis ----> Shift_JIS
可以根据自己的需要更改此映射。请按如下所示在 Web 应用程序部署描述符中设置映射。
例如,contentType 中的“Shift_JIS”设置在 WebLogic Server 中作为 SJIS 进行处理,这是因为 IANA 字符集“Shift_JIS”映射到 Java 编码“Shift_JIS”(在 JDK1.4 中,Shift_JIS 作为 SJIS 的别名使用)。
注意:在 Java 1.3 中,IANA 字符集 GB2312 作为 MS936 处理(从 JDK 1.1.8 到 JDK 1.4.0。在 JDK1.4.1 或更高版本中,Shift_JIS 作为 SJIS 处理)。
这样通过默认设置即可使用 MS932 特定的字符集(@ 等)。
为了分配和使用与默认映射不同的编码,请使用下列步骤覆盖默认映射。在 Web 应用程序的部署描述符 (weblogic.xml) 文件中配置 <charset-mapping> 元素。
在下面的示例中,Shift_JIS 映射到 MS932。
<charset-params> <charset-mapping> <iana-charset-name>Shift_JIS</iana-charset-name> <java-charset-name>MS932</java-charset-name> </charset-mapping></charset-params>请注意,此设置不符合 J2EE。在 WebLogic Server 6.0 中,它在 web.xml 中进行设置。在 WebLogic Server 6.1 或更高版本中,它已经更改为在 Web 应用程序部署描述符 weblogic.xml 中进行设置。同时,元素名称等也进行了更改。因此,如果从 WebLogic Server 6.0 迁移,需要修改 weblogic.xml 和 web.xml 文件。
使用 ISO-8859-1 编码对 HTTP 请求进行编码的方法
如果在 <input-charset> 中将 ISO-8859-1 指定为 HTTP 请求的编码,您仍可以使用下列方法获取具有另一编码的 HTTP 请求。
示例:
new String(request.getParameter(itemQ[i]).getBytes ("8859_1"), "GB2312")但是,如果 HTTP 客户端用于 HTTP 响应的 HTTP 头中的 contentType 按如下方式指定,则该 HTTP 客户端不能使用此方法。这是因为 HTTP 头中的 contentType 中指定的编码优先于 <input-charset> 中指定的编码。在这种情况下,必须修改应用程序代码。
Content-Type:application/x-www-form-urlencoded;charset=gb2312静态与动态包含以及编码差异
静态包含
<%@ include file="relativeURL" %>在这种情况下,在执行 JSP 编译之前,将在一个文件中加载和收集所有包含文件。在 WebLogic Server 6.1 或更早版本中,如果在执行包含操作的文件中指定编码,则被包含的文件将作为编码与包含文件相同的文件进行处理(即使尚未指定其编码)。在 WebLogic Server 8.1 中,如果它们有各自的 page 指令,则会出现编译错误。要避免此问题,请将 weblogic.xml 中的“backwardCompatible”设置为 True。
如果“包含源”与“包含目标”的编码设置不同,则会出现 JSP 编译错误。
动态包含
<jsp:include page="{ relativeURL | <%= expression %>}" flush="true" />如果使用 jsp:include,加载页面时不会包含此页面,而是留在标记状态中。当执行 JSP 时将包含此页面。因此,执行包含操作的 JSP 中设置的编码不会应用于被包含的文件。
因此,还必须在被包含的文件中指定编码。
CGIServlet
将使用多字节字符的 CGI 服务迁移到 WebLogic Server 中的 CGI Servlet 时,必须在 CGI 程序生成的 HTTP 头中指定适当的 contentType 字符集参数。如果未设置 contentType,则使用 ISO-8859-1,它是 J2EE Servlet 容器的默认编码。
还必须使用 input-charset 参数,以便从客户端正确接收输入字符串。您需要将它写入到目标 Web 应用程序的 DD 文件中。如果未设置它,则使用 ISO-8859-1。
WebService
SOAP 消息及其编码的处理
接收 SOAP 消息
在 WebLogic Server Web Service 中,编码处理符合 SOAP1.1 和 SOAP1.2 规范(*注释 1)。SOAP 1.1 HTTP/SOAP 消息的媒体类型是“text/xml”,其编码处理在 RFC2376 中定义。对于 SOAP 1.2 HTTP/SOAP 消息,媒体类型是“application/soap+xml”,其编码处理在 RFC3023 中定义。这些 RFC 规范定义下列行为:
SOAP 1.1
HTTP 头中的 ContentType 字符集参数用于确定 HTTP/SOAP 请求的编码。 忽略 XML 声明中的编码特性。 如果未使用 contentType 指定字符集,则此消息将作为 US-ASCII 进行处理。 SOAP 1.2
HTTP 头中的 ContentType 字符集参数用于确定 HTTP/SOAP 请求的编码。 忽略 XML 声明中的编码特性。 如果未使用 contentType 指定字符集,则使用 XML 声明中的编码特性。 如果未指定 XML 声明中的 contentType 字符集参数或编码特性,则此消息将作为 UTF-8 进行处理。 与 WebLogic Server 一样,WebLogic Workshop 也根据此规范进行操作。因此,对于使用 HTTP/SOAP 来调用 WebLogic Workshop 开发的 Web Service 的客户端,请确保指定了正确的 contentType 字符集。
发送 SOAP 消息
WebLogic Server 生成的所有 HTTP/SOAP 消息都以 UTF-8 编码。在生成过程中,会将“encoding=UTF-8”添加到 SOAP 消息的 HTTP 头中。
注意:以英语区域(locale)设置(例如在 UNIX 中指定 LANG=C)启动 WebLogic Server 时,在 SOAP 消息中只能使用 us-ascii 字符,不支持其他字符。如果要在 Web Service 中使用简体中文字符,请使用简体中文区域(locale)设置启动 WebLogic Server。
如果要在以英语区域设置启动的 WebLogic Server 上使用 us-ascii 之外的其他字符,请在 WebLogic Server 启动脚本文件中设置下列启动选项。这甚至可以使 WebLogic Server 在英语区域设置环境中以 UTF-8 生成消息。
注意:对于 SOAP 消息,强烈建议使用 UTF-8。
-Iweblogic.webservice.i18n.charset=utf-8Web Service 主页
Web Service 主页是以服务器 VM 默认编码生成的。
UDDI 浏览器
UDDI 浏览器只支持 us-ascii 字符。它不能正确处理多字节字符。
XML --- StreamParser 中的多字节字符处理
要将编码信息添加到使用 XML 流 API 生成的 XML 头中,请按如下方式使用 ElementFactory 类的 createStartDocument():
XMLOutputStreamFactory factory = XMLOutputStreamFactory.newInstance();XMLOutputStream output = factory.newOutputStream(new OutputStreamWriter(new FileOutputStream(fname),"GB2312")); output.add(ElementFactory.createStartDocument("GB2312","1.0"));output.flush();下面是关于使用 XML 流 API 解析包含简体中文字符的 XML 文档的说明。
当通过流为解析器提供输入时,请使用字节流。这可以启用解析器的 XML 编码自动检测。解析器可以生成字符流,该字符流使用由 XML 声明中的编码特性指定的编码,从而确保能够进行正确的解析。
当通过 Unicode 字符流提供输入时,解析器将忽略 XML 头中的编码设置。在这种情况下,用户负责提供适当的字符流。
JDBC
设置 WebLogic jDriver for Oracle 的使用环境
要使用 weblogic.jdbc.oci.Driver,请按如下所示设置环境。请注意,需要设置 jDriver 许可证。
将下列更改添加到 startWebLogic.cmd 文件。
指定 Oracle 的 bin 目录的路径和 WebLogic Oracle Oci 驱动程序本地库的 bin 目录的路径。请根据 Oracle 版本使用相应的 Oci 驱动程序。
对于 Oracle 8.1.7:%WL_HOME%\bin\oci817_8;d:\oracle\ora81\bin
对于 Oracle 9.0.1:%WL_HOME%\bin\oci901_8;d:\oracle\ora90\bin
指定 Oracle 环境变量 NLS_LANG。
NLS_LANG 的编码与 weblogic.codeset(jDriver for Oracle 的连接属性)的编码必须始终相同。
NLS_LANG = SIMPLIFIED CHINESE_CHINA.ZHS16GBK有关 NLS_LANG 与 weblogic.codeset 之间的关系的信息,请参阅“Configuring and Using WebLogic jDriver for Oracle”中的 Advanced Oracle Features。如果可以指定下列编码:为 Oracle 数据库指定 ZHS16GBK、为 NLS_LANG 指定 SIMPLIFIED CHINESE_CHINA.ZHS16GBK 以及为 weblogic.codeset 指定 MS936,则 Windows 平台上使用的字符集可以存储在 Oracle 数据库中。
现在,无需使用 WebLogic Server 的连接池,即可使用 WebLogic Server jDriver for Oracle。例如,可以直接从 JDBC 客户端(如 JSP 或 Servlet)连接到数据库。有关当 JDBC 客户端使用 WebLogic Server jDriver for Oracle 时的编程信息,请参阅“Configuring and Using WebLogic jDriver for Oracle”中的 Connecting to an Oracle DBMS。
如果使用连接池,需要在管理控制台中进行下列设置。有关如何设置连接池的详细信息,请参阅“Installing and Using WebLogic jDriver for Oracle”中“Installing WebLogic jDriver for Oracle”一章的 Setting Up a Connection Pools 部分。下面是设置样例。
管理控制台
设置连接属性。
URL:jdbc:weblogic:oracleDriver Class Name:weblogic.jdbc.oci.DriverProperties:user=scottpassword=tigerserver=ora81weblogic.codeset=MS936选择要在目标中使用的服务器或群集。
重新启动 WebLogic Server。 现在即可使用 WebLogic Server jDriver for Oracle。
设置 Oracle Oci 驱动程序的使用环境
将下列更改添加到 startWebLogic.cmd 文件。
将下列内容添加到 CLASSPATH 环境变量:
d:\oracle\ora81\jdbc\lib\classes12.zip;d:\oracle\ora81\jdbc\lib\nls_charset12.zip将下列目录添加到 PATH 环境变量:
c:\oracle\ora81\bin现在,无需使用 WebLogic Server 的连接池,即可使用 Oracle Oci 驱动程序。例如,可以直接从 JDBC 客户端(如 JSP 或 Servlet)连接到数据库。有关当 JDBC 客户端使用 Oracle Oci 驱动程序时的编程信息,请参阅 Oracle 文档。
如果使用连接池,需要在管理控制台中进行下列设置。下面是设置样例。
在管理控制台中设置下列内容:
设置连接属性。
URL:jdbc:oracle:oci8:@ora81Driver Class Name:oracle.jdbc.driver.OracleDriverProperties:user=scottpassword=tiger选择要在目标中使用的服务器或群集。
重新启动 WebLogic Server。 现在即可使用 Oracle Oci 驱动程序。
设置 Oracle 瘦驱动程序的使用环境
对于瘦驱动程序,不需要指定 NLS_LANG 环境变量。
将下列更改添加到 startWebLogic.cmd 文件。
将下列内容添加到 CLASSPATH 环境变量:
d:\oracle\ora81\jdbc\lib\classes12.zip;d:\oracle\ora81\jdbc\lib\nls_charset12.zip将下列目录添加到 PATH 环境变量:
c:\oracle\ora81\bin现在,无需使用 WebLogic Server 的连接池,即可使用 Oracle 瘦驱动程序。例如,可以直接从 JDBC 客户端(如 JSP 或 Servlet)连接到数据库。有关当 JDBC 客户端使用 Oracle 瘦驱动程序时的编程信息,请参阅 Oracle 文档。
如果使用连接池,需要在管理控制台中进行下列设置。下面是设置样例。
在管理控制台中设置下列内容:
设置连接属性。
URL:jdbc:oracle:thin:@jpsol1:1521:ora81Driver Class Name:oracle.jdbc.driver.OracleDriverProperties:user=scottpassword=tiger选择要在目标中使用的服务器或群集。
重新启动 WebLogic Server。 现在即可使用 Oracle 瘦驱动程序。
同时连接到编码不同的数据库时的限制
使用 OCI 驱动程序时,必须为 NLS_LANG 和 weblogic.codeset 指定相同的编码。如果这些参数设置为相同的值,将在 Oracle 端执行编码转换,因为您是作为具有特定 NLS_LANG 的客户端连接到 Oracle 端的。如果两个参数相同,则无论数据库的编码如何,都能成功进行连接。
WebLogic Server 中 I18n 的主要特性:
在 WebLogic Server 内部,所有字符都按 Unicode 进行处理。只要输入或输出字符数据,就执行代码转换。 必须分别为 WebLogic Server、J2EE 组件和 WebLogic Server 容器上的资源指定适当的编码转换。 如果不指定编码转换,系统将应用默认的编码转换。 存在各种类型的默认编码转换,其中的一些编码转换不符合操作系统的区域设置。 在使用 WebLogic Server 生成用于处理多字节字符数据的分布式系统之前,应该了解如何指定有关 Java 和 J2EE 的适当编码。而且,在控制编码转换时,应该适当考虑连接到 WebLogic Server 的系统(例如,操作系统、Internet、后端系统)的编码处理。
下面简要描述了 WebLogic Server 中的编码处理。
Unicode 的使用
WebLogic Server 是一种 100% 纯 Java 应用服务器程序,它使用 Unicode 进行服务器内部编码。
这样 WebLogic Server 就能同时处理所有语言的字符(只要 Unicode 能够处理这些字符)。
编码转换
当 WebLogic Server 与外部交换字符数据时,需要进行编码转换。
Unicode 是 Java 的内部编码,而在普通的操作系统中,几乎没有任何环境使用 Unicode,它们使用的是为每个平台单独定义的称为“本地编码”的编码。例如,Windows 系统的本地编码是一个与语言有关的代码页,Unix 系统的本地编码是与用 LANG 环境变量指定的区域设置相对应的编码,数据库的本地编码是在创建数据库时指定的字符集或者由客户端指定的字符集。
因此,在 WebLogic Server 中进行输入和输出时,需要进行本地编码与 Unicode 之间的编码转换。当 WebLogic Server 与操作系统或外部资源交换字符数据时,总会发生这种编码转换。
注意:序列化的 Java 类流中包含的字符作为(UTF-8 编码的)Unicode 保存在该类的内部信息中。这意味着无需考虑序列化流的代码转换。例如,对于 EJB 或 RMI 无需考虑编码。
因为编码转换是针对单个字符进行的,所以转换过程会占用大量 CPU 资源。在设计应用程序时,最好避免进行代码转换,以确保系统性能较高。
WebLogic Server 服务器自身的编码转换与应用程序组件和资源的编码转换是相互独立的
在 WebLogic Server 中,服务器本身的编码转换与 WebLogic Server 上应用程序组件和资源的编码转换是分开的。
在 WebLogic Server 中,服务器日志或管理控制台的编码是由服务器的 Java VM 或浏览器的语言设置的默认编码确定的,而与应用程序组件的编码或 WebLogic Server 提供的内容所用的语言无关。
而且,在配置 WebLogic Server 的行为时,可以不考虑 WebLogic Server 使用的区域设置或语言设置。
还可以为在 WebLogic Server 容器上配置的资源单独设置编码转换。
WebLogic Server 本身的编码转换包括:
WebLogic Server 的系统日志输出 管理控制台的页面编码 WebLogic Server 和本地文件系统之间的文件 I/O 单个应用程序的编码转换包括:
JSP 文件 Servlet DD 文件 XML Web Service WebLogic Server 上的资源包括:
JDBC 连接 WTC 连接等 为 WebLogic Server 指定编码时,需要弄清楚要为哪些类别指定编码,然后需要查看是否可以创建有效的 Character 对象,以及 WebLogic Server 中的 Character 对象是否可以正确地转换为所需的编码。
如上所述,您应该了解编码转换行为,以便进行正确的设置。如果不指定编码转换,应用程序将无法正确处理多字节字符。
如果不指定编码,将使用适合情况的默认编码。默认编码可能因目标的规范或环境而异。
默认编码示例
影响 WebLogic Server 行为的默认编码包括:
服务器 VM 的默认编码 J2EE 的默认编码 XML 的默认编码 HTTP 协议的默认编码 浏览器的默认编码 Web Service(例如,SOAP、WSDL、UDDI)的默认编码等 示例:
在简体中文版的 Windows 中,服务器 VM 的默认编码通常是 MS936。 J2EE 的默认编码通常是 ISO-8859-1。 XML 的默认编码通常是 UTF-8。 HTTP 的默认编码通常是 US-ASCII。 因为不同的默认编码用于不同的目标(如上所述),所以,如果没有指定适当的编码,WebLogic Server 就无法正确地处理简体中文。为了能够控制编码转换,您应该先了解下列内容。
在 Java 语言术语中,编码意味着“字符集”。描述字符集的词很多,但是每个词的定义略有不同。
编码或字符集意味着一种定义,根据这种定义,将计算机可读代码分配给特定语言的字符集合,以便计算机可以处理这些字符。
Java 语言在其 I/O 部分中包括了这些差异,以便可以在其内部以 Unicode 形式处理所有字符。这意味着对于任何字符集来说,只要它的编码定义存在,Java 就可以处理它。Java 基本上可以包括各种系统之间存在的任何编码差异。但是,目前还没有一个编码转换表可以处理目前全部现有编码之间的所有细微差异。同样,现有的编码表存在一些限制,这些限制源自与 Unicode 的一致性问题。
在 Java Web 应用程序服务器中,Java 编码名称和 MIME 字符集(由 IANA 定义并在 Internet 和 XML 中使用)之间的差异尤其重要。WebLogic Server 使用一个映射表将 Java 编码名称与 IANA 字符集名称相关联,从而包括这种差异。使用该映射表,WebLogic Server 可以将 JSP 上定义为“Shift_JIS”的文件作为具有 Java 编码名称的“MS932”来处理。可以修改 WebLogic Server 的映射表,让其将“Shift_JIS”字符集作为“cp943”Java 编码来处理。
Xerces 是 WebLogic Server 的内置 XML 解析器,它具有自己的 IANA-Java 映射表。用户不能对这种映射进行自定义。
WebLogic Server 主要使用 Java 编码名称来指定编码。J2EE、Internet 或 XML 主要使用 IANA 字符集名称,您可以根据需要修改这种映射。
安装
WebLogic Server 提供简体中文版安装程序和英语版安装程序。两者均可从 BEA Systems, Inc. 网站下载。
简体中文版安装程序和英语版安装程序之间的区别在于:就影响 WebLogic Server 行为的程序文件而言,这两个安装程序是相同的,您可以将它们视为具有相同的软件。而且,从英语版安装程序启动的 WebLogic Server 实例和从简体中文版安装程序启动的另一个实例之间没有任何互操作性问题。
共性:
所有的 WebLogic Server 类文件(weblogic.jar 和其他文件) 版本字符串 消息目录和管理控制台联机帮助中的语言 区别:
一些经过翻译的文本文件 about_wls/readme.txt/index.jsp 或 html WebLogic Builder 联机帮助 简体中文版的 WebLogic Server 8.1 不支持下列功能:
智能更新 网络安装程序
WebLogic Server 系统管理
下列项目使用 WebLogic Server 的 JVM 默认编码:
WebLogic Server 的错误日志输出 与本地文件系统之间的文件输入和输出 下列项目使用浏览器的默认语言:
管理控制台 要更改日志输出等的编码,使其使用服务器的默认编码,请执行下列过程:
WebLogic Server 和 Java Virtual Machine 中的编码
在 WebLogic Server 中,可以设置范围不同的编码。例如,JSP 有一个用来指定页面特定编码的 page 标记,该 page 标记符合 JSP 1.2 规范。在使用 WebLogic jDriver 时,还可以使用 weblogic.codeset 属性来为 JDBC 连接指定编码。请注意,为特定范围指定的编码与 WebLogic Server 所在的 Java VM 的默认编码没有任何关系。即便 Java VM 以英语区域设置运行,使用简体中文 JSP 文件提供服务也不会出现问题。但是,对下列字符串的处理取决于 Java VM 默认编码:
WebLogic Server 的错误日志输出 与本地文件系统之间的文件输入和输出 这些字符串使用每个平台的 Java VM 默认编码(由 file.encoding Java 系统属性指定的编码)。例如,WebLogic Server 输出到终端控制台的日志消息的语言和编码取决于在 Java VM 中指定的编码。file.encoding java 系统属性基于平台环境和系统区域设置。如果希望切换 WebLogic Server 日志消息的语言和编码,则需要对系统区域设置进行相应切换。一旦 VM 启动,就不能动态切换 Java VM 默认编码。在重新启动 WebLogic Server 之前,请确保进行了下列设置。
Windows 2000/Windows NT
在“控制面板”的“区域选项”中选择“英语(美国)”或“简体中文”。这允许服务器使用 CP1252 或 MS936 作为默认编码。
UNIX
在 LANG 环境变量中指定您的平台支持的区域设置。
下面列出了服务器编码和 LANG 环境变量的设置:
表 2-1 服务器编码和 LANG 环境变量的设置
平台
编码
LANG 环境变量
Solaris
GB2312、GBK、GB18030
zh_CN、zh_CN.GBK 或 zh_CN.GB18030
HP
GB2312
zh_CN.hp15CN
例如,如果为 Solaris 指定 GB2312,则 LANG 设置应如下所示:
LANG=zh_CN如何检查服务器编码
Java VM 默认编码变成 WebLogic Server 默认编码。可以通过参考管理控制台中的日志消息来检查编码。检查步骤如下:
在管理控制台上,在左窗格中用鼠标右键单击服务器名,然后选择“查看服务器日志”。 单击“自定义此视图”。 在“子字符串”框中,输入“file.encoding”。 单击“应用”按钮。
所显示的编码是服务器编码。
关于配置管理和受管服务器的说明
在 WebLogic Server 中,对于一个域中的所有服务器必须使用相同的编码。
如果某个服务器的编码不同于群集中存在的其他编码,则该服务器的日志将无法正确显示。
例如,如果域中有一个 Windows 平台,则该域中所有的编码都应当是相同的 GB2312 类型的编码,如 MS936。如果某个服务器的编码不同于该域中存在的其他编码,则该服务器的日志将无法正确显示。
关于配置群集的说明
在 WebLogic Server 中,对于一个群集中的所有服务器必须使用相同的编码。
在使用 WebLogic Server 时,应当用相同的编码配置该群集中的所有服务器。
例如,如果群集中有一个 Windows 平台,则该群集中所有的编码都应当是相同的 GB2312 类型的编码,如 MS936。如果某个服务器的编码不同于存在的其他编码,则该服务器的日志将无法正确显示。
config.xml 的编码
config.xml 文件是 UTF-8 形式的输入/输出。在用文本编辑器直接编辑该文件时,请以 UTF-8 形式进行读取和保存。
关于将 WebLogic Server 用作 Web 服务器的说明
下面列出了关于将 WebLogic Server 用作 Web 服务器的说明:
要将 contentType 字符集参数添加到 HTTP 头中以提供 HTML 文件,请在 web.xml 文件中插入下列定义,这些定义可以为 HTML 文件显式指定编码:
<mime-mapping> <extension>html</extension> <mime-type>text/html;charset=GB2312</mime-type></mime-mapping>这允许您通过使用如下所示的 META 标记来忽略 HTML 文件中的字符集设置:
<META HTTP-EQUIV="content-type" CONTENT="text/html; charset=GB2312">JDBC 连接
在创建 JDBC 连接池时,对于使用多字节字符的数据库,必须为到该数据库的连接指定适当的编码。您可能需要对 Web 层和 DB 层之间的编码转换映射进行匹配。
有关详细信息,请参阅“Configuring and Using WebLogic jDriver for Oracle”中 Advanced Oracle Features 一章的“Codeset Support”。
部署
在 WebLogic Server 的 J2EE 组件的 DD 文件中,多字节字符的编码按照 XML 声明中指定的编码进行处理。如果 DD 文件中没有 XML 声明或者 XML 声明中没有编码特性,将以 UTF-8 编码处理该文件。
在 WebLogic Builder 或管理控制台中编辑 DD 文件并保存所做的更改时,该文件的编码将与初始文件中的相同。
在 WebLogic Builder 或管理控制台中创建的 DD 文件没有 XML 声明。更改这些文件的编码时,请在 XML 声明中设置编码特性,并为该文件设置相应的编码转换。
关于使用管理控制台的说明
管理控制台启动时使用的语言
管理控制台首次启动时显示的语言是在 Web 浏览器中指定的首选语言。例如,如果使用的是简体中文版本的 Windows 和 Internet Explorer,则管理控制台在首次启动时将显示简体中文。如果希望将首次显示的语言更改为英语,可以将浏览器中的首选语言设置为英语。
在 WebLogic Server 8.1 中可以选择的管理控制台语言
简体中文/EUC-CN 简体中文/GBK 简体中文/GB18030 英语 请根据管理控制台所连接到的管理服务器的编码,选择 GB2312、GBK 或 GB18030。
在管理控制台启动之后切换语言
在管理控制台主页的“首选项”页上,从“语言”下拉列表中选择所需的语言。
编程
关于使用 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。
JSP
指定 JSP 文件的编码 - pageEncoding(可选)
要指定 WebLogic Server JSP 容器或 JSP 编译器用来读取 JSP 文件的编码,请在 page 标记中指定 pageEncoding 指令,如下所示:
<%@ page contentType="text/html; charset=GB2312" pageEncoding="GB2312" %>指定页面输出的编码 - page 标记中的 contentType 指令
要指定页面输出的编码,请在 page 标记中指定 contentType 指令,如下所示:
<%@ page contentType="text/html; charset=GB2312" %>另外,当您在 page 指令中指定 contentType 时,会在 HTTP 响应的 HTTP 头中指定同样的 contentType,这意味着同时指定了浏览器显示的编码。
如果未设置 pageEncoding 指令,会将 contentType 指令用作读取 JSP 文件的编码。
如果 JSP 容器找到 contentType 设置,会停止解析 JSP 文件,将文件读取器切换到这个新指定的编码,重新从头解析 JSP 页。如果在一个文件中指定了多个 contentType,就会出现解析错误。因此,使用静态包含将一个文件包含在另一个文件中时,如果这两个文件都有各自的编码规范,就会出现错误。在动态包含中,不会出现错误,但是将生成乱码字符。
注意:如果在一个文件中发现多个 contentType 实例,这两个实例都使用相同的值,则是有效的,不会导致解析错误。(有关详细信息,请参阅静态与动态包含以及编码差异)。
<jsp-param> <param-name>backwardCompatible</param-name> <param-value>true</param-value></jsp-param>例如,当使用静态包含 (<%@ include) 执行包含操作时,如果“包含源”和“包含目标”都有各自的 page 指令,并且一个转换单元有多个 page 指令,则只要每个 page 指令都指定相同的编码,就不会发生任何问题。
指定 HTTP 请求的编码
可以像在 Servlet 中一样,在 JSP 中指定 HTTP 请求的编码。有关详细信息,请参阅 Servlet 部分。
<% request.setCharacterEncoding("GB2312"); String pval = request.getParameter(pname); %>request.setCharacterEncoding or <input-charset>Servlet 和 JSP
Java 编码与 IANA 字符集之间的映射(在 weblogic.xml 中设置)
在 page 标记中使用 setContentType() 方法或 contentType 指令指定编码时,请使用 IANA 字符集名称。但是,在 Java 应用程序 WebLogic Server 中处理这些编码时,这些值必须是 Java 编码名称。WebLogic Server 内部还有默认映射,通常情况下会使用默认映射。默认映射还包含 IANA 中未定义(但通常在 HTML 的 Content-Type 中使用)的映射。(请参阅 WebLogic Server 中定义的 MIME-Java 编码映射表。)
示例:x-sjis ----> Shift_JIS
可以根据自己的需要更改此映射。请按如下所示在 Web 应用程序部署描述符中设置映射。
例如,contentType 中的“Shift_JIS”设置在 WebLogic Server 中作为 SJIS 进行处理,这是因为 IANA 字符集“Shift_JIS”映射到 Java 编码“Shift_JIS”(在 JDK1.4 中,Shift_JIS 作为 SJIS 的别名使用)。
注意:在 Java 1.3 中,IANA 字符集 GB2312 作为 MS936 处理(从 JDK 1.1.8 到 JDK 1.4.0。在 JDK1.4.1 或更高版本中,Shift_JIS 作为 SJIS 处理)。
这样通过默认设置即可使用 MS932 特定的字符集(@ 等)。
为了分配和使用与默认映射不同的编码,请使用下列步骤覆盖默认映射。在 Web 应用程序的部署描述符 (weblogic.xml) 文件中配置 <charset-mapping> 元素。
在下面的示例中,Shift_JIS 映射到 MS932。
<charset-params> <charset-mapping> <iana-charset-name>Shift_JIS</iana-charset-name> <java-charset-name>MS932</java-charset-name> </charset-mapping></charset-params>请注意,此设置不符合 J2EE。在 WebLogic Server 6.0 中,它在 web.xml 中进行设置。在 WebLogic Server 6.1 或更高版本中,它已经更改为在 Web 应用程序部署描述符 weblogic.xml 中进行设置。同时,元素名称等也进行了更改。因此,如果从 WebLogic Server 6.0 迁移,需要修改 weblogic.xml 和 web.xml 文件。
使用 ISO-8859-1 编码对 HTTP 请求进行编码的方法
如果在 <input-charset> 中将 ISO-8859-1 指定为 HTTP 请求的编码,您仍可以使用下列方法获取具有另一编码的 HTTP 请求。
示例:
new String(request.getParameter(itemQ[i]).getBytes ("8859_1"), "GB2312")但是,如果 HTTP 客户端用于 HTTP 响应的 HTTP 头中的 contentType 按如下方式指定,则该 HTTP 客户端不能使用此方法。这是因为 HTTP 头中的 contentType 中指定的编码优先于 <input-charset> 中指定的编码。在这种情况下,必须修改应用程序代码。
Content-Type:application/x-www-form-urlencoded;charset=gb2312静态与动态包含以及编码差异
静态包含
<%@ include file="relativeURL" %>在这种情况下,在执行 JSP 编译之前,将在一个文件中加载和收集所有包含文件。在 WebLogic Server 6.1 或更早版本中,如果在执行包含操作的文件中指定编码,则被包含的文件将作为编码与包含文件相同的文件进行处理(即使尚未指定其编码)。在 WebLogic Server 8.1 中,如果它们有各自的 page 指令,则会出现编译错误。要避免此问题,请将 weblogic.xml 中的“backwardCompatible”设置为 True。
如果“包含源”与“包含目标”的编码设置不同,则会出现 JSP 编译错误。
动态包含
<jsp:include page="{ relativeURL | <%= expression %>}" flush="true" />如果使用 jsp:include,加载页面时不会包含此页面,而是留在标记状态中。当执行 JSP 时将包含此页面。因此,执行包含操作的 JSP 中设置的编码不会应用于被包含的文件。
因此,还必须在被包含的文件中指定编码。
CGIServlet
将使用多字节字符的 CGI 服务迁移到 WebLogic Server 中的 CGI Servlet 时,必须在 CGI 程序生成的 HTTP 头中指定适当的 contentType 字符集参数。如果未设置 contentType,则使用 ISO-8859-1,它是 J2EE Servlet 容器的默认编码。
还必须使用 input-charset 参数,以便从客户端正确接收输入字符串。您需要将它写入到目标 Web 应用程序的 DD 文件中。如果未设置它,则使用 ISO-8859-1。
WebService
SOAP 消息及其编码的处理
接收 SOAP 消息
在 WebLogic Server Web Service 中,编码处理符合 SOAP1.1 和 SOAP1.2 规范(*注释 1)。SOAP 1.1 HTTP/SOAP 消息的媒体类型是“text/xml”,其编码处理在 RFC2376 中定义。对于 SOAP 1.2 HTTP/SOAP 消息,媒体类型是“application/soap+xml”,其编码处理在 RFC3023 中定义。这些 RFC 规范定义下列行为:
SOAP 1.1
HTTP 头中的 ContentType 字符集参数用于确定 HTTP/SOAP 请求的编码。 忽略 XML 声明中的编码特性。 如果未使用 contentType 指定字符集,则此消息将作为 US-ASCII 进行处理。 SOAP 1.2
HTTP 头中的 ContentType 字符集参数用于确定 HTTP/SOAP 请求的编码。 忽略 XML 声明中的编码特性。 如果未使用 contentType 指定字符集,则使用 XML 声明中的编码特性。 如果未指定 XML 声明中的 contentType 字符集参数或编码特性,则此消息将作为 UTF-8 进行处理。 与 WebLogic Server 一样,WebLogic Workshop 也根据此规范进行操作。因此,对于使用 HTTP/SOAP 来调用 WebLogic Workshop 开发的 Web Service 的客户端,请确保指定了正确的 contentType 字符集。
发送 SOAP 消息
WebLogic Server 生成的所有 HTTP/SOAP 消息都以 UTF-8 编码。在生成过程中,会将“encoding=UTF-8”添加到 SOAP 消息的 HTTP 头中。
注意:以英语区域(locale)设置(例如在 UNIX 中指定 LANG=C)启动 WebLogic Server 时,在 SOAP 消息中只能使用 us-ascii 字符,不支持其他字符。如果要在 Web Service 中使用简体中文字符,请使用简体中文区域(locale)设置启动 WebLogic Server。
如果要在以英语区域设置启动的 WebLogic Server 上使用 us-ascii 之外的其他字符,请在 WebLogic Server 启动脚本文件中设置下列启动选项。这甚至可以使 WebLogic Server 在英语区域设置环境中以 UTF-8 生成消息。
注意:对于 SOAP 消息,强烈建议使用 UTF-8。
-Iweblogic.webservice.i18n.charset=utf-8Web Service 主页
Web Service 主页是以服务器 VM 默认编码生成的。
UDDI 浏览器
UDDI 浏览器只支持 us-ascii 字符。它不能正确处理多字节字符。
XML --- StreamParser 中的多字节字符处理
要将编码信息添加到使用 XML 流 API 生成的 XML 头中,请按如下方式使用 ElementFactory 类的 createStartDocument():
XMLOutputStreamFactory factory = XMLOutputStreamFactory.newInstance();XMLOutputStream output = factory.newOutputStream(new OutputStreamWriter(new FileOutputStream(fname),"GB2312")); output.add(ElementFactory.createStartDocument("GB2312","1.0"));output.flush();下面是关于使用 XML 流 API 解析包含简体中文字符的 XML 文档的说明。
当通过流为解析器提供输入时,请使用字节流。这可以启用解析器的 XML 编码自动检测。解析器可以生成字符流,该字符流使用由 XML 声明中的编码特性指定的编码,从而确保能够进行正确的解析。
当通过 Unicode 字符流提供输入时,解析器将忽略 XML 头中的编码设置。在这种情况下,用户负责提供适当的字符流。
JDBC
设置 WebLogic jDriver for Oracle 的使用环境
要使用 weblogic.jdbc.oci.Driver,请按如下所示设置环境。请注意,需要设置 jDriver 许可证。
将下列更改添加到 startWebLogic.cmd 文件。
指定 Oracle 的 bin 目录的路径和 WebLogic Oracle Oci 驱动程序本地库的 bin 目录的路径。请根据 Oracle 版本使用相应的 Oci 驱动程序。
对于 Oracle 8.1.7:%WL_HOME%\bin\oci817_8;d:\oracle\ora81\bin
对于 Oracle 9.0.1:%WL_HOME%\bin\oci901_8;d:\oracle\ora90\bin
指定 Oracle 环境变量 NLS_LANG。
NLS_LANG 的编码与 weblogic.codeset(jDriver for Oracle 的连接属性)的编码必须始终相同。
NLS_LANG = SIMPLIFIED CHINESE_CHINA.ZHS16GBK有关 NLS_LANG 与 weblogic.codeset 之间的关系的信息,请参阅“Configuring and Using WebLogic jDriver for Oracle”中的 Advanced Oracle Features。如果可以指定下列编码:为 Oracle 数据库指定 ZHS16GBK、为 NLS_LANG 指定 SIMPLIFIED CHINESE_CHINA.ZHS16GBK 以及为 weblogic.codeset 指定 MS936,则 Windows 平台上使用的字符集可以存储在 Oracle 数据库中。
现在,无需使用 WebLogic Server 的连接池,即可使用 WebLogic Server jDriver for Oracle。例如,可以直接从 JDBC 客户端(如 JSP 或 Servlet)连接到数据库。有关当 JDBC 客户端使用 WebLogic Server jDriver for Oracle 时的编程信息,请参阅“Configuring and Using WebLogic jDriver for Oracle”中的 Connecting to an Oracle DBMS。
如果使用连接池,需要在管理控制台中进行下列设置。有关如何设置连接池的详细信息,请参阅“Installing and Using WebLogic jDriver for Oracle”中“Installing WebLogic jDriver for Oracle”一章的 Setting Up a Connection Pools 部分。下面是设置样例。
管理控制台
设置连接属性。
URL:jdbc:weblogic:oracleDriver Class Name:weblogic.jdbc.oci.DriverProperties:user=scottpassword=tigerserver=ora81weblogic.codeset=MS936选择要在目标中使用的服务器或群集。
重新启动 WebLogic Server。 现在即可使用 WebLogic Server jDriver for Oracle。
设置 Oracle Oci 驱动程序的使用环境
将下列更改添加到 startWebLogic.cmd 文件。
将下列内容添加到 CLASSPATH 环境变量:
d:\oracle\ora81\jdbc\lib\classes12.zip;d:\oracle\ora81\jdbc\lib\nls_charset12.zip将下列目录添加到 PATH 环境变量:
c:\oracle\ora81\bin现在,无需使用 WebLogic Server 的连接池,即可使用 Oracle Oci 驱动程序。例如,可以直接从 JDBC 客户端(如 JSP 或 Servlet)连接到数据库。有关当 JDBC 客户端使用 Oracle Oci 驱动程序时的编程信息,请参阅 Oracle 文档。
如果使用连接池,需要在管理控制台中进行下列设置。下面是设置样例。
在管理控制台中设置下列内容:
设置连接属性。
URL:jdbc:oracle:oci8:@ora81Driver Class Name:oracle.jdbc.driver.OracleDriverProperties:user=scottpassword=tiger选择要在目标中使用的服务器或群集。
重新启动 WebLogic Server。 现在即可使用 Oracle Oci 驱动程序。
设置 Oracle 瘦驱动程序的使用环境
对于瘦驱动程序,不需要指定 NLS_LANG 环境变量。
将下列更改添加到 startWebLogic.cmd 文件。
将下列内容添加到 CLASSPATH 环境变量:
d:\oracle\ora81\jdbc\lib\classes12.zip;d:\oracle\ora81\jdbc\lib\nls_charset12.zip将下列目录添加到 PATH 环境变量:
c:\oracle\ora81\bin现在,无需使用 WebLogic Server 的连接池,即可使用 Oracle 瘦驱动程序。例如,可以直接从 JDBC 客户端(如 JSP 或 Servlet)连接到数据库。有关当 JDBC 客户端使用 Oracle 瘦驱动程序时的编程信息,请参阅 Oracle 文档。
如果使用连接池,需要在管理控制台中进行下列设置。下面是设置样例。
在管理控制台中设置下列内容:
设置连接属性。
URL:jdbc:oracle:thin:@jpsol1:1521:ora81Driver Class Name:oracle.jdbc.driver.OracleDriverProperties:user=scottpassword=tiger选择要在目标中使用的服务器或群集。
重新启动 WebLogic Server。 现在即可使用 Oracle 瘦驱动程序。
同时连接到编码不同的数据库时的限制
使用 OCI 驱动程序时,必须为 NLS_LANG 和 weblogic.codeset 指定相同的编码。如果这些参数设置为相同的值,将在 Oracle 端执行编码转换,因为您是作为具有特定 NLS_LANG 的客户端连接到 Oracle 端的。如果两个参数相同,则无论数据库的编码如何,都能成功进行连接。
相关推荐
10. **国际化与本地化**:考虑到全球市场,9.0版本提供了多语言支持,包括中文,以满足不同地区用户的需求。 这份白皮书是理解WebLogic Server 9.0核心特性和企业级应用部署的关键资源,对于开发人员、系统管理员和...
管理员可以使用WebLogic Scripting Tool来自动化WebLogic Server域的管理任务。 Fixed Asset Depreciation Rule Components方面 Fixed Asset Depreciation Rule Components是一种资产折旧规则组件,用于计算资产...
WebLogic WorkShop 8.1的国际化概述部分提到,要在简体中文环境下使用WebLogic WorkShop,需要在WebLogic Server环境中实现特定功能,因为WebLogic WorkShop是工作在WebLogic Server的环境下的。而WebLogic Server对...
WebLogic Workshop 8.1的国际化支持有了显著提升,但需要注意的是,它在WebLogic Server环境下运行,因此WebLogic Server的任何限制都可能影响到Web服务的使用。特别是在处理SOAP消息时,编码问题至关重要。 根据...
7. **国际化与本地化**:WebLogic Server支持多种语言,Javadoc会说明如何创建和使用本地化资源,以便应用能适应全球用户。 8. **性能调优**:文档还可能包含关于性能优化的建议和API,帮助开发者最大化服务器的...
9. **多语言支持**:OEPE考虑到了国际化需求,支持多种语言界面,包括简体中文,帮助中国开发者更便捷地使用。 10. **持续集成**:OEPE还可以与持续集成工具(如Jenkins)集成,实现自动化构建和测试,提高软件开发...
IPlanet Application Server包含事务监控器、负载均衡、集群和故障转移支持,以及XML解析和XSLT引擎,同时提供全面的国际化支持。 【Oracle IAS】 Oracle Internet Application Server (IAS)是一款基于Java的Web...
- **国际化支持**:全面支持国际化需求,适用于跨国企业的应用部署。 **应用场景**: 适用于需要高性能、高可伸缩性和高可用性的Web应用部署,特别是在企业级应用开发和部署中表现突出。 #### 总结 以上介绍的四...
- BEA的产品系列包括一系列符合国际标准的中间件产品,如WebLogic Server,它是一个高性能的Java EE应用服务器,支持开发、集成、部署和管理企业级应用程序。 - WebLogic Cluster技术提供了高可用性和可伸缩性,...
这种缩写方式在技术领域较为常见,类似地还有 i18n(国际化)。 - **应用**:在 WebLogic Portal (WLP) 中,p13n 相关的功能主要集中在 Personalization Server 中,这部分功能涉及到用户界面的个性化展示和内容定制...
BEA WebLogic Server作为业界第一的应用服务器,它具有里程碑式的意义,是第一个交易中间件,首个纯Java商用应用服务器,首个CORBA OTM(对象事务管理器),以及第一个纯Java电子商务组件系列。这款产品在全球范围内...
BEA WebLogic Server是业界首个纯Java的应用服务器,它提供了高可用性、可伸缩性和性能,能够处理大量交易,是许多大型企业的首选平台。BEA的产品在世界各地广泛应用,包括许多《财富》全球100强企业,如ABN AMRO、...
6. **多语言和国际化支持**:支持多种语言和地区设置,便于全球化部署。 7. **可扩展性**:允许开发者通过插件和其他扩展机制来增强门户的功能。 #### 三、关键开发任务 - **创建门户页面**:学习如何设计和构建...
从给定的中软国际内部培训资料中,我们可以提炼出一系列关键的IT知识点,主要集中在金融领域的软件开发和系统管理方面。以下是对标题和描述中提及的知识点的详细阐述: ### 1. Java基础知识 Java作为一门广泛使用...
5. **国际化支持**:JSTL提供了处理国际化和本地化的标签,如`fmt:formatNumber`和`fmt:message`等。 **JSTL的局限性** 虽然JSTL在很多方面提高了JSP的开发效率,但也存在一些限制,比如: 1. **性能问题**:与...
9. **国际化与本地化**:支持多语言应用的开发,提供资源文件管理,方便进行国际化和本地化工作。 10. **帮助与文档**:Oracle JDeveloper 10g提供了详细的官方文档和教程,包括中文版,帮助开发者快速上手并掌握...
8. **国际化和本地化**:讨论如何创建能够适应不同语言和文化环境的客户端应用程序。 9. **API和库的使用**:介绍Solaris 9及Sun ONE Application Server提供的各种API和库,帮助开发者构建功能丰富的客户端应用。 ...