欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaWeb學(xué)習(xí)筆記之Filter和Listener

 更新時間:2021年03月08日 11:10:09   作者:小小張自由—>張有博  
這篇文章主要給大家介紹了關(guān)于JavaWeb學(xué)習(xí)筆記之Filter和Listener的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

Filter:過濾器

      過濾器:當(dāng)訪問服務(wù)器的資源時,過濾器可以將請求攔截下來,完成一些特殊的功能。一般用于完成通用的操作。如:登錄驗證、統(tǒng)一編碼處理、敏感字符過濾...

      過濾器相當(dāng)于瀏覽器與 Web 資源之間的一道過濾網(wǎng),在訪問資源之前通過一系列的過濾器對請求進(jìn)行修改、判斷以及攔截等,也可以對響應(yīng)進(jìn)行修改、判斷以及攔截等。

執(zhí)行流程:

客戶端發(fā)出請求,先經(jīng)過過濾器, 如果過濾器放行,那么才能到servlet

如果有多個過濾器, 那么他們會按照注冊的映射順序 來 排隊。 只要有一個過濾器, 不放行,那么后面排隊的過濾器以及咱們的servlet都不會收到請求。

使用方法:

        1.定義一個類,實現(xiàn)接口Filter。

        2.重寫其中的方法(執(zhí)行攔截的動作)

        3.配置攔截路徑:使用注解@WebFilter或web.xml

@WebFilter("/*")//訪問所有資源之前,都會執(zhí)行該過濾器
public class FilterDemo1 implements Filter {
       @Override
       public void init(FilterConfig filterConfig) throws ServletException {
            //過濾器初始化的方法,一般用于申請資源
   // init:在服務(wù)器啟動后,會創(chuàng)建Filter對象,然后調(diào)用init方法。只執(zhí)行一次。用于加載資源
       }
            
       @Override
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
   //執(zhí)行攔截的動作,具體的攔截邏輯寫在這里  
   //doFilter:每一次請求被攔截資源時,會執(zhí)行。執(zhí)行多次         
   System.out.println("filterDemo1被執(zhí)行了....");
            
           //放行
           filterChain.doFilter(servletRequest,servletResponse);
            
       }
            
       @Override
       public void destroy() {
            //過濾器銷毀的方法,一般用于釋放資源
   //destroy:在服務(wù)器關(guān)閉后,F(xiàn)ilter對象被銷毀。如果服務(wù)器是正常關(guān)閉,則會執(zhí)行destroy方法。只執(zhí)行一次。用于釋放資源
       }
}

