困った時は

tomcat5.5系で 404 not found になってしまう

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 を変更する場合、以下の箇所を変更して下さい。

Servlet 仕様 2.5
1:
2:
3:
4:
5:
<servlet-mapping>
  <servlet-name>Gate</servlet-name>
  <url-pattern>*.na</url-pattern>
  <url-pattern>/rabbit/*</url-pattern>
</servlet-mapping>
Servlet 仕様 2.4
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>を複数記述できるか否かの違いがあります。

Jar ファイルの配置先

少なくとも、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.jar はServlet API を呼び出しますが、通常 Java EE ではなく、Java SE + tomcat をインストールしていると思います。
paraselene.jar をNo1に配置した場合、「paraselene.jar(その他No1に配置された Jar)から見たクラスパス」はNo1のみになってしまい、No2が見えていません。結果、tomcat が保持する Servlet API が見えません。
実環境で Jar を配置する場合、No2が適切です。

No1に配置する場合、No1に Servlet API が存在しなければなりません。
No3に配置すると、Paraselene はそれぞれのアプリケーションで独立して動きます。このため、Paraselene モニターから制御できなくなります。

tomcat で実行しているが、フォームから GET した日本語が文字化けする

Paraselene では HttpServletRequest に対して、setCharacterEncoding(tomcat4 以降より使用可)を行って文字コードを設定しています。
ところが tomcat5 以降では、GET メソッドに対して setCharacterEncoding が効かない仕様に変更されました(POST のみに効果あり)。
これは「 URL のクエリ文字コードは UTF-8 である」というルールに従っているためです(UTF-8 のページで文字化けする気がしますが…)。
tomcat4 と同じく、GET で setCharacterEncoding を効かせるために、server.xml を以下のように変更して下さい。

server.xml
1:
2:
3:
4:
<Connector port="8080" protocol="HTTP/1.1"
  connectionTimeout="20000"
  useBodyEncodingForURI="true"
  redirectPort="8443" />

コンパイル後のページクラスを入れ替えて、tomcat を再起動しても古いデザイン内容が表示されている

Paraselene はセッションに画面遷移の履歴を残します。tomcat はセッション情報をディスクに待避しようとするので、再起動後もそのセッションが生きている場合があります。
そのコーディングした処理内容にもよりますが、セッション待避機能のおかげで、変更前の状態が完全復元されてしまう場合があります。
$CATALINA_HOME/work の中に、xxx.session というファイルがあれば待避されたセッションです。このファイルを削除して tomcat を再起動して下さい。

最終更新: 2009/10/21
特に明示されていない限り、本Wikiの内容は次のライセンスに従います:CC Attribution 3.0 Unported
文書の先頭へ
SourceForge.JP
2009 © Akira Terasaki.  
Driven by DokuWiki The Apache Software Foundation