ヘッダーをスキップ

Oracle Containers for J2EE JavaServer Pages開発者ガイド
10g(10.1.3.1.0)

B31860-01
目次
目次
索引
索引

戻る 次へ

9 OracleでのJSPグローバリゼーション・サポート

OC4JのWebコンテナは、JSP仕様に従って、標準のグローバリゼーション・サポート(National Language Support(NLS)とも呼ばれます)を提供し、マルチバイト・パラメータ・エンコードをサポートしないサーブレット環境の拡張サポートも提供します。

ローカライズされたコンテンツの標準のJavaサポートでは、テキストの内部表現を統一するため、Unicodeを使用する必要があります。Unicodeは、別のキャラクタ・セットに変換するためのベース・キャラクタ・セットとして使用されます。(Unicodeのバージョンは、JDKのバージョンによって異なります。Sun社のJavadocでjava.lang.CharacterクラスのUnicodeのバージョンを確認できます。)

この章では、グローバリゼーションと国際化に対するJSPサポートについて、重要な事項を説明します。次の項目について説明します。

コンテンツ・タイプの設定

次の各項では、コンテンツ・タイプをJSPページに静的または動的に指定する標準的な方法について説明します。また、IANA(Internet Assigned Numbers Authority)以外のキャラクタ・セットをJSPライター・オブジェクトに対して指定できるOracleの拡張メソッドについても説明します。

pageディレクティブでのコンテンツ・タイプの設定

pageディレクティブには、JSPのページ・ソース(変換時)またはレスポンス(実行時)の文字エンコードに影響を与える2つの属性(pageEncodingcontentType)があります。contentType属性は、MIMEタイプのレスポンスにも影響を与えます。各属性の機能は、次のとおりです。

contentTypepageEncodingの関連の詳細は、この項で後述します。

contentTypeには、次の構文を使用します。

contentType="TYPE; charset=character_set"

または、デフォルトのキャラクタ・セットを使用する場合は、次のように、MIMEタイプを設定します。

contentType="TYPE"

pageEncodingには、次の構文を使用します。

pageEncoding="character_set"

すべての属性を設定するには、次の構文を使用します。

<%@ page ... contentType="TYPE; charset=character_set" 
             pageEncoding="character_set" ... %>

TYPEはIANAのMIMEタイプで、character_setはIANAのキャラクタ・セットです。contentType属性を使用してキャラクタ・セットを指定する場合、セミコロンの後の空白はオプションです。

次に、contentTypepageEncodingの設定例を示します。

<%@ page language="java" contentType="text/html" %>

または

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" %>

または

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
                         pageEncoding="US-ASCII" %>

pageディレクティブ設定がない場合のデフォルト設定は、次のとおりです。

UTF-8UTF-16のいずれに設定するかは、http://www.w3.org/TR/REC-xml.htmlにあるXML仕様の「Autodetection of Character Encodings」に従います。

ただし、文字エンコードに関しては、pageEncodingcontentTypeには関連があります。次の表を参照してください。

   contentTypeエンコーディングを指定  contentTypeエンコーディングを指定しない 

pageEncodingを指定 

ページ・ソースのエンコーディングはpageEncodingに従う

レスポンスのエンコーディングはcontentTypeに従う 

ページ・ソースのエンコーディングはpageEncodingに従う

レスポンスのエンコーディングはpageEncodingに従う 

pageEncodingを指定しない 

ページ・ソースのエンコーディングはcontentTypeに従う

レスポンスのエンコーディングはcontentTypeに従う 

ページ・ソースのエンコーディングはデフォルトに従う

レスポンスのエンコーディングはデフォルトに従う 

使用方法については、次の重要な点に注意してください。

IANAは、次のサイトでMIMEタイプのレジストリを維持します。

ftp://www.isi.edu/in-notes/iana/assignments/media-types/media-types

IANAは、次のサイトで文字エンコードのレジストリを維持します。リストに「preferred MIME name」(推奨MIME名)と示されている場合は、それを使用します。

http://www.iana.org/assignments/character-sets

「JSPライター・オブジェクトのキャラクタ・セットに対するOracleの拡張機能」で説明されているOracleの追加拡張機能を除き、IANAリストのキャラクタ・セットのみを使用してください。

コンテンツ・タイプの動的な設定

HTTPレスポンス用の適切なコンテンツ・タイプが実行時まで判明しない場合は、JSPページでコンテンツ・タイプを動的に設定できます。標準のjavax.servlet.ServletResponseインタフェースは、このために次のメソッドを指定します。

