厚積薄發系列之JavaWeb的Filter
阿新 • • 發佈:2017-11-12
images exp nco gin end .get 是否 登陸 初始化
1.Filter的使用配置
- 創建一個類使其實現javax.servlet.Filter接口
- 實現接口方法 destroy() doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) init(FilterConfig arg0)
- 配置web.xml
-
<filter> <filter-name>TestFilter</filter-name> <filter-class>filter.TestFilter</filter-class
2.Filter的運行流程(兩張圖來展示)
3.Filter接口的方法
- init(FilterConfig config):初始化操作
- doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
- destroy() :銷毀操作
4.Filter的聲明周期
- 初始化操作 在服務器啟動的時候 根據web.xml配置文件創建Filter實例 調用init方法 實現初始化操作
- 處理業務邏輯 在用戶的一次請求 創建一個新的線程 根據路徑調用相應的過濾器的doFilter執行業務邏輯
- 結束階段 當Filter被移除的時候或者服務器正常關閉的時候 調用destory方法 銷毀該實例
- 註意Filter是單實例多線程的
5.Filter的常見用法
- post和get請求統一utf-8編碼 web.xml路徑配置為/*
-
1 import java.io.IOException;
View Code - 登陸驗證 判斷用戶是否登陸 web.xml路徑配置自己想要用戶登陸才能登陸登陸才能訪問的頁面
-
1 public void doFilter(ServletRequest arg0, ServletResponse arg1, 2 FilterChain arg2) throws IOException, ServletException { 3 4 HttpServletRequest request=(HttpServletRequest) arg0; 5 HttpServletResponse response=(HttpServletResponse) arg1; 6 HttpSession session=request.getSession(); 7 8 String path=request.getRequestURI(); 9 10 Integer uid=(Integer)session.getAttribute("userid"); 11 12 if(path.indexOf("/login.jsp")>-1){//登錄頁面不過濾 13 arg2.doFilter(arg0, arg1);//遞交給下一個過濾器 14 return; 15 } 16 if(path.indexOf("/register.jsp")>-1){//註冊頁面不過濾 17 arg2.doFilter(request, response); 18 return; 19 } 20 21 if(uid!=null){//已經登錄 22 arg2.doFilter(request, response);//放行,遞交給下一個過濾器 23 24 }else{ 25 response.sendRedirect("login.jsp"); 26 } 27 28 }
View Code - 禁止瀏覽器緩存動態頁面 web.xml路徑配置為不想讓瀏覽器緩存的頁面
-
1 @Override 2 public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) 3 throws IOException, ServletException { 4 5 HttpServletRequest request = (HttpServletRequest) req; 6 HttpServletResponse response = (HttpServletResponse) resp; 7 8 response.setDateHeader("Expires",-1); 9 response.setHeader("Cache-Control","no-cache"); 10 response.setHeader("Pragma","no-cache"); 11 12 chain.doFilter(request, response); 13 14 } 15 16 @Override
View Code
厚積薄發系列之JavaWeb的Filter