jsp程序設(shè)計(jì)入門沈澤剛、秦玉平主編javaweb第二版第02章servlet技術(shù)模型_第1頁
jsp程序設(shè)計(jì)入門沈澤剛、秦玉平主編javaweb第二版第02章servlet技術(shù)模型_第2頁
jsp程序設(shè)計(jì)入門沈澤剛、秦玉平主編javaweb第二版第02章servlet技術(shù)模型_第3頁
jsp程序設(shè)計(jì)入門沈澤剛、秦玉平主編javaweb第二版第02章servlet技術(shù)模型_第4頁
jsp程序設(shè)計(jì)入門沈澤剛、秦玉平主編javaweb第二版第02章servlet技術(shù)模型_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

jsp程序設(shè)計(jì)入門沈澤剛、秦玉平主編javaweb第二版第02章servlet技術(shù)模型 第2章Servlet技術(shù)模型?此文檔下載自官網(wǎng),除本頁,其余未修改,可直接刪除本頁本章內(nèi)容?2.1Servlet AP?2.2Servlet生命周期?2.3分析請求?2.4發(fā)送響應(yīng)?2.5Web應(yīng)用程序及結(jié)構(gòu)?2.6部署描述文件?2.7WebServlet和WebInitParam注解?2.8ServletConfig接口?Servlet是Java Web應(yīng)用開發(fā)的基礎(chǔ),Servlet API定義了若干接口和類。 ?Servlet規(guī)范提供了一個標(biāo)準(zhǔn)的,平臺獨(dú)立的框架實(shí)現(xiàn)在Servlet和容器之間的通信。 該框架是由一組Java接口和類組成的,它們稱為Servlet API。 2.1Servlet API2.1Servlet API?Servlet3.0API由下面4個包組成?javax.servlet包,定義了開發(fā)獨(dú)立于協(xié)議的服務(wù)器小程序的接口和類。 ?javax.servlet.包,定義了開發(fā)采用協(xié)議通信的服務(wù)器小程序的接口和類。 ?javax.servlet.annotation包,定義9個注解類型和2個枚舉類型。 ?javax.servlet.descriptor包,定義了訪問Web應(yīng)用程序配置信息的類型。 2.1.1javax.servlet包接口名說明Filter在請求和響應(yīng)之間執(zhí)行過濾任務(wù)的過濾器對象FilterChain Servlet容器向開發(fā)人員提供的一個過濾器鏈對象FilterConfig Servlet容器使用的過濾器配置對象RequestDispatcher將請求轉(zhuǎn)發(fā)到其他資源的對象Servlet所有Servlet的根接口ServletConfig Servlet容器使用的Servlet配置對象,用來向Servlet傳遞信息ServletContext該接口定義了一些方法,Servlet可以與Servlet容器通信ServletRequest提供客戶請求的對象ServletResponse提供服務(wù)器響應(yīng)的對象ServletContextListener用于監(jiān)聽Web應(yīng)用程序的監(jiān)聽器接口ServletContextAttributeListener用于監(jiān)聽Web應(yīng)用程序?qū)傩缘谋O(jiān)聽器接口ServletRequestListener用于監(jiān)聽請求對象的監(jiān)聽器接口ServletRequestAttributeListener用于監(jiān)聽請求對象屬性的監(jiān)聽器接口SingleThreadModel實(shí)現(xiàn)單線程的接口,已不推薦使用類名說明GenericServlet定義了一般的、獨(dú)立于協(xié)議的Servlet ServletContextAttributeEventServlet環(huán)境屬性的事件類ServletContextEvent Servlet環(huán)境的事件類ServletInputStream從客戶請求讀取二進(jìn)制數(shù)據(jù)的類ServletOutputStream向客戶發(fā)送二進(jìn)制數(shù)據(jù)的類ServletRequestAttributeEvent請求屬性事件類ServletRequestEvent請求事件類ServletRequestWrapper請求對象包裝類ServletResponseWrapper響應(yīng)對象包裝類ServletException當(dāng)當(dāng)Servlet遇到一般錯誤時拋出該異常UnavailableException Servlet或過濾器在其永久或臨時不可用時拋出的異常2.1.1javax.servlet包1.Servlet接口?Servlet接口是Servlet API中的核心接口,每個Servlet必須直接或間接實(shí)現(xiàn)該接口。 該接口定義了如下5個方法。 ?public voidinit(ServletConfig config)?public voidservice(ServletRequest req,ServletResponse res)throws ServletException,IOException?public ServletConfiggetServletConfig()?public StringgetServletInfo()?public voiddestroy()2.ServletConfig接口?ServletConfig接口為用戶提供了有關(guān)Servlet配置信息。 ?Servlet配置包括Servlet名稱、Servlet上下文對象、Servlet初始化參數(shù)等。 3.GenericServlet類?GenericServlet抽象類實(shí)現(xiàn)了Servlet接口和ServletConfig接口,提供了Servlet接口中除了service()方法外的所有方法的實(shí)現(xiàn),同時增加了幾個支持日志的方法。 可以擴(kuò)展該類并實(shí)現(xiàn)service()方法來創(chuàng)建任何類型的Servlet。 4.ServletRequest接口?ServletRequest接口是獨(dú)立于任何協(xié)議的請求對象,定義了獲取客戶請求信息的方法,如getParameter()、getProtocol()、getRemoteHost()等。 5.ServletResponse接口?ServletResponse接口是獨(dú)立于任何協(xié)議的響應(yīng)對象,定義了向客戶發(fā)送響應(yīng)的方法,如setContentType()方法、sendRedirect()方法、getWriter()方法等。 ?該包提供創(chuàng)建使用協(xié)議的Servlet所需要的接口和類。 ?該包共定義8個接口和7個類,其中某些接口和類擴(kuò)展了javax.servlet包中對應(yīng)的接口和類來實(shí)現(xiàn)對協(xié)議的支持。 2.1.2javax.servlet.包2.1.2javax.servlet.包接口名說明HttpServletRequest該接口提供了有關(guān)請求的信息HttpServletResponse該接口提供了有關(guān)響應(yīng)的信息HttpSession實(shí)現(xiàn)會話管理的接口,也用來存儲用戶信息HttpSessionActivationListener 會話啟動監(jiān)聽器接口HttpSessionAttributeListener 會話屬性監(jiān)聽器接口HttpSessionBindingListener 會話綁定監(jiān)聽器接口HttpSessionListener 會話監(jiān)聽器接口HttpSessionContext該接口已不推薦使用類名說明HttpServlet用于創(chuàng)建 Servlet的抽象類Cookie創(chuàng)建Cookie對象的一個實(shí)現(xiàn)類HttpServletRequestWrapper HttpServletRequest接口的實(shí)現(xiàn)類HttpServletResponseWrapper HttpServletResponse接口的實(shí)現(xiàn)類HttpSessionEvent會話事件類HttpSessionBindingEvent會話綁定事件或會話屬性事件類HttpUtils一個工具類,已不推薦使用2.1.2javax.servlet.包Servlet API的層次結(jié)構(gòu)1.HttpServlet類?HttpServlet抽象類用來實(shí)現(xiàn)針對協(xié)議的Servlet,它擴(kuò)展了GenericServlet類。 ?在HttpServlet類中增加了一新的service()方法,格式如下protected voidservice(HttpServletRequest,HttpServletResponse)throws ServletException,IOException?是Servlet向客戶提供服務(wù)的一個方法,我們編寫的Servlet可以覆蓋該方法。 1.HttpServlet類?此外,在HttpServlet中針對不同的請求方法定義了不同的處理方法,如處理GET請求的doGet()方法格式如下protected voiddoGet(HttpServletRequest,HttpServletResponse)throws ServletException,IOException?通常,我們編寫的Servlet覆蓋doGet()方法或doPost()方法。 2.HttpServletRequest接口?HttpServletRequest接口擴(kuò)展了ServletRequest接口并提供了針對請求操作方法,如定義了從請求對象中獲取請求頭、Cookie等信息的方法。 3.HttpServletResponse接口?HttpServletResponse接口擴(kuò)展了ServletResponse接口并提供了針對的發(fā)送響應(yīng)的方法。 它定義了為響應(yīng)設(shè)置如頭、Cookie信息的方法。 2.2Servlet生命周期?Servlet作為一種在容器中運(yùn)行的組件,有一個從創(chuàng)建到銷毀的過程,這個過程被稱為Servlet生命周期。 ?Servlet生命周期包括以下幾個階段加載和實(shí)例化Servlet類,調(diào)用init()方法初始化Servlet實(shí)例,一旦初始化完成,容器從客戶收到請求時就將調(diào)用它的service()方法,最后容器在Servlet實(shí)例上調(diào)用destroy()方法使它進(jìn)入銷毀狀態(tài)。 2.2Servlet生命周期2.2.1加載和實(shí)例化Servlet?對一個Servlet,可能在Web容器啟動時或第一次被訪問時加載到容器中。 對每個Servlet,容器使用Class.forName()方法對其加載并實(shí)例化。 ?容器創(chuàng)建了Servlet實(shí)例后就進(jìn)入生命周期階段,Servlet生命周期方法包括init()方法service()方法destroy()方法2.2.2初始化Servlet?容器創(chuàng)建Servlet實(shí)例后,將調(diào)用init(ServletConfig)方法初始化Servlet。 ?調(diào)用init(ServletConfig)方法后,容器將調(diào)用無參數(shù)的init()方法,之后Servlet就完成初始化。 在Servlet生命周期中init()方法僅被調(diào)用一次。 2.2.3為客戶提供服務(wù)?在Servlet實(shí)例初始化后,它就準(zhǔn)備為客戶提供服務(wù)。 ?當(dāng)容器接收到對Servlet的請求時,容器根據(jù)請求中的URL找到正確的Servlet,首先創(chuàng)建兩個對象(請求和響應(yīng)),然后創(chuàng)建一個新的線程,在該線程中調(diào)用service()方法,同時將請求對象和響應(yīng)對象作為參數(shù)傳遞給該方法。 ?Servlet使用響應(yīng)對象(response)獲得輸出流對象,調(diào)用有關(guān)方法將響應(yīng)發(fā)送給客戶瀏覽器。 ?之后,線程將被銷毀或者返回到容器管理的線程池。 請求和響應(yīng)對象已經(jīng)離開其作用域,也將被銷毀。 最后客戶得到響應(yīng)。 2.2.3為客戶提供服務(wù)2.2.4銷毀和卸載Servlet?當(dāng)容器決定不再需要Servlet實(shí)例時,它將在Servlet實(shí)例上調(diào)用destroy()方法,Servlet在該方法中釋放資源,如它在init()方法中獲得的數(shù)據(jù)庫連接。 一旦該方法被調(diào)用,Servlet實(shí)例不能再提供服務(wù)。 ?一旦Servlet實(shí)例被銷毀,它將作為垃圾被回收。 如果Web容器關(guān)閉,Servlet也將被銷毀和卸載。 2.3分析請求?消息是客戶向服務(wù)器的請求或者服務(wù)器向客戶的響應(yīng)。 ?消息的各部分消息部分說明請求行或狀態(tài)行指定請求或響應(yīng)消息的目的請求頭或響應(yīng)頭指定元信息,如關(guān)于消息內(nèi)容的大小、類型、編碼方式空行可選的消息體請求或響應(yīng)消息的主要內(nèi)容2.3.1請求結(jié)構(gòu)請求行POST/paipaistore/selectProduct /1.1Aept=*/*Aept-Language=zh- Aept-Encoding=gzip,deflate請求頭User-Agent=Mozilla/4.0(patible;MSIE9.0;SV1;.NET CLR1.1.4322;.NET CLR2.0.50727)Host=localhost:8080Connection=Keep-Alive空行數(shù)據(jù)productname=iphone52.3.1請求結(jié)構(gòu)?由客戶向服務(wù)器發(fā)出的消息叫做請求。 1.請求行?的請求行由三部分組成方法名、請求資源的URI和版本。 這三部分由空格分隔。 2.請求頭?請求行之后的內(nèi)容稱為請求頭(request header),它可以指定請求使用的瀏覽器信息、字符編碼信息及客戶能處理的頁面類型等。 ?接下來是一個空行。 ?空行的后面是請求的數(shù)據(jù)。 3.的請求方法?請求行中的方法名指定了客戶請求服務(wù)器完成的動作。 方法說明方法說明GET請求讀取一個Web頁面DELETE移除Web頁面POST請求向服務(wù)器發(fā)送數(shù)據(jù)TRACE返回收到的請求PUT請求存儲一個Web頁面OPTIONS查詢特定選項(xiàng)HEAD請求讀取一個Web頁面的頭部CONNECT保留作將來使用2.3.1請求結(jié)構(gòu)4.GET方法和POST方法?在所有的請求方法中,GET方法和POST方法是兩種最常用的方法。 ?GET方法用來檢索資源。 它的含義是“獲得(get)由該URI標(biāo)識的資源”。 ?POST方法用來向服務(wù)器發(fā)送需要處理的數(shù)據(jù),它的含義是“將數(shù)據(jù)發(fā)送(post)到由該URI標(biāo)識的主動資源”。 GET和POST方法的比較特征GET方法POST方法資源類型主動的或被動的主動的數(shù)據(jù)類型文本文本或二進(jìn)制數(shù)據(jù)數(shù)據(jù)量一般不超過255個字符沒有限制可見性數(shù)據(jù)是URL的一部分,在瀏覽器的地址欄中對用戶可見數(shù)據(jù)不是URL的一部分而是作為請求的消息體發(fā)送,在瀏覽器的地址欄中對用戶不可見數(shù)據(jù)緩存數(shù)據(jù)可在瀏覽器的URL歷史中緩存數(shù)據(jù)不能在瀏覽器的URL歷史中緩存2.3.2發(fā)送請求?在客戶端如果發(fā)生下面的事件,瀏覽器就向Web服務(wù)器發(fā)送一個請求。 用戶在瀏覽器的地址欄中輸入U(xiǎn)RL并按回車鍵。 用戶點(diǎn)擊了HTML頁面中的超鏈接。 用戶在HTML頁面中添寫一個表單并提交。 2.3.3處理請求?在HttpServlet類中,除定義了service()方法為客戶提供服務(wù)外,還針對每個方法定義了相應(yīng)的doXxx()方法,一般格式如下protected voiddoXxx(HttpServletRequest,HttpServletResponse)throws ServletException,IOException;方法HttpServlet方法方法HttpServlet方法GET doGet()DELETE doDelete()POST doPost()OPTIONS doOptions()HEAD doHead()TRACE doTrace()PUT doPut()2.3.4分析請求?客戶發(fā)送給服務(wù)器的請求信息被封裝在HttpServletRequest對象中,其中包含了由瀏覽器發(fā)送給服務(wù)器的數(shù)據(jù),這些數(shù)據(jù)包括請求參數(shù)、客戶端有關(guān)信息等。 ?1.檢索請求參數(shù)?請求參數(shù)是隨請求一起發(fā)送到服務(wù)器的數(shù)據(jù),它是以名/值對的形式發(fā)送的。 可以使用ServletRequest接口中定義的方法檢索由客戶發(fā)送的參數(shù)?public StringgetParameter(String name)返回由name指定的請求參數(shù)值,如果指的參數(shù)不存在,則返回null值。 使用該方必須確信指定的參數(shù)只有一個值。 1.檢索請求參數(shù)?public StringgetParameterValues(String name)返回指定參數(shù)name所包含的所有值,返回值是一個String數(shù)組。 如果指定的參數(shù)不存在,則返回null值。 1.檢索請求參數(shù)?public EnumerationgetParameterNames()返回一個Enumeration對象,它包含請求中所有的請求參數(shù)名,元素是String類型的。 如果沒有請求參數(shù),則返回一個空的Enumeration對象。 ?public MapgetParameterMap()返回一個包含所有請求參數(shù)的Map對象,該對象以參數(shù)名作為鍵、以參數(shù)值作為值。 請求參數(shù)傳遞的方法 (1)通過表單指定請求參數(shù),每個表單域可以傳遞一個請求參數(shù),這種方法適用于GET請求和POST請求。 (2)通過查詢串指定請求參數(shù),將參數(shù)名和值附加在請求的URL后面,這種方法只適用于GET請求。 ?程序2.1login.jsp?程序2.2LoginServlet.java2.檢索客戶端有關(guān)信息?在HttpServletRequest接口中還定義了下面常用的方法用來檢索客戶端有關(guān)信息public StringgetMethod()public StringgetRemoteHost()public StringgetRemoteAddr()public intgetRemotePort()public StringgetProtocol()public StringgetRequestURI()public StringgetQueryString()public StringgetContentType()public StringgetCharacterEncoding()?程序2.3ClientInfoServlet.java2.檢索客戶端有關(guān)信息3.檢索請求頭?請求頭是隨請求一起發(fā)送到服務(wù)器息,它是以“名/值”對的形式發(fā)送。 請求頭內(nèi)容User-Agent關(guān)于瀏覽器和它的平臺的信息Aept客戶能接受并處理的MIME類型Aept-Charset客戶可以接受的字符集Aept-Encoding客戶能處理的頁面編碼的方法AeptLanguage客戶能處理的語言Host服務(wù)器的DNS名字Authorization訪問密碼保護(hù)的Web頁面時,客戶用這個請求頭來標(biāo)識自己的身份Cookie將一個以前設(shè)置的Cookie送回服務(wù)器Date消息被發(fā)送的日期和時間Connection指示連接是否支持持續(xù)連接,值Keep-Alive表示支持持續(xù)連接?public StringgetHeader(String name)返回指定名稱的請求頭的值。 ?public EnumerationgetHeaders(String name)返回指定名稱的請求頭的Enumeration對象。 ?public EnumerationgetHeaderNames()返回一個Enumeration對象,它包含所有請求頭名。 ?public intgetIntHeader

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論