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

下載本文檔

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

文檔簡(jiǎn)介

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

溫馨提示

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

評(píng)論

0/150

提交評(píng)論