フィルタとは?
あるServletが実行される直前に別の処理を埋め込む機能。どのServletに対して処理を埋め込むかは、servlet-mappingのurl-patternと同様に正規表現を使って指定することができる。もともとフィルタの設定はweb.xmlに記述していたが、Servlet 3.0からはアノテーションで設定することができるようになった。
これは便利!AOPとほぼ同じに見えるんだけど、違いは何だろう。。
サンプル
Tomcat Version 7.0.33で動作確認。/MainServletにアクセスすると、FilterServletの処理が実行されます。その後、MainServletの処理が実行されます。
[MainServlet.java]
import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class MainServlet */ @WebServlet("/MainServlet") public class MainServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse * response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html; charset=UTF-8"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head>"); out.println("<title>Filter Test</title>"); out.println("</head>"); out.println("<body>"); out.println("<p>MainServletの処理です。</p>"); out.println("</body>"); out.println("</html>"); } }
[FilterServlet.java]
import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebFilter; /** * Servlet Filter implementation class FilterServlet */ @WebFilter(filterName="FilterServlet", urlPatterns="/*") public class FilterServlet implements Filter { /** * @see Filter#destroy() */ public void destroy() { } /** * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain) */ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { response.setContentType("text/html; charset=UTF-8"); response.getWriter().println("Filterの処理です。"); chain.doFilter(request, response); } /** * @see Filter#init(FilterConfig) */ public void init(FilterConfig fConfig) throws ServletException { } }
0 件のコメント:
コメントを投稿