Tomcat5.5の設定メモ

Getパラメータのデコードについて

ServletRequest#getParameterメソッドで日本語を受け取るときには、このメソッドより上の部分で、ServletRequest#setCharacterEncodingメソッドを呼び出す必要がある。

また、Tomcatの設定についても以下の内容を変更する必要がある。
対象ファイルは、<Tomcatをインストールしたディレクトリ>\conf\server.xmlで93行目付近の下記項目に赤字の部分を追加する。

<!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->
    <Connector port="8080" maxHttpHeaderSize="8192"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" redirectPort="8443" acceptCount="100"
               connectionTimeout="20000" disableUploadTimeout="true"
               useBodyEncodingForURI="true" />

追加する useBodyEncodingForURI=”true” はURLデコード時にServletRequest#setCharacterEncodingメソッドで指定した文字エンコーディングを使用するための設定です。

ただし、サーブレットAPI2.3以前はパラメータを自前でエンコーディングしていたらしい。

  1: String message = request.getParameter("message");
  2: message = new String(message.getBytes("ISO8869-1"), "Shift_JIS");

 

サーブレットフィルタ

サーブレットフィルタはサーブレットやJSPの共通の前後処理を記述するために使用するもの。また、共通処理を記述することもできる。

フィルタの作成方法は、以下の方法で行う。

  1. javax.servlet.Filterインタフェースを実装したフィルタクラスの作成
  2. web.xmlにフィルタを登録する

javax.servlet.Filterインタフェースを実装することでinitメソッド、doFilterメソッド、destroyメソッドの3つのメソッドを実装する必要があります。

また、web.xmlファイルにはfilterとfilter-mappingをservletとservlet-mappingのように記述することでどのフィルタをどのURLに適用するか決定できます。また、複数のフィルタを使用する場合は、web.xmlに記載された順番通りにフィルタが適用されます

さらには、filterに初期値をセットすることも可能なので、文字コードなど可変項目についてはweb.xmlに設定することも可能です。

参考にしている書籍はこちらです。.NETでASP.NETなどは使っていたからかもしれませんが、とてもわかりやすいですね。(先ほど確認したところ、最新版が出ているようなので注意してください。)