-
@JAVA過濾機制——過濾簡介 1、過濾器三部分:過濾源(用戶請求)——>過濾規則——>過濾結果 2、過濾器不處理結果,只做輔助性操作 3、定義:過濾器是一個【服務器端】的組件,它可以【截取用戶端的請求和響應信息】,并對這些信息過濾 4.案列:登錄案例、編碼轉換案例
查看全部 -
四種不同過濾器,通過四種不同標簽,在xml中做標記就可以實現不同的監聽
查看全部 -
用Filter處理編碼問題:
????在過濾器中添加:
????????request.setCharacterEncoding("utf-8");
????或者:在web.xml中配置初始化參數
????????
查看全部 -
登錄案例中的放行:
查看全部 -
Servlet3.0支持注解形式的Filter
查看全部 -
過濾器的實現:
????① 實現Filter接口
????② 在web.xml中配置過濾器
查看全部 -
過濾器常見的使用場景
查看全部 -
web.xml配置
查看全部 -
過濾器可以改變用戶請求的web資源,可以改變用戶請求的路徑(跳轉);
過濾器不能直接返回數據,不能直接處理用戶請求;
查看全部 -
過濾器工作原理:
過濾器生命周期:
過濾器鏈:
過濾器的分類:
查看全部 -
在web.xml中配置
<filter>
??? <filter-name>LoginFilter</filter-name>
??? <filter-class>com.filter.LoginFilter</filter-class>
??? <!-- 指定部分頁面,在代碼中實現對這些頁面放行 -->
??? <init-param>
????? <param-name>noLoginPaths</param-name>
????? <param-value>index.jsp;login.jsp;LoginServlet;fail.jsp</param-value>
??? </init-param>
??? <init-param>
????? <param-name>charset</param-name>
????? <param-value>UTF-8</param-value>
??? </init-param>
</filter>在Filter中
private FilterConfig config = null;public void init(FilterConfig arg0) throws ServletException {
?config = arg0; // 將實例化時的init-param存入config
}public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
???throws IOException, ServletException {
?String charset = config.getInitParameter("charset"); // 從config中獲得字符集
??? if(charset==null){
????? charset = "UTF-8";
??? }
??? request.setCharacterEncoding(charset); // 設定字符集為UTF-8
}編碼轉換 ? ? 字符集轉換防止亂碼
使用: request.setCharacterEncoding("config.getInitParameter("XX")")
?XX參數內容“UTF-8”
查看全部 -
@WebFilter注解的常用屬性:
查看全部 -
Servelt2.5:過濾器的分類:
查看全部 -
過濾器分類(通過<dispatcher>標簽)
通過<dispatcher>標簽的值不同把過濾器分類.此標簽中有四個值可以選擇,可以同時選擇多個.
包括request、forword、include、error
假設同一個過濾器關聯了index.jsp與main.jsp.此過濾器的<dispatcher>標簽值為request.
在過濾器中的doFilter()方法中
public void doFilter(ServletRequest req,ServletResponse rep,FilterChain chain){
HttpServletRequest request=(HttpServletRequest)req;
HttpServletResponse response=(HttpServletResponse)rep;
response.sendRedirect(request.getContextPath()+"/main.jsp");
}
當用戶訪問index.jsp頁面時,便會被過濾器截取.并執行doFilter()方法中的重定向去main.jsp頁面.但main.jsp也關聯了此過濾器,過濾器會截取到重定向新Web資源的請求.因此又會調用doFilter()方法中的重定向去main.jsp.所以是死循環的狀態.
因為重定向是屬于request的行為.因此會被<dispatcher>標簽值為request的過濾器截取到.即<dispatcher>標簽值為request的過濾器可以截取重定向新Web資源的請求.
當過濾器的doFilter()方法中用 request.getRequestDispatcher("/main.jsp").forward(arg0, arg1)請求轉發到main.jsp.此時當用戶請求訪問index.jsp時,便會被過濾器截取,并且執行doFilter()方法,然后請求轉發到main.jsp頁面.此時用戶可以訪問到main.jsp頁面,并沒有被過濾器截取.因為請求轉發屬于forward行為.因此<dispatcher>標簽值為request的過濾器是截取不了通過請求轉發去新Web資源的請求.盡管<url-pattern>設置了main.jsp關聯過濾器,但仍然截取不了.請求轉發:瀏覽器的地址欄不會變化,性能相對更好一些,因為獲取的資源是沒有二次講過瀏覽器的<br><br>
重定向:瀏覽器的地址欄是會變化的,獲取資源的時候經過了二次通過瀏覽器發送請求的過程。1.請求轉發
請求轉發是指將請求再轉發到另一資源(一般為JSP或Servlet)。此過程依然在同一個請求范圍內,轉發后瀏覽器地址欄內容不變
請求轉發使用RequestDispatcher接口中的forward()方法來實現,該方法可以把請求轉發到另外一個資源,并讓該資源對瀏覽器的請求進行響應
RequestDispatcher rd = request.getRequestDispatcher(path); rd.forward(request,response);
或request.getRequestDispatcher(path) .forward(request,response);
2.重定向
重定向是指頁面重新定位到某個新地址,之前的請求失效,進入一個新的請求,且跳轉后瀏覽器地址欄內容將變為新的指定地址
重定向是通過HttpServletResponse對象的sendRedirect()來實現,該方法相當于瀏覽器重新發送一個請求
response.sendRedirect(path);
forward轉發 :一次請求一次回應 服務器跳轉
sendredirect重定向: 兩次請求兩次回應 客戶端跳轉
由于sendredirect是request,會激活REQUEST類型的過濾器,因此要注意,是否會形成重定向循環
request 過濾request請求
forward 過濾重定向請求
include 過濾include請求查看全部 -
過濾器鏈的執行過程:
用戶請求-->過濾器1-->過濾器2-->servlet service-->過濾器2-->過濾器1-->用戶
查看全部
舉報