返回页首 上一页 下一页 WebLogic Server 8.1 SP6 的注意事项
以下部分介绍了在多字节环境(如日语、中文和朝鲜语)中使用 WebLogic Server 8.1 SP6 的注意事项,以及自从发行此版本以来的已知问题和已解决问题。
WebLogic Server 8.1 SP6 的注意事项
在 AIX 上运行 WebLogic Server SP03 时使用 ISO-2022-JP 编码的注意事项 (CR131694)
在 AIX 中运行安装有 IBM JDK1.4.2 的 WebLogic Server (SP3) 时,JSP 日语输出中的日语 ISO-2022-JP 编码需要修补程序。有关如何获取修补程序的信息,请与客户支持联系。有关如何获取修补程序的信息,请与客户支持联系。
在管理控制台的首选项中添加语言设置 (CR173345)
已在 WebLogic Server 8.1 SP3 的管理控制台首选项中添加了语言选项。下面列出了 SP3 的选项。
简体中文/GB18030
简体中文/GB2312
简体中文/GBK
简体中文/UTF-8
繁体中文/Big5
繁体中文/Big5-HKSCS
繁体中文/UTF-8
英语
英语/UTF-8
日语/EUC-JP
日语/Shift_JIS
日语/UTF-8
朝鲜语/EUC-KR
朝鲜语/UTF-8
包含多字节字符的用户登录到管理控制台 (CR171053)
在 WebLogic Server 8.1 SP3 中,包含多字节字符的用户名可以登录到管理控制台。
BEA Oracle Driver (Type 4) 的“codePageOverride”属性(仅在使用日语时才需注意该属性)
自 WebLogic Server 8.1 SP3 之后,已经添加了 BEA Oracle Driver (Type 4) 的“codePageOverride”属性。使用该属性时的行为及不使用该属性时的行为如下所示。
使用 codePageOverride 属性时
对于每种字符集,Oracle 数据库都具有 Unicode 和码点之间的映射。在数据库中存储或检索字符时,将会用到此映射。例如,使用 Oracle Thin 驱动程序时,Oracle 数据库服务器端将使用此映射执行数据库上的码点与 Unicode 之间的转换。
在 WebLogic Type4 Oracle 驱动程序中,codePageOverride 属性被用于执行此转换,它使用的是 JDK 转换器映射,该映射仅在目标数据库的字符集为 JA16SJIS、JA16SJISTILDE 和 JA16SJISYEN 的其中之一时才可用。codePageOverride 属性可能使用的值及其行为如下:
使用 codePageOverride=SJIS:在可用于目标数据库的字符集的所有映射中,通过使用与 JDK 的 SJIS 的转换器相匹配的映射,来确保转换成功。如果映射不匹配,则不能确保转换成功。
使用 codePageOverride=MS932:在可用于目标数据库的字符集的所有映射中,通过使用与 JDK 的 MS932 的转换器相匹配的映射,来确保转换成功。如果映射不匹配,则不能确保转换成功。
指定 codePageOverride=SJIS 与指定 codePageOverride=MS932 的不同将直接体现为 MS932 转换器与 SJIS 转换器的不同。例如,它会影响在 Unicode 中以不同方式映射的符号的处理方式,如 ~(波形破折号)和 ¢(分币符号)符号。建议根据要创建的各个系统的要求使用适当的设置。请参阅“针对由 Unicode 定义和 Java 转换器而导致的乱码字符的应对措施”(仅在使用日语时才需注意该属性)等。
省略 codePageOverride 属性时
在 WebLogic Server 8.1 SP5 或更高版本中,忽略 codePageOverride 属性时,只要目标数据库的字符集为 JA16SJIS、JA16SJISTILDE 和 JA16SJISYEN 的其中之一,则对存储在数据库中的字符的处理方法将与 Oracle Thin 驱动程序中的处理方法相同。有关从早期版本升级的版本的已更改内容及一些说明,请参阅关于 BEA WebLogic Type4 Oracle JDBC 驱动程序的 codePageOverride 属性。
关于从 jDriver for Oracle 中迁移的说明
在其字符集为 JA16SJIS 的数据库中使用 jDriver for Oracle 时,若在迁移到 WebLogic Type4 Oracle 驱动程序后发现乱码字符 ~(波形破折号),则您可以通过将数据库的字符集更改为 JA16SJISTILDE 或指定 codePageOverride=MS932 来解决此问题。
关于 Avitek 病历开发教程的说明(仅适用于日语版的安装程序)
在 %WL_HOME%\samples\server\medrec\src_ja 下安装的日语样例代码与 WebLogic Server 8.1 SP4 的代码相同。如果您需要最新版本的样例代码,请使用 %WL_HOME%\samples\server\medrec\src 下的代码。
在 Sun JDK 1.4.2_04 中使用 ISO-2022-JP 编码的问题
在由 SP3 处理的 Sun JDK 1.4.2_04 或 JRockit8.1SP3 中使用 ISO-2022-JP 编码时,有时会发生 java.nio.BufferOverflowException。这是一个 Sun JDK 缺陷,该缺陷已经在 http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5017922 中报告。如果要使用 ISO-2022-JP 编码,则应使用 Sun JDK 1.4.2_05、JRockit VM 的兼容版本或处理这些内容的 SP4。
(补充)具体而言,在使用以下代码时会出现异常。
byte[] b = "[1] ".getBytes("ISO-2022-JP");
基于表单的身份验证的输入编码规范 (CR123333)(不遵从 J2EE)
自 SP2 之后,可以为表单中基于表单的身份验证指定输入编码。将下面使用的编码名指定为 j_character_encoding。此函数在 J2EE 规范中不存在,它是 WebLogic Server 的初始函数之一。它是 WebLogic Server 的初始函数之一。
< form method="POST" action="j_security_check" >
Username: <input type="text" name="j_username">
Password: <input type="password" name="j_password">
<input type="hidden" name="j_character_encoding" value="Shift_JIS">
<input type="submit" value="Login">
<input type="reset" value="Reset">
</form>
SOAP 消息中附加的 XML 编码
在 Web Service SOAP 消息中附加 XML(javax.xml.transform.Source 对象)时,可以在 XML 头中指定可选编码。但是,当您收到消息并检索附加的 XML 数据时,头编码为 UTF-8。
安装到 UNIX 时使用的区域
使用日语版的安装程序时,请将用于启动安装程序的命令外壳的区域更改为 Shift_JIS。如果 EUC-JP、UTF-8、C 等使用 Shift_JIS 之外的其他区域,则样例代码中包含的日语文本文件将无法正确安装。使用朝鲜语、简体中文或繁体中文版的安装程序时,请将用于启动安装程序的命令外壳的区域更改为与所使用的语言相对应的区域(UTF-8 除外)。
安装时,请在以下区域环境下启动安装程序。
日语:
Solaris : ja_JP.PCK
HP : ja_JP.SJIS
Linux : ja_JP.SJIS
示例:
$ setenv LANG ja_JP.SJIS
例如,如果在所使用的 Linux 环境下不能使用 SJIS 区域(也就是说,即使运行 locale -a,ja_JP.SJIS 也不存在),则请通过以下步骤准备区域设置。
# su
# localedef -f SHIFT_JIS -i ja_JP ja_JP.SJIS
在 JDK1.4.1 或更高版本中更改“Shift_JIS”编码的别名。
在 JDK1.4.1 中,“Shift_JIS”编码作为“SJIS”编码进行处理。
WebLogic Server 8.1 SP1 及更高版本的 Service Pack 使用 JDK1.4.1 或更高版本,并会影响 Shift_JIS 区域。在 WebLogic Server 7.0 及以前的版本使用的 JDK(JDK1.3) 中,“Shift_JIS”Java 编码名的别名是“MS932”。
对于 WebLogicServer 系统中的 IANA-Java 映射,IANA 字符集名“Shift_JIS”作为 Java 编码名 Shift_JIS 进行处理。因此,在 JSP、Servlet 或 Web Service 使用 Shift_JIS 时,其操作将与以前版本不同。例如,MS932 专有字符(“@”等)将变为“?”。因此,如果希望一如既往地使用 MS932,则应当使用 IANA 名称“Windows-31j”。要使用 MS932,请采用下面的方法 1 或 2。
方法 1 --- 重写 JSP/Servlet 的程序文件。
- --- 对于 JSP,在 page 标记中将 Shift_JIS 重写为 Windows-31J。
示例:
当 JSP 中存在以下行且使用 MS932 字符时,请将
<%@ page contentType="text/html; CHARSET=Shift_JIS" %>
重写为:
<%@ page contentType="text/html; CHARSET=Windows-31J" %>
- --- 在 Servlet 中更改 setContentType() 的规范。
对于 Servlet,当存在以下规范且使用 MS932 字符时,请将
response.setContentType("text/html;charset=Shift_JIS");
重写为:
response.setContentType("text/html;charset=Windows-31J");
“Windows-31J”是使用 IANA 正式注册的字符集名称,等同于 Microsoft 代码页 932。同样,对于 Java 来说,MS932 与 Microsoft 代码页 932 相关联。因此,Java 中的“MS932”便是 IANA 的“Windows-31J”。实际上在 Java 中,“Windows-31J”也是 MS932 的别名。就目前而言,保持 Java 编码名与 IANA 名称的一致渐成趋势。如果将来希望使用对应于 Microsoft 代码页 932 的字符集,则强烈建议使用“Windows-31J”。
方法 2 --- 在 weblogic.xml 中更改映射(不遵从 J2EE)
在 weblogic.xml 部署描述符文件中,可以将 IANA 名称 Shift_JIS 强制映射为 Java 名称 Windows-31J。这样,您可以不必重写 JSP 或 Servlet 代码,便能够将 Shift_JIS 作为 Windows-31J 进行处理。请在 weblogic.xml 中包括以下项,然后重新部署 Web 应用程序。
Code List 1-1: weblogic.xml
<!DOCTYPE weblogic-web-app PUBLIC "-//BEA Systems, Inc.//DTD Web Application
8.1//EN" "http://www.bea.com/servers/wls810/dtd/weblogic810-web-jar.dtd">
<weblogic-web-app>
<charset-params>
<charset-mapping>
<iana-charset-name>Shift_JIS</iana-charset-name>
<java-charset-name>Windows-31J</java-charset-name>
</charset-mapping>
</charset-params>
</weblogic-web-app>
但是,这种方法是 WebLogic Server 特有的,不遵从 J2EE。换句话说,它不能与其他 J2EE Servlet 容器交互操作。“Shift_JIS”IANA 名称为等同于 JIS X 0201 + JIS X 0208 的字符集。因此将此字符集当作 Microsoft 代码页 932 使用是不合适的。仅在由于某些原因难于更正 JSP 或 Servlet 代码时才使用此方法。
全局字符集映射
在 WebLogicServer 8.1 中,可以使用全局 IANA-Java 字符集映射。直到现在,还特意保留了许多组件,以便将 IANA 字符集名称映射到 Java 编码名称。将这些名称汇集在一起可以保持一致性,即使在跨组件执行 IANA 名称与 Java 名称之间的映射时也是如此。
遵从 SOAP 1.2 媒体类型
在 SOAP1.2 的 HTTP SOAP 消息中使用的媒体类型是“application/soap+xml”。其操作与已在 SOAP1.1 中使用过的“text/xml”媒体类型的操作基本相同,但是,如果未在 HTTP 头的 contentType 中指定字符集,其操作会有所不同。
[HTTP,未指定 contentType 字符集]
SOAP1.1:
默认字符集是 us-ascii。在 XML 头中指定的编码将被忽略。在 WebLogic Server 8.1 中,SOAP1.1 消息遵从 RFC2376,因此该编码可被处理。
SOAP1.2:
在 XML 头中指定的编码有效。如果未在 XML 头中指定编码,则默认字符集为 UTF-8。在 WebLogic Server 8.1 中,SOAP 1.2 消息遵从 RFC3023,因此该编码可被处理。
WebLogic Server 生成的 SOAP 消息的编码规范
WebLogic Server 生成 SOAP 消息时,默认字符编码为 UTF-8。在 WebLogic Server 8.1 中,可以根据所使用的环境为生成的 SOAP 消息指定编码。
指定编码的方法有三种:第一种方法是为由 Web Service 强制生成的消息确定编码;第二种方法是在客户端 HTTP 请求的 HTTP 头中指定“Accept-Charset”参数,并针对该请求生成编码;第三种方法是在服务器启动时指定默认编码。
为生成的 SOAP 消息指定编码的方法
- web-service.xml 部署描述符的 charset 特性
- 客户端 HTTP 请求中的 Accept-Charset
- -Dweblogic.webservice.i18n.charset
注意: 服务器默认编码为 UTF-8
有关详细信息,请参阅 webservice 中的“国际化”项。
http://e-docs.bea.com/wls/docs81/webserv/i18n.html
在 URL 中使用多字节字符 (CR092089)
通过 servlet 容器(Web 容器),现在可以在 URL 中使用多字节字符。根据所使用的用户代理(Web 浏览器等),可以根据需要对服务器进行设置。
例如,如果收到以下类型的 HTTP 请求,
http://myHostName:port/myContextPath/myRequest/?myRequestParameter
myContextPath 和 myRequest 部分将按如下进行处理。
注意: myRequestParameter 部分位于 URL 后面,可以通过指定为 Servlet 的 setCharacterEncoding() 的编码或指定为 weblogic.xml 的 input-charset 的编码进行解码。对于 myHostName 部分,建议采用符合 IESG 标准的国际域名。
默认操作(通过基于 UTF-8 的编码进行 URL 解码)
如果未进行任何设置,WebLogic Server 8.1 将按如下方式处理请求。
- 对 myContextPath 和 myRequest 部分的 URL 进行解码
- 解码为 UTF-8 字符串,并生成在步骤 1) 中获取的字节流的字符串
例如,如果用户代理(Web 浏览器)是 MS IE (Microsoft Internet Explorer),则默认情况下,在地址栏中输入的多字节字符将首先编码为 UTF-8,然后进行 URL 编码。在 WebLogic Server 8.1 中,默认情况下,可以正确生成以 UTF-8 编码方式发送的此 URL 的字符串。
注意: 在 IE 的“Internet 选项”-->“高级”中,包含一个名为“总是以 UTF-8 发送 URL(需要重启动)”的选项,而且此选项必须处于启用状态(选中)。
对 URL 进行解码时指定字符编码的方法
当用户代理是 Netscape 时
如果用户代理是 Netscape,地址栏中的字符将按照 Netscape 运行环境中的字符集进行编码,然后,该字符串再次进行 URL 编码,并被发送到服务器。例如,在日语版 Windows 中编码为 Windows-31J 的字符串将进行 URL 编码。在 WebLogic Server 8.1 中,可以将此请求设置为在进行 URL 解码之后将字节流解码为 Windows-31J,从而正确接收此请求。通过下面的 WebLogicServer 启动选项,可以更改用于执行 URL 解码的编码方式。
-Dweblogic.http.URIDecodeEncoding=Windows-31J(默认值为 UTF-8)
但是,对于每个服务器实例,只能存在一个这样的设置。
使用专有的用户代理时
如果需要在请求 URI 中使用多字节字符,请将该字符串转换为 UTF-8 字节字符串,然后进行 URL 编码,再将其发送到 WebLogicServer。
W3C 建议在创建 URI 时基于 UTF-8 进行 URL 编码。(http://www.w3.org/TR/charmod/#sec-URIs)
按照 JSP J2EE 规范进行的更改(WebLogic Server 7.0 或更高版本)
在 JSP 1.2 规范中,如果存在多个 Page 指令,则产生“致命转换错误”。(CR066562)
- 摘自 JSP1.2 ---- JSP.2.10.1
JSP.2.10.1 page 指令
page 指令定义一些与页面相关的属性,并将这些属性传送到 JSP 容器。
转换单元(JSP 源文件及通过 include 指令包含的任何文件)可以包含 page 指令的多个实例,所有特性都将应用于整个转换单元(即 page 指令与位置无关)。但是,除 Import 特性之外,在给定的转换单元中,此指令定义的任何特性/值只应出现一次;Import 特性的使用次数将进行累计(使用有序集联合语义)。除此之外的其他多个特性/值定义(或重定义)将导致致命转换错误。
这就是说,如果一个编译单元出现多个 page 指令,将会产生致命转换错误。在 WebLogicServer Server 7.0 中,已对 JSP 操作进行了更改,使其符合此规范。
在将一个单独的 JSP 文件包括在静态包含文件 (<%@ include file=. . . %>) 中时,如果包含源与包含目标都有相应的 page 指令,这种更改会出现问题。在静态包含文件中,JSP 容器将计算所有的 jsp,从而会导致它们包括在一个编译单元中,而且这种情况下会生成多个 page 指令,并出现“致命转换错误”。
为避免这种问题,WebLogic Server 7.0 中准备了下列选项作为 weblogic.xml 的新参数。
代码列表 1-2:weblogic.xml 中新添加的参数
<jsp-param>
<param-name>backwardCompatible</param-name>
<param-value>true</param-value>
</jsp-param>
通过此参数,只要编码相同,即使一个编译单元中出现多个 page 指令,也不会出现错误。
J2EE 默认编码规范(WebLogic Server 7.0 或更高版本)
在 weblogic-application.xml 中,可以为整个 J2EE 企业应用程序的请求和响应指定默认字符编码。(CR065921)
在 weblogic-application.xml 中,可以通过以下参数来设置用于请求和响应的默认编码。
- webapp.encoding.usevmdefault = true | false
- webapp.encoding.default = java 编码名称
注意:在 webapp.encoding.default 中指定的值是 Java 编码名称,而不是 IANA 字符集名称。
如果同时设置了上述两个选项,将使用 webapp.encoding.usevmdefault。
可以分别设置这些响应和请求值。此外,这些选项仅会应用于响应和请求,它们不会应用于 JSP 编译过程中的编码读取操作。有关分别设置响应和请求值的方法以及 JSP 文件编码的详细信息,请参阅 programming。
代码列表 1-1: weblogic-application.xml 中的 webapp.encoding.usevmdefault 用法示例
<application-param>
<description>webapp.usevmdefault</description>
<param-name>webapp.encoding.usevmdefault</param-name>
<param-value>true</param-value>
</application-param>
或者
代码列表 1-4: weblogic_application.xml 中的 webapp.encoding.default 用法示例
<application-param>
<description>default encoding</description>
<param-name>webapp.encoding.default</param-name>
<param-value>SJIS</param-value>
</application-param>
WTC TUXEDO 域的编码规范 (CR052022)(WebLogic Server 7.0 或更高版本)
可以为 TUXEDO 域指定 wtc 域编码。在启动时指定以下参数。更改服务器的启动脚本(StartWebLogic.cmd 文件等)。
-Dweblogic.wtc.encoding=Java encoding name
此编码规范对于整个 TUXEDO 域有效。
XML -- StreamParser 中的多字节字符处理(WebLogic Server 7.0 或更高版本)
为了将编码信息添加到使用 XML 流 API 生成的 XML 头中,请按如下方式使用 ElementFactory 类的“createStartDocument()”。
XMLOutputStreamFactory factory = XMLOutputStreamFactory.newInstance();
XMLOutputStream output = factory.newOutputStream(new
OutputStreamWriter(new FileOutputStream(fname),"Shift_JIS"));
output.add(ElementFactory.createStartDocument("Shift_JIS","1.0"));
output.flush();
与 xerces 解析器相似,使用 XML 流 API 解析包含日语的 XML 文档时,请注意以下几点。
- 在解析器输入中使用流时请使用字节流。
通过使用字节流,可以使用解析器的 XML 编码自动身份验证功能。解析器在内部生成适合 XML 头编码规范的流,从而确保了解析的正确性。
- 在作为 Unicode 字符流传递时,解析器将忽略 XML 头中的编码规范。
这种情况下,用户负责传递正确的字符流。
部署描述符文件中的编码处理
在 WebLogic Builder 或管理控制台中编辑和保存部署描述符文件时,会保存初始部署描述符的编码。如果在部署描述符文件的 XML 声明中没有指定编码特性,该文件将按 UTF-8 处理。
已知问题
WebLogic Server 的已确认问题
- 当管理用户名是多字节时,受管服务器不能启动。(CR187310)
- 当受管服务器的服务器名使用多字节字符时,无法启动。(CR135902)
- 多字节资源名可能会导致 WebLogic Server 消息中出现无效字符。(CR176460)
管理控制台的已确认问题
- 如果使用多字节字符,有时无法从管理控制台更改用户的密码。
- 发送多字节字符时,管理控制台中 JMS 目标接收的字节数不正确。(CR124364)
- WebLogic 的默认身份验证提供程序的导出功能按平台默认编码方式输出文件。因此,当用户和组数据中包含多字节字符时,将无法在具有不同区域的服务器之间正确传输数据。(CR135233)
Configuration Wizard 的已确认问题
安装的已确认问题
- 如果为 BEA_HOME 或 WL_HOME 创建的域的目录路径中包含多字节字符,则 WebLogic Server 和 Configuration Wizard 将不会启动。而且,在这种情况下,WebLogic Server 卸载过程也将会遇到问题,安装时,不要在 BEA_HOME、WL_HOME 或已创建域的目录路径中包含多字节字符。(CR182236, CR207614, CR207615)
JDBC 的已确认问题
WebLogic 工具的已确认问题
- 使用 WebLogic Builder 的实体 EJB 进行编辑时,如果在树中选择了 [containerManaged]-[Finder],则即使在右侧窗格中单击 [添加] 按钮并在所显示的对话框单击 [取消],该对话框也无法关闭。
解决办法:单击对话框右上角的 [x] 按钮。
在所显示对话框的 [EJB QL] 中输入一个值后,单击 [取消] 按钮。
Web Service 的已确认问题
- UDDI API 或 UDDI 浏览器不能正确处理多字节字符。(CR103834)
已解决问题
WebLogic Server 的已解决问题
- 对于在 AIX 上使用 IBM JDK 运行的 WebLogic Server 来说,使用 ISO-2022-JP(JIS) 的 JSP 有时不能正确地输出日语。此问题已在这一版本得以解决。(CR131694)
管理控制台的已解决问题
- 安全策略设置弹出窗口出现问题,当简体中文版的 WebLogic Server 管理控制台语言设置为简体中文时,该窗口工作不正常,但此问题已在这一版本解决。(CR186756)
- 在以前的版本中,使用管理控制台上传的应用程序模块文件的文件名中不能包含多字节字符。但是,此问题已在这一版本解决。(CR135901)
- 在以前的版本中,在管理控制台中创建连接缓冲池时,如果数据库用户名包含多字节字符,将无法正确创建连接缓冲池。但是,此问题已在这一版本解决。(CR135890)
Web Service 的已解决问题
- 如果 EAR 文件中的 Web Service 的实现类的名称包含多字节字符,Clientgen 将无法正确生成客户端 JAR。此问题已在这一版本得以解决。(CR188548)
- 如果将多字节字符进行加密并从客户端应用程序发送,则不能为 weblogic.webservice.i18n.charset 指定 UTF-8 之外的其他编码。此问题已在这一版本得以解决。(CR131690)
JRockit 的已解决问题
- JRockit 的异常消息(如 FileNotFoundException)在日语区域中有时会变成无效字符。此问题已在这一版本得以解决。(CR176741)
返回页首 上一页 下一页 |