Skip navigation.

WebLogic Server のI18n(国際化)

Previous Next Contents

WebLogic Server のI18n(国際化)

以下の節では、WebLogic Serverをマルチバイト環境で使用する際の一般的な注意点について説明します。

 


国際化の概要

WebLogic Server のI18n の基本的な特徴は以下のようになります。

WebLogic Server を使ってマルチバイトの文字情報を扱う分散システムを構築する際にはJavaおよびJ2EE特有のエンコーディングの指定方法を十分に理解する必要があります。それに加えて、OS、インターネット、バックエンドシステムなど、WebLogic Server と接続するシステムのエンコーディングの扱いを十分に検討した上で、エンコーディングコンバージョンを正しくコントロールする必要があります。

それぞれの特徴を簡単に説明します。

Unicode の使用

WebLogic Server は100% pure Java アプリケーションサーバプログラムです。サーバ内部のエンコーディングにはUnicodeを使用しています。

WebLogic Server はUnicodeで扱える文字ならばどんな言語の文字でも同時に扱うことが可能です。

エンコーディングのコンバージョン

WebLogic Server の外部と文字データのやり取りをする際にはエンコーディングのコンバージョンが発生します。

通常のOSでは、Javaの内部コードであるUnicodeで動作する環境はほとんどありません。ネイティブエンコーディングと呼ばれる、個別のプラットフォームで個別に定義されたエンコーディングで動作します。例えば Windowsであれば言語に応じたコードページ、UNIXではLANG環境変数により指定されたロケールに応じたエンコーディング、DBであればDBを作成する際に指定した文字セットやクライアントの文字セットなどがネイティブエンコーディングに相当します。

このため、WebLogic Server で文字の入出力をする際に、ネイティブエンコーディングの文字とUnicodeとの間でエンコーディングを相互にコンバージョン(変換)する必要があります。このエンコーディングのコンバージョン(文字セットの変換)はOSや外部リソースとのキャラクタデータの入出力の際に常に発生します。

注意: Javaクラスをシリアライズしたストリームに含まれる文字はUnicodeのまま(UTF-8でエンコード)されてクラスの内部情報として保持されているため、コードコンバージョンは考慮する必要ありません。例えばEJBやRMIでは通常エンコーディングについて考慮する必要はありません。

また、エンコーディングのコンバージョンは文字ひとつづつに対して個別に全て行わなければならないため比較的大きなCPUリソースを必要とします。アプリケーション設計の際には、コードコンバージョンをなるべく減らす工夫がよりよいパフォーマンスにつながります。

サーバ本体とアプリケーションコンポーネントおよびWebLogic Server 上のリソースのエンコーディングコンバージョンの分離

WebLogic Server はサーバ本体のエンコーディングコンバージョンと、アプリケーションコンポーネントやWebLogic Server 上のリソースのエンコーディングコンバージョンを分離しています。

WebLogic Server はどんな言語のコンテンツをサービスしていようとも、サーバ本体のログのエンコーディングや、管理コンソールのエンコーディングはアプリケーションコンポーネントとは関係なく、サーバ本体のJavaVMのデフォルトエンコーディングやブラウザの言語設定により動作します。

また、あるアプリケーションコンポーネントをWebLogic Server にデプロイすると、どんなロケール(言語)の環境で動作する WebLogic Server であっても、全く同じ動作をするようにコンフィグレーションすることが可能です(注2)。

JDBCコネクションプールなど、WebLogic Server コンテナ上でコンフィグレーションされるリソースに対してもリソース毎に個別にエンコーディングコンバージョンのための設定をすることができます。

WebLogic Server 本体のエンコーディングコンバージョンとして以下のものがあります。

アプリケーションパッケージ個別のコンバージョンとして以下のものがあります。

WebLogic Server 上のリソースとしては以下のものがあります

そこで、WebLogicServer上でエンコーディングを指定する場合には、その指定は上記3つのカテゴリのどこに対して指定しているのかを明確にする必要があります。その上で、WebLogic Server 内に正しいCharacterオブジェクトが作れるか、もしくはWebLogic Server 内のCharacterオブジェクトが希望のエンコーディングの文字に変換されて出力されるか、常に意識する必要があります。

このように、WebLogic Server 上でマルチバイト文字を扱う場合には、エンコーディングコンバージョンの働きを一通り理解し、必要に応じて設定を行う必要があります。エンコーディングコンバージョンの設定をしなければアプリケーションは正しくマルチバイト文字を扱えない場合があります。

いずれの場合においてもエンコーディングを指定しない場合は何らかのデフォルトのエンコーディングが使用されます。デフォルトのエンコーディングはそれぞれの仕様や、環境により異なる場合があります。

デフォルトのエンコーディングの例

WebLogic Server の動作に関係するデフォルトのエンコーディングとして一例をあげると次のような種類があります。

例:

このように技術仕様によってデフォルトのエンコーディングが異なるため、エンコーディングに関する指定をまったくしない場合は、WebLogicServerではマルチバイトを正しく扱うことができません。次章以降の個別のエンコーディングの指定方法をよくご理解いただいた上でエンコーディングのコンバージョンをコントロールしてください。

エンコーディングという言葉はJavaで使われている文字セットのことですが、この言葉は場合によっていくつかの異なる呼び名があり、それぞれ若干定義が異なるので注意が必要です。

Javaでのエンコーディングやインターネット上で文字セットと呼ばれているものは、特定の言語の文字をコンピュータ上で扱えるように、その文字のまとまりをコンピュータのコード割り当てた定義のことです。

Java はこれらの違いを入出力部分で吸収し、内部では常にUnicode で扱います。このためエンコーディングの定義さえあればどんな文字セットでも扱うことができる優れた特徴をもっています。つまり、Javaはさまざまなシステム間に存在するエンコーディングの違いを全て吸収できる可能性を持った言語であると言えます。 しかしながら、現状では細かなエンコーディングの違い全てに対応したエンコーディング変換テーブルは存在しません。また既に存在するエンコーディングテーブルにもUnicodeとの整合性からいくつか制限があります。

