Servlet筆記

~甲殼蟲發表於2020-11-17
                                     Servlet規範

一。Servlet規範介紹:

                1.servlet規範來自於JAVAEE規範中的一種

	    2.作用:
	            1)在Servlet規範中,指定【動態資原始檔】開發步驟

		    2)在Servlet規範中,指定Http伺服器呼叫動態資原始檔規則

		    3)在Servlet規範中,指定Http伺服器管理動態資原始檔例項物件規則

二。Servlet介面實現類:

               1.Servlet介面來自於Servlet規範下一個介面,這個介面存在Http伺服器
	     提供jar包

               2.Tomcat伺服器下lib檔案有一個servlet-api.jar存放Servlet介面(javax.servlet.Servlet介面)

	   3.Servlet規範中任務,Http伺服器能呼叫的【動態資原始檔】必須是一個Servlet介面實現類

	   例子:
	           class Student{
		     //不是動態資原始檔,Tomcat無權呼叫
		   }

		   class Teacher implements Servlet{
		     //合法動態資原始檔,Tomcat有權利呼叫

		     Servlet obj = new Teacher();
		     obj.doGet()
		   }

三。Servlet介面實現類開發步驟

              第一步:建立一個Java類繼承與HttpServlet父類,使之成為一個Servlet介面實現類

	  第二步:重寫HttpServlet父類兩個方法。doGet或則doPost
	                  get
	           瀏覽器------》oneServlet.doGet()
                              post
		   瀏覽器------》oneServlet.doPost()

              第三步:將Servlet介面實現類資訊【註冊】到Tomcat伺服器

	           【網站】--->【web】---》【WEB-INF】--->web.xml

		    <!--將Servlet介面實現類類路徑地址交給Tomcat-->
		    <servlet>
		       <servlet-name>mm</servlet-name> <!--宣告一個變數儲存servlet介面實現類類路徑-->
		       <servlet-class>com.bjpowernode.controller.OneServlet</servlet-class><!--宣告servlet介面實現類類路徑-->
		    </servlet>

		    Tomcat  String mm = "com.bjpowernode.controller.OneServlet"

		    <!--為了降低使用者訪問Servlet介面實現類難度,需要設定簡短請求別名-->
		    <servlet-mapping> 
                            <servlet-name>mm</servlet-name>
			<url-pattern>/one</url-pattern> <!--設定簡短請求別名,別名在書寫時必須以"/"為開頭-->
		    </servlet-mapping>

		    如果現在瀏覽器向Tomcat索要OneServlet時地址

		    http://localhost:8080/myWeb/one

三。Servlet物件生命週期:

                    1.網站中所有的Servlet介面實現類的例項物件,只能由Http伺服器負責額建立。
		  開發人員不能手動建立Servlet介面實現類的例項物件

                    2.在預設的情況下,Http伺服器接收到對於當前Servlet介面實現類第一次請求時
		  自動建立這個Servlet介面實現類的例項物件

		  在手動配置情況下,要求Http伺服器在啟動時自動建立某個Servlet介面實現類
		  的例項物件
		  <servlet>
		       <servlet-name>mm</servlet-name> <!--宣告一個變數儲存servlet介面實現類類路徑-->
		       <servlet-class>com.bjpowernode.controller.OneServlet</servlet-class>
		       <load-on-startup>30<load-on-startup><!--填寫一個大於0的整數即可-->
		  </servlet>
                    3.在Http伺服器執行期間,一個Servlet介面實現類只能被建立出一個例項物件

		4.在Http伺服器關閉時刻,自動將網站中所有的Servlet物件進行銷燬

