Interstage Application Server J2EE ユーザーズガイド |
目次 索引 |
第2部 Servlet/JSP編 | > 第7章 Webアプリケーションの開発 | > 7.5 Webアプリケーション環境定義ファイル(deployment descriptor) | > 7.5.3 Webアプリケーション環境定義ファイル(deployment descriptor)のタグの詳細 |
フィルタ機能を利用するには、“フィルタクラスの定義”と“フィルタクラスを適用する対象の定義”をします。ここでは、フィルタクラスを適用する対象の定義について説明します。
フィルタクラスを適用する対象は、filter-mappingタグで定義します。
filter-mappingタグでは、リクエストに対して、どのフィルタをどの順番で使えばよいかをかWebコンテナに指示します。
filter-mappingタグは複数定義することができます。フィルタを実行する順番は、以下のように決まります。
------------------------------------------------------------------------------------ <filter-mapping> <filter-name>value</filter-name> <servlet-name>name</servlet-name> </filter-mapping> <filter-mapping> <filter-name>value</filter-name> <url-pattern>pattern</url-pattern> </filter-mapping> ------------------------------------------------------------------------------------
タグ名 |
説明 |
タグの |
複数の |
---|---|---|---|
filter-name |
フィルタ名を指定します。 |
× |
× |
url-pattern |
フィルタとマッピングするURLパターンを指定します。
|
× |
× |
servlet-name |
フィルタとマッピングするサーブレット名を指定します。 |
× |
× |
特定のサーブレットに対するフィルタの定義を以下に示します。
------------------------------------------------------------------------------------ <web-app> <filter> <filter-name>helloWorld</filter-name> ← フィルタクラスの別名です。 <filter-class>MyHelloWorldFilter</filter-class> ← フィルタクラス名です。 </filter> <filter-mapping> <filter-name>helloWorld</filter-name> ← フィルタクラスの別名です。 <servlet-name>MyHelloWorld</servlet-name> ← サーブレット名です。 </filter-mapping> </web-app> ------------------------------------------------------------------------------------
単独のURL(以下の例ではJSPファイルのURL)に対するフィルタの定義を以下に示します。
------------------------------------------------------------------------------------ <web-app> <filter> <filter-name>helloWorld</filter-name> ← フィルタクラスの別名です。 <filter-class>MyHelloWorldFilter</filter-class> ← フィルタクラス名です。 </filter> <filter-mapping> <filter-name>helloWorld</filter-name> ← フィルタクラスの別名です。 <url-pattern>/filter.jsp</url-pattern> ← フィルタとマッピングするURIパターンです。 </filter-mapping> </web-app> ------------------------------------------------------------------------------------
URIパターンに対するフィルタの定義を以下に示します。
以下の例では、ワイルドカードを使って"/"以下のリソースのすべてがフィルタ機能の対象になることを示しています。
------------------------------------------------------------------------------------ <web-app> <filter> <filter-name>helloWorld</filter-name> ← フィルタクラスの別名です。 <filter-class>MyHelloWorldFilter</filter-class> ← フィルタクラス名です。 </filter> <filter-mapping> <filter-name>helloWorld</filter-name> ← フィルタクラスの別名です。 <url-pattern>/*</url-pattern> ← フィルタとマッピングするURIパターンです。 </filter-mapping> </web-app> ------------------------------------------------------------------------------------
Webアプリケーションの記述例
------------------------------------------------------------------------------------ import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class MyHelloWorldFilter implements Filter { String company; public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletResponseWrapper wrapper = new MyResponseWrapper( (HttpServletResponse)res); chain.doFilter(req, wrapper); CharArrayWriter writer = new CharArrayWriter(); writer.write(wrapper.toString().substring(0, wrapper.toString().indexOf("</body>")-1)); writer.write("<hr>\n"); writer.write("Copyrights © " + company + "\n"); writer.write("</body>\n</html>\n"); PrintWriter out = res.getWriter(); res.setContentLength(writer.toString().length()); out.write(writer.toString()); out.close(); } public void init(FilterConfig config) throws ServletException { company = config.getInitParameter("company"); } public void destroy(){} class MyResponseWrapper extends HttpServletResponseWrapper { private CharArrayWriter output; public String toString() { return output.toString(); } public MyResponseWrapper(HttpServletResponse response){ super(response); output = new CharArrayWriter(); } public PrintWriter getWriter(){ return new PrintWriter(output); } } } ------------------------------------------------------------------------------------
目次 索引 |