Java Webアプリケーションサーバで特に重要なのはJavaのエンコーディング名と、InternetやXMLで使用されるIANAで定義されたMIME文字セットの違いです。WebLogic Server ではこの違いを吸収するため、Javaエンコーディング名とIANAの文字セットとの名前のマッピングテーブルを持っています。これにより、例えばJSP上ではShift_JISとして定義したファイルをJavaの MS932 として扱うことができます。 また、このWebLogic Server システムのマッピングを変更して、例えば 'Shift_JIS'という文字セット名を'cp943'というJavaエンコーディングとして扱うことも可能です。

WebLogic Server 組み込みのXMLパーサである xercesでは独自にIANAとJavaのマッピングテーブルを持っています。これはユーザ側でカスタマイズすることはできません。例えばIANAのcharset名のShift_JISはJavaのエンコーディング名のSJISにマップされています。

WebLogic Server では基本的にJavaのエンコーディング名でエンコーディングを設定するようになっています。また、J2EE、Internet、XMLではIANA文字セット名を使用します。必要に応じてこのマッピングの変更を行ってください。

 


インストール

WebLogic Server には日本語版/韓国語版/中国語版インストーラと英語版インストーラがあります。米国BEA Systems IncのWebサイトからは英語版/韓国語版/中国語版インストーラ、日本BEA Web サイトからは日本語版インストーラをダウンロードできます。

日本語版/韓国語版/中国語版と英語版との差異は以下のとおりです。WebLogic Server の動作にかかわるプログラムファイルは全て同一であり、同じソフトウェアとして扱われます。また、英語版インストーラを使用して起動したWebLogic Server と、日本語版/韓国語版/中国語版インストーラを使用して起動したWebLogic Server の相互運用についても問題はありません。

同じもの

違うもの

WebLogic Server 8.1日本語版/韓国語版/中国語版では以下は使用できません。

 


WebLogic Server システム管理

以下の項目はWebLogic Server のJVMのデフォルトのエンコーディングで動作します。

また、以下の項目はブラウザのデフォルトの言語により動作します。

サーバのデフォルトのエンコーディングで動作するログ出力のエンコーディングなどを変更したい場合は以下の手順で設定してください。

WebLogic Serverコンテナのデフォルトのエンコーディングの指定方法

WebLogic Server は様々なスコープでエンコーディングを指定することができます。例えばJSPではJSP1.2仕様に準拠したページ毎のエンコーディングの指定を行う page タグがあります。 WebLogic jDriver ではJDBC接続のエンコーディングを weblogic.codeset プロパティで設定します。このように特定のスコープ毎に指定するエンコーディングは、WebLogicServer が動作するJavaVM のデフォルトのエンコーディングとは関係がありません。JavaVMが英語のlocaleであっても、マルチバイト文字を含んだ JSP ファイルを使ったサービスをすることには何ら問題ありません。しかしながら以下の項目についてはJavaVMのデフォルトのエンコーディングに依存して文字列を取り扱います。

これらはプラットフォーム毎のJavaVMのデフォルトのエンコーディング(Java システムプロパティの file.encoding に設定されたエンコーディング)で動作します。例えば、WebLogic Serverがターミナルコンソールへ出力するログメッセージは、そのプラットフォームの環境からJavaVMがfile.encoding システムプロパティに設定したエンコーディングとシステムロケールにより言語、エンコーディングが決まります。システムのロケールを切り替えることでWebLogic Server のログメッセージの言語・エンコーディングを切り替えたい場合は以下のように指定します。なお、JavaVMのデフォルトのエンコーディングはVMの起動後に動的に切り替えることはできません。以下の設定を確認した後でWebLogic Server を再起動してください。

Windows 2000/Windows NT の場合

[コントロールパネル|地域(または地域のオプション)]から「英語(U.S)」または「日本語」、「韓国語」、「中国語(中国)」、「中国語(台湾)」などを選択します。これにより、サーバは CP1252 または MS932、MS949、GBK、MS950 などをデフォルトのエンコーディングとして動作します。

UNIX の場合

LANG 環境変数にプラットフォームでサポートするロケールを指定します。

サーバのエンコーディングと LANG 環境変数の設定は次のとおりです。

表2-1 サーバのエンコーディングと LANG 環境変数の設定

プラットフォーム

エンコーディング

LANG 環境変数

Solaris

EUCJIS 、SJIS

ja または ja_JP.eucJP、 ja_JP.PCK

Solaris

EUC-KR

ko または ko_KR

Solaris

GB2312、GBK

zh_CN または zh_CN.GBK

Solaris

Big5

zh_TW.BIG5

HP

EUCJIS、 SJIS

a_JP.eucJP、 ja_JP.SJIS

HP

EUC-KR

ko.eucKR または ko_KR

HP

GB2312

zh_CN.hp15CN

HP

Big5

zh_TW.big5

たとえば、Solaris で EUCJIS を指定する場合は次のようになります。

LANG=ja

サーバのエンコーディングの確認方法

以上のように、JavaVMのデフォルトのエンコーディングがWebLogic Serverのデフォルトのエンコーディングとなります。管理コンソールからログメッセージを参照することで確認することができます。手順は次の通りです。

  1. 管理コンソールの左ペインでサーバ名を右クリックして[サーバログを見る]を選択します。
  2. [このビューをカスタマイズ]をクリックします。
  3. [サブ文字列]テキストボックスに「file.encoding」を入力します。
  4. [適用]ボタンをクリックします。

    表示されたエンコーディングがサーバのエンコーディングです。

管理サーバ、管理対象サーバの構成上の注意

ドメイン内の全てのWebLogic Serverのエンコーディングは同じものを使用します

WebLogic Server では、ドメイン内の全てのサーバは同一エンコーディングに設定する必要があります。

例えば、ドメイン内に Windowsプラットフォームが存在する場合、ドメインをMS932などShift_JIS系のエンコーディングで統一します。エンコーディングの異なるサーバがあった場合、そのサーバのログは正しく表示する事ができません。

クラスタ構成上の注意

クラスタ内の全てのWebLogic Serverのエンコーディングは同じものを使用します

WebLogic Server では、クラスタ内の全てのサーバは同一エンコーディングに設定する必要があります。

例えば、クラスタ内に Windowsプラットフォームが存在する場合、ドメインをMS932などShift_JIS系のエンコーディングで統一します。エンコーディングの異なるサーバがあった場合、そのサーバのログは正しく表示する事ができません。