四。HttpServletResponse介面

          1.介紹:
             1)HttpServletResponse介面來自於Servlet規範中,在Tomcat中存在servlet-api.jar

	     2)HttpServletResponse介面實現類由Http伺服器負責提供

	     3)HttpServletResponse介面負責將doGet/doPost方法執行結果寫入到【響應體】交給瀏覽器

	     4)開發人員習慣於將HttpServletResponse介面修飾的物件稱為【響應物件】


         2.主要功能:

             1) 將執行結果以二進位制形式寫入到【響應體】

	     2) 設定響應頭中[content-type]屬性值,從而控制瀏覽器使用
	        對應編譯器將響應體二進位制資料編譯為【文字,圖片,視訊,命令】

                 3) 設定響應頭中【location】屬性,將一個請求地址賦值給location.
	        從而控制瀏覽器向指定伺服器傳送請求

五。HttpServletRequest介面

         1.介紹:
             1)HttpServletRequest介面來自於Servlet規範中,在Tomcat中存在servlet-api.jar

	     2)HttpServletRequest介面實現類由Http伺服器負責提供

	     3)HttpServletRequest介面負責在doGet/doPost方法執行時讀取Http請求協議包中資訊

	     4)開發人員習慣於將HttpServletRequest介面修飾的物件稱為【請求物件】
         
        2.作用:

             1)可以讀取Http請求協議包中【請求行】資訊
	     2)可以讀取儲存在Http請求協議包中【請求頭】或則【請求體】中請求引數資訊
	     3)可以代替瀏覽器向Http伺服器申請資原始檔呼叫

六。請求物件和響應物件生命週期

        1.在Http伺服器接收到瀏覽器傳送的【Http請求協議包】之後,
      自動為當前的【Http請求協議包】生成一個【請求物件】和一個【響應物件】

        2.在Http伺服器呼叫doGet/doPost方法時,負責將【請求物件】和【響應物件】
      作為實參傳遞到方法,確保doGet/doPost正確執行

        3.在Http伺服器準備推送Http響應協議包之前,負責將本次請求關聯的【請求物件】和【響應物件】
      銷燬

      ***【請求物件】和【響應物件】生命週期貫穿一次請求的處理過程中
      *** 【請求物件】和【響應物件】相當於使用者在服務端的代言人

七。歡迎資原始檔

        1.前提:
            使用者可以記住網站名,但是不會記住網站資原始檔名


        2.預設歡迎資原始檔:

            使用者傳送了一個針對某個網站的【預設請求】時,
	    此時由Http伺服器自動從當前網站返回的資原始檔

	    正常請求: http://localhost:8080/myWeb/index.html

	    預設請求: http://localhost:8080/myWeb/

        3.Tomcat對於預設歡迎資原始檔定位規則

            1)規則位置:Tomcat安裝位置/conf/web.xml

	    2)規則命令:<welcome-file-list>
                               <welcome-file>index.html</welcome-file>
                               <welcome-file>index.htm</welcome-file>
                               <welcome-file>index.jsp</welcome-file>
                             </welcome-file-list>

        4.設定當前網站的預設歡迎資原始檔規則

             1)規則位置:  網站/web/WEB-INF/web.xml

	     2)規則命令:  <welcome-file-list>
	                        <welcome-file>login.html</welcome-file>
	                  </welcome-file-list>
                 3)網站設定自定義預設檔案定位規則,此時Tomcat自帶定位規則將失效

八。Http狀態碼

        1.介紹:
            1)由三位數字組成的一個符號。
	    2)Http伺服器在推送響應包之前,根據本次請求處理情況
	      將Http狀態碼寫入到響應包中【狀態行】上

                3)如果Http伺服器針對本次請求,返回了對應的資原始檔。
	      通過Http狀態碼通知瀏覽器應該如何處理這個結果

	      如果Http伺服器針對本次請求,無法返回對應的資原始檔
	      通過Http狀態碼向瀏覽器解釋不能提供服務的原因

        2.分類:
            1)組成  100---599;分為5個大類
	    2)1XX :
	             最有特徵 100; 通知瀏覽器本次返回的資原始檔
		     並不是一個獨立的資原始檔,需要瀏覽器在接收
		     響應包之後,繼續向Http伺服器所要依賴的其他資原始檔

                3) 2XX:
	             最有特徵200,通知瀏覽器本次返回的資原始檔是一個
		     完整獨立資原始檔,瀏覽器在接收到之後不需要所要
		     其他關聯檔案

                4)3xx:
	             最有特徵302,通知瀏覽器本次返回的不是一個資原始檔內容
		     而是一個資原始檔地址,需要瀏覽器根據這個地址自動發起
		     請求來索要這個資原始檔

		     response.sendRedirect("資原始檔地址")寫入到響應頭中
		     location
		     而這個行為導致Tomcat將302狀態碼寫入到狀態行

                5)4XX:

	             404: 通知瀏覽器,由於在服務端沒有定位到被訪問的資原始檔
		          因此無法提供幫助

                         405:通知瀏覽器,在服務端已經定位到被訪問的資原始檔(Servlet)
		          但是這個Servlet對於瀏覽器採用的請求方式不能處理
                6)5xx:

	             500:通知瀏覽器,在服務端已經定位到被訪問的資原始檔(Servlet)
		         這個Servlet可以接收瀏覽器採用請求方式,但是Servlet在處理
			 請求期間,由於Java異常導致處理失敗

