あなたのアプリケーションの特定の実装の詳細についてはわかりませんが、一般的なスケッチとして、Filter
関心のある URL のスペース (おそらく/*
) にマップされたものを書きます。
URL が凝ったものかどうかFilter
を確認し、その場合は適切なリソース(URL ディスパッチャまたは名前付きリソース)へのリクエストを行います。リクエストディスパッチャを作成するには、渡されたものを保存する必要があります。URL が派手でない場合、フィルターは を呼び出し、マップされていないリソースを提供します。forward
filterConfig.getServletContext()
init(FilterConfig)
chain.doFilter(req, resp)
public class ExceptionFilter implements Filter {
private ServletContext servletContext;
public void destroy() {}
public void doFilter(ServletRequest req,
ServletResponse resp,
FilterChain chain)
throws IOException, ServletException {
String mapping = getMappingFor((HttpServletRequest)req);
if(mapping!=null) servletContext.getRequestDispatcher(mapping).forward(req,resp);
else chain.doFilter(req, resp);
}
public void init(FilterConfig filterConfig) throws ServletException {
this.servletContext = filterConfig.getServletContext();
}
private String getMappingFor(HttpServletRequest req) {...}
実装方法getMappingFor
はアプリケーションによって異なりますが、おそらくデータベースへの接続を開き、URL /foo/bar がマップされているかどうかを尋ね、マップされた URL を返すか、またはnull
マッピングがないかどうかを尋ねます。マッピングが変更されないことがわかっている場合は、既に取得したマッピングをキャッシュできます。
特定の URL またはデータベースからの情報に応じていくつかのリクエスト属性を設定し、何をすべきかを知っているサーブレットにリクエストを転送するなど、より詳細な実装を行うことができます。