| 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);
}
}
}
------------------------------------------------------------------------------------
目次
索引
![]()
|