九。多個Servlet之間呼叫規則:

         1.前提條件:
                  某些來自於瀏覽器傳送請求,往往需要服務端中多個Servlet協同處理。
		  但是瀏覽器一次只能訪問一個Servlet,導致使用者需要手動通過瀏覽器
		  發起多次請求才能得到服務。
		  這樣增加使用者獲得服務難度,導致使用者放棄訪問當前網站【98k,AKM】

         2.提高使用者使用感受規則:

                  無論本次請求涉及到多少個Servlet,使用者只需要【手動】通知瀏覽器發起
		  一次請求即可

         3.多個Servlet之間呼叫規則:

                    1)重定向解決方案

		    2)請求轉發解決方案

十。重定向解決方案:

         1.工作原理: 使用者第一次通過【手動方式】通知瀏覽器訪問OneServlet。
                  OneServlet工作完畢後,將TwoServlet地址寫入到響應頭
		  location屬性中,導致Tomcat將302狀態碼寫入到狀態行。

		  在瀏覽器接收到響應包之後,會讀取到302狀態。此時瀏覽器
		  自動根據響應頭中location屬性地址發起第二次請求,訪問
		  TwoServlet去完成請求中剩餘任務

         2.實現命令:

                  response.sendRedirect("請求地址")
		  將地址寫入到響應包中響應頭中location屬性


         3.特徵:
     
                  1)請求地址:
		     既可以把當前網站內部的資原始檔地址傳送給瀏覽器 (/網站名/資原始檔名)
		     也可以把其他網站資原始檔地址傳送給瀏覽器(http://ip地址:埠號/網站名/資原始檔名)

                      2)請求次數

		     瀏覽器至少傳送兩次請求,但是隻有第一次請求是使用者手動傳送。
		     後續請求都是瀏覽器自動傳送的。
 
                      3) 請求方式:
		     重定向解決方案中,通過位址列通知瀏覽器發起下一次請求,因此
		     通過重定向解決方案呼叫的資原始檔接收的請求方式一定是【GET】

         4.缺點:
                 重定向解決方案需要在瀏覽器與伺服器之間進行多次往返,大量時間
		 消耗在往返次數上,增加使用者等待服務時間

十一。請求轉發解決方案:

         1.原理:   使用者第一次通過手動方式要求瀏覽器訪問OneServlet。
                OneServlet工作完畢後,通過當前的請求物件代替瀏覽器
		向Tomcat傳送請求,申請呼叫TwoServlet。
		Tomcat在接收到這個請求之後,自動呼叫TwoServlet來
		完成剩餘任務

         2.實現命令: 請求物件代替瀏覽器向Tomcat傳送請求

                 //1.通過當前請求物件生成資原始檔申請報告物件
		   RequestDispatcher  report = request.getRequestDispatcher("/資原始檔名");一定要以"/"為開頭
                     //2.將報告物件傳送給Tomcat
		   report.forward(當前請求物件,當前響應物件)

         3.優點:
      
                 1)無論本次請求涉及到多少個Servlet,使用者只需要手動通過瀏覽器傳送一次請求

		 2) Servlet之間呼叫發生在服務端計算機上,節省服務端與瀏覽器之間往返次數
		    增加處理服務速度

         4.特徵:

                1)請求次數

		 在請求轉發過程中,瀏覽器只傳送一次請求

                    2)請求地址
		只能向Tomcat伺服器申請呼叫當前網站下資原始檔地址
		request.getRequestDispathcer("/資原始檔名") ****不要寫網站名****

		3)請求方式

		在請求轉發過程中,瀏覽器只傳送一個了個Http請求協議包。
		參與本次請求的所有Servlet共享同一個請求協議包,因此
		這些Servlet接收的請求方式與瀏覽器傳送的請求方式保持一致

