Filter過濾器

ICanICanGO發表於2020-10-26

filter過濾器用於web專案在請求轉發與響應資料時對資料或邏輯進行新增一系列更改
一:三個方法
1、init():初始化,在過濾器開始時執行init方法體內業務邏輯
2、doFilter():伺服器與客戶端之間請求響應時進行字符集、訪問地址、引數等一系列判斷
3、destroy():此方法在doFilter方法後執行。該方法不會在關閉瀏覽器或客戶端時銷燬。等待整個專案關閉時才會銷燬。
二:doFilter的使用(編碼字符集和位址列的判斷)

//向下還原
		HttpServletRequest req = (HttpServletRequest)request;
		HttpServletResponse resp = (HttpServletResponse)response;
		//設定編碼字符集
		req.setCharacterEncoding("UTF-8");
		resp.setCharacterEncoding("UTF-8");
		resp.setContentType("text/html");
		//建立session物件用於session是否存在的判斷
		HttpSession session = req.getSession();
		//獲取當前瀏覽器中訪問的地址
        String requestURI = req.getRequestURI();
		System.out.println("總地址"+requestURI);
        //獲取當前應用和當前訪問全路徑
        String contextPath = req.getContextPath();
		System.out.println("訪問地址"+contextPath);
        //獲取當前訪問的頁面或者servlet名字
        String subPath = requestURI.substring(contextPath.length());
		System.out.println("擷取之後的地址"+subPath);
		//判斷是否是登入介面或者是登入的servlet
        if(subPath.contains("Login.jsp") || subPath.contains("loginServlet")){
			//chain方法
			chain.doFilter(req, resp);
        }else{
        	//判斷session是否為null,不等於空則代表當前有使用者登入
			if(session.getAttribute("ename")!=null){
				chain.doFilter(req, resp);
			}else{
				//如果判斷之後沒有登入跳轉到登入介面
				resp.sendRedirect("Login.jsp");
			}
		}

三:過濾器原理圖
在這裡插入圖片描述

相關文章