過濾器配置詳解

       攔截路徑配置:

                1. 具體資源路徑: /index.jsp   只有訪問index.jsp資源時,過濾器才會被執(zhí)行

                2. 攔截目錄: /user/*    訪問/user下的所有資源時,過濾器都會被執(zhí)行

                3. 后綴名攔截: *.jsp        訪問所有后綴名為jsp資源時,過濾器都會被執(zhí)行

                4. 攔截所有資源:/*        訪問所有資源時,過濾器都會被執(zhí)行

Listener:監(jiān)聽器

Servlet 規(guī)范中定義的一種特殊的組件,用來監(jiān)聽 Servlet 容器產(chǎn)生的事件并進(jìn)行相應(yīng)的處理。

事件監(jiān)聽機(jī)制

            * 事件    :一件事情

            * 事件源 :事件發(fā)生的地方

            * 監(jiān)聽器 :一個對象

            * 注冊監(jiān)聽:將事件、事件源、監(jiān)聽器綁定在一起。 當(dāng)事件源上發(fā)生某個事件后,執(zhí)行監(jiān)聽器代碼

ServletContextListener

           在 ServletContext 創(chuàng)建和關(guān)閉時都會通知 ServletContextListener 監(jiān)聽器。

           需要在 web.xml 里面配置監(jiān)聽器。

使用方法:

           1.定義一個類,實現(xiàn)ServletContextListener接口。

           2.重寫方法。

           3.進(jìn)行配置

ServletContextListener:監(jiān)聽ServletContext對象的創(chuàng)建和銷毀

* 方法:
  * void contextDestroyed(ServletContextEvent sce) :ServletContext對象被銷毀之前會調(diào)用該方法
  * void contextInitialized(ServletContextEvent sce) :ServletContext對象創(chuàng)建后會調(diào)用該方法

使用Filter的登錄攔截的案例

@WebFilter("*.jsp")
public class FilterTest1 implements Filter {
 public void destroy() {
 }
 
 public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
  //判斷是否已經(jīng)登錄了,如果沒有登錄就需要跳轉(zhuǎn)到登錄界面,但是如果訪問的資源路徑本來
  //就是登錄頁面,那么就不需要攔截了,這里需要進(jìn)行判斷排除
 
  //記得強(qiáng)制轉(zhuǎn)型
  HttpServletRequest request = (HttpServletRequest)req ;
 
  //獲取session對象,看看對應(yīng)的屬性是否有值
  HttpSession session = request.getSession();
  Object login = session.getAttribute("login");
 
  //獲取url路徑,看看里面是否是登錄資源相關(guān)的
  String requestURI = request.getRequestURI();
 
  //在過濾掉登錄相關(guān)時,一定要排除一些js,css文件
  if (login != null || requestURI.contains("/longin.jsp") || requestURI.contains("/css/") ||
    requestURI.contains("/js/") || requestURI.contains("/fonts/") ) {
   chain.doFilter(req, resp);
  } else {
   request.getRequestDispatcher("/longin.jsp").forward(request, resp);
  }
 }
 
 public void init(FilterConfig config) throws ServletException {
 
 }
 
}

總結(jié)

到此這篇關(guān)于JavaWeb學(xué)習(xí)筆記之Filter和Listener的文章就介紹到這了,更多相關(guān)JavaWeb Filter和Listener內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Springboot?多租戶SaaS搭建方案

    Springboot?多租戶SaaS搭建方案

    這篇文章主要介紹了Springboot?多租戶SaaS方案,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • 配置gateway+nacos動態(tài)路由管理流程

    配置gateway+nacos動態(tài)路由管理流程

    這篇文章主要介紹了配置gateway+nacos動態(tài)路由管理流程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Springboot整合fastdfs實現(xiàn)分布式文件存儲

    Springboot整合fastdfs實現(xiàn)分布式文件存儲

    本文主要介紹了Springboot整合fastdfs實現(xiàn)分布式文件存儲,詳細(xì)闡述了Springboot應(yīng)用程序如何與FastDFS進(jìn)行集成及演示了如何使用Springboot和FastDFS實現(xiàn)分布式文件存儲,感興趣的可以了解一下
    2023-08-08
  • linux用java -jar啟動jar包緩慢的問題

    linux用java -jar啟動jar包緩慢的問題

    這篇文章主要介紹了linux用java -jar啟動jar包緩慢的問題,具有很好的參考價值,希望對大家有所幫助,
    2023-09-09
  • java對接支付寶支付項目的實戰(zhàn)記錄

    java對接支付寶支付項目的實戰(zhàn)記錄

    最近公司有一個需求是接入第三方支付(微信&支付寶),我接到了支付寶支付,所以下面這篇文章主要給大家介紹了關(guān)于java對接支付寶支付項目的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • SpringBoot自定義HttpMessageConverter操作

    SpringBoot自定義HttpMessageConverter操作

    這篇文章主要介紹了SpringBoot自定義HttpMessageConverter的操作,具有很好的參考價值,如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java的鎖機(jī)制:synchronized和CAS詳解

    Java的鎖機(jī)制:synchronized和CAS詳解

    這篇文章主要介紹了Java的鎖機(jī)制synchronized和CAS詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-09-09
  • Hibernate中l(wèi)oad方法與get方法的區(qū)別

    Hibernate中l(wèi)oad方法與get方法的區(qū)別

    Hibernate中有兩個極為相似的方法get()與load(),他們都可以通過指定的實體類與ID從數(shù)據(jù)庫中讀取數(shù)據(jù),并返回對應(yīng)的實例,但Hibernate不會搞兩個完全一樣的方法的
    2016-01-01
  • springboot之如何獲取項目目錄路徑

    springboot之如何獲取項目目錄路徑

    這篇文章主要介紹了springboot之如何獲取項目目錄路徑問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • 淺談Mybatis分頁插件,自定義分頁的坑

    淺談Mybatis分頁插件,自定義分頁的坑

    這篇文章主要介紹了淺談Mybatis分頁插件,自定義分頁的坑,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09

最新評論