十二。多個Servlet之間資料共享實現方案:

           1.資料共享:OneServlet工作完畢後,將產生資料交給TwoServlet來使用

       2.Servlet規範中提供四種資料共享方案

         1.ServletContext介面

	 2.Cookie類

	 3.HttpSession介面

	 4.HttpServletRequest介面

十三。ServletContext介面:

              1.介紹:
	          1)來自於Servlet規範中一個介面。在Tomcat中存在servlet-api.jar
		     在Tomcat中負責提供這個介面實現類

                      2)如果兩個Servlet來自於同一個網站。彼此之間通過網站的ServletContext
		     例項物件實現資料共享

                      3)開發人員習慣於將ServletContext物件稱為【全域性作用域物件】


              2.工作原理:

	          每一個網站都存在一個全域性作用域物件。
		  這個全域性作用域物件【相當於】一個Map.
		  在這個網站中OneServlet可以將一個資料
		  存入到全域性作用域物件,當前網站中其他
		  Servlet此時都可以從全域性作用域物件得到
		  這個資料進行使用

              3.全域性作用域物件生命週期:

	           1)在Http伺服器啟動過程中,自動為當前網站在記憶體中建立
		      一個全域性作用域物件
                       2)在Http伺服器執行期間時,一個網站只有一個全域性作用域物件

		   3)在Http伺服器執行期間,全域性作用域物件一直處於存活狀態

		   4)在Http伺服器準備關閉時,負責將當前網站中全域性作用域物件
		      進行銷燬處理
                       *****全域性作用域物件生命週期貫穿網站整個執行期間***

              4.命令實現: 【同一個網站】OneServlet將資料共享給TwoServlet

	                 OneServlet{
			 
			    public void doGet(HttpServletRequest request,HttpServletResponse response){
			     
                                          //1.通過【請求物件】向Tomcat索要當前網站中【全域性作用域物件】
				       ServletContext application = request.getServletContext();
                                          //2.將資料新增到全域性作用域物件作為【共享資料】
				       application.setAttribute("key1",資料)
			    
			    }
			 
			 }

			 TwoServlet{
			 
			   public void doGet(HttpServletRequest request,HttpServletResponse response){
			   
			        //1.通過【請求物件】向Tomcat索要當前網站中【全域性作用域物件】
				ServletContext application = request.getServletContext();
				//2.從全域性作用域物件得到指定關鍵字對應資料
	                	Object 資料 =  application.getAttribute("key1");
			   
			   }
			 
			 }

