便利なコードパーツ集!

やまろうのプログラミングTips

Java

Strutsで掲示板作る!サーブレットフィルタ

投稿日:2016年12月6日 更新日:

スポンサーリンク



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のエッセンスが
ぎゅっと詰まっています。

んじゃ
やまろう

スポンサーリンク

-Java

Copyright© やまろうのプログラミングTips , 2020 AllRights Reserved Powered by AFFINGER4.