基礎課程體系java1_第1頁
基礎課程體系java1_第2頁
基礎課程體系java1_第3頁
基礎課程體系java1_第4頁
基礎課程體系java1_第5頁
已閱讀5頁,還剩45頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

2020/12/1第三章Servlet的編寫及調用

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

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

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

溫馨提示

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

評論

0/150

提交評論