SAK 図書館
JAVA Servlet、JSP 基礎編12 - Tomcat4.1.24、J2SDK1.4.1_02、web.xml
■Tomcat4.1.24 こいつはかなり以前のと違ってるな〜。 J2SDK1.4.1_02 と共に開発環境をアップした。 使用したパッケージは、 jakarta-tomcat-4.1.24.exe j2sdk-1_4_1_02-s1studio_ce-4u1-bin-windows.exe である。 ■J2SDK1.4.1_02 どうも 1.4.1 あたりから Shift_JIS の扱いが変わったらしい。 iso-2022-jp SJIS Shift_JIS の全てを試すが、Servlet、JSP 共に「−」「〜」などの日本語記号文字が ? になってしまう。 色々調べた結果、 MS932 と指定すると文字化けしないことを確認した。 MS932 は、Windows-31J と記述してもいけるのかもしれない。 【補足】 OS が Windows の場合は、Windows-31J でうまく動作したが、UNIX 系では やっぱり文字化けして、MS932 にしたような記憶が... ちょっと記憶が曖昧になっている。(^^; ■環境設定 なんとも複雑な開発環境のため、J2SDK1.4.1_02 はすんなり組み込めたが Tomcat4.1.24 に苦労した。 Tomcat3.3.1 の環境も残しておきたかったので実にややこしいことに... Cygwin 用の起動スクリプトを Tomcat4.1.24 用に新しく作成して、Cygwin から起動するようにした。 ■Apache 連携 どうも Tomcat3.3.1 の連携設定を見て Tomcat4.1.24 も Apache に連携して しまっている。支障もなく、便利なのでそのまま Apache 連携で使うことに した。ただ、Apache の root が優先されてしまうので Tomcat4.1.24 の管理 root へアクセスできない。(^^; 仕方なく 8080 ポートを抹消せずに Tomcat4.1.24 の管理ツールを使うとき だけ http://localhost:8080/ でアクセスすることにした。 一般の Servlet や JSP へは、http://localhost/ で問題なくアクセス可能で あった。 ■server.xml これも Tomcat4.1.24 は違うな〜。 reloadable="true" にしないと、Tomcat を再起動しないと Servlet の変更が 反映されない。reloadable="true" であってもリロードではダメで、ブラウザ を一度落とすぐらいの必要はあった。 常にリロードしてくれる設定がないものだろうか... <!-- Tomcat SAK Context --> <Context path="/sak" docBase="sak" debug="0" reloadable="true" crossContext="true" /> ■web.xml 例によって webapps/ 配下に sak/ を sak.war から展開した。 META-INF/ は Tomcat4.1.24 では不要のようである。 web.xml で日本語のエンコード指定や Servlet の呼び出し設定を行うようで ある。これをしないと、さっぱり Servlet にアクセス出来ない。 色々細かな設定もできるようだが、invoker で全ての Servlet アクセスを 単純に設定した。 日本語は、iso-2022-jp、SJIS、Shift_JIS の代わりに MS932 を指定 した。以前の Shift_JIS とフル互換が得られるのは MS932 だけで あった。filters/ については、SetCharacterEncodingFilter.class だけを examples/ 配下からコピーして来た。 実は、これらの設定がなかなかわからず徹夜... (^◇^;) <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <display-name>SAK</display-name> <description> SAK Servlet and JSP pages. </description> <filter> <filter-name>Set Character Encoding</filter-name> <filter-class>filters.SetCharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>MS932</param-value> </init-param> </filter> <filter-mapping> <filter-name>Set Character Encoding</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <servlet-mapping> <servlet-name>invoker</servlet-name> <url-pattern>/servlet/*</url-pattern> </servlet-mapping> </web-app> ■Servlet Servlet の日本語エンコードで Shift_JIS を使用する場合は、 charset=MS932 と指定する。 response.setContentType("text/html; charset=MS932"); ■JSP JSP の日本語エンコードで Shift_JIS を使用する場合は、 charset=MS932 と指定する。 <%@ page import="????.*" contentType="text/html; charset=MS932"%> ■仕様相違点 Tomcat4.1.24、J2SDK1.4.1_02 と Tomcat3.3.1、J2SDK1.4.0 での相違点と して現在、次のものを発見している。 ・getRealPath() が戻すパスの最後に「/」が付かないようである。 ・JSP でのカスタムクラス使用が package にしてないと、どうにも import できなかった。 ・最後まで泣かされた Shift_JIS エンコードは、MS932 以外はダメと 検証した。以前の SJIS、Shift_JIS、iso-2022-jp は MS932 にした。 ・JDBC で Oracle9i の文字データをアクセスすると同じく記号文字関係が ? になる。次のコード回避した。 s = rs.getString(fld); s = new String(s.getBytes("SJIS"), "MS932"); 但し、UNIX-Tomcat + Windows-Oracle の組み合わせでは、getBytes を 使用すると逆におかしくなる。 UNIX-Tomcat + Windows-Oracle、Windows-Tomcat + Windows-Oracle 共通で 処理するには、次のように「〜」だけ特別な変換をするしかないのかも。 s = rs.getString(fld); s = s.replace('\u301c', '\uff5e'); ・Oracle9i との接続がどうにも不安定。(^^; 以前、Cygwin B20 のときに経験した TNSListener との不具合である。 Cygwin 2.05b、Tomcat3.3.1、J2SDK1.4.0 環境では解決して、バッチリ安定 していたのだが、Cygwin 2.05b、Tomcat4.1.24、J2SDK1.4.1_02 では、 サービス起動前に TNSListener が動作していると Tomcat4.1.24 がアベンド してしまう。(^^; Tomcat4.1.24 後に TNSListener を起動すると、とりあえず使用できるが、 たまに途中でも Oracle9i に接続不能になる。(^^; TNSListener を再起動すると回復するのだが、なんともうっとしい... PostgreSQL との接続では、こんな不具合は発生しない。 う〜ん、わからん。(^◇^;) 色々な開発環境が混在しているのが悪さしているのかも... ・Servlet や クラスのリコンパイル結果が reloadable="true" にしていても リロードでは反映されず、ブラウザを再起動してやるぐらいの必要がある。 たまに Tomcat4.1.24 を再起動しないとダメな気もして、実にこれもうっと しい。きっと何かもっと良い設定があるはず。 開発時には、常にリロードしてくれる方がありがたい。 また、時間のあるときに調査しようと思う。 ■JAVA Servlet、JSP 基礎編資料
■JAVA Servlet、JSP + PostgreSQL 編資料
■JAVA Servlet、JSP + Oracle9i 編資料
■PostgreSQL 編、JAVA Servlet、JSP 編資料
■MySQL 編資料
■SQL 基礎編資料
■SQL 基礎実地編資料
■SQL チューニング編資料
■Oracle PL/SQL 編資料