2003年
サーブレットフィルタとは、サブレットが動く前にrequestとresponseを
加工するものです。J2EEパターンで言うところのIntercepting Filterパターンって
やつです。Struts特有の機能ではなくServletコンテナが備えている機能です。
サーブレットフィルタを使用するには以下のステップが必要です。
1. javax.servlet.Filterインターフェースをimplementsしたフィルタークラスを
作成する。
2. 作成したフィルタークラスをweb.xmlに設定する。
1. javax.servlet.Filterインターフェースをimplementsしたフィルタークラスを
作成する。
今回は文字エンコーディングを設定するFilterを作成します。作成しようと
思ったら、Tomcatのサンプルに丁度いいものがあったのでそれをそのまま
利用します。
[SetCharacterEncodingFilter.java](抜粋)
package filters;
import javax.servlet.Filter;
public class SetCharacterEncodingFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
throws IOException, ServletException {
// Conditionally select and set the character encoding to be used
if (ignore || (request.getCharacterEncoding() == null)) {
String encoding = selectEncoding(request);
if (encoding != null)
request.setCharacterEncoding(encoding);
}
// Pass control on to the next filter
chain.doFilter(request, response);
}
public class SetCharacterEncodingFilter implements Filter {
でjavax.servlet.Filterをimplementsしてます。
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
で、javax.servlet.Filterで定義されてるdoFilterメソッドを実装しています。
このdoFilterにrequestとresponseを加工する処理を書きます。
で、サーブレットコンテナからはSetCharacterEncodingFilterをインスタンス化
してjavax.servlet.FilterにキャストしてdoFilterを呼び出すってわけです。
典型的なCommandパターンですな!!
chain.doFilter(request, response);で次のフィルターに処理を渡します。
つまりフィルターを複数、連結することが出来るのです。
2. 作成したフィルタークラスをweb.xmlに設定する。
[web.xml](抜粋)
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>Shift_JIS</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<url-pattern>/*</url-pattern>で*だから全てのURLに対して
filters.SetCharacterEncodingFilterを実行する。という指定です。
エンコーディングにShift_JISを指定してます。
これにより日本語が文字化けしません。
これにより、全てのURLに対するリクエストはfilters.SetCharacterEncodingFilterを
実行してからActionServletへ遷移します。サーブレットフィルタはServletの
前処理を実装するのに最適です。
いかがだったでしょうか?今回で「Strutsで掲示板」は終了です。
ぜひhttp://yamarou.at.infoseek.co.jp/forum.htmlからwarファイルをダウンロード
して、実際に動かしてみてください。Tomcatのwebappsに置くだけで簡単に動きます。
そして、とても小さなアプリケーションですが、Strutsのエッセンスが
ぎゅっと詰まっています。
んじゃ
やまろう