SAK 図書館

SAK Streets メインストリート 図書館・カフェ 一覧 SAK Streets 検索
| VB | SQL | Perl | PHP | ASP | JSP | C | PC | HP | FAQ | フリーソフト |

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 編資料
| VB | SQL | Perl | PHP | ASP | JSP | C | PC | HP | FAQ | フリーソフト |

SAK Streets メインストリート 図書館・カフェ 一覧 SAK Streets 検索



Copyright (C) 1999-2017 Y.SAK