config.xml ファイルのエンコーディング

config.xml ファイルは UTF-8 で入出力します。テキストエディタなどで直接config.xml ファイルを編集する場合は、utf-8 で読込み/保存してください。

WebLogic Server をWebサーバとして使用する場合の注意点

WebLogic Server をWebサーバとして使用する場合の注意点は以下のとおりです。

HTMLファイルのサービスでHTTPヘッダの ContentTypeに charset パラメタを付加するには web.xml 中に以下の定義をすることでhtmlファイルのエンコーディングを明示することができます。

<mime-mapping>
  <extension>html</extension>
  <mime-type>text/html;charset=Shift_JIS</mime-type>
</mime-mapping>

これにより、HTMLファイル内で次のようなMETAタグによるcharset指定を省略することができます。

<META HTTP-EQUIV="content-type" CONTENT="text/html; charset=Shift_JIS">

JDBCコネクション

JDBCコネクションプールを作成する場合、マルチバイトを扱うDBへの接続にはエンコーディングの指定を正しく行う必要があります。また、その際、エンコーディングコンバージョンマッピングをWeb層とDB層で合わせる必要がある場合があります。

詳しくは 『WebLogic jDriver for Oracle のコンフィグレーションと使い方』の「Oracle の高度な機能」の「コードセットのサポート」を参照してください。

デプロイメント

WLSでは、J2EEコンポーネントのDDファイルのマルチバイト文字はXML宣言にしたがって扱います。XML宣言がない場合、もしくはXML宣言があってもencoding属性がない場合はファイルをUTF-8として扱います。

WebLogic Builder、管理コンソールでDDファイルを編集すると、ファイルは編集前のXML宣言にしたがって保存されます。

WebLogic Builder、管理コンソールでDDファイルを生成した際にはXML宣言がありません。エンコーディングを変更する場合は、ファイルのエンコーディングコンバージョンとともに、XML宣言のencoding 属性を設定してください。

管理コンソールを使用する場合の注意

管理コンソール起動時の言語について

最初に管理コンソールを起動したときに表示される言語は、お使いのWebブラウザで指定している最優先の言語になります。例えば、日本語Windowsをお使いの場合、最初に管理コンソールを起動すると、日本語で表示されます。最初に表示する言語を英語に切り替えたい場合には、ブラウザのオプション設定の「言語の優先順位」で「英語」を最優先にすることで変更できます。

WebLogic Server 8.1 で選択可能な管理コンソールの言語

エンコーディング名は管理コンソールが接続している管理サーバ側のエンコーディングに合わせて選択してください。

管理コンソール起動後の言語の切り替え

コンソールのホーム画面から、[プリファレンス]ページで[言語] のドロップダウンボックスで使いたい言語を選択します。

 


プログラミング

servlet/JSP を使用する場合の注意

設定するエンコーディングのスコープと優先順位

WebLogic Server は一つのJavaアプリケーションプログラムです。全ての文字列は内部的にはUnicodeで扱います。しかし、HTTPプロトコル上のHTMLでは様々なエンコーディングが使われています。WebLogic Server はHTMLのデータを取り扱う際にはUnicodeとHTMLのエンコーディングの間でJavaのエンコーディングコンバータを使用してエンコーディング変換を行います。このため、WebLogic Server を使用する際にはサーバ内部で扱われるUnicode文字列とHTML上のエンコーディングとの変換をアプリケーションでどう扱うかは非常に重要な問題です。

WebLogic Server には特定のスコープにもとづいてエンコーディングを指定するためのパラメータがいくつかあり、使用するアプリケーションに合わせてこの問題に対処できるようになっています。

また、WebLogic Server では使用する個々のモジュールそれぞれに対してJavaVMのデフォルトのエンコーディングとは独立に、それぞれのエンコーディングの指定をすることが可能です。

WebLogic Server でマルチバイトの文字列を扱う場合のスコープとして、J2EEの仕様や、WebLogic Server 独自の仕様などによりいくつか決められています。この中から、JSP/Servletに関連した指定項目としては次のものがあります。必ずしも全てを設定する必要はありません。以下の説明をよくご理解の上、お使いの環境に合わせて最も適切な項目を組み合わせてください。

エンコーディングの設定項目

