Oracle Containers for J2EE JavaServer Pages開発者ガイド 10g(10.1.3.1.0) B31860-01 |
|
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
ディレクティブには、JSPのページ・ソース(変換時)またはレスポンス(実行時)の文字エンコードに影響を与える2つの属性(pageEncoding
とcontentType
)があります。contentType
属性は、MIMEタイプのレスポンスにも影響を与えます。各属性の機能は、次のとおりです。
contentType
を使用すると、ページ・ソースとレスポンス、およびMIMEタイプのレスポンスの文字エンコードを設定できます。
pageEncoding
を使用すると、ページ・ソースの文字エンコードを設定できます。この属性によって、レスポンスとページ・ソースで異なる文字エンコードを設定できます。ただし、キャラクタ・セットを指定するcontentType
属性がない場合、この設定はレスポンスの文字エンコードに対するデフォルトになります。
contentType
とpageEncoding
の関連の詳細は、この項で後述します。
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
属性を使用してキャラクタ・セットを指定する場合、セミコロンの後の空白はオプションです。
次に、contentType
とpageEncoding
の設定例を示します。
<%@ 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
ディレクティブ設定がない場合のデフォルト設定は、次のとおりです。
text/html
で、JSP XML文書に対するデフォルトはtext/xml
です。
ISO-8859-1
(Latin-1とも呼ばれます)、JSP XML文書の場合はUTF-8
またはUTF-16
です。
ISO-8859-1
、JSP XML文書の場合はUTF-8
またはUTF-16
です。
UTF-8
とUTF-16
のいずれに設定するかは、http://www.w3.org/TR/REC-xml.htmlにあるXML仕様の「Autodetection of Character Encodings」に従います。
ただし、文字エンコードに関しては、pageEncoding
とcontentType
には関連があります。次の表を参照してください。
使用方法については、次の重要な点に注意してください。
contentType
またはpageEncoding
を設定するpage
ディレクティブは、JSPページ内のできるかぎり前の位置にある必要があります。
pageEncoding
設定は無視されます。かわりに、Webコンテナは、その文書のXMLエンコード宣言を使用します。次に例を示します。
<?xml version="1.0" encoding="EUC-JP"> <jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0"> <jsp:directive.page contentType="text/html;charset=Shift_Jis" /> <jsp:directive.page pageEncoding="UTF-8" /> ...
有効なページ・エンコードはEUC-JP
であり、UTF-8
ではありません。
pageEncoding
は、バイト・シーケンスがターゲット・キャラクタ・セット内の正当な文字を表しているページに対してのみ使用してください。
contentType
は、バイト・シーケンスがターゲット・キャラクタ・セット内の正当な文字を表しているページまたはレスポンス出力に対してのみ使用してください。
contentType
で指定されているレスポンス出力のターゲット・キャラクタ・セットは、ページ・ソースのキャラクタ・セットに対するスーパーセットである必要があります。たとえば、UTF-8
はBig5
のスーパーセットですが、ISO-8859-1
はスーパーセットではありません。
page
ディレクティブのパラメータは静的です。レスポンスに対して異なるキャラクタ・セット仕様が必要であることが実行時に判明した場合、ページでは次のいずれかの方法で対処します。
または
ISO-8859-1
以外のキャラクタ・セットで記述された従来のJSPページ・ソースの場合は、適切なキャラクタ・セットを、contentType
属性またはpageEncoding
属性を使用してpage
ディレクティブに設定する必要があります。Webコンテナは変換時に設定を認識している必要があるため、ページ・エンコードのキャラクタ・セットは動的に設定できません。
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)
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ディレクティブでのコンテンツ・タイプの設定」を参照してください。
標準的な使用方法では、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"); %>
サーブレット仕様では、javax.servlet.ServletRequest
インタフェースにsetCharacterEncoding()
メソッドがあります。このメソッドは、サーブレット・コンテナのデフォルトのエンコードが、マルチバイトのリクエスト・パラメータとBeanプロパティの設定(Javaコード内のgetParameter()
コールやJSPコードにBeanプロパティを設定するjsp:setProperty
タグなど)に対して適切でない場合に役に立ちます。
setCharacterEncoding()
メソッドとOracleの同等の拡張機能は、特に次の場合に、パラメータの名前と値に影響を与えます。
getParameter()
メソッドの出力
getParameterValues()
メソッドの出力
getParameterNames()
メソッドの出力
jsp:setProperty
の設定
この項には、次の項目が含まれます。
サーブレット仕様2.3以上では、setCharacterEncoding()
メソッドは、HTTPリクエストの読取りに使用するデフォルト以外の文字エンコードを指定する標準機能として、javax.servlet.ServletRequest
インタフェースに指定されています。このメソッドのシグネチャは、次のとおりです。
void setCharacterEncoding(java.lang.String enc) throws java.io.UnsupportedEncodingException
enc
パラメータは、任意の文字エンコードの名前を指定する文字列で、デフォルトの文字エンコードをオーバーライドします。このメソッドは、リクエスト・パラメータを読み取る前、またはgetReader()
メソッド(ServletRequest
インタフェースに指定)を介して入力を読み取る前にコールしてください。
対応する次のgetterメソッドもあります。
String getCharacterEncoding()
|
Copyright © 2007 Oracle Corporation. All Rights Reserved. |
|