![android整套學(xué)習(xí)黑馬程序員javaweb02servlet_第1頁](http://file4.renrendoc.com/view/5badc72df33c194ad67f5c16b842286f/5badc72df33c194ad67f5c16b842286f1.gif)
![android整套學(xué)習(xí)黑馬程序員javaweb02servlet_第2頁](http://file4.renrendoc.com/view/5badc72df33c194ad67f5c16b842286f/5badc72df33c194ad67f5c16b842286f2.gif)
![android整套學(xué)習(xí)黑馬程序員javaweb02servlet_第3頁](http://file4.renrendoc.com/view/5badc72df33c194ad67f5c16b842286f/5badc72df33c194ad67f5c16b842286f3.gif)
![android整套學(xué)習(xí)黑馬程序員javaweb02servlet_第4頁](http://file4.renrendoc.com/view/5badc72df33c194ad67f5c16b842286f/5badc72df33c194ad67f5c16b842286f4.gif)
![android整套學(xué)習(xí)黑馬程序員javaweb02servlet_第5頁](http://file4.renrendoc.com/view/5badc72df33c194ad67f5c16b842286f/5badc72df33c194ad67f5c16b842286f5.gif)
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Servlet王昭珽北京傳智播客教育Servlet簡(jiǎn)介Servlet是sun公司提供的一門用于開發(fā)動(dòng)態(tài)web資源的技術(shù)。Sun公司在其API中提供了一個(gè)servlet接口,用戶若想用發(fā)一個(gè)動(dòng)態(tài)web資源(即開發(fā)一個(gè)Java程序向?yàn)g覽器輸出數(shù)據(jù)),需要完成以下2個(gè)步驟:編寫一個(gè)Java類,實(shí)現(xiàn)servlet接口。把開發(fā)好的Java類部署到web服務(wù)器中??焖偃腴T,用servlet向?yàn)g覽器輸出“helloservlet”。閱讀ServletAPI,解決兩個(gè)問題:輸出helloservlet的java代碼應(yīng)該寫在servlet的哪個(gè)方法內(nèi)?如何向IE瀏覽器輸出數(shù)據(jù)?北京傳智播客教育Servlet在web應(yīng)用中的位置提示:按照一種約定俗成的稱呼習(xí)慣,通常我們也把實(shí)現(xiàn)了servlet接口的java程序,稱之為Servlet。Web應(yīng)用所在目錄這些文件一般存在web應(yīng)用根目錄下,根目錄下的文件外界可以直接訪問java類、jar包、web應(yīng)用的配置文件存在這個(gè)目錄下,該目錄下的文件外界無法非法直接訪問,由web服務(wù)器負(fù)責(zé)調(diào)用北京傳智播客教育第一個(gè)Servlet的編寫動(dòng)手練習(xí)完成目標(biāo):利用Servlet向客戶端輸出”HelloSerlvet”運(yùn)行常見錯(cuò)誤,見備注執(zhí)行過程客戶端發(fā)出請(qǐng)求根據(jù)web.xml文件的配置,找到<url-pattern>子元素的值“/hello”的<servlet-mapping>元素讀取<servlet-mapping>元素的<servlet-name>子元素的值,由此確定Servlet的名字為”HelloServlet”找到<servlet-name>值為HelloServlet的<servlet>元素讀取<servlet>元素的<servlet-class>子元素的值,由此確定Servlet的類名為cn.itcast.HelloServlet。到Tomcat安裝目錄/webapps/Demo1/WEB-INF/classes/cn/itcast目錄下查找到HelloServlet.class文件執(zhí)行過程圖解北京傳智播客教育Tip:Servlet的運(yùn)行過程Servlet程序是由WEB服務(wù)器調(diào)用,web服務(wù)器收到客戶端的Servlet訪問請(qǐng)求后:Web服務(wù)器首先檢查是否已經(jīng)裝載并創(chuàng)建了該Servlet的實(shí)例對(duì)象。如果是,則直接執(zhí)行第④步,否則,執(zhí)行第②步。裝載并創(chuàng)建該Servlet的一個(gè)實(shí)例對(duì)象。調(diào)用Servlet實(shí)例對(duì)象的init()方法。創(chuàng)建一個(gè)用于封裝HTTP請(qǐng)求消息的HttpServletRequest對(duì)象和一個(gè)代表HTTP響應(yīng)消息的HttpServletResponse對(duì)象,然后調(diào)用Servlet的service()方法并將請(qǐng)求和響應(yīng)對(duì)象作為參數(shù)傳遞進(jìn)去。WEB應(yīng)用程序被停止或重新啟動(dòng)之前,Servlet引擎將卸載Servlet,并在卸載之前調(diào)用Servlet的destroy()方法。北京傳智播客教育Tip:Servlet的運(yùn)行過程北京傳智播客教育在Eclipse中開發(fā)Servlet在eclipse中新建一個(gè)webproject工程,eclipse會(huì)自動(dòng)創(chuàng)建下圖所示目錄結(jié)構(gòu):web工程的名稱,該工程部署時(shí),在webapps目錄下就會(huì)有一個(gè)example的web應(yīng)用Java程序的開發(fā)目錄,該目錄下編寫的所有j程序在部署時(shí),會(huì)自動(dòng)部署到example/web-inf/classes目錄下。webroot對(duì)應(yīng)于web應(yīng)用的根目錄,該目錄下的所有子目錄和子文件在部署時(shí),會(huì)原封不動(dòng)的發(fā)布到web應(yīng)用目錄下。北京傳智播客教育Servlet接口實(shí)現(xiàn)類Servlet接口SUN公司定義了兩個(gè)默認(rèn)實(shí)現(xiàn)類,分別為:GenericServlet、HttpServlet。HttpServlet指能夠處理HTTP請(qǐng)求的servlet,它在原有Servlet接口上添加了一些與HTTP協(xié)議處理方法,它比Servlet接口的功能更為強(qiáng)大。因此開發(fā)人員在編寫Servlet時(shí),通常應(yīng)繼承這個(gè)類,而避免直接去實(shí)現(xiàn)Servlet接口。HttpServlet在實(shí)現(xiàn)Servlet接口時(shí),覆寫了service方法,該方法體內(nèi)的代碼會(huì)自動(dòng)判斷用戶的請(qǐng)求方式,如為GET請(qǐng)求,則調(diào)用HttpServlet的doGet方法,如為Post請(qǐng)求,則調(diào)用doPost方法。因此,開發(fā)人員在編寫Servlet時(shí),通常只需要覆寫doGet或doPost方法,而不要去覆寫service方法。閱讀HttpServletAPI文檔,看一下servlet-api.jar北京傳智播客教育Servlet的一些細(xì)節(jié)(1)由于客戶端是通過URL地址訪問web服務(wù)器中的資源,所以Servlet程序若想被外界訪問,必須把servlet程序映射到一個(gè)URL地址上,這個(gè)工作在web.xml文件中使用<servlet>元素和<servlet-mapping>元素完成。<servlet>元素用于注冊(cè)Servlet,它包含有兩個(gè)主要的子元素:<servlet-name>和<servlet-class>,分別用于設(shè)置Servlet的注冊(cè)名稱和Servlet的完整類名。一個(gè)<servlet-mapping>元素用于映射一個(gè)已注冊(cè)的Servlet的一個(gè)對(duì)外訪問路徑,它包含有兩個(gè)子元素:<servlet-name>和<url-pattern>,分別用于指定Servlet的注冊(cè)名稱和Servlet的對(duì)外訪問路徑。例如:<web-app> <servlet> <servlet-name>AnyName</servlet-name> <servlet-class>HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>AnyName</servlet-name> <url-pattern>/demo/hello.html</url-pattern> </servlet-mapping></web-app>北京傳智播客教育Servlet的一些細(xì)節(jié)(2)<servlet-mapping> <servlet-name> AnyName </servlet-name> <url-pattern> /action/* </url-pattern></servlet-mapping> <servlet-mapping> <servlet-name> AnyName </servlet-name> <url-pattern> *.do </url-pattern></servlet-mapping>同一個(gè)Servlet可以被映射到多個(gè)URL上,即多個(gè)<servlet-mapping>元素的<servlet-name>子元素的設(shè)置值可以是同一個(gè)Servlet的注冊(cè)名。在Servlet映射到的URL中也可以使用*通配符,但是只能有兩種固定的格式:一種格式是“*.擴(kuò)展名”,另一種格式是以正斜杠(/)開頭并以“/*”結(jié)尾。北京傳智播客教育Servlet的一些細(xì)節(jié)(3)對(duì)于如下的一些映射關(guān)系:Servlet1映射到/abc/*Servlet2映射到/*Servlet3映射到/abcServlet4映射到*.do問題:當(dāng)請(qǐng)求URL為“/abc/a.html”,“/abc/*”和“/*”都匹配,哪個(gè)servlet響應(yīng)
Servlet引擎將調(diào)用Servlet1。當(dāng)請(qǐng)求URL為“/abc”時(shí),“/abc/*”和“/abc”都匹配,哪個(gè)servlet響應(yīng)
Servlet引擎將調(diào)用Servlet3。當(dāng)請(qǐng)求URL為“/abc/a.do”時(shí),“/abc/*”和“*.do”都匹配,哪個(gè)servlet響應(yīng)
Servlet引擎將調(diào)用Servlet1。當(dāng)請(qǐng)求URL為“/a.do”時(shí),“/*”和“*.do”都匹配,哪個(gè)servlet響應(yīng)
Servlet引擎將調(diào)用Servlet2。當(dāng)請(qǐng)求URL為“/xxx/yyy/a.do”時(shí),“/*”和“*.do”都匹配,哪個(gè)servlet響應(yīng)
Servlet引擎將調(diào)用Servlet2。北京傳智播客教育Servlet的一些細(xì)節(jié)(4)如果某個(gè)Servlet的映射路徑僅僅為一個(gè)正斜杠(/),那么這個(gè)Servlet就成為當(dāng)前Web應(yīng)用程序的缺省Servlet。凡是在web.xml文件中找不到匹配的<servlet-mapping>元素的URL,它們的訪問請(qǐng)求都將交給缺省Servlet處理,也就是說,缺省Servlet用于處理所有其他Servlet都不處理的訪問請(qǐng)求。在<tomcat的安裝目錄>\conf\web.xml文件中,注冊(cè)了一個(gè)名稱為org.apache.catalina.servlets.DefaultServlet的Servlet,并將這個(gè)Servlet設(shè)置為了缺省Servlet。當(dāng)訪問Tomcat服務(wù)器中的某個(gè)靜態(tài)HTML文件和圖片時(shí),實(shí)際上是在訪問這個(gè)缺省Servlet。
Servlet的生命周期北京傳智播客教育Servlet的生命周期(1)Servlet是一個(gè)供其他Java程序(Servlet引擎)調(diào)用的Java類,它不能獨(dú)立運(yùn)行,它的運(yùn)行完全由Servlet引擎來控制和調(diào)度。針對(duì)客戶端的多次Servlet請(qǐng)求,通常情況下,服務(wù)器只會(huì)創(chuàng)建一個(gè)Servlet實(shí)例對(duì)象,也就是說Servlet實(shí)例對(duì)象一旦創(chuàng)建,它就會(huì)駐留在內(nèi)存中,為后續(xù)的其它請(qǐng)求服務(wù),直至web容器退出,servlet實(shí)例對(duì)象才會(huì)銷毀。在Servlet的整個(gè)生命周期內(nèi),Servlet的init方法只被調(diào)用一次。而對(duì)一個(gè)Servlet的每次訪問請(qǐng)求都導(dǎo)致Servlet引擎調(diào)用一次servlet的service方法。對(duì)于每次訪問請(qǐng)求,Servlet引擎都會(huì)創(chuàng)建一個(gè)新的HttpServletRequest請(qǐng)求對(duì)象和一個(gè)新的HttpServletResponse響應(yīng)對(duì)象,然后將這兩個(gè)對(duì)象作為參數(shù)傳遞給它調(diào)用的Servlet的service()方法,service方法再根據(jù)請(qǐng)求方式分別調(diào)用doXXX方法。北京傳智播客教育Servlet的生命周期(2)如果在<servlet>元素中配置了一個(gè)<load-on-startup>元素,那么WEB應(yīng)用程序在啟動(dòng)時(shí),就會(huì)裝載并創(chuàng)建Servlet的實(shí)例對(duì)象、以及調(diào)用Servlet實(shí)例對(duì)象的init()方法。 舉例:
<servlet> <servlet-name>invoker</servlet-name> <servlet-class> org.apache.catalina.servlets.InvokerServlet </servlet-class> <load-on-startup>2</load-on-startup> </servlet>用途:為web應(yīng)用寫一個(gè)InitServlet,這個(gè)servlet配置為啟動(dòng)時(shí)裝載,為整個(gè)web應(yīng)用創(chuàng)建必要的數(shù)據(jù)庫表和數(shù)據(jù)。線程安全北京傳智播客教育Servlet的線程安全當(dāng)多個(gè)客戶端并發(fā)訪問同一個(gè)Servlet時(shí),web服務(wù)器會(huì)為每一個(gè)客戶端的訪問請(qǐng)求創(chuàng)建一個(gè)線程,并在這個(gè)線程上調(diào)用Servlet的service方法,因此service方法內(nèi)如果訪問了同一個(gè)資源的話,就有可能引發(fā)線程安全問題。如果某個(gè)Servlet實(shí)現(xiàn)了SingleThreadModel接口,那么Servlet引擎將以單線程模式來調(diào)用其service方法。SingleThreadModel接口中沒有定義任何方法,只要在Servlet類的定義中增加實(shí)現(xiàn)SingleThreadModel接口的聲明即可。對(duì)于實(shí)現(xiàn)了SingleThreadModel接口的Servlet,Servlet引擎仍然支持對(duì)該Servlet的多線程并發(fā)訪問,其采用的方式是產(chǎn)生多個(gè)Servlet實(shí)例對(duì)象,并發(fā)的每個(gè)線程分別調(diào)用一個(gè)獨(dú)立的Servlet實(shí)例對(duì)象。實(shí)現(xiàn)SingleThreadModel接口并不能真正解決Servlet的線程安全問題,因?yàn)镾ervlet引擎會(huì)創(chuàng)建多個(gè)Servlet實(shí)例對(duì)象,而真正意義上解決多線程安全問題是指一個(gè)Servlet實(shí)例對(duì)象被多個(gè)線程同時(shí)調(diào)用的問題。事實(shí)上,在ServletAPI2.4中,已經(jīng)將SingleThreadModel標(biāo)記為Deprecated(過時(shí)的)。解決并發(fā)問題解決并發(fā)出現(xiàn)的問題,可以采用以下方式:使用Java同步機(jī)制對(duì)多線程同步使用SingleThreadModel接口合理決定在Servlet中定義的變量的作用域北京傳智播客教育ServletConfig對(duì)象在Servlet的配置文件中,可以使用一個(gè)或多個(gè)<init-param>標(biāo)簽為servlet配置一些初始化參數(shù)。當(dāng)servlet配置了初始化參數(shù)后,web容器在創(chuàng)建servlet實(shí)例對(duì)象時(shí),會(huì)自動(dòng)將這些初始化參數(shù)封裝到ServletConfig對(duì)象中,并在調(diào)用servlet的init方法時(shí),將ServletConfig對(duì)象傳遞給servlet。進(jìn)而,程序員通過ServletConfig對(duì)象就可以得到當(dāng)前servlet的初始化參數(shù)信息。閱讀ServletConfigAPI,并舉例說明該對(duì)象的作用:獲得字符集編碼獲得數(shù)據(jù)庫連接信息北京傳智播客教育ServletContextWEB容器在啟動(dòng)時(shí),它會(huì)為每個(gè)WEB應(yīng)用程序都創(chuàng)建一個(gè)對(duì)應(yīng)的ServletContext對(duì)象,它代表當(dāng)前web應(yīng)用。ServletConfig對(duì)象中維護(hù)了ServletContext對(duì)象的引用,開發(fā)人員在編寫servlet時(shí),可以通過ServletConfig.getServletContext方法獲得ServletContext對(duì)象。由于一個(gè)WEB應(yīng)用中的所有Servlet共享同一個(gè)ServletContext對(duì)象,因此Servlet對(duì)象之間可以通過ServletCo
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度醫(yī)院與保險(xiǎn)公司醫(yī)療責(zé)任險(xiǎn)續(xù)保合同
- 2025年度國際貸款合同匯率變動(dòng)及補(bǔ)償條款
- 2025年度清潔能源項(xiàng)目投資合作協(xié)議-@-2
- 2025年便攜溫度校驗(yàn)儀項(xiàng)目評(píng)估報(bào)告
- 2025年度國際博覽會(huì)專業(yè)會(huì)展服務(wù)合同協(xié)議書范本
- 2025年中國新能源商用車行業(yè)投資分析及發(fā)展戰(zhàn)略咨詢報(bào)告
- 2025年度高科技產(chǎn)業(yè)股權(quán)合伙投資協(xié)議書
- 2025年耐熱爐管項(xiàng)目投資可行性研究分析報(bào)告
- 市政管網(wǎng)修復(fù)的施工組織與管理
- 2025年度企業(yè)內(nèi)訓(xùn)服務(wù)合同
- 基于學(xué)生主體的整本書閱讀-《鋼鐵是怎樣煉成的》(一等獎(jiǎng)創(chuàng)新教學(xué)設(shè)計(jì))
- (完整word版)高中英語3500詞匯表
- 社會(huì)政策概論課件
- 工程量清單及招標(biāo)控制價(jià)編制服務(wù)采購實(shí)施方案(技術(shù)標(biāo))
- 全國住戶收支調(diào)查業(yè)務(wù)知識(shí)考試復(fù)習(xí)題庫(含答案)
- 復(fù)方氨基酸注射液的匯總
- 2023年上海市秋考語文真題試卷含答案(整理版)
- 2023年心理咨詢師之心理咨詢師基礎(chǔ)知識(shí)考試題庫附完整答案【有一套】
- 一級(jí)建造師繼續(xù)教育最全題庫及答案(新)
- 直線加速器專項(xiàng)施工方案
- 聯(lián)苯二氯芐生產(chǎn)工藝及產(chǎn)排污分析
評(píng)論
0/150
提交評(píng)論