JSP/Servletに関連するエンコーディングの設定項目には次のようなものがあります。(

これらの設定パラメータは同時に指定された場合の優先順位があらかじめ決まっています。例えば、JSPコンテナのデフォルトにShift_JISが設定されていて、page タグではEUC-JPが指定されていた場合には、page タグの指定が優先されるため EUC-JP が使われる、といった動きになります。基本的にはスコープの狭いものが優先されます。スコープが広い設定でデフォルトの指定を行い、特殊な扱いをする必要のあるものだけはスコープの狭い設定を使用する、などの設定方法が考えられます。

実際の開発では、特定の設定をアプリケーション全体で統一的に使用することをお勧めします。

マルチバイトを使用する場合の全体の流れ

ここまで説明したように、WebLogic Server にはエンコーディングを指定するパラメータがいくつかありますが、次のように、HTTPリクエストからHTTPレスポンスまでをもれなく指定する必要があります。これらの指定がない場合は ISO-8859-1のエンコーディングが使用されます。

Servlet

  1. HTTPレスポンスのエンコーディング指定 --- response.setContentType()
  2. ブラウザの表示エンコーディング指定 --- HTML のContent-Type
  3. HTTPリクエストのエンコーディング指定 ---- request.setCharacterEncoding or <input-charset>

JSP

  1. JSP ファイルのエンコーディングの指定--- page タグの pageEncoding (オプション)
  2. ページの出力エンコーディング指定 ---- page タグの contentType ディレクティブ
  3. ブラウザの表示エンコーディング指定 --- HTML のContent-Type
  4. HTTPリクエストのエンコーディング指定 ---- request.setCharacterEncoding or <input-charset>

Servlet/JSP共通

  1. Java Encoding とIANA character set のマッピング(weblogic.xml への設定)

以下、Servlet の場合、JSPの場合などそれぞれの設定の詳細を説明します。

Servletの場合

HTTPレスポンスのエンコーディング指定 --- response.setContentType()

Servlet が生成するHTMLページのエンコーディングはsetContentType() を使用します。setContentType()を呼び出すと、次の2点が決まります。

このため、setContentType() はWriter を取得する前に呼び出す必要があります

res.setContentType("text/html;charset=Shift_JIS");
PrintWriter out = res.getWriter();

また、HTTPヘッダのcontentTypeが指定されるので、ブラウザの表示エンコーディングがこの呼び出しにより決まります。

HTTPリクエストのエンコーディング指定 ---- request.setCharacterEncoding または <input-charset>

ここまでの設定でWebLogic Server からクライアントへ送信するデータであるHTTPレスポンス の設定が終わりました。続いて、クライアントから WebLogicServer へデータを送信する場合のHTTPリクエストの設定方法を説明します。

HTTPリクエストのエンコーディングを指定するには以下の3つの方法があります。

<input-charset> の指定はクライアント Web ブラウザからのリクエストURLで指定したリソースへのパスに対してサーバ側でエンコーディングを指定するものです。

例えば、

などの設定ができます。

<input-charset> の書き方は以下のようになります。対象となる web アプリケーションの <charset-params> をデプロイメント記述子(weblogic.xml)に以下のように記述します。

<weblogic-web-app> の中の <charset-param>に、エンコーディングを指定したいリクエスト URLのパスと、HTTPリクエストで指定したいエンコーディングをIANA名で記述します。

なお、Java エンコーディング名とIANA文字セット名との対応の仕方ついては、「Java Encoding とIANA character set のマッピング(weblogic.xml への設定)」の項を参照ください。

一つのWebアプリケーション内で複数のエンコーディングに対応するマルチエンコーディングのwebアプリケーションを構成することも可能です。

この例では、「/*」 を Shift_JIS、「/rus/joe/*」 をISO-8859-1に指定しています。

<charset-params>
  <input-charset>
    <resource-path>/*</resource-path>
    <java-charset-name> Shift_JIS</java-charset-name>
  </input-charset>
</charset-params>
<charset-params>
  <input-charset>
    <resource-path>/rus/joe/*</resource-path>
    <java-charset-name>ISO-8859-1</java-charset-name>
  </input-charset>
</charset-params>

この設定の詳細は、『Web アプリケーションのアセンブルとコンフィグレーション』の「charset-params 要素」を参照してください。

JSPの場合

JSP ファイルのエンコーディングの指定--- pageEncoding (オプション)

次のようにpageタグ pageEncodingを指定すると、WebLogic Server の JSPコンテナまたはJSPコンパイラがJSPファイルを読み込むエンコーディングを指定できます。

<%@ page contentType="text/html; charset=Shift_JIS"  pageEncoding="Shift_JIS" %>

ページの出力エンコーディング指定 ---- page タグの contentType ディレクティブ

次のようにpage タグ contentType ディレクティブを指定すると、ページの出力エンコーディングを指定できます。

<%@ page contentType="text/html; charset=Shift_JIS" %>

また、page ディレクティブでcontentType指定を行った場合、HTTPレスポンスのHTTPヘッダにはcontentType指定が入ります。これによりブラウザの表示エンコーディング指定ができることになります。

contentTypeディレクティブはpageEncoding ディレクティブの指定がなかった場合にはJSPファイルを読み込むエンコーディングとしても使われます。

JSPコンテナではこの指定を見つけると、いったんそのJSPファイルのパースを中断し、新たに指定されたエンコーディングにファイルリーダを切り替え、再度ページの最初からパースを実行します。一つのファイルに2つ以上 contentType の指定があった場合にはパースエラーとなります。 このため、静的にインクルードするファイルで両方のファイルにエンコーディングを指定している場合はエラーになります。動的にインクルードする場合はエラーにはならず、文字化けが起こります

注意: 一つのファイルに2つ以上 contentType の指定があった場合でもその指定が同一であればパースエラーにしない指定をすることができます。 (「include タグの静的・動的の違いと page タグでのエンコーディングの指定」を参照)。

<jsp-param>
  <param-name>backwardCompatible</param-name>
  <param-value>true</param-value>
</jsp-param>

例えば'<%@ include 'を使って静的インクルードを行う際に、インクルード元、インクルード先の両方でpage directive が存在する場合、この1コンパイル単位で複数回page directiveが出現しても、そのencodingが同一であれば問題なく使用できるようになります。

リクエストにエンコーディングを指定する

HTTPリクエストのエンコーディング指定はServlet で行う方法と全く同じです。「Servletの場合」の項を参照してください。

<%
             request.setCharacterEncoding("Shift_JIS");
             String pval = request.getParameter(pname);
         %>request.setCharacterEncoding or <input-charset>

Servlet/JSP共通

Java Encoding とIANA character set のマッピング(weblogic.xml への設定)

setContentType() や、pageタグの Content-Typeディレクティブの指定にはIANAの文字セット名を使用します。しかし、JavaアプリケーションであるWebLogic Server でエンコーディングを取り扱う場合には、これらの値はJava のエンコーディング名でなければなりません。WebLogic Server では内部でデフォルトのマッピングを持っていて、通常はそれを使用します。また、デフォルトのマッピングにはIANAには定義されていないものの、歴史的にHTMLのContent-Type で使われてきたものも存在します。(「WebLogic Server で既に定義している MIME-Java エンコーディングマップ 」参照)

例 : x-sjis ----> Shift_JIS

このマッピングは独自に変更することが可能です。以下のように、webアプリケーションの Deployment Descriptor で設定します。

例えばWebLogic Server では、IANA文字セットのShift_JIS はJavaのShift_JISにマップしている (Java1.4 ではSJISのエイリアスとなっている) ため、contentType が 'Shift_JIS' の場合はSJISとして扱われます。

注意: Java1.3 では IANA charset の Shift_JIS はMS932として扱われていました。 (JDK1.1.8 以降 JDK1.4.0 まで。JDK1.4.1から Shift_JIS は SJIS へ戻されました。)

したがって、デフォルトの設定では Shift_JIS を使用すると MS932 独自文字を使用する事ができません。

デフォルトのマッピングとは異なるエンコーディングを割り当てて使うためには次のようにデフォルトのマッピングを上書きします。WebアプリケーションのDeployment Descriptor 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 互換ではありません。この設定はWebLogicServer6.0ではconfig.xml に設定していたものです。WebLogicServer6.1からはこの設定をWebアプリケーションの Deployment Descriptor weblogic.xml で行うように変更されています。またエレメント名等も異なっています。6.0からの移行の際にはご注意ください。

iso-8859を使ったwork-around(回避策)をそのまま使用する場合の設定

iso-8859 を <input-charset> に指定すると、iso-8859を使用したworkaround をコードを修正することなくそのまま使用できます。

Workaround の例:

new String(request.getParameter(itemQ[i]).getBytes ("8859_1"), "SJIS")

ただし、HTTPリクエストで、HTTPヘッダに下記のようにContent-Type を指定するHTTPクライアントではこの回避策は使用できません。これはHTTPヘッダでの Content-Type の指定が<input-charset>の指定よりも優先するためです。この場合はアプリケーションプログラムのコードを修正する必要があります。

Content-Type: application/x-www-form-urlencoded;charset=shift_jis

include タグの静的・動的の違いと page タグでのエンコーディングの指定

静的インクルード

<%@ include file="relativeURL" %>

この場合、インクルードするファイルをすべて読み込んで一つのファイルにしてからJSPのコンパイルをする動作になります。WebLogic Server 6.1 までは、インクルードするファイルにエンコーディングの指定があれば、インクルードされるファイルにエンコーディングの指定がなくてもインクルード元と同じエンコーディングのファイルとして扱われました。 WebLogic Server 8.1 では、インクルード元とインクルード先のファイルの両方にページ ディレクティブが存在すると、コンパイル エラーが発生します。これを防ぐには、 weblogic.xml の'backwardCompatible' を true に設定します。

また、インクルード元と、インクルード先のファイルでエンコーディングの指定が異なっているとJSPのコンパイルエラーとなります。

動的インクルード

<jsp:include page="{ relativeURL | <%= expression %>}" flush="true" />

jsp:includeでは、このページをロードした段階ではインクルードは行われず、タグのままのこります。そしてこのページが実行された段階でインクルードを行うため、インクルード元のエンコーディングの指定を引き継ぐ事ができません。

したがってインクルードされるファイルにも必ずエンコーディングの指定が必要になります。

CGIServlet

マルチバイトを使用したCGIサービスを WebLogic Server 上のCGIサーブレットへ移行する際は、CGIプログラムが生成するHTTPヘッダに ContentTypeで charsetパラメタが正しく設定されている必要があります。ContentTypeを省略した場合は、J2EE Servletコンテナのデフォルトである ISO-8859-1 が使われます。

また、クライアントからの入力文字列を正しく受け取るために、 input-charset パラメタを使用する必要があります。対象の webアプリケーションのDDファイルの記述が必要です。存在しない場合は ISO-8859-1 が使われます。

WebService

SOAPメッセージとエンコーディングの扱い

SOAPメッセージの受信

WebLogic Sever の Web サービスは、エンコーディングの取り扱いに関してはSOAP1.1およびSOAP1.2仕様に準拠します (注1)。 SOAP1.1 の HTTP/SOAP メッセージのメディアタイプは 'text/xml' であり、そのエンコーディングの扱いは RFC2376 で規定されています。また、SOAP1.2 の HTTP/SOAP メッセージのメディアタイプは 'application/soap+xml' であり、そのエンコーディングの扱いは RFC3023 で規定されています。RFC 仕様としては以下の動作をします。

SOAP1.1の場合:

SOAP1.2の場合:

WebLogic Server 8.1 はこの仕様に準拠して動作するため、WebLogic Workshop の動作もこれに準じます。したがって、WebLogic Workshop で開発した Web サービスをHTTP/SOAP で呼び出すクライアントは、ContentType の charset 指定が正しくされていることをご確認ください。

SOAPメッセージの送信

WebLogic Sever は HTTP/SOAP メッセージはデフォルトでは utf-8 で生成します。その際、SOAP メッセージの ContentType ヘッダに 'encoding=UTF-8' も付加されます。

注意: WebLogic Server を英語ロケールで起動した場合(UNIX上で LANG=C の環境など)は SOAP メッセージで使用できるのは us-ascii 文字のみです。それ以外の文字は動作確認の対象外となります。 Web サービスでマルチバイトの文字を使用する場合は必ず対応するロケールで WebLogic Server を起動してください。

なお、英語ロケールで起動した WebLogic Server で us-ascii 以外の文字を使用する場合は以下の起動オプションを WebLogic Server の起動スクリプトファイル内で定義してください。これにより WebLogic Server が英語ロケールで動作していても utf-8 でメッセージを生成できます。

注意: なお、 SOAP のメッセージには UTF-8 を使用することをお勧めします。

-Iweblogic.webservice.i18n.charset=utf-8

web service ホームページ

web service ホームページはサーバVMのデフォルトのエンコーディングで生成されます。

UDDIエクスプローラ

UDDIエクスプローラはus-ascii文字のみをサポートします。マルチバイト文字は正しく使用できません。

XML -- StreamParser のマルチバイト文字の扱い

XML Streaming 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();

なお、XML StreamingAPIを使用してマルチバイトを含むXMLドキュメントをパースする場合はxercesパーサなどと同様に以下の点にご注意ください。

パーサの入力にストリームを使用する際にはバイトストリームを使用します。 バイトストリームを使用することによりパーサが持つXMLのエンコーディング自動認識機能を使用できます。これにより、パーサはXML宣言のencoding属性で指定されたエンコーディングで文字ストリームを内部で生成し、正しくパースすることができるようになります。

Unicodeキャラクタストリームで渡す場合は、パーサはxmlヘッダのエンコーディング指定を無視します。 この場合はユーザ側で正しいキャラクタストリームを渡すように注意してください。

JDBC

BEA WebLogic Type4 Oracle Driver を使用する

WebLogic Server8.1 では 各種データベース用(Oracle, SQL Server, DB2 など)のBEA WebLogic Type4 Driver がインストールされます。以下では Oracle 用の WebLogic Type4 Driver を例に環境設定の方法を説明します。

環境の設定

WebLogic Server8.1 ではBEA WebLogic Type4 ドライバが WL_HOME\server\lib ディレクトリにインストールされます。これらのファイルは weblogic.jar のマニュフェストクラスパスに含まれており、自動的にサーバのクラスパスに追加されます。
したがって、WebLogic Server で動作する JSP や Servlet などの JDBC クライアントから WebLogic Type4 ドライバを使用して直接データベースに接続することができます。WebLogic Type4 ドライバを使用した JDBC クライアントのプログラミングについては 『WebLogic Type4 JDBC ドライバガイド』を参照してください。

接続プールの設定

管理コンソールから接続プールを設定する場合

BEA WebLogic Type4 Oracle ドライバを使用した接続プールをコンフィグレーションする場合には次の設定を行ってください。

詳しくは『WebLogic Type4 JDBC ドライバガイド』 を参照してください。

管理コンソールから接続プールを設定する場合

  1. ドメインをコンフィグレーションします。

  2. 管理コンソールの [サービス]> [JDBC]> [接続プール] タブで、’新しい JDBC Connection Pool のコンフィグレーション’ を開きます。

  3. ‘データベースの選択’ 画面でデータベースタイプに ‘Oracle'、データベースドライバに ‘BEA’s Oracle Driver (Type 4) Version8.1.7,9.0.1,9.2.0’ を選択します。

  4. 次の画面で接続プールの名前とプロパティを設定します。

  5. ‘データベース接続のテスト’ 画面でドライバのコンフィグレーションをテストします。

  6. 接続が成功したら次の画面で ‘作成とデプロイ’ を実行します。

コンフィグレーションウィザードでドメイン作成時に接続プールを設定する場合

  1. コンフィグレーションウィザードを起動します。

  2. 任意のテンプレートを選択し、カスタムコンフィグレーションを選択します。

  3. ‘データベース(JDBC)オプション’ 画面で ‘はい’ を選択します。

  4. ‘JDBC 接続プールのコンフィグレーション’ 画面で以下を設定します。

        	Vendor : Oracle
            Driver : BEA’s Oracle Driver(Type 4) Version 8.1.7,9.0.1,9.2.0
                   (その他の項目はお使いの環境に合わせて設定してください)
    

マニュアルで接続プールを設定する場合

接続プールを作成するドメインのconfig.xml に以下を追加します。 (下線部の設定値はお使いの環境に合わせて変更してください)

       	         <JDBCConnectionPool DriverName=weblogic.jdbc.oracle.OracleDriver" 
           	Name="testpool"
   		Password="tiger"
   		Properties="user=scott;portNumber=1521;SID=testdb;serverName=testserver"
   		Targets="myserver"
   		TestTableName="SQL SELECT 1 FROM DUAL"
   		URL="jdbc:bea:oracle://jpw2k17:1521"/>

BEA WebLogic jDriver for Oracleを使用する

以下では、BEA WebLogic jDriver for Oracle の環境設定について説明します。

環境の設定

BEA WebLogic jDriver for Oracle ドライバを使用するにはWebLogic OCI ドライバネィティブライブラリが必要です。これらのライブラリは、32bit Windows 用はWL_HOME\server\bin\ に、 UNIXプラットフォーム用は WL_HOME/server/lib/{OSの名称}/ にインストールされます。
WebLogic Server8.1 ではデフォルトで9.2.0 用のライブラリを参照します。異なるバージョンのライブラリを参照するには目的のライブラリのパスを Windows 環境では PATH に、UNIX環境では LD_LIBRARY_PATH(HP-UXは SHLIB_PATH)に加えてください。

JDriver for Oracle を使用するためにはWebLogic OCI ドライバネィティブライブラリの設定以外に以下の設定が必要です。

  1. Oracle のライブラリを参照するようにパスを設定します。
    次の設定を startWebLogic.cmd(UNIX環境ではstartWebLogic.sh)に追加してください。 Windows 環境では環境変数 PATH にOracle インストールディレクトリの binを設定します。
    set PATH=%ORACLE_HOME%\bin;%PATH%
    
    UNIX 環境では lib もしくは lib32 に LD_LIBRARY_PATH または SHLIB_PATH に追加します。
    
    export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
    
    export LD_LIBRARY_PATH=$ORACLE_HOME/lib32:$LD_LIBRARY_PATH
    詳しくは WebLogic jDriver for Oracleのコンフィグレーション『WebLogic jDriver for Oracleの使用環境の設定』を参照してください。
  2. Oracle の環境変数 NLS_LANG を指定します。
    NLS_LANGとjDriver for Oracleのconnection propertiesである weblogic.codesetは常に同じエンコーディングである必要があります。 詳しくは WebLogic jDriver の高度な機能 『コードセットのサポート』を参照してください。

    以上の設定でWebLogic Server で動作する JSP や Servlet などの JDBC クライアントから WebLogic jDriver for Oracle を使用して直接データベースに接続することができます。
    WebLogic jDriver for Oracle を使用した JDBC クライアントのプログラミングについては 『WebLogic jDriver for Oracle の使い方』を参照してください。

接続プールの設定

WebLogic jDriver for Oracle を使用した接続プールをコンフィグレーションするには次の設定を行ってください。詳しくは WebLogic jDriver for Oracle のコンフィグレーション『接続プールの設定』を参照してください。

 

管理コンソールから接続プールを設定する場合

  1. ドメインをコンフィグレーションします。

  2. 管理コンソールの [サービス]> [JDBC]> [接続プール] タブで、’新しい JDBC Connection Pool のコンフィグレーション’ を開きます。

  3. ‘データベースの選択’ 画面でデータベースタイプに ‘Oracle'、データベースドライバに ‘BEA’s Oracle Driver (Type 2) Version8.1.7,9.0.1,9.2.0’ を選択します。

  4. 次の画面で接続プールの名前とプロパティを設定します。

  5. ‘データベース接続のテスト’ 画面でドライバのコンフィグレーションをテストします。

  6. 接続が成功したら次の画面で ‘作成とデプロイ’ を実行します。

コンフィグレーションウィザードでドメイン作成時に接続プールを設定する場合

  1. コンフィグレーションウィザードを起動します。

  2. 任意のテンプレートを選択し、カスタムコンフィグレーションを選択します。

  3. ‘データベース(JDBC)オプション’ 画面で ‘はい’ を選択します。

  4. ‘JDBC 接続プールのコンフィグレーション’ 画面で以下を設定します。

         Vendor : Oracle
         Driver : Oracle's Driver(Type 2) Version 8.1.7,9.0.1,9.2.0
               (その他の項目はお使いの環境に合わせて設定してください)

マニュアルで接続プールを設定する場合

接続プールを作成するドメインのconfig.xml に以下を追加します。 (下線部の設定値はお使いの環境に合わせて変更してください)

   	         <JDBCConnectionPool DriverName=weblogic.jdbc.oci.Driver" 
           	Name="testpool"
   		Password="tiger"
   		Properties="user=scott;server=testdb.testserver"
   		Targets="myserver"
   		TestTableName="SQL SELECT 1 FROM DUAL"
   		URL="jdbc:weblogic:oracle"/>
		

Oracle OCI ドライバを使用する

以下では Oracle OCI ドライバの環境設定について説明します。

環境の設定

Oracle OCI ドライバを使用するドメインのstartWebLogic.cmd(もしくはstartWebLogic.sh) ファイルに以下の設定を追加します。
%ORACLE_HOME% は使用する Oracle Client の インストールディレクトリを表します。

  1. CLASSPATH に以下を追加します。

    %ORACLE_HOME%\jdbc\lib\classes12.zip

    %ORACLE_HOME%\jdbc\lib\nls_charset12.zip

  2. PATH に以下を追加します。
  3. %ORACLE_HOME%

これで WebLogic Server で動作する JSP や Servlet などの JDBC クライアントから Oracle OCI ドライバを利用して直接データベースに接続することができます。Oracle OCI ドライバを使用するための JDBC クライアントのプログラミングについては Oracle のマニュアルを参照してください。

接続プールの設定

WOracle OCI ドライバを使用した接続プールを設定する場合には次の設定を行ってください。

管理コンソールから接続プールを設定する場合

  1. ドメインをコンフィグレーションします。

  2. 使用する Oracle OCI ドライバのバージョンにあわせて、 startWebLogic.cmd(もしくはstartWebLogic.sh) ファイルを変更します。

    ・CLASSPATH に以下を追加します。

    %ORACLE_HOME%\jdbc\lib\classes12.zip

    %ORACLE_HOME%\jdbc\lib\nls_charset12.zip

    ・PATH に以下を追加します。

    %ORACLE_HOME%

  3. 管理コンソールの [サービス]>[JDBC]>[接続プール] タブで、’新しい JDBC Connection Pool のコンフィグレーション’ を開きます。
  4. ‘データベースの選択’ 画面でデータベースタイプに ‘Oracle’, データベースドライバに ‘Oracle’s Driver (OCI) Version8.1.7,9.0.1,9.2.0’ を選択します。

  5. 次の画面で接続プールの名前とプロパティを設定します。
  6. ‘データベース接続のテスト’ 画面でドライバのコンフィグレーションをテストします。

    ただし、Oracle Client バージョン 8 を使用する場合は、 ‘URL’ を以下のように変更してください。

    【変更前】 jdbc:oracle:oci:@[データベース名].[データベースサーバ名]

    【変更後】 jdbc:oracle:oci8:@[データベース名].[データベースサーバ名]

  7. 接続が成功したら次の画面で ‘作成とデプロイ’ を実行します。

コンフィグレーションウィザードでドメイン作成時に接続プールを設定する場合

  1. コンフィグレーションウィザードを起動します。

  2. 任意のテンプレートを選択し、カスタムコンフィグレーションを選択します。

  3. ‘データベース(JDBC)オプション’ 画面で ‘はい’ を選択します。

  4. ‘データベース(JDBC)オプション’ 画面で ‘はい’ を選択します。
  5. ‘JDBC 接続プールのコンフィグレーション’ 画面で以下を設定します。

           Vendor : Oracle
           Driver : Oracle’s Driver(OCI) Version 8.1.7,9.0.1,9.2.0
        (その他の項目はお使いの環境に合わせて設定してください)
    	
  6. 使用する Oracle OCI ドライバのバージョンにあわせて、 startWebLogic.cmd(もしくはstartWebLogic.sh) ファイルを変更します。

    ・CLASSPATH に以下を追加します。

    %ORACLE_HOME%\jdbc\lib\classes12.zip

    %ORACLE_HOME%\jdbc\lib\nls_charset12.zip

    ・PATH に以下を追加します。

    %ORACLE_HOME%

  7. Oracle Client バージョン 8 を使用する場合はさらに、作成したドメインの config.xml にある接続プールの設定を以下のように修正します。

    【変更前】 URL="jdbc:oracle:oci: @[データベース名].[データベースサーバ名]

    【変更後】 URL="jdbc:oracle:oci8: @[データベース名].[データベースサーバ名]

マニュアルで接続プールを設定する場合

  1. 接続プールを作成するドメインのstartWebLogic.cmd(もしくはstartWebLogic.sh) ファイルを、使用するOracle OCI ドライバのバージョンにあわせて変更します。
  2. ・CLASSPATH に以下を追加します。

    %ORACLE_HOME%\jdbc\lib\classes12.zip

    %ORACLE_HOME%\jdbc\lib\nls_charset12.zip

    ・PATH に以下を追加します。

    %ORACLE_HOME%

  3. 接続プールを作成するドメインのconfig.xml に以下を追加します。

(下線部の設定値はお使いの環境に合わせて変更してください)

   	         <JDBCConnectionPool DriverName=oracle.jdbc.driver.OracleDriver" 
           	Name="testpool"
   		Password="tiger"
   		Properties="user=scott"
   		Targets="myserver"
   		TestTableName="SQL SELECT 1 FROM DUAL"
   		URL="jdbc:oracle:oci:@testdb.testserver"/>
		

ただし、Oracle Client バージョン 8 を使用する場合は URL を以下のように記述してください。

URL="jdbc:oracle:oci8:@testdb.testserver"

Oracle Thin ドライバを使用する

WebLogic Server8.1 では Oracle Thin ドライバ バージョン 9.2.0 がインストールされます。以下では Oracle Thin ドライバの設定方法について説明します。

環境の設定

WebLogic Server8.1 ではOracle Thin ドライバ バージョン 9.2.0 が、WL_HOME\server\lib ディレクトリにインストールされます。このファイルは weblogic.jar のマニュフェストクラスパスに含まれており、自動的にサーバのクラスパスに追加されます。よって、WebLogic Server で動作する JSP や Servlet などの JDBC クライアントから Oracle Thin ドライバを利用して直接データベースに接続することができます。
別バージョンの Oracle Thin ドライバの使用など、詳細については WebLogic JDBC プログラマーズガイド 『WebLogic Server でのサードパーティドライバの使い方』 を参照してください。
Oracle Thin ドライバを使用した JDBC クライアントのプログラミングについては Oracle のマニュアルを参照してください。

nls_charset12.zip による文字セットのサポート

Oracle Thin ドライバは、 CHAR および、VARCHAR型で US7ASCII,WE8DEC,ISO-LATIN-1,UTF-8 の文字セットをサポートします。その他の文字セットを使用する場合 CLASSPATH に nls_charset12.zip を追加します。nls_charset12.zip は WL_HOME\ext\lib にインストールされます。
使用するドメインの startWebLogic.cmd(もしくは startWebLogic.sh)の CLASSPATH に WL_HOME\ext\jdbc\oracle\920\nls_charset12.zip を追加してください。詳しくは WebLogic JDBC プログラマーズガイド『Oracle Thin Driver の使い方』 を参照してください。

接続プールの設定

Oracle Thin ドライバを使用した接続プールをコンフィグレーションする場合には次の設定を行ってください。詳しくは WebLogic JDBC プログラマーズガイド『接続プールのコンフィグレーションと使い方』 を参照してください。

管理コンソールから接続プールを設定する場合

a) ドメインをコンフィグレーションします。

b) 管理コンソールの [サービス]>[JDBC]>[接続プール] タブで、’新しい JDBC Connection Pool のコンフィグレーション’ を開きます。

c) ‘データベースの選択’ 画面でデータベースタイプに ‘Oracle’、データベースドライバに’Oracle’s Driver (Thin)
    Version8.1.7,9.0.1,9.2.0’を選択します。

d) 次の画面で接続プールの名前とプロパティを設定します。

e) ‘データベース接続のテスト’ 画面でドライバのコンフィグレーションをテストします。

f) 接続が成功したら次の画面で ‘作成とデプロイ’ を実行します。

コンフィグレーションウィザードでドメイン作成時に接続プールを設定する場合

a) コンフィグレーションウィザードを起動します。

b) 任意のテンプレートを選択し、カスタムコンフィグレーションを選択します。

c) ‘データベース(JDBC)オプション’ 画面で ‘はい’ を選択します。

d) ‘JDBC 接続プールのコンフィグレーション’ 画面で以下を設定します。

       Vendor : Oracle
       Driver : Oracle’s Driver(Thin) Version 8.1.7,9.0.1,9.2.0
    (その他の項目はお使いの環境に合わせて設定してください)
	

マニュアルで接続プールを設定する場合

接続プールを作成するドメインのconfig.xml に以下を追加します。

(下線部の設定値はお使いの環境に合わせて変更してください)



   	         <JDBCConnectionPool DriverName="oracle.jdbc.driver.OracleDriver" 
           	Name="testpool"
   		Password="tiger"
   		Properties="user=scott"
   		Targets="myserver"
   		TestTableName="SQL SELECT 1 FROM DUAL"
   		URL="jdbc:oracle:thin:@testserver:1521:testdb/">
		

異なるエンコーディングのDBに同時に接続する場合の制限事項

OCIドライバを使用する場合、NLS_LANGとweblogic.codeset の指定をセットで同じエンコーディングに指定する必要があります。これらのパラメータをセットで同じに設定しておけば、Oracle側からは特定のNLS_LANGを持つ一つのクライアントとして接続するため、 エンコーディングの変換はOralce側が行います。
例えばOracleDBがEUC-JPであっても、NLS_LANGとweblogic.codesetが両方ともSJISの場合、Oracle側が適当なエンコーディングの変換を行います。2つのパラメータが同じであればDBのエンコーディングが何であっても接続には問題ありません。

DBを使用する際のエンコーディング変換の注意

プラットフォームネイティブのエンコーディングから Java のエンコーディングへのコンバージョンと Java からプラットフォームネイティブのエンコーディングへのコンバージョンでは同じコンバータを使用しないと正しく文字を扱えない場合があります。これはUnicodeとJISの定義により生じる問題です。

ネイティブ <-> Java間でのエンコーディングコンバージョンで、例えば

DB -------------> WebLogic Server  -------------> Web ブラウザ
         SJIS                         Windows-31J

のコンバータを使用すると、次のコードが正しく扱えません。

SJISコード

"~" (0x8160)

"∥" (0x8161)

"¢" (0x817C)

"-" (0x8191)

"£" (0x8192)

"¬" (0x81CA)

この場合は、WebLogic Server 上から Web ブラウザ への出力にSJISを明示的に使用する必要があります。たとえばJSPの page タグで

<%@ page contentType="text/html; charset=Windows-31J" %>

と指定していた場合、この 'Windows-31J' の指定を 'Shift_JIS' へ変更してUnicode からネイティブへの変換をしなければなりません。

したがって、このような場合WebアプリケーションのDeployment Descriptor である weblogic.xml に次の定義を記述してWebLogic Server が内部的に持つデフォルトのエンコーディング対応テーブルを変更する必要があります。

<charset-params>
  <charset-mapping>
    <iana-charset-name>Shift_JIS</iana-charset-name>
    <java-charset-name>SJIS</java-charset-name>
  </charset-mapping>
</charset-params>

その他

iMode文字を使用する場合

JavaのMS932エンコーディングテーブルは外字エリアのコンバージョンに対応しています。MS932 を使用することで iMode外字を使用したコンテンツを提供することが可能です。

日本語サンプルプログラム src_ja 以下をビルドするにはSJISロケールが必要 (日本語版のみ)

WebLogic Server 8.1 の日本語サンプルコードはShift_JISで提供されています。このため、ビルドするためには antを起動するシェルは Shift_JIS 環境にしておく必要があります。

 

Back to Top Previous Next