十四。Cookie

       1.介紹:

           1)Cookie來自於Servlet規範中一個工具類,存在於Tomcat提供servlet-api.jar中

	   2)如果兩個Servlet來自於同一個網站,並且為同一個瀏覽器/使用者提供服務,此時
	     藉助於Cookie物件進行資料共享

               3) Cookie存放當前使用者的私人資料,在共享資料過程中提高服務質量

	   4) 在現實生活場景中,Cookie相當於使用者在服務端得到【會員卡】

       2.原理:
            使用者通過瀏覽器第一次向MyWeb網站傳送請求申請OneServlet。
	    OneServlet在執行期間建立一個Cookie儲存與當前使用者相關資料
	    OneServlet工作完畢後,【將Cookie寫入到響應頭】交還給當前
	    瀏覽器。
	    瀏覽器收到響應響應包之後,將cookie儲存在瀏覽器的快取
	    一段時間之後,使用者通過【同一個瀏覽器】再次向【myWeb網站】傳送請求申請TwoServlet時。
                【瀏覽器需要無條件的將myWeb網站之前推送過來的Cookie,寫入到請求頭】傳送過去
	    此時TwoServlet在執行時,就可以通過讀取請求頭中cookie中資訊,得到OneServlet提供的
	    共享資料

       3.實現命令:  同一個網站 OneServlet 與  TwoServlet 藉助於Cookie實現資料共享

                OneServlet{
		    public void doGet(HttpServletRequest request,HttpServletResponse resp){
		    
		            //1.建立一個cookie物件,儲存共享資料(當前使用者資料)
			    Cookie card = new Cookie("key1","abc");
			    Cookie card1= new Cookie("key2","efg");
			    ****cookie相當於一個map
			    ****一個cookie中只能存放一個鍵值對
			    ****這個鍵值對的key與value只能是String
			    ****鍵值對中key不能是中文
			    //2.【髮卡】將cookie寫入到響應頭,交給瀏覽器
			    resp.addCookie(card);
			    resp.addCookie(card1)
		    }
		
		}

		瀏覽器/使用者      <---------響應包 【200】
		                                   【cookie: key1=abc; key2=eft】
						   【】
						   【處理結果】

                    瀏覽器向myWeb網站傳送請求訪問TwoServlet---->請求包 【url:/myWeb/two method:get】
		                                                     【
								        請求引數:xxxx
									Cookie   key1=abc;key2=efg
								      】
								      【】
								      【】
                     TwoServlet{
		 
		    public void doGet(HttpServletRequest request,HttpServletResponse resp){
		    
		         //1.呼叫請求物件從請求頭得到瀏覽器返回的Cookie
                              Cookie  cookieArray[] = request.getCookies();
                             //2.迴圈遍歷資料得到每一個cookie的key 與 value
			  for(Cookie card:cookieArray){
			          String key =   card.getName(); 讀取key  "key1"
				  Strign value = card.getValue();讀取value "abc"
				  提供較好的服務。。。。。。。。
			  }
		    }
		 }
		  
          4.Cookie銷燬時機:

                1.在預設情況下,Cookie物件存放在瀏覽器的快取中。
		  因此只要瀏覽器關閉,Cookie物件就被銷燬掉

                    2.在手動設定情況下,可以要求瀏覽器將接收的Cookie
		  存放在客戶端計算機上硬碟上,同時需要指定Cookie
		  在硬碟上存活時間。在存活時間範圍內,關閉瀏覽器
		  關閉客戶端計算機,關閉伺服器,都不會導致Cookie
		  被銷燬。在存活時間到達時,Cookie自動從硬碟上被
		  刪除

                       cookie.setMaxAge(60); //cookie在硬碟上存活1分鐘

