※Web.xml設定
<context-param> <param-name>abc</param-name> <param-value>111</param-value> </context-param> <context-param> <param-name>def</param-name> <param-value>222</param-value> </context-param> <filter> <filter-name>zzz</filter-name> <filter-class>filter.HelloFilter</filter-class> <init-param> <param-name>ghi</param-name> <param-value>333</param-value> </init-param> <init-param> <param-name>jkl</param-name> <param-value>444</param-value> </init-param> </filter> <filter-mapping> <filter-name>zzz</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <servlet> <servlet-name>ooo</servlet-name> <servlet-class>controller.TestServletConfig</servlet-class> </servlet> <servlet-mapping> <servlet-name>ooo</servlet-name> <url-pattern>/xxx</url-pattern> </servlet-mapping>
public class HelloFilter implements Filter { @Override public void init(FilterConfig config) throws ServletException { System.out.println(config.getInitParameter("abc")); System.out.println(config.getInitParameter("ghi")); System.out.println("init方法!"); } @Override public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { System.out.println("doFilter方法前!"); // chain.doFilter(req, resp); // System.out.println("doFilter方法後!"); } @Override public void destroy() { System.out.println("destroy方法!"); try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } } }
※abc是null,因為filter比較快
※註解的doFilter不寫會看不到頁面,因為它沒把棒子傳給下一位,沒給就表示自己是終點,頁面上就會一片空白,而之後的程式碼也會執行
※Annotation設定
@WebFilter( urlPatterns = "/*", initParams = { @WebInitParam(name = "ghi", value = "333"), @WebInitParam(name = "jkl", value = "444") } ) public class HelloFilter implements Filter { // ... }
※過濾器和攔截器的區別
1.攔截器使用反射;過濾器使用回調2.攔截器不依賴 Servlet 容器;過濾器會依賴
3.攔截器只針對 request 請求;過濾器都可以
4.攔截器可多次調用;過濾器只在容器初始化時被調用
沒有留言:
張貼留言