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

Java過濾器doFilter里chain.doFilter()函數(shù)的理解

 更新時間:2021年11月20日 10:18:22   作者:deep_blank  
這篇文章主要介紹了Java過濾器doFilter里chain.doFilter()函數(shù)的理解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

對過濾器doFilter里chain.doFilter()函數(shù)的理解

關(guān)于chain.doFilter()函數(shù)在最近的使用中不是很理解,但是考慮到他是過濾器。過濾器顧名思義就是在執(zhí)行某件事情的時候開始之前。

開始進(jìn)行處理的叫做過濾處理。一個方法,一個類就是充當(dāng)過濾器的角色。它是在一個容器(類似于Tomcat)啟動之后,打開一網(wǎng)站,他就會根據(jù)配置就行過濾處理。

doFilter()方法就是過濾器的主要方法,init()方法就是在容器啟動的時候執(zhí)行的。doFilter()方法中的chain.doFilter(request,response)方法剛開始還有些不怎么理解?,F(xiàn)在有一點(diǎn)明白了。

doFilter(request,response)的方法就是在你打開一個頁面當(dāng)滿足過濾器的條件的時候,他就會繼續(xù)執(zhí)行你打開頁面時候的操作。同時如果你使用了httpservletrequest和httpservletResponse的話,獲取servletPath的值就是你要打開的文件的地址。

例子如下:

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest req=(HttpServletRequest)request;
        HttpServletResponse resp=(HttpServletResponse)response;
        String servletPath= req.getServletPath();
        HttpSession session=req.getSession();
        String flag=(String)session.getAttribute("flag");
        if(servletPath!=null&&(servletPath.equals("/03/index.jsp")||servletPath.equals("/03/login.jsp")||servletPath.equals("/loginServlet17"))){
            chain.doFilter(request, response);
        }else{
            if(flag!=null&&flag.equals("login_success")){
                chain.doFilter(request, response);  
            }else if(flag!=null&&flag.equals("login_error")){
                req.setAttribute("msg", "登錄失敗,請重新登錄");
                req.setAttribute("return_uri", servletPath);
                RequestDispatcher rd=req.getRequestDispatcher("/03/login.jsp");
                rd.forward(req, resp);
            }else{
                req.setAttribute("msg","你尚未登錄");
                req.setAttribute("return_uri", servletPath);
                RequestDispatcher rd=request.getRequestDispatcher("/03/login.jsp");
                rd.forward(req, resp);
            }
        }
        System.out.println(servletPath);
    }

過濾器Filter&&chain.doFilter()

容器在加載的時候,會讀取web.xml中的<filter></filter>,根據(jù)指定的類路徑來實(shí)例化過濾器。

那么過濾器究竟是用來做什么的呢?

顧名思義,過濾器肯定是過濾我們不想要的東西。所以說執(zhí)行肯定是在我們訪問某個頁面之前。所以發(fā)散開來,它也可以執(zhí)行一些我們在訪問某個頁面,或者某些頁面之前想要的操作。

那么:

a.什么是過濾器?過濾器和普通類有什么區(qū)別?

b.過濾器中的chain.doFilter()起什么作用?

所以說chain.doFilter(request,response)是過濾器的必要操作,目的是如果有多個過濾器需要處理同一個url時把請求傳給下一個過濾器。

c.過濾器的處理的先后順序?

<servlet-mapping>
      <servlet-name>myServlet</servlet-name>
      <url-pattern>/foo*</url-pattern>
  </servlet-mapping>
  
  <filter-mapping>
      <filter-name>servletFilter</filter-name>
      <url-pattern>myServlet</url-pattern>
  </filter-mapping>
  
  <filter-mapping>
      <filter-name>myFilter</filter-name>
      <url-pattern>/foo*</url-pattern>
  </filter-mapping>
  
  <filter-mapping>
      <filter-name>anotherFilter</filter-name>
      <url-pattern>/foo/bar</url-pattern>
  </filter-mapping>

如果一個普通的請求訪問的URL是/foo/bar,那么它將匹配所有這3個過濾器。過濾器鏈將由3個過濾器組成,依次為myFilter、anotherFilter,然后是servletFilter。myFilter將在anotherFilter之前執(zhí)行,因?yàn)檫@是它們出現(xiàn)在部署描述符中的順序。它們都將在servletFilter之前執(zhí)行,因?yàn)閁RL映射總是在Servlet名稱映射之前執(zhí)行。

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 深入理解Spring的事務(wù)傳播行為

    深入理解Spring的事務(wù)傳播行為

    spring特有的事務(wù)傳播行為,spring支持7種事務(wù)傳播行為,確定客戶端和被調(diào)用端的事務(wù)邊界(說得通俗一點(diǎn)就是多個具有事務(wù)控制的service的相互調(diào)用時所形成的復(fù)雜的事務(wù)邊界控制),這篇文章主要給大家介紹了關(guān)于Spring事務(wù)傳播行為的相關(guān)資料,需要的朋友可以參考下。
    2018-02-02
  • 實(shí)戰(zhàn)干貨之基于SpringBoot的RabbitMQ多種模式隊列

    實(shí)戰(zhàn)干貨之基于SpringBoot的RabbitMQ多種模式隊列

    RabbitMQ 是一個由Erlang語言開發(fā)的AMQP的開源實(shí)現(xiàn),支持多種客戶端。用于在分布式系統(tǒng)中存儲轉(zhuǎn)發(fā)消息,在易用性、擴(kuò)展性、高可用性等方面表現(xiàn)不俗,下文將帶你深入了解 RabbitMQ 多種模式隊列
    2021-09-09
  • Spring Boot打jar包后配置文件的外部優(yōu)化配置方法

    Spring Boot打jar包后配置文件的外部優(yōu)化配置方法

    這篇文章主要介紹了Spring Boot打jar包后配置文件的外部優(yōu)化配置方法,需要的朋友可以參考下
    2018-02-02
  • 在Mybatis @Select注解中實(shí)現(xiàn)拼寫動態(tài)sql

    在Mybatis @Select注解中實(shí)現(xiàn)拼寫動態(tài)sql

    這篇文章主要介紹了在Mybatis @Select注解中實(shí)現(xiàn)拼寫動態(tài)sql,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • 聊聊Spring?Boot如何配置多個Kafka數(shù)據(jù)源

    聊聊Spring?Boot如何配置多個Kafka數(shù)據(jù)源

    這篇文章主要介紹了Spring?Boot配置多個Kafka數(shù)據(jù)源的相關(guān)知識,包括生產(chǎn)者、消費(fèi)者配置,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2023-10-10
  • Java面向?qū)ο蠡A(chǔ)知識之?dāng)?shù)組和鏈表

    Java面向?qū)ο蠡A(chǔ)知識之?dāng)?shù)組和鏈表

    這篇文章主要介紹了Java面向?qū)ο蟮闹當(dāng)?shù)組和鏈表,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java基礎(chǔ)的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-11-11
  • JAVA正則表達(dá)式校驗(yàn)qq號碼的方法

    JAVA正則表達(dá)式校驗(yàn)qq號碼的方法

    Java作為一種開發(fā)語言,有許多值得推薦的地方,但是它一直以來沒有自帶對正則表達(dá)式的支持。下面小編給大家?guī)砹薐AVA正則表達(dá)式校驗(yàn)qq號碼的方法,需要的朋友參考下吧
    2018-04-04
  • Java實(shí)現(xiàn)手寫線程池的示例代碼

    Java實(shí)現(xiàn)手寫線程池的示例代碼

    在我們的日常的編程當(dāng)中,并發(fā)是始終離不開的主題,而在并發(fā)多線程當(dāng)中,線程池又是一個不可規(guī)避的問題。本文就來分享一下如何自己手寫一個線程池,需要的可以參考一下
    2022-08-08
  • Spring Boot利用JSR303實(shí)現(xiàn)參數(shù)驗(yàn)證的方法實(shí)例

    Spring Boot利用JSR303實(shí)現(xiàn)參數(shù)驗(yàn)證的方法實(shí)例

    這篇文章主要給大家介紹了關(guān)于Spring Boot利用JSR303實(shí)現(xiàn)參數(shù)驗(yàn)證的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Spring Boot具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • Java實(shí)現(xiàn)聯(lián)系人管理系統(tǒng)

    Java實(shí)現(xiàn)聯(lián)系人管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)聯(lián)系人管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02

最新評論