十五。HttpSession介面:

         1.介紹:
             1)HttpSession介面來自於Servlet規範下一個介面。存在於Tomcat中servlet-api.jar
	        其實現類由Http伺服器提供。Tomcat提供實現類存在於servlet-api.jar

                 2)如果兩個Servlet來自於同一個網站,並且為同一個瀏覽器/使用者提供服務,此時
	        藉助於HttpSession物件進行資料共享

                 3)開發人員習慣於將HttpSession介面修飾物件稱為【會話作用域物件】

         2.HttpSession 與  Cookie 區別:【面試題】

              1)儲存位置:  一個在天上,一個在地下

	                    Cookie:存放在客戶端計算機(瀏覽器記憶體/硬碟)
			    HttpSession:存放在服務端計算機記憶體

                  2)資料型別:
	                     Cookie物件儲存共享資料型別只能是String
			     HttpSession物件可以儲存任意型別的共享資料Object

                  3) 資料數量:
	                     一個Cookie物件只能儲存一個共享資料
			     HttpSession使用map集合儲存共享資料,所以可以
			     儲存任意數量共享資料

                  4)參照物:
	                     Cookie相當於客戶在服務端【會員卡】

			     HttpSession相當於客戶在服務端【私人保險櫃】


           3.命令實現:   同一個網站(myWeb)下OneServlet將資料傳遞給TwoServlet

                      OneServlet{
		      
		         public void doGet(HttpServletRequest request,HttpServletResponse response){
			 
			        //1.呼叫請求物件向Tomcat索要當前使用者在服務端的私人儲物櫃
				     HttpSession   session = request.getSession();
                                    //2.將資料新增到使用者私人儲物櫃
				    session.setAttribute("key1",共享資料)
			 
			 }
		      
		      }

		      瀏覽器訪問/myWeb中TwoServlet

		      TwoServlet{
		      
		        public void doGet(HttpServletRequest request,HttpServletResponse response){
			       //1.呼叫請求物件向Tomcat索要當前使用者在服務端的私人儲物櫃
			        HttpSession   session = request.getSession();
                                   //2.從會話作用域物件得到OneServlet提供的共享資料
			        Object 共享資料 = session.getAttribute("key1");
			}
		      
		      }
               4.Http伺服器如何將使用者與HttpSession關聯起來

	                cookie


               5.getSession()  與  getSession(false)

	         1)getSession(): 如果當前使用者在服務端已經擁有了自己的私人儲物櫃.
		                  要求tomcat將這個私人儲物櫃進行返回
				  如果當前使用者在服務端尚未擁有自己的私人儲物櫃
				  要求tocmat為當前使用者建立一個全新的私人儲物櫃

                     2)getSession(false):如果當前使用者在服務端已經擁有了自己的私人儲物櫃.
		                     要求tomcat將這個私人儲物櫃進行返回
				     如果當前使用者在服務端尚未擁有自己的私人儲物櫃
				     此時Tomcat將返回null

             6.HttpSession銷燬時機:

	          1.使用者與HttpSession關聯時使用的Cookie只能存放在瀏覽器快取中.
		  2.在瀏覽器關閉時,意味著使用者與他的HttpSession關係被切斷
		  3.由於Tomcat無法檢測瀏覽器何時關閉,因此在瀏覽器關閉時並不會
		    導致Tomcat將瀏覽器關聯的HttpSession進行銷燬
                      4.為了解決這個問題,Tomcat為每一個HttpSession物件設定【空閒時間】
		    這個空閒時間預設30分鐘,如果當前HttpSession物件空閒時間達到30分鐘
		    此時Tomcat認為使用者已經放棄了自己的HttpSession,此時Tomcat就會銷燬
		    掉這個HttpSession

             7.HttpSession空閒時間手動設定

	            在當前網站/web/WEB-INF/web.xml

		    <session-config>
		           <session-timeout>5</session-timeout> <!--當前網站中每一個session最大空閒時間5分鐘-->
		    </session-config>

十六。HttpServletRequest介面實現資料共享

              1.介紹:

	         1) 在同一個網站中,如果兩個Servlet之間通過【請求轉發】方式進行呼叫,
		     彼此之間共享同一個請求協議包。而一個請求協議包只對應一個請求物件
		     因此servlet之間共享同一個請求物件,此時可以利用這個請求物件在兩個
		     Servlet之間實現資料共享

                     2) 在請求物件實現Servlet之間資料共享功能時,開發人員將請求物件稱為【請求作用域物件】


               2.命令實現: OneServlet通過請求轉發申請呼叫TwoServlet時,需要給TwoServlet提供共享資料

	                 OneServlet{
			 
			   public void doGet(HttpServletRequest req,HttpServletResponse response){
			   
			          //1.將資料新增到【請求作用域物件】中attribute屬性
				      req.setAttribute("key1",資料); //資料型別可以任意型別Object
                                      //2.向Tomcat申請呼叫TwoServlet
			             req.getRequestDispatcher("/two").forward(req,response)
			   }
			 
			 }
			 TwoServlet{
			    public void doGet(HttpServletRequest req,HttpServletResponse response){
                                        
				    //從當前請求物件得到OneServlet寫入到共享資料
				    Object 資料 = req.getAttribute("key1");
			    }


}