void setContentType(java.lang.String contenttype)


重要

OC4J環境でコンテンツ・タイプの動的設定を使用するには、JSPのstatic_text_in_chars構成パラメータを有効にする必要があります。 


JSPページの暗黙的なresponseオブジェクトはjavax.servlet.http.HttpServletResponseインスタンスです。ここでは、HttpServletResponseインタフェースによってServletResponseインタフェースが拡張されます。

pageディレクティブのcontentType設定のように、setContentType()メソッドの入力には、MIMEタイプのみ、またはキャラクタ・セットとMIMEタイプの両方を含めることができます。次に例を示します。

response.setContentType("text/html; charset=UTF-8");

または

response.setContentType("text/html");

pageディレクティブと同様に、デフォルトのMIMEタイプは、従来のJSPページの場合はtext/html、JSP XML文書の場合はtext/xmlで、デフォルトの文字エンコードはISO-8859-1です。

JspWriterオブジェクトへの出力を記述する前に、ページのできるかぎり前の位置にコンテンツ・タイプを設定します。

setContentType()メソッドは、変換時に、JSPページのテキストの解析に影響を与えません。変換時に特定のキャラクタ・セットが必要な場合は、pageディレクティブに指定する必要があります。詳細は、「pageディレクティブでのコンテンツ・タイプの設定」を参照してください。

JSPライター・オブジェクトのキャラクタ・セットに対するOracleの拡張機能

標準的な使用方法では、responseオブジェクトのコンテンツ・タイプのキャラクタ・セットは、pageディレクティブのcontentTypeパラメータまたはresponse.setContentType()メソッドで決定され、自動的にJSPライター・オブジェクトのキャラクタ・セットになります。JSPライター・オブジェクトは、javax.servlet.jsp.JspWriterインスタンスです。

ただし、一部のキャラクタ・セットは、IANAで認識されていないため、標準のコンテンツ・タイプ設定で使用できません。このため、OC4Jには、oracle.jsp.util.PublicUtilクラスの静的なsetWriterEncoding()メソッドが用意されています。

static void setWriterEncoding(JspWriter out, String encoding)

このメソッドによって、JSPライターのキャラクタ・セットを直接指定し、responseオブジェクトのキャラクタ・セットをオーバーライドできます。次の例では、コンテンツ・タイプのキャラクタ・セットとしてBig5を使用しますが、JSPライターのキャラクタ・セットとして、Big5の非IANA香港語キャラクタ・セットであるMS950を指定します。

<%@ page contentType="text/html; charset=Big5" %>
<% oracle.jsp.util.PublicUtil.setWriterEncoding(out, "MS950"); %>


注意

setWriterEncoding()メソッドは、JSPページ内のできるかぎり前の位置で使用してください。 


マルチバイト・パラメータ・エンコードに対するJSPサポート

サーブレット仕様では、javax.servlet.ServletRequestインタフェースにsetCharacterEncoding()メソッドがあります。このメソッドは、サーブレット・コンテナのデフォルトのエンコードが、マルチバイトのリクエスト・パラメータとBeanプロパティの設定(Javaコード内のgetParameter()コールやJSPコードにBeanプロパティを設定するjsp:setPropertyタグなど)に対して適切でない場合に役に立ちます。

setCharacterEncoding()メソッドとOracleの同等の拡張機能は、特に次の場合に、パラメータの名前と値に影響を与えます。

この項には、次の項目が含まれます。

標準のsetCharacterEncoding()メソッド

サーブレット仕様2.3以上では、setCharacterEncoding()メソッドは、HTTPリクエストの読取りに使用するデフォルト以外の文字エンコードを指定する標準機能として、javax.servlet.ServletRequestインタフェースに指定されています。このメソッドのシグネチャは、次のとおりです。

void setCharacterEncoding(java.lang.String enc)
                          throws java.io.UnsupportedEncodingException

encパラメータは、任意の文字エンコードの名前を指定する文字列で、デフォルトの文字エンコードをオーバーライドします。このメソッドは、リクエスト・パラメータを読み取る前、またはgetReader()メソッド(ServletRequestインタフェースに指定)を介して入力を読み取る前にコールしてください。

対応する次のgetterメソッドもあります。

String getCharacterEncoding()

戻る 次へ
Oracle
Copyright © 2007 Oracle Corporation.

All Rights Reserved.
目次
目次
索引
索引