基礎(chǔ)課程體系java1_第1頁(yè)
基礎(chǔ)課程體系java1_第2頁(yè)
基礎(chǔ)課程體系java1_第3頁(yè)
基礎(chǔ)課程體系java1_第4頁(yè)
基礎(chǔ)課程體系java1_第5頁(yè)
已閱讀5頁(yè),還剩45頁(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)介

2020/12/1第三章Servlet的編寫及調(diào)用

2020/12/1一、Servlet的種類在Servlet2.3規(guī)范中,共有三種Servlet:1、標(biāo)準(zhǔn)Servlet用來(lái)對(duì)用戶的HTTP請(qǐng)求作出響應(yīng),如生成動(dòng)態(tài)網(wǎng)頁(yè)、控制程序的流向、是最常用的Servlet2020/12/12、過(guò)濾器Servlet在用戶請(qǐng)求的數(shù)據(jù)傳遞給標(biāo)準(zhǔn)Servlet或JSP頁(yè)面之前對(duì)數(shù)據(jù)進(jìn)行處理,可完成以下功能:安全檢查:核實(shí)用戶在訪問某一網(wǎng)頁(yè)時(shí)的口令是否正確,是否有相應(yīng)的訪問權(quán)限數(shù)據(jù)修改:針對(duì)用戶傳遞的數(shù)據(jù)進(jìn)行修改數(shù)據(jù)壓縮:如果一個(gè)網(wǎng)頁(yè)含有大量的數(shù)據(jù)(如含有大量的圖片),可利用FilterServlet在傳遞給用戶端之前進(jìn)行壓縮,以減少數(shù)據(jù)量2020/12/13、監(jiān)聽器Servlet監(jiān)聽器Servlet可對(duì)Servlet運(yùn)行的WEB服務(wù)器進(jìn)行監(jiān)控,可實(shí)現(xiàn):監(jiān)控用戶的訪問對(duì)WEB服務(wù)器的啟動(dòng)、終止進(jìn)行響應(yīng)2020/12/1二、Servlet的基本構(gòu)成1、用于Servlet的java包和類javax.servlet包含用于Servlet編程的最基礎(chǔ)的類javax.servlet.http是Servlet編程最重要的包java.io協(xié)助Servlet完成文件讀取、日志記錄等工作javax.servlet.http.HttpServlet類此類是進(jìn)行Servlet編程中最為重要的類,Servlet程序設(shè)計(jì)就是通過(guò)繼承此類,重載該類中相應(yīng)的方法來(lái)完成的。…2020/12/12020/12/1(1)init的方法在用戶第一次激活Servlet時(shí),該方法將自動(dòng)執(zhí)行;也可以在Servlet容器啟動(dòng)時(shí)執(zhí)行。init()在Servlet程序中只被執(zhí)行一次聲明方式:publicvoidinit()throwsServletException{…}可在此方法中執(zhí)行整個(gè)Servlet程序的初始化工作,如建立用戶訪問頁(yè)數(shù)次數(shù)的計(jì)數(shù)器,初始化數(shù)據(jù)庫(kù)連接等等工作2020/12/1(2)service方法用戶提交的各種http請(qǐng)求,如get、post、put等等,都先由service方法接收,service方法根據(jù)用戶請(qǐng)求的類型調(diào)用在相應(yīng)的doGet、doPost、doPut等方法建議不要在service方法中對(duì)用戶的請(qǐng)求進(jìn)行處理,而是在相應(yīng)的doGet、doPost等方法中進(jìn)行處理2020/12/1service方法的聲明形式publicvoidservice(ServletRequestreq,ServletResponseres)?throwsServletException,java.io.IOException{……}說(shuō)明:req參數(shù)代表用戶提交的請(qǐng)求,從中可提取傳送過(guò)來(lái)的參數(shù)及相應(yīng)的數(shù)值;而res代表Servlet程序?qū)τ脩粽?qǐng)求的響應(yīng),可利用該參數(shù)向用戶端輸出html代碼,生成相應(yīng)的網(wǎng)頁(yè)。2020/12/1(3)doGet方法protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,java.io.IOException{…….}2020/12/1doGet方法的使用可在doGet方法中對(duì)用戶的get請(qǐng)求進(jìn)行響應(yīng),利用req參數(shù)取得用戶傳入的參數(shù),再利用resp參數(shù)對(duì)用戶進(jìn)行回應(yīng),該方法可對(duì)用戶直接在瀏覽器中輸入Servlet的url進(jìn)行的請(qǐng)求進(jìn)行回應(yīng)。2020/12/1doGet方法示例代碼protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,java.io.IOException{response.setContentType("text/html;chartset=GBK");PrintWriterout=response.getWriter();out.println("<html><head>");out.println("<title>Servlet</title>");out.println("</head>");out.println("<body>");out.println("<h3>hello,world</h3>");out.println("</body></html>");out.close();}2020/12/1(3)doPost方法protectedvoiddoPost(HttpServletRequestreq,HttpServletResponseresp)?throwsServletException,java.io.IOException{……}doPost方法參數(shù)類型和數(shù)目和doPost相同。2020/12/1doPost方法的調(diào)用doPost方法用來(lái)響應(yīng)通過(guò)HTTP協(xié)議的post方式傳遞的請(qǐng)求。一般而言,doPost方法的調(diào)用需要借助HTML頁(yè)面中的表單標(biāo)記。2020/12/12020/12/11、web.xml文件web.xml文件是一種xml類型的文件,Servlet利用web.xml對(duì)自身進(jìn)行設(shè)置,此文件是Servlet應(yīng)用程序的核心配置文件,利用該文件可以指定Servlet在引擎中的如下特性:對(duì)Servlet完成的功能進(jìn)行說(shuō)明指定Servlet在引擎中發(fā)布后,可供客戶端調(diào)用的URI指定Servlet被引擎裝載時(shí)的運(yùn)行參數(shù)指定Servlet可以使用的JavaEE資源文件中還可以指定一些Servlet以外的屬性,比如Web程序的默認(rèn)起始頁(yè)等屬性。2020/12/12、web.xml文件的格式按照Servlet2.3規(guī)范,web.xml文件利用DTD進(jìn)行XML文件合法性約束,因此,在web.xml文件的開頭必須聲明XML文件的版本號(hào)和編碼格式,并且還要聲明相關(guān)的DTD約束。實(shí)際上,符合Servlet2.3規(guī)范的web.xml的開頭格式都是固定的,其內(nèi)容如下所示:

<?xmlversion="1.0"encoding="ISO-8859-1"?><!DOCTYPEweb-appPUBLIC"-//SunMicrosystems,Inc.//DTDWebApplication2.3//EN""">2020/12/13、web.xml正文內(nèi)容在本節(jié)中,主要討論和Servlet相關(guān)的常用元素,主要包括以下幾個(gè):<servlet>…</servlet>段對(duì)Servlet的名字進(jìn)行了定義。<servlet-mapping>…</servlet-mapping>段定義了Servlet名字在引擎中的URI。具體的示例請(qǐng)參照下面的示例。2020/12/1web.xml文件示例<web-app><display-name>HelloServlet</display-name><description>ASimpleServlet</description><servlet><servlet-name>MyServlet</servlet-name><servlet-class>MyServlet</servlet-class></servlet><servlet-mapping><servlet-name>MyServlet</servlet-name><url-pattern>/myservlet</url-pattern></servlet-mapping></web-app>2020/12/14、Servlet和Web應(yīng)用程序在Tomcat中發(fā)布MyServlet之后,就可以通過(guò)在瀏覽器中輸入調(diào)用該Sevlet,此時(shí)Servlet將在瀏覽器窗口中回應(yīng)“Hello,world”在上述調(diào)用URL中,“servlet”是MyServlet在Tomcat中的發(fā)布名稱,該名稱一般被稱為Web應(yīng)用程序上下文,代表該Servlet在Tomcat中的調(diào)用標(biāo)識(shí),以下將討論Web應(yīng)用程序的概念2020/12/12020/12/15、Web應(yīng)用部署的上下文路徑在Servlet引擎中部署Web應(yīng)用之后,可以通過(guò)HTTP協(xié)議,利用URL對(duì)該Web應(yīng)用程序提供的資源進(jìn)行請(qǐng)求。該URL的形式如下所示:http://主機(jī)名:端口號(hào)/Web應(yīng)用程序標(biāo)識(shí)/資源名在上述URL中,Web應(yīng)用程序標(biāo)識(shí)即為Servlet引擎在部署Web應(yīng)用程序后為該程序所起的名稱。也稱為Web應(yīng)用程序的上下文路徑(ContextPath)。Servlet引擎一般采用Web應(yīng)用程序的WAR文件名作為其上下文路徑,同時(shí)也允許為Web應(yīng)用程序指定其他的名稱。在Tomcat中,如果將Web應(yīng)用程序的目錄或WAR文件拷貝到webapps目錄中,那么該Web應(yīng)用程序的上下文路徑就是拷貝后的目錄名或WAR文件名。2020/12/12020/12/12020/12/12020/12/17、<URL-PATTERN>的映射<URL-PATTERN>標(biāo)記規(guī)定在Web程序中,如何通過(guò)某個(gè)URL調(diào)用給定的Servlet。利用<URL-PATTERN>標(biāo)記可以定義多種方式Servlet的調(diào)用URL.2020/12/1/<URLName>將/<URLName>為上下文路徑的請(qǐng)求映射到某一Servlet類。例:<servlet><servlet-name>MyServlet</servletname><servlet-class>MyServlet</servlet-class></servlet><servlet-mapping><servlet-name>MyServlet</servlet-name><url-pattern>/myservlet</url-pattern></servlet-mapping>2020/12/1/<path>/*映射所有以<path>為上下文路徑的請(qǐng)求到某一Servlet類。例:<servlet><servlet-name>MyServlet</servletname><servlet-class>MyServlet</servlet-class></servlet><servlet-mapping><servlet-name>MyServlet</servlet-name><url-pattern>/myservlet/*</url-pattern></servlet-mapping>2020/12/1*.<ext>映射所有以.<ext>為擴(kuò)展名的請(qǐng)求到某一Servlet類。例:<servlet><servlet-name>MyServlet</servletname><servlet-class>MyServlet</servlet-class></servlet><servlet-mapping><servlet-name>MyServlet</servlet-name><url-pattern>*.do</url-pattern></servlet-mapping>2020/12/1/或/*如果用戶發(fā)出的url請(qǐng)求在以上兩種映射定義都沒有匹配,而在web.xml中定義了“/”或“/*”映射,那么該url請(qǐng)求將由此映射定義的Servlet進(jìn)行處理。例:

<servlet><servlet-name>MyServlet</servletname><servlet-class>MyServlet</servlet-class></servlet><servlet-mapping><servlet-name>MyServlet</servlet-name><url-pattern>/</url-pattern></servlet-mapping>2020/12/18、Servlet的兩種運(yùn)行方式Servlet類的實(shí)例化是由Web容器控制的。當(dāng)多個(gè)用戶同時(shí)訪問某個(gè)Servlet時(shí),Web容器提供了兩種模式響應(yīng)用戶的請(qǐng)求:多線程模式單線程模式2020/12/1(1)多線程模式多線程是Servlet最為常用的運(yùn)行模式。在這種模式中,Servlet容器只實(shí)例化一個(gè)Servlet類,用這一個(gè)類實(shí)例服務(wù)所有的對(duì)該Servlet的請(qǐng)求。此時(shí),該類中定義的service、doGet、doPost等方法都是多線程的,而init、destroy不是多線程的。2020/12/12020/12/1多線程模式注意事項(xiàng)在多線程模式中,由于在同一時(shí)刻會(huì)產(chǎn)生幾個(gè)對(duì)service或doXxx調(diào)用,而Servlet類的實(shí)例只有一個(gè),所以,如果在service或doXxx方法中對(duì)類中聲明的屬性(即實(shí)例變量)或類中的靜態(tài)變量(即類變量)進(jìn)行訪問,應(yīng)注意變量的并發(fā)訪問問題2020/12/1(2)單線程模式單線程模式是指Servlet類中聲明的service方法、doGet、doPost等方法都是單線程的,不用考慮線程中的同步問題。在此種模式下,如果有多個(gè)請(qǐng)求同時(shí)要求調(diào)用service或doGet等方法,則容器將以一定的方式保證在同一時(shí)刻只有一個(gè)請(qǐng)求被相應(yīng)的方法處理。2020/12/1方式1:排隊(duì)方式請(qǐng)求1請(qǐng)求2請(qǐng)求3doXxxinitdestroyServlet類實(shí)例2020/12/12020/12/1單線程模式的說(shuō)明實(shí)現(xiàn)單線程模式運(yùn)行的Servlet需要實(shí)現(xiàn)SingleThreadModel接口不同的Servlet/JSP引擎在單線程模式下采取的具體實(shí)現(xiàn)方式(排隊(duì)或多實(shí)例)有所不同一般情況下,不提倡使用單線程模式,因?yàn)檫@樣有可能降低Servlet處理請(qǐng)求的效率(在排隊(duì)模式下),且并不能完全避免多線程中變量的同步訪問問題。在Servlet2.4規(guī)范中,已經(jīng)廢棄了單線程模式2020/12/1四、在NetBeans

溫馨提示

  • 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)論