標籤:jsp else att dispatch odi mapping 直接 條件 亂碼
我們通常上網的時候都會遇到一個問題,看到一個視頻之類的,想要點開觀看,點擊之後,網頁
提醒你:您尚未登入,是否要登入?然後巴拉巴拉跑去輸帳號密碼。
那麼這就是一個過濾器的功能,當你要訪問一個資源的時候(通常理解為連結),伺服器會進行
分析,當前的訪問者是否符合一定條件(通常就是檢測一下是不是會員,是否已經登入),符合
條件的話,伺服器會跳轉到指定連結,不滿足的話也會友情提醒:您不是會員,您尚未登入等等。
如何?呢,還是以使用者登入狀態例子吧,看下面~~~
1.三個頁面
登入頁面,登入成功頁面,登入失敗頁面
login.jsp---loginsuccess.jsp---loginwrong.jsp
2.實現Filter介面的類
這個java檔案實現了Filter介面,並且設定了規則,並且還有設定檔
1 public void doFilter(ServletRequest arg0, ServletResponse arg1, 2 FilterChain arg2) throws IOException, ServletException { 3 HttpServletRequest request = (HttpServletRequest) arg0; 4 HttpServletResponse response = (HttpServletResponse) arg1; 5 request.setCharacterEncoding("utf-8");// 佈建要求編碼 6 response.setCharacterEncoding("utf-8");// 設定響應編碼 7 HttpSession session = request.getSession();//session對象,用於儲存表單資料 8 String username = request.getParameter("username"); 9 String password = request.getParameter("password");10 session.setAttribute("username", username);11 session.setAttribute("password", password);12 System.out.println("密碼:" + password);13 System.out.println("帳號:" + session.getAttribute("username"));14 if (username != null && password != null) {15 if (username.equals("admin") && password.equals("admin")) {16 arg2.doFilter(arg0, arg1);// 滿足條件允許存取,跳轉到表單想要到達的頁面loginsuccess.jsp17 } else {18 request.getRequestDispatcher("loginwrong.jsp").forward(request,19 arg1);// 不滿足條件,轉到loginwrong頁面20 }21 }22 }
設定檔規定了此規則適用於用戶端對哪個頁面訪問時,調用規則
1 <filter>2 <filter-name>logfilter</filter-name>3 <filter-class>Filter.Servletfilter</filter-class>4 </filter>5 <filter-mapping>6 <filter-name>logfilter</filter-name>7 <url-pattern>/loginsuccess.jsp</url-pattern>8 </filter-mapping>
filter-name自訂,不過規則與適用的頁面要一一對應,過濾規則類檔案要包名+檔案名稱形式書寫,
這個檔案的意思就是說,當用使用者要訪問loginsuccess.jsp頁面時,過濾器Servletfilter進行攔截,然後
結合規則來看,如果使用者的使用者名稱和密碼都是admin的話,伺服器直接跳轉到loginsuccess.jsp頁面,
帳號和密碼不對的話,伺服器跳轉到loginwrong.jsp頁面。
注意:使用者提交表單,發送請求之後,請求被過濾器攔截,此時要佈建要求和響應的字元編碼,防止
後面用到資料的時候造成輸出亂碼。設定方法在過濾器源碼已經用紅字標出。
java之web開發過濾器