Tomcat3.1ベースのServletサービス、またはTomcat4.1ベースのServletサービスから、Tomcat5.5ベースのServletサービスへ移行する場合の注意事項について説明します。
特に表中記載のないものについては、設定や動作上の差分はありません。
Webアプリケーション環境定義ファイル(deployment descriptor)の記述形式
Tomcat5.5ベースのServletサービスでは、Webアプリケーション環境定義ファイル(deployment descriptor)のタグは以下の方法でチェックします。
Servlet2.2/Servlet2.3のdeployment descriptor
DTD(文書型定義)ベース
Servlet2.4のdeployment descriptor
XMLスキーマベース
Tomcat3.1ベースのServletサービスでは独自の方式でチェックを行っていたため、これまでチェックされていなかった内容がチェックされる場合があります。
deployment descriptorをServlet2.4のものに修正した場合、チェック方法(チェック対象)が異なるため、これまで配備時にはチェックされていなかった内容がチェックされる場合があります。
タグの指定方法が誤っている場合には、Interstage管理コンソールで配備を行った際に、画面上のメッセージ領域にエラーメッセージを出力して配備を中断します。
また、IJServerの起動時にタグの指定方法の誤りが検出された場合には、IJServerのコンテナログに以下のエラーメッセージが出力されますので、「7.5 Webアプリケーション環境定義ファイル(deployment descriptor)」を参照して修正してください。たとえば、servlet-mappingタグをservletタグよりも前に定義した場合にエラーとなります。
[ERROR] Digester - -Parse Error at line [行数] column [列数]: [原因]
Webアプリケーション環境定義ファイル(deployment descriptor)修正後、IDE(統合開発環境ツール)等に付属しているdeployment descriptorの検証機能を使用して、修正内容の妥当性を検証することを推奨します。
配備済みのアプリケーションのdeployment descriptorの記述形式を、Servlet2.2または2.3からServlet2.4の記述形式に変更する場合は、アプリケーションを配備しなおしてください。
サーブレット・マッピング
デフォルトでは、サーブレット・マッピングの定義を行わない、以下のURLの形式でのサーブレットの呼び出しはできません。以下のURLの形式でサーブレットの呼び出しを行っていた場合は、Webアプリケーション環境定義ファイルにサーブレット・マッピングの定義を行う必要があります。
http://サーバホスト名:ポート番号/Webアプリケーション名/servlet/サーブレット名
IJServerワークユニットの環境設定で、サーブレット・マッピングの定義を行わずに、上記URLの形式で呼び出すことができる設定に切り替えることができますが、以下の理由から推奨しません。
クラス名が分かればすべてのサーブレットが動作できてしまう(セキュリティ)。
Filterアプリケーションの呼び出しがサポートされない。
Servletの仕様外の機能である(移植性)。
特にありません。
JSPのimport
Tomcat5.5ベースのServletサービスでは、JSP1.2/2.0の仕様の以下のJavaパッケージのクラス以外は、importなしにクラス名のみで直接スクリプトレット使用はできません。
javax.servlet
javax.servlet.http
javax.servlet.jsp
仕様外のクラスを使用している場合は、下記の対処を行ってください。
JavaVMオプションの以下のプロパティは使用できません。
-Dcom.fujitsu.interstage.j2ee.ijserver.jspImplicitImport=true(英大文字・英小文字の区別なし)
これにより下記のクラスも使用できなくなります。
java.io.*
java.util.*
仕様外のクラスを使用している場合は、下記の対処を行ってください。
Tomcat5.5ベースのServletサービスで仕様外のクラスを使用する場合は、以下のいずれかの対処を行ってください。
JSPのPageディレクティブで正しくimport宣言を行う。
Servlet2.4(JSP2.0)の機能を使用する。
deployment descriptor(web.xml)を、Servlet2.4用に修正します。(Servlet2.3以前のdeployment descriptorの場合)
詳細は「7.5 Webアプリケーション環境定義ファイル(deployment descriptor)」を参照してください。
JSPの必要なimport文を含んだファイルを用意します。
例
header.jspf
<%@ page import="java.io.*,java.util.*" %>
deployment descriptor(web.xml)に<jsp-config>タグを追加し、対象とするJSPに対して、上記header.jspfを設定します。
例
この例では、header.jspfファイルをアプリケーションのWEB-INF/jspfディレクトリ配下に格納し、すべてのJSPに対して設定しています。
deployment descriptor(web.xml)
<?xml version=」1.0」 encoding=」UTF-8」 ?> <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> ・・・ <jsp-config> <jsp-property-group> <url-pattern>*.jsp</url-pattern> <include-prelude>/WEB-INF/jspf/header.jspf</include-prelude> </jsp-property-group> </jsp-config> ・・・ </web-app>
配備時のWebアプリケーション名
Webアプリケーションの配備を行う場合、Webアプリケーション名の省略値には以下の値が使用されます。
EARファイルの場合
application.xmlのcontext-rootに値が設定されている場合には、その設定されている名前が使用されます。
application.xmlのcontext-rootに値が設定されていない場合には、WARファイル名から拡張子を除いた名前が使用されます。
WARファイルの場合
WARファイル名から拡張子を除いた名前が使用されます。
特にありません。
HTTPトンネリングの移行
CORBA_ORB_init()関数でのHTTPトンネリング機能の設定は有効となりません。
HTTPトンネリング機能を使用する場合は、IJServerのJavaVMオプション、またはFJjndi.propertiesファイルで、環境プロパティとして「HTTPGW」を設定してください。
環境プロパティ「HTTPGW」の値と設定内容については、「4.1.1 J2EEアプリケーションクライアント」を参照してください。
注) アプリケーションでのJNDI機能の使用有無にかかわらず設定してください。
なお、CORBA_ORB_init()関数で設定していた場合でも、アプリケーションの修正は必要ありません。
HTTPトンネリング機能は、Webアプリケーションのみ運用のタイプのIJServerで使用可能です。以下のタイプのIJServerではHTTPトンネリング機能は使用できません。
WebアプリケーションとEJBアプリケーションを同一JavaVMで運用
WebアプリケーションとEJBアプリケーションを別JavaVMで運用
特にありません。
マルチコンテナ機能の移行
マルチコンテナ機能を使用していた場合には、WebアプリケーションをIJServerへ配備し直す必要があります。「第32章 V5.1以前のServletサービス環境定義の移行」の「サーブレット・ゲートウェイ環境の移行」を参照してください。
特にありません。
JSPのコンパイル
Java言語仕様に準拠していないコードや推奨されないコードを含むJSPは、以前のバージョンからの移行により、コンパイルに失敗したり、実行結果が変わったりすることがあります。
移行時にはJSPを見直し、Java言語仕様に従っているか確認してください。
例
JSP内のJavaコードで、ローカル変数名に「org」を使用している。
⇒ユニークなパッケージ名の先頭に使用される文字列(「org」や「com」など)を、ローカル変数名に使用すべきではありません。
Systemwalker Service Quality Coordinatorと連携したトランザクション内訳分析の対象
未サポートです。
[ワークユニット] > 「ワークユニット名」 > [環境設定]タブ > [Servletコンテナ設定]で、「マッピングがなくてもサーブレットが動作する」が設定されている場合、以下の形式で呼び出したサーブレットの情報は、すべてまとめて「invoker」として出力されていましたが、この情報は出力されなくなります。
http://servername[:port]/Webアプリケーション名/servlet/サーブレットクラス名
Interstage管理コンソールのWebアプリケーションのモニタの対象
未サポートです。
[ワークユニット] > 「ワークユニット名」 > [環境設定]タブ > [Servletコンテナ設定]で、「マッピングがなくてもサーブレットが動作する」が設定されている場合、以下の形式で呼び出したサーブレットの情報は、すべてまとめて「invoker」として出力されていましたが、この情報は出力されなくなります。
http://servername[:port]/Webアプリケーション名/servlet/サーブレットクラス名
JSPのリロード
クラスのオートリロード機能とは別に設定可能となりました。
[ワークユニット] > [新規作成]タブ > [詳細設定] > [Servletコンテナ設定] > [JSPのリロード]で設定可能です。
セション管理用CookieにSecure属性を常に付加する
Tomcat5.5ベースのServletサービスでは、Interstage管理コンソールより以下で設定を行ってください。
[システム] > [ワークユニット] > 「ワークユニット名」 > 「Webアプリケーション名」 > [環境設定]タブ > [コンテキスト設定] > [セション] > クッキーにSecure属性を常に付加する
既存通りJavaVMオプションとして定義することも可能(※)ですが、Interstage管理コンソールからの設定を推奨します。
※) いずれかで設定されていれば有効となります。
リクエストのエンコーディング
Servletサービスのバージョンによって、リクエストを処理するエンコーディングにデフォルトでは以下の動作差分があります。
対象 | Tomcat4.1ベースのServletサービス | Tomcat5.5ベースのServletサービス |
---|---|---|
リクエストURI | UTF-8 (注1) | ISO-8859-1(設定可能) |
GETメソッド時のリクエストパラメタ(クエリストリング) | リクエストボディを処理するエンコーディング (注2) | 以下から選択可能。 |
POSTメソッド時のリクエストパラメタ(リクエストボディ) | リクエストボディを処理するエンコーディング (注2) | リクエストボディを処理するエンコーディング (注2) |
リクエストボディを処理するReader | リクエストボディを処理するエンコーディング (注2) | リクエストボディを処理するエンコーディング (注2) |
注1) PG48587の修正を適用した場合は以下の順で処理されます。
UTF-8
OSのデフォルトエンコーディング
自動判定(Java言語の自動判定機能(JISAutoDetect)を使用)
注2) 「リクエストボディを処理するエンコーディング」は以下が該当します。
リクエストのContent-Typeヘッダで示されるcharset
WebアプリケーションでリクエストにsetCharacterEncodingメソッドで設定したエンコーディング
Webアプリケーション環境設定で「エンコーディング」に指定したエンコーディング
Tomcat5.5ベースのServletサービスでTomcat4.1ベースのServletサービスと同じ動作にする場合は以下の設定を行ってください。
[ワークユニット] > 「ワークユニット名」 > [Servletコンテナ設定] > [リクエストURIのエンコーディング]に「UTF-8」
[ワークユニット] > 「ワークユニット名」 > [Servletコンテナ設定] > [リクエストボディ処理のエンコーディングをクエリパラメタに使用する]に「する」
また、Tomcat4.1ベースのServletサービスとTomcat5.5ベースのServletサービスでは、Webアプリケーション環境設定で「エンコーディング」を指定した場合の動作に以下の改善が行われています。
これにより、リクエストのContent-Typeヘッダに正しくエンコーディング「charset=」が指定されている場合は、その値が有効となります。
(1)Webアプリケーション環境設定「エンコーディング」 | (2)リクエストのContent-Typeのcharset | (3)アプリケーションによるリクエストへのsetCharacterEncoding | Tomcat4.1ベースのServletサービス | Tomcat5.5ベースのServletサービス |
---|---|---|---|---|
指定あり | あり | あり | (3)が有効 | (3)が有効 |
なし | (1)が有効 | (2)が有効 | ||
なし | あり | (3)が有効 | (3)が有効 | |
なし | (1)が有効 | (1)が有効 | ||
指定なし | あり | あり | (3)が有効 | (3)が有効 |
なし | (2)が有効 | (2)が有効 | ||
なし | あり | (3)が有効 | (3)が有効 | |
なし | デフォルト(ISO-8859-1) | デフォルト(ISO-8859-1) |
HTTP TRACEメソッド
Tomcat5.5ベースのServletサービスでは、HTTP TRACEメソッドはセキュリティ上の理由から使用できません。
なお、HTTP TRACEメソッドは、Webサイトの利用者が通常使用する機能ではありません。
接続先コネクタの制限
Tomcat4.1ベースのServletサービスで、Webサーバコネクタの証明書のシリアル番号と発行者識別DNを指定して接続先コネクタの制限を行っていた場合、Tomcat5.5ベースのServletサービスでは、Interstage管理コンソールの以下の設定で、WebサーバコネクタとServletコンテナ間の通信で使用するSSL定義を適切に設定して、接続先コネクタの制限を行ってください。
[システム] > [セキュリティ] > [SSL]の新規作成、または、参照・変更の詳細設定項目である「[認証局証明書のニックネーム]の選択」
同時処理数
Tomcat5.5ベースのServletサービスでは、同時処理数に指定した値のうちの1つは、クライアントシステムからのリクエスト受け付け用として、Servletコンテナの内部処理で使用されます。そのため、指定できる最小値は2になります。
JSP Document(XMLベースのJSP)の属性の順番
JSP Documents(XML形式のドキュメント)の場合、XMLでは属性の順番が保証されないため、依存するアプリは移行により動作しない場合があります。
問題が発生する場合は、依存しないよう修正してください。
例
修正前
<vsi:loop begin="%= last - s %" end="%= last++ %" />
修正後
<vsi:loop begin="%= last - s %" end="%= last %" /><jsp:scriptlet>last++;</jsp:scriptlet>
リクエストのURIに'\'を含む場合
Tomcat5.5ベースのServletサービスでは、リクエストのURIに'\'(エンコードされている場合も該当)を含む場合、Tomcat4.1ベースのServletサービス(PG56136の修正未適用)では呼び出し可能であったコンテンツが呼び出しできなくなることがあります。