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 編資料