十七。Servlet規範擴充套件-----------------監聽器介面

   1.介紹:

          1)一組來自於Servlet規範下介面,共有8個介面。在Tomcat存在servlet-api.jar包

      2)監聽器介面需要由開發人員親自實現,Http伺服器提供jar包並沒有對應的實現類

      3)監聽器介面用於監控【作用域物件生命週期變化時刻】以及【作用域物件共享資料變化時刻】

    2.作用域物件:

       1)在Servlet規範中,認為在服務端記憶體中可以在某些條件下為兩個Servlet之間提供
          資料共享方案的物件,被稱為【作用域物件】

           2)Servlet規範下作用域物件:
           ServletContext:   全域性作用域物件
	   HttpSession   :    會話作用域物件
	   HttpServletRequest:請求作用域物件

    3.監聽器介面實現類開發規範:三步

        1)根據監聽的實際情況,選擇對應監聽器介面進行實現

	2)重寫監聽器介面宣告【監聽事件處理方法】

	3)在web.xml檔案將監聽器介面實現類註冊到Http伺服器

    4.ServletContextListener介面:

        1)作用:通過這個介面合法的檢測全域性作用域物件被初始化時刻以及被銷燬時刻

	2)監聽事件處理方法:

	            public void contextInitlized() :在全域性作用域物件被Http伺服器初始化被呼叫

		    public void contextDestory():      在全域性作用域物件被Http伺服器銷燬時候觸發呼叫

  5.ServletContextAttributeListener介面:

             1)作用:通過這個介面合法的檢測全域性作用域物件共享資料變化時刻

	 2)監聽事件處理方法:

	                 public void contextAdd():在全域性作用域物件新增共享資料
			 public void contextReplaced():在全域性作用域物件更新共享資料
			 public void contextRemove():在全域性作用域物件刪除共享資料

 6.全域性作用域物件共享資料變化時刻

                             ServletContext application = request.getServletContext();

			 application.setAttribute("key1",100); //新增共享資料

			 application.setAttribute("key1",200); //更新共享資料
			 
			 application.removeAttribute("key1");  //刪除共享資料

十八:Servlet規範擴充套件-----------------Filter介面(過濾器介面)

   1.介紹:
           1)來自於Servlet規範下介面,在Tomcat中存在於servlet-api.jar包

       2)Filter介面實現類由開發人員負責提供,Http伺服器不負責提供

       3)Filter介面在Http伺服器呼叫資原始檔之前,對Http伺服器進行攔截

   2.具體作用:

            1)攔截Http伺服器,幫助Http伺服器檢測當前請求合法性

	2)攔截Http伺服器,對當前請求進行增強操作

   3.Filter介面實現類開發步驟:三步

             1)建立一個Java類實現Filter介面

	 2)重寫Filter介面中doFilter方法

	 3)web.xml將過濾器介面實現類註冊到Http伺服器

   4.Filter攔截地址格式

             1) 命令格式:
	             <filter-mapping>
		        <filter-name>oneFilter</filter-name>
			<url-pattern>攔截地址</url-pattern>
		     </filter-mapping>
             2) 命令作用:
	               攔截地址通知Tomcat在呼叫何種資原始檔之前需要呼叫OneFilter過濾進行攔截


             3)要求Tomcat在呼叫某一個具體檔案之前,來呼叫OneFilter攔截
	               <url-pattern>/img/mm.jpg</url-pattern>

             4)要求Tomcat在呼叫某一個資料夾下所有的資原始檔之前,來呼叫OneFilter攔截
	                <url-pattern>/img/*</url-pattern>

             5)要求Tomcat在呼叫任意資料夾下某種型別檔案之前,來呼叫OneFilter攔截
	                <url-pattern>*.jpg</url-pattern>

             6)要求Tomcat在呼叫網站中任意檔案時,來呼叫OneFilter攔截
	                <url-pattern>/*</url-pattern>

相關文章