最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Web三大組件之Filter,Listener和Servlet詳解

 更新時(shí)間:2022年03月09日 16:28:57   作者:Love_cangXin  
這篇文章主要為大家詳細(xì)介紹了Web三大組件之Filter,Listener和Servlet,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

Filter:過濾器

 1. 概念:
* 生活中的過濾器:凈水器,空氣凈化器,土匪、
* web中的過濾器:當(dāng)訪問服務(wù)器的資源時(shí),過濾器可以將請(qǐng)求攔截下來,完成一些特殊的功能。
* 過濾器的作用:
	* 一般用于完成通用的操作。如:登錄驗(yàn)證、統(tǒng)一編碼處理、敏感字符過濾...
2. 快速入門:
1. 步驟:
	1. 定義一個(gè)類,實(shí)現(xiàn)接口Filter
	2. 復(fù)寫方法
	3. 配置攔截路徑
		1. web.xml
		2. 注解
2. 代碼:
	@WebFilter("/*")//訪問所有資源之前,都會(huì)執(zhí)行該過濾器
	public class FilterDemo1 implements Filter {
	    @Override
	    public void init(FilterConfig filterConfig) throws ServletException {
	    }
	    @Override
	    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
	        System.out.println("filterDemo1被執(zhí)行了....");
	         //放行
	        filterChain.doFilter(servletRequest,servletResponse);
	    }
	    @Override
	    public void destroy() {
	    }
	}
 3. 過濾器細(xì)節(jié):
  1. web.xml配置	
	<filter>
        <filter-name>demo1</filter-name>
        <filter-class>cn.itcast.web.filter.FilterDemo1</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>demo1</filter-name>
		<!-- 攔截路徑 -->
        <url-pattern>/*</url-pattern>
    </filter-mapping>
2. 過濾器執(zhí)行流程
	1. 執(zhí)行過濾器
	2. 執(zhí)行放行后的資源
	3. 回來執(zhí)行過濾器放行代碼下邊的代碼
3. 過濾器生命周期方法
	1. init:在服務(wù)器啟動(dòng)后,會(huì)創(chuàng)建Filter對(duì)象,然后調(diào)用init方法。只執(zhí)行一次。用于加載資源
	2. doFilter:每一次請(qǐng)求被攔截資源時(shí),會(huì)執(zhí)行。執(zhí)行多次
	3. destroy:在服務(wù)器關(guān)閉后,F(xiàn)ilter對(duì)象被銷毀。如果服務(wù)器是正常關(guān)閉,則會(huì)執(zhí)行destroy方法。只執(zhí)行一次。用于釋放資源
4. 過濾器配置詳解
	* 攔截路徑配置:
		1. 具體資源路徑: /index.jsp   只有訪問index.jsp資源時(shí),過濾器才會(huì)被執(zhí)行
		2. 攔截目錄: /user/*	訪問/user下的所有資源時(shí),過濾器都會(huì)被執(zhí)行
		3. 后綴名攔截: *.jsp		訪問所有后綴名為jsp資源時(shí),過濾器都會(huì)被執(zhí)行
		4. 攔截所有資源:/*		訪問所有資源時(shí),過濾器都會(huì)被執(zhí)行
	* 攔截方式配置:資源被訪問的方式
		* 注解配置:
			* 設(shè)置dispatcherTypes屬性
				1. REQUEST:默認(rèn)值。瀏覽器直接請(qǐng)求資源
				2. FORWARD:轉(zhuǎn)發(fā)訪問資源
				3. INCLUDE:包含訪問資源
				4. ERROR:錯(cuò)誤跳轉(zhuǎn)資源
				5. ASYNC:異步訪問資源
		* web.xml配置
			* 設(shè)置<dispatcher></dispatcher>標(biāo)簽即可
5. 過濾器鏈(配置多個(gè)過濾器)
	* 執(zhí)行順序:如果有兩個(gè)過濾器:過濾器1和過濾器2
		1. 過濾器1
		2. 過濾器2
		3. 資源執(zhí)行
		4. 過濾器2
		5. 過濾器1 
	* 過濾器先后順序問題:
		1. 注解配置:按照類名的字符串比較規(guī)則比較,值小的先執(zhí)行
			* 如: AFilter 和 BFilter,AFilter就先執(zhí)行了。
		2. web.xml配置: <filter-mapping>誰定義在上邊,誰先執(zhí)行

Listener:監(jiān)聽器

* 概念:web的三大組件之一。
* 事件監(jiān)聽機(jī)制
	* 事件	:一件事情
	* 事件源 :事件發(fā)生的地方
	* 監(jiān)聽器 :一個(gè)對(duì)象
	* 注冊(cè)監(jiān)聽:將事件、事件源、監(jiān)聽器綁定在一起。 當(dāng)事件源上發(fā)生某個(gè)事件后,執(zhí)行監(jiān)聽器代碼

* ServletContextListener:監(jiān)聽ServletContext對(duì)象的創(chuàng)建和銷毀
* 方法:
	* void contextDestroyed(ServletContextEvent sce) :ServletContext對(duì)象被銷毀之前會(huì)調(diào)用該方法
	* void contextInitialized(ServletContextEvent sce) :ServletContext對(duì)象創(chuàng)建后會(huì)調(diào)用該方法
* 步驟:
	1. 定義一個(gè)類,實(shí)現(xiàn)ServletContextListener接口
	2. 復(fù)寫方法
	3. 配置
		1. web.xml
				<listener>
				 <listener-class>cn.itcast.web.listener.ContextLoaderListener</listener-class>
			 </listener>
* 指定初始化參數(shù)<context-param>
		2. 注解:
			* @WebListener

servlet

* 概念:運(yùn)行在服務(wù)器端的小程序
* Servlet就是一個(gè)接口,定義了Java類被瀏覽器訪問到(tomcat識(shí)別)的規(guī)則。
* 將來我們自定義一個(gè)類,實(shí)現(xiàn)Servlet接口,復(fù)寫方法。
* * 快速入門:
1. 創(chuàng)建JavaEE項(xiàng)目
2. 定義一個(gè)類,實(shí)現(xiàn)Servlet接口
	* public class ServletDemo1 implements Servlet
3. 實(shí)現(xiàn)接口中的抽象方法
4. 配置Servlet
	 在web.xml中配置:
    <!--配置Servlet -->
    <servlet>
        <servlet-name>demo1</servlet-name>
        <servlet-class>cn.itcast.web.servlet.ServletDemo1</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>demo1</servlet-name>
        <url-pattern>/demo1</url-pattern>
    </servlet-mapping>
 * 執(zhí)行原理:
1. 當(dāng)服務(wù)器接受到客戶端瀏覽器的請(qǐng)求后,會(huì)解析請(qǐng)求URL路徑,獲取訪問的Servlet的資源路徑
2. 查找web.xml文件,是否有對(duì)應(yīng)的<url-pattern>標(biāo)簽體內(nèi)容。
3. 如果有,則在找到對(duì)應(yīng)的<servlet-class>全類名
4. tomcat會(huì)將字節(jié)碼文件加載進(jìn)內(nèi)存,并且創(chuàng)建其對(duì)象
5. 調(diào)用其方法
* Servlet中的生命周期方法:
1. 被創(chuàng)建:執(zhí)行init方法,只執(zhí)行一次
	* Servlet什么時(shí)候被創(chuàng)建?
		* 默認(rèn)情況下,第一次被訪問時(shí),Servlet被創(chuàng)建
		* 可以配置執(zhí)行Servlet的創(chuàng)建時(shí)機(jī)。
			* 在<servlet>標(biāo)簽下配置
				1. 第一次被訪問時(shí),創(chuàng)建
            		* <load-on-startup>的值為負(fù)數(shù)
	            2. 在服務(wù)器啟動(dòng)時(shí),創(chuàng)建
	                * <load-on-startup>的值為0或正整數(shù)
 * Servlet的init方法,只執(zhí)行一次,說明一個(gè)Servlet在內(nèi)存中只存在一個(gè)對(duì)象,Servlet是單例的
		* 多個(gè)用戶同時(shí)訪問時(shí),可能存在線程安全問題。
		* 解決:盡量不要在Servlet中定義成員變量。即使定義了成員變量,也不要對(duì)修改值
2. 提供服務(wù):執(zhí)行service方法,執(zhí)行多次
	* 每次訪問Servlet時(shí),Service方法都會(huì)被調(diào)用一次。
3. 被銷毀:執(zhí)行destroy方法,只執(zhí)行一次
	* Servlet被銷毀時(shí)執(zhí)行。服務(wù)器關(guān)閉時(shí),Servlet被銷毀
	* 只有服務(wù)器正常關(guān)閉時(shí),才會(huì)執(zhí)行destroy方法。
	* destroy方法在Servlet被銷毀之前執(zhí)行,一般用于釋放資源
* Servlet3.0:
* 好處:
	* 支持注解配置??梢圆恍枰獁eb.xml了。
* 步驟:
	1. 創(chuàng)建JavaEE項(xiàng)目,選擇Servlet的版本3.0以上,可以不創(chuàng)建web.xml
	2. 定義一個(gè)類,實(shí)現(xiàn)Servlet接口
	3. 復(fù)寫方法
	4. 在類上使用@WebServlet注解,進(jìn)行配置
		* @WebServlet("資源路徑")

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容! 

相關(guān)文章

  • Java8中Stream?API的peek()方法詳解及需要注意的坑

    Java8中Stream?API的peek()方法詳解及需要注意的坑

    這篇文章主要給大家介紹了關(guān)于Java8中Stream?API的peek()方法詳解及需要注意的坑,Java 中的 peek 方法是 Java 8 中的 Stream API 中的一個(gè)方法,它屬于中間操作,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-06-06
  • SpringMVC的最小化配置說明

    SpringMVC的最小化配置說明

    這篇文章主要介紹了SpringMVC的最小化配置說明,Spring MVC是一個(gè)基于Java的Web框架,用于構(gòu)建靈活、高效的Web應(yīng)用程序,它采用了MVC的設(shè)計(jì)模式,將應(yīng)用程序的邏輯分為模型、視圖和控制器三個(gè)部分,以實(shí)現(xiàn)代碼的分離和重用,需要的朋友可以參考下
    2023-10-10
  • MyBatis 三表外關(guān)聯(lián)查詢的實(shí)現(xiàn)(用戶、角色、權(quán)限)

    MyBatis 三表外關(guān)聯(lián)查詢的實(shí)現(xiàn)(用戶、角色、權(quán)限)

    這篇文章主要介紹了MyBatis 三表外關(guān)聯(lián)查詢的實(shí)現(xiàn)(用戶、角色、權(quán)限),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • java多線程開發(fā)之通過對(duì)戰(zhàn)游戲?qū)W習(xí)CyclicBarrier

    java多線程開發(fā)之通過對(duì)戰(zhàn)游戲?qū)W習(xí)CyclicBarrier

    這篇文章給大家分享了關(guān)于java多線程開發(fā)中通過對(duì)戰(zhàn)游戲?qū)W習(xí)CyclicBarrier的相關(guān)知識(shí)點(diǎn)內(nèi)容,有興趣的朋友們學(xué)習(xí)參考下。
    2018-08-08
  • Mybatis條件if test如何使用枚舉值

    Mybatis條件if test如何使用枚舉值

    這篇文章主要介紹了Mybatis條件if test如何使用枚舉值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • java實(shí)現(xiàn)簡單TCP聊天程序

    java實(shí)現(xiàn)簡單TCP聊天程序

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡單TCP聊天程,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • SpringBoot Shiro配置自定義密碼加密器代碼實(shí)例

    SpringBoot Shiro配置自定義密碼加密器代碼實(shí)例

    這篇文章主要介紹了SpringBoot Shiro配置自定義密碼加密器代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • SpringBoot整合MongoDB完整實(shí)例代碼

    SpringBoot整合MongoDB完整實(shí)例代碼

    本文主要介紹了SpringBoot整合MongoDB完整實(shí)例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • mybatis?一對(duì)多映射?column屬性的注意事項(xiàng)說明

    mybatis?一對(duì)多映射?column屬性的注意事項(xiàng)說明

    這篇文章主要介紹了mybatis?一對(duì)多映射?column屬性的注意事項(xiàng)說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
    2022-01-01
  • 老生常談Java字符串進(jìn)階(必看篇)

    老生常談Java字符串進(jìn)階(必看篇)

    下面小編就為大家?guī)硪黄仙U凧ava字符串進(jìn)階(必看篇)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-06-06

最新評(píng)論

酉阳| 承德市| 隆昌县| 崇礼县| 永福县| 海口市| 襄垣县| 突泉县| 嘉鱼县| 云和县| 越西县| 望都县| 临沭县| 通城县| 惠州市| 金沙县| 越西县| 贞丰县| 兴山县| 昌宁县| 柏乡县| 林甸县| 霍山县| 邛崃市| 封丘县| 方城县| 张北县| 新丰县| 黎平县| 格尔木市| 东至县| 互助| 霍城县| 呼图壁县| 阿瓦提县| 新沂市| 康保县| 长沙县| 上思县| 堆龙德庆县| 马关县|