tomcat6(Servlet 仕様2.5)と tomcat5.5(Servlet 仕様2.4)で web.xml の仕様が異なる部分がありました。
Paraselene 1.1.9.1以前では、Servlet 仕様2.5で拡張された仕様で web.xml を出力していました。
Paraselene 1.1.9.2以降では、Servle t仕様2.4形式で web.xml を出力します。
以前の web.xml を変更する場合、以下の箇所を変更して下さい。
1: 2: 3: 4: 5:
<servlet-mapping> <servlet-name>Gate</servlet-name> <url-pattern>*.na</url-pattern> <url-pattern>/rabbit/*</url-pattern> </servlet-mapping>
1: 2: 3: 4: 5: 6: 7: 8:
<servlet-mapping> <servlet-name>Gate</servlet-name> <url-pattern>*.na</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>Gate</servlet-name> <url-pattern>/rabbit/*</url-pattern> </servlet-mapping>
<servlet-mapping>に<url-pattern>を複数記述できるか否かの違いがあります。
少なくとも、paraselene.jar、common-io.jar、commons-fileupload.jar の3つにクラスパスを通さなければ動作しません。
Java 及び tomcat 環境下では、以下の場所に置く事で直接クラスパス指定せずとも動作しますが、多少振る舞いが違います。
| No | jar 配置先 | 備考 |
|---|---|---|
| 1 | $JAVA_HOME/lib/ext または $JAVA_HOME/jre/lib/ext |
あらゆるjavaアプリケーションからクラスパスが通ります。 |
| 2 | $CATALINA_HOME/lib または $CATALINA_HOME/common/lib |
あらゆる tomcat 配備アプリケーションからクラスパスが通ります。 またここに、tomcat の Servlet API が存在します。 |
| 3 | $CATALINA_HOME/webapps/アプリ名/WEB-INF/lib | その Web アプリケーションにのみクラスパスが通ります。 |
Paraselene では HttpServletRequest に対して、setCharacterEncoding(tomcat4 以降より使用可)を行って文字コードを設定しています。
ところが tomcat5 以降では、GET メソッドに対して setCharacterEncoding が効かない仕様に変更されました(POST のみに効果あり)。
これは「 URL のクエリ文字コードは UTF-8 である」というルールに従っているためです(UTF-8 のページで文字化けする気がしますが…)。
tomcat4 と同じく、GET で setCharacterEncoding を効かせるために、server.xml を以下のように変更して下さい。
1: 2: 3: 4:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" useBodyEncodingForURI="true" redirectPort="8443" />
Paraselene はセッションに画面遷移の履歴を残します。tomcat はセッション情報をディスクに待避しようとするので、再起動後もそのセッションが生きている場合があります。
そのコーディングした処理内容にもよりますが、セッション待避機能のおかげで、変更前の状態が完全復元されてしまう場合があります。
$CATALINA_HOME/work の中に、xxx.session というファイルがあれば待避されたセッションです。このファイルを削除して tomcat を再起動して下さい。