第十二章 服務(wù)器端小應(yīng)用程序Servlet_第1頁
第十二章 服務(wù)器端小應(yīng)用程序Servlet_第2頁
第十二章 服務(wù)器端小應(yīng)用程序Servlet_第3頁
第十二章 服務(wù)器端小應(yīng)用程序Servlet_第4頁
第十二章 服務(wù)器端小應(yīng)用程序Servlet_第5頁
已閱讀5頁,還剩67頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、1第十二章第十二章 服務(wù)器端小應(yīng)用程序服務(wù)器端小應(yīng)用程序Servlet計算機科學(xué)與技術(shù)系計算機科學(xué)與技術(shù)系2主要內(nèi)容主要內(nèi)容 Servlet概述概述 Java Servlet API Servlet編程編程 實例應(yīng)用實例應(yīng)用計算機科學(xué)與技術(shù)系計算機科學(xué)與技術(shù)系312.1 Servlet概述概述 常用的常用的Web服務(wù)器:服務(wù)器:IIS、Apache、Weblogic、Websphere、JBOSSDBServerWeb Server瀏覽器4l 通常的動態(tài)網(wǎng)頁技術(shù):通常的動態(tài)網(wǎng)頁技術(shù):CGI (Common GateWay Interface)API常用的有(常用的有(NSAPI,ISAPI)A

2、SP(Active Server Page)ASP.NET;PHP(Personal Home Page)Servlet;JSP(Java Server Page)l Servlet是在是在Java2平臺下取代平臺下取代 CGI 的一種技術(shù),的一種技術(shù),是一個接收請求,作出響應(yīng)的網(wǎng)絡(luò)服務(wù)是一個接收請求,作出響應(yīng)的網(wǎng)絡(luò)服務(wù)Java類。類。12.1 Servlet概述概述5計算機科學(xué)與技術(shù)系計算機科學(xué)與技術(shù)系12.1 Servlet概述概述12.1.1 Servlet簡介簡介l Servlet:服務(wù)器端小應(yīng)用程序。:服務(wù)器端小應(yīng)用程序。l Servlet:是:是J2EE平臺的組成部分。平臺的組成部

3、分。l Servlet程序:用程序:用Java Servlet API開發(fā)的一種開發(fā)的一種標準的標準的Java擴展程序,不能獨立運行,只能運行在擴展程序,不能獨立運行,只能運行在啟用了啟用了Java的的Web服務(wù)器上或應(yīng)用服務(wù)器上服務(wù)器上或應(yīng)用服務(wù)器上,并擴,并擴展了該服務(wù)器的能力。展了該服務(wù)器的能力。l Servlet:是運行在:是運行在請求和面向請求服務(wù)器請求和面向請求服務(wù)器上的模塊。上的模塊。6計算機科學(xué)與技術(shù)系計算機科學(xué)與技術(shù)系12.1 Servlet概述概述12.1.2 Servlet工作原理工作原理l 接收來自客戶端的請求,將處理結(jié)果以動態(tài)網(wǎng)頁形式接收來自客戶端的請求,將處理結(jié)果以

4、動態(tài)網(wǎng)頁形式返回客戶端瀏覽器,以瀏覽器返回客戶端瀏覽器,以瀏覽器/服務(wù)器方式工作。服務(wù)器方式工作。l Servlet通過創(chuàng)建一個通過創(chuàng)建一個框架框架來擴展服務(wù)器的能力,以來擴展服務(wù)器的能力,以提供在提供在Web上進行請求和響應(yīng)服務(wù)。上進行請求和響應(yīng)服務(wù)。l Java Servlet API 跨服務(wù)器平臺跨服務(wù)器平臺712.1 Servlet概述概述12.1.3 Servlet的基本流程的基本流程(1) 客戶端(瀏覽器)通過客戶端(瀏覽器)通過HTTP提出請求;提出請求;(2) Web服務(wù)器接收該請求并將其發(fā)給服務(wù)器接收該請求并將其發(fā)給Servlet。如。如果這個果這個Servlet尚未被加載,

5、尚未被加載,Web服務(wù)器將把它服務(wù)器將把它加載到加載到Java虛擬機并且執(zhí)行它;虛擬機并且執(zhí)行它;(3) Servlet將接收該將接收該HTTP請求,并執(zhí)行某種處理;請求,并執(zhí)行某種處理;(4) Servlet將向?qū)⑾騑eb服務(wù)器返回應(yīng)答;服務(wù)器返回應(yīng)答;(5) Web服務(wù)器將從服務(wù)器將從Servlet收到的應(yīng)答發(fā)送給客戶收到的應(yīng)答發(fā)送給客戶端。端。計算機科學(xué)與技術(shù)系計算機科學(xué)與技術(shù)系812.1 Servlet概述概述l Servlet的基本流程的基本流程計算機科學(xué)與技術(shù)系計算機科學(xué)與技術(shù)系912.1 Servlet概述概述10.1.5 Servlet的基本流程如下:的基本流程如下:(1) 客

6、戶端(瀏覽器)通過客戶端(瀏覽器)通過HTTP提出請求;提出請求;(2) Web服務(wù)器接收該請求并將其發(fā)給服務(wù)器接收該請求并將其發(fā)給Servlet。如。如果這個果這個Servlet尚未被加載,尚未被加載,Web服務(wù)器將把它加服務(wù)器將把它加載到載到Java虛擬機并且執(zhí)行它;虛擬機并且執(zhí)行它;(3) Servlet將接收該將接收該HTTP請求并接收某種處理;請求并接收某種處理;(4) Servlet將向?qū)⑾騑eb服務(wù)器返回應(yīng)答;服務(wù)器返回應(yīng)答;(5) Web服務(wù)器將從服務(wù)器將從Servlet收到的應(yīng)答發(fā)送給客戶收到的應(yīng)答發(fā)送給客戶端。端。10計算機科學(xué)與技術(shù)系計算機科學(xué)與技術(shù)系12.1 Servl

7、et概述概述12.1.4 Servlet的生命周期的生命周期l 始于將它裝入始于將它裝入Web服務(wù)器的內(nèi)存時,服務(wù)器的內(nèi)存時,l 并在終止或重新裝入并在終止或重新裝入Servlet時結(jié)束。時結(jié)束。11計算機科學(xué)與技術(shù)系計算機科學(xué)與技術(shù)系12.1 Servlet概述概述12.1.4 Servlet的生命周期的生命周期l 始于將它裝入始于將它裝入Web服務(wù)器的內(nèi)存時,并在終止或重新裝入服務(wù)器的內(nèi)存時,并在終止或重新裝入Servlet時結(jié)束。時結(jié)束。l 初始化初始化 在下列時刻裝入在下列時刻裝入Servlet: 裝入裝入Servlet后,服務(wù)器創(chuàng)建一個后,服務(wù)器創(chuàng)建一個Servlet實例并且調(diào)用實例

8、并且調(diào)用Servlet的的init(ServletConfig)方法對其進行初始化。方法對其進行初始化。 在初始化階段,在初始化階段,Servlet初始化參數(shù)被傳遞給初始化參數(shù)被傳遞給Servlet配配置對象。置對象。l 如果已配置自動裝入選項,則在啟動服務(wù)器時自動裝入。如果已配置自動裝入選項,則在啟動服務(wù)器時自動裝入。l 在服務(wù)器啟動后,客戶機在服務(wù)器啟動后,客戶機首次向首次向Servlet發(fā)出請求發(fā)出請求時。時。l 重新裝入重新裝入Servlet時。時。12計算機科學(xué)與技術(shù)系計算機科學(xué)與技術(shù)系12.1 Servlet概述概述12.1.4 Servlet的生命周期的生命周期l 始于將它裝入始

9、于將它裝入Web服務(wù)器的內(nèi)存時,并在終止或重新裝入服務(wù)器的內(nèi)存時,并在終止或重新裝入Servlet時結(jié)束。時結(jié)束。l 請求處理請求處理l 對于到達服務(wù)器的客戶機請求,服務(wù)器創(chuàng)建特定于請求的一對于到達服務(wù)器的客戶機請求,服務(wù)器創(chuàng)建特定于請求的一個個“請求請求”對象和一個對象和一個“響應(yīng)響應(yīng)”對象。對象。l 服務(wù)器調(diào)用服務(wù)器調(diào)用Servlet的的service()方法方法,該方法用于傳遞,該方法用于傳遞“請求請求”和和“響應(yīng)響應(yīng)”對象。對象。l service()方法從方法從“請求請求”對象獲得請求信息、處理該請求,對象獲得請求信息、處理該請求,并用并用“響應(yīng)響應(yīng)”對象的方法將響應(yīng)傳回客戶機。對象

10、的方法將響應(yīng)傳回客戶機。l service()方法可以調(diào)用其他方法來處理請求,例如方法可以調(diào)用其他方法來處理請求,例如doGet()、doPost()或其他的方法或其他的方法。13計算機科學(xué)與技術(shù)系計算機科學(xué)與技術(shù)系12.1 Servlet概述概述12.1.4 Servlet的生命周期的生命周期l 始于將它裝入始于將它裝入Web服務(wù)器的內(nèi)存時,并在終止或重新裝入服務(wù)器的內(nèi)存時,并在終止或重新裝入Servlet時結(jié)束。時結(jié)束。l 終止終止l 當服務(wù)器不再需要當服務(wù)器不再需要Servlet,或重新裝入,或重新裝入Servlet的新實例的新實例時,服務(wù)器會調(diào)時,服務(wù)器會調(diào)Servlet的的destr

11、oy()方法。方法。1412.1 Servlet概述概述12.1.6 Servlet的開發(fā)運行環(huán)境的開發(fā)運行環(huán)境l JVMServlet引擎引擎Web服務(wù)器服務(wù)器l Servlet引擎包括有:引擎包括有:lJSWDK,Tomcat,Resin lJRun,WebSphere,Web Logic等等等等 計算機科學(xué)與技術(shù)系計算機科學(xué)與技術(shù)系15計算機科學(xué)與技術(shù)系計算機科學(xué)與技術(shù)系12.1 Servlet概述概述12.1.6 Servlet的開發(fā)運行環(huán)境的開發(fā)運行環(huán)境ServletServlet開發(fā)環(huán)境:開發(fā)環(huán)境:利用利用TomcatTomcat作為服務(wù)器端的作為服務(wù)器端的ServletServl

12、et編譯、運行環(huán)境,同時它也編譯、運行環(huán)境,同時它也支持支持JSPJSP1 1、安裝、安裝TomcatTomcat2 2、配置環(huán)境變量:、配置環(huán)境變量:npathpath中增加中增加TomcatTomcat安裝目錄的安裝目錄的 binbin子目錄子目錄nclasspathclasspath中增加中增加TomcatTomcat安裝目錄的安裝目錄的commonlibcommonlib子目錄中的子目錄中的Servlet-api.jarServlet-api.jar3 3、啟動、啟動TomcatTomcat1612.1 Servlet工作原理工作原理12.1.7 編寫運行編寫運行Servlet的一般步

13、驟的一般步驟l 啟動支持啟動支持Servlet的服務(wù)器程序。的服務(wù)器程序。l 編寫編寫Servlet,編譯,編譯Servlet。l 把生成的把生成的class文件存放到文件存放到Tomcat指定目錄下。指定目錄下。WEB-INFclassesl 客戶利用瀏覽器通過客戶利用瀏覽器通過Servlet的的URL訪問該訪問該Servlet. http:/hostname:8080/HelloWorldServletl web.xml文件文件計算機科學(xué)與技術(shù)系計算機科學(xué)與技術(shù)系17import java.io.IOException;import java.io.PrintWriter;import j

14、avax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class test extends HttpServletprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,

15、IOExceptionres.setContentType(text/html;charset=utf-8); PrintWriter out=response.getWriter();out.println( hello world! );out.flush();計算機科學(xué)與技術(shù)系計算機科學(xué)與技術(shù)系18計算機科學(xué)與技術(shù)系計算機科學(xué)與技術(shù)系12.2 Java Servlet API12.2.1 javax.servlet包包l Servlet接口接口l ServletConfig接口接口l ServletContext接口接口l ServletRequest接口接口l ServletRespo

16、nse接口接口l GenericServlet類類l ServletException異常異常19計算機科學(xué)與技術(shù)系計算機科學(xué)與技術(shù)系12.2 Java Servlet API12.2.2 javax.servlet.http包包l HttpServletRequest接口接口l HttpServletResponse接口接口l HttpSession接口接口l HttpSessionBindingListener接口接口l HttpSessionContextl HttpServlet類類l HttpSessionBindingEvent類類l Cookie類類2010.1 Servlet概

17、述概述10.1.4 Java Servlet包包2112.2 Java Servlet API12.2.3 javax.servlet.Servlet接口接口l 規(guī)定了每個規(guī)定了每個Servlet所必須實現(xiàn)的方法。所必須實現(xiàn)的方法。計算機科學(xué)與技術(shù)系計算機科學(xué)與技術(shù)系l void init(ServletConfig config) throws ServletException l void service(ServletRequest req, ServiceResponse res) throws ServletException, IOException l void destroy(

18、) l String getServletInfo() l ServletConfig getServletConfig() 22計算機科學(xué)與技術(shù)系計算機科學(xué)與技術(shù)系1. init()方法方法l 用于初始化,在用于初始化,在Servlet啟動時調(diào)用。啟動時調(diào)用。l 可以配置服務(wù)器,以在啟動服務(wù)器或客戶機首次訪可以配置服務(wù)器,以在啟動服務(wù)器或客戶機首次訪問問Servlet時時裝入裝入Servlet。l ServletException異常異常12.2 Java Servlet API23計算機科學(xué)與技術(shù)系計算機科學(xué)與技術(shù)系2. service()方法方法l 可以被可以被同時、多次地呼叫同時、多次

19、地呼叫。l 每當一個客戶請求一個每當一個客戶請求一個Servlet 對象,該對象的對象,該對象的service() 方法就要被調(diào)用,而且傳遞給這個方法一個方法就要被調(diào)用,而且傳遞給這個方法一個“請求請求”(ServletRequest)對象和一個對象和一個“響響應(yīng)應(yīng)”(ServletResponse)對象作為參數(shù)。對象作為參數(shù)。l Servlet的響應(yīng)可以是下列幾種類型:的響應(yīng)可以是下列幾種類型:12.2 Java Servlet APIl一個輸出流,瀏覽器根據(jù)它的內(nèi)容類型一個輸出流,瀏覽器根據(jù)它的內(nèi)容類型(如如text/HTML)進行解釋。進行解釋。 l一個一個HTTP錯誤響應(yīng),重定向到另一

20、個錯誤響應(yīng),重定向到另一個URL、servlet、JSP。24計算機科學(xué)與技術(shù)系計算機科學(xué)與技術(shù)系3. destroy()方法方法l 僅執(zhí)行一次僅執(zhí)行一次,即在服務(wù)器停止且卸裝,即在服務(wù)器停止且卸裝Servlet 時執(zhí)行該時執(zhí)行該方法。方法。l 一個一個Servlet在運行在運行service()方法時可能會產(chǎn)生其他方法時可能會產(chǎn)生其他的線程,因此,請確認在調(diào)用的線程,因此,請確認在調(diào)用destroy()方法時,這些方法時,這些線程已終止或完成。線程已終止或完成。l 如果你需要在結(jié)束時,關(guān)閉一些資源,你也可以重載這如果你需要在結(jié)束時,關(guān)閉一些資源,你也可以重載這個方法。個方法。12.2 Jav

21、a Servlet API2512.2 Java Servlet API12.2.3 javax.servlet.Servlet接口接口計算機科學(xué)與技術(shù)系計算機科學(xué)與技術(shù)系l 當某個當某個Servlet第一次被請求時,服務(wù)器(第一次被請求時,服務(wù)器(Servlet容容器)會生成該器)會生成該Servlet并調(diào)用它的并調(diào)用它的init()方法,再調(diào)用方法,再調(diào)用其其service()方法處理請求。處理結(jié)束后該方法處理請求。處理結(jié)束后該Servlet會會常駐于容器中,下一個請求則不再重新生成常駐于容器中,下一個請求則不再重新生成Servlet,而是直接調(diào)用常駐的而是直接調(diào)用常駐的Servlet對象

22、的對象的service()方法。方法。服務(wù)器停止時,會調(diào)用該服務(wù)器停止時,會調(diào)用該Servlet的的destroy()方法。方法。 l 在在Servlet的一個生命周期中,的一個生命周期中,init()和和destroy()僅僅會被調(diào)用一次,而會被調(diào)用一次,而service()則會被調(diào)用多次。則會被調(diào)用多次。 2612.2 Java Servlet API12.2.4 ServletConfig接口接口l 初始化參數(shù),是針對當前初始化參數(shù),是針對當前Servlet的設(shè)置。的設(shè)置。l 提供一些獲取提供一些獲取Servlet的配置信息的方法。的配置信息的方法。l 配置信息包括初始化參數(shù)和一個配置信

23、息包括初始化參數(shù)和一個ServletContext對象。對象。l 初始化參數(shù)是一組初始化參數(shù)是一組“名稱名稱/值值”對。對。計算機科學(xué)與技術(shù)系計算機科學(xué)與技術(shù)系public ServletContext getServletContext() Servlet.getServletConfig(); public String getInitParameter(String name) 2712.2 Java Servlet API12.2.5 ServletContext接口接口l 上下文參數(shù),是針對整個項目的全局設(shè)置上下文參數(shù),是針對整個項目的全局設(shè)置l 提供一些訪問提供一些訪問Servle

24、t運行環(huán)境信息的方法。運行環(huán)境信息的方法。l ServletContext接口和接口和ServletConfig接口的設(shè)接口的設(shè)置內(nèi)容都寫在置內(nèi)容都寫在web.xml中。如數(shù)據(jù)庫地址、用戶名中。如數(shù)據(jù)庫地址、用戶名密碼等。密碼等。l 兩者的參數(shù)值在兩者的參數(shù)值在Servlet的生命周期中是不變的。的生命周期中是不變的。 計算機科學(xué)與技術(shù)系計算機科學(xué)與技術(shù)系public String getInitParameter(String name) 2812.2 Java Servlet API12.2.6 HttpServlet類類l javax.servlet.http.HttpServlet,抽

25、象類,抽象類計算機科學(xué)與技術(shù)系計算機科學(xué)與技術(shù)系l void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException /當瀏覽器用GET方式訪問時,該方法被調(diào)用。 l void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException /當瀏覽器用POST方式訪問時,該方法被調(diào)用。 2912.2 Java Servlet API12.2.6

26、HttpServlet類類l 其他的其他的HTTP請求也都有相應(yīng)的方法:請求也都有相應(yīng)的方法:l 一般不需要重寫一般不需要重寫service()方法。方法。Service方法將按照每一個方法將按照每一個標準的標準的HTTP請求的類型進行分發(fā)處理,調(diào)用相應(yīng)的請求的類型進行分發(fā)處理,調(diào)用相應(yīng)的do方法。方法。計算機科學(xué)與技術(shù)系計算機科學(xué)與技術(shù)系3010.3.1 編寫一個基本編寫一個基本HTTP Servlet的步驟:的步驟:12.2 Java Servlet APIdoGet()、doPost()、service()的區(qū)別的區(qū)別 3112.2 Java Servlet API12.2.7 Http

27、ServletRequest接口接口l javax.servlet.http.HttpServletRequest計算機科學(xué)與技術(shù)系計算機科學(xué)與技術(shù)系l 用于向用于向Servlet提供有關(guān)客戶請求的信息。提供有關(guān)客戶請求的信息。l 如由客戶端傳送的參數(shù)名稱,客戶端正在使用的協(xié)議,如由客戶端傳送的參數(shù)名稱,客戶端正在使用的協(xié)議,產(chǎn)生請求并且接收請求的服務(wù)器遠端主機名。產(chǎn)生請求并且接收請求的服務(wù)器遠端主機名。l public java.io.BufferedReader getReader() throws java.io.IOExceptionl public ServletInputStrea

28、m getInputStream() throws java.io.IOException 3212.2 Java Servlet API12.2.7 HttpServletRequest接口接口l 主要方法主要方法:計算機科學(xué)與技術(shù)系計算機科學(xué)與技術(shù)系l 用于向用于向Servlet提供有關(guān)客戶請求的信息。提供有關(guān)客戶請求的信息。l 如由客戶端傳送的參數(shù)名稱,客戶端正在使用的協(xié)議,如由客戶端傳送的參數(shù)名稱,客戶端正在使用的協(xié)議,產(chǎn)生請求并且接收請求的服務(wù)器遠端主機名。產(chǎn)生請求并且接收請求的服務(wù)器遠端主機名。lgetRequestURI()lgetProtocol()lgetAttribute(

29、String name)lgetAttributeNames()lgetRemoteAddr()3312.2 Java Servlet API12.2.8 HttpServletResponse接口接口l javax.servlet.http.HttpServletResponse計算機科學(xué)與技術(shù)系計算機科學(xué)與技術(shù)系l 定義一個定義一個HTTP Servlet響應(yīng),響應(yīng),HTTP Servlet指的指的是能處理是能處理HTTP協(xié)議規(guī)格的協(xié)議規(guī)格的Servlet,Web服務(wù)器必服務(wù)器必須用此規(guī)格來響應(yīng)客戶的請求。須用此規(guī)格來響應(yīng)客戶的請求。l public java.io.PrintWriter

30、 getWriter() throws java.io.IOException l public ServletOutputStream getOutputStream() throws java.io.IOException 3412.2 Java Servlet API12.2.8 HttpServletResponse接口接口l 主要方法:主要方法:計算機科學(xué)與技術(shù)系計算機科學(xué)與技術(shù)系l 定義一個定義一個HTTP Servlet響應(yīng),響應(yīng),HTTP Servlet指的指的是能處理是能處理HTTP協(xié)議規(guī)格的協(xié)議規(guī)格的Servlet,Web服務(wù)器必服務(wù)器必須用此規(guī)格來響應(yīng)客戶的請求。須用此規(guī)

31、格來響應(yīng)客戶的請求。l public java.io.PrintWriter getWriter() throws java.io.IOException l public ServletOutputStream getOutputStream() throws java.io.IOException lvoid setBufferSize(int nBytes)lint getBufferSize()lisCommitted()lreset()lsetContentType(java.lang.String type)lsetContentLength(int len)3512.3.1 如何

32、處理請求及響應(yīng)如何處理請求及響應(yīng)l Servlet實現(xiàn)中,正確處理請求并返回響應(yīng)的過程實現(xiàn)中,正確處理請求并返回響應(yīng)的過程:l 下面通過一些例子將描述如何從請求(下面通過一些例子將描述如何從請求(request)中)中獲得信息和產(chǎn)生獲得信息和產(chǎn)生HTTP響應(yīng)(響應(yīng)(response)。)。 12.3 Servlet編程編程l首先填寫響應(yīng)(首先填寫響應(yīng)(response)的頭信息;)的頭信息;l然后從響應(yīng)對象(然后從響應(yīng)對象(response)中得到輸出流;)中得到輸出流;l向輸出流中寫入內(nèi)容信息。向輸出流中寫入內(nèi)容信息。l最后關(guān)閉輸出流。最后關(guān)閉輸出流。注:響應(yīng)(注:響應(yīng)(response)頭

33、信息必須最先設(shè)置。)頭信息必須最先設(shè)置。計算機科學(xué)與技術(shù)系計算機科學(xué)與技術(shù)系3612.3.2獲取客戶請求信息獲取客戶請求信息l 例:從例:從HttpServletRequest得到并打印客戶端信得到并打印客戶端信息。息。 RequestInfo.java12.3 Servlet編程編程計算機科學(xué)與技術(shù)系計算機科學(xué)與技術(shù)系3710.3.2 如何處理如何處理HTTP POST/GET請求:請求:/RequestInfo.javaimport java.io.*;import javax.servlet.*;import javax.servlet.http.*;public class Reque

34、stInfo extends HttpServlet public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException response.setContentType(“text/html”); /先設(shè)置先設(shè)置Header,在這里只設(shè)置,在這里只設(shè)置ContentType一項一項 PrintWriter out = response.getWriter(); /得到用于返回響應(yīng)信息的輸出流得到用于返回響應(yīng)信息的輸出流3810.3.2 如

35、何處理如何處理HTTP POST/GET請求:請求:/下面打印相關(guān)的下面打印相關(guān)的HTML out.println(); out.println(Request Information Example); out.println(); out.println(); out.println(Request Information Example); out.println(“Request URI: ”+ request.getRequestURI() +“”); /打印請求的路徑打印請求的路徑 out.println(“Protocol: ” + request.getProtocol() +

36、“”); /打印協(xié)議名稱打印協(xié)議名稱 out.println(“PathInfo: ” + request.getPathInfo() +“”); /打印額外的路徑信息打印額外的路徑信息 out.println(“Remote Address: ”+request.getRemoteAddr() ); /打印客戶機的地址,如果沒有則打印打印客戶機的地址,如果沒有則打印IP地地 out.println(); out.println(); out.close(); /關(guān)閉關(guān)閉Writer 3912.3.3 Cookie應(yīng)用編程應(yīng)用編程l 上下文無關(guān)的協(xié)議上下文無關(guān)的協(xié)議(或無狀態(tài)協(xié)議或無狀態(tài)協(xié)議)

37、:客戶端向服務(wù)器發(fā)送客戶端向服務(wù)器發(fā)送HTTP請求,服務(wù)器將根據(jù)客戶的請求返回相應(yīng)的響應(yīng)信請求,服務(wù)器將根據(jù)客戶的請求返回相應(yīng)的響應(yīng)信息,這樣客戶和服務(wù)器完成一次對話。如果要接著對話,息,這樣客戶和服務(wù)器完成一次對話。如果要接著對話,一切重新開始。一切重新開始。l Cookie技術(shù)技術(shù)把上次對話所需要的狀態(tài)保存到客戶一個固定把上次對話所需要的狀態(tài)保存到客戶一個固定的文件中(的文件中(Cookie)。當新一輪會話時,客戶端向服務(wù)器)。當新一輪會話時,客戶端向服務(wù)器發(fā)送的發(fā)送的HTTP請求消息首部包含了請求消息首部包含了Cookie文件中的內(nèi)容文件中的內(nèi)容。l 一一個個Cookie:是是web服務(wù)

38、器存放在用戶硬盤的一段文本,服務(wù)器存放在用戶硬盤的一段文本,允許一個允許一個web站點在用戶的機器存放一些文本的信息,并站點在用戶的機器存放一些文本的信息,并可以在以后重新獲取它。這個基于文本的信息存儲著一些可以在以后重新獲取它。這個基于文本的信息存儲著一些“鍵值鍵值”對。對。 12.3 Servlet編程編程計算機科學(xué)與技術(shù)系計算機科學(xué)與技術(shù)系4012.3.3 Cookie應(yīng)用編程應(yīng)用編程l 功能:幫助功能:幫助Web站點保存有關(guān)訪問者的信息。站點保存有關(guān)訪問者的信息。l 應(yīng)用:電子商務(wù)網(wǎng)站、民意測驗網(wǎng)站、要求用戶登錄的網(wǎng)應(yīng)用:電子商務(wù)網(wǎng)站、民意測驗網(wǎng)站、要求用戶登錄的網(wǎng)站等。站等。l 為了

39、保證安全,多數(shù)瀏覽器可設(shè)置是否使用為了保證安全,多數(shù)瀏覽器可設(shè)置是否使用Cookie。所。所以為了啟用以為了啟用Cookie程序,首先要程序,首先要設(shè)置客戶瀏覽器設(shè)置客戶瀏覽器 例:例:IE6.0:工具工具-internet選項選項-隱私隱私12.3 Servlet編程編程計算機科學(xué)與技術(shù)系計算機科學(xué)與技術(shù)系4112.3.4 Cookie應(yīng)用編程應(yīng)用編程l 工作原理:工作原理:12.3 Servlet編程編程計算機科學(xué)與技術(shù)系計算機科學(xué)與技術(shù)系4212.3.3 Cookie應(yīng)用編程應(yīng)用編程l javax.servlet.http.Cookie類類12.3 Servlet編程編程l 構(gòu)造方法:構(gòu)

40、造方法:Cookie(String name, String value);l 相關(guān)方法:相關(guān)方法:void response.addCookie(Cookie c);Cookie request.getCookies();4312.3.3 Cookie應(yīng)用編程應(yīng)用編程l 常用方法:常用方法:l 例例 1:Cookie1.java:向客戶端寫入兩個向客戶端寫入兩個 cookie 例例2:Cookie2.java:讀取客戶請求消息中的讀取客戶請求消息中的cookie內(nèi)容,并重新設(shè)置內(nèi)容,并重新設(shè)置cookie1的值。的值。12.3 Servlet編程編程void setMaxAge(int ti

41、meage); int getMaxAge();void setValue(String newValue);String getName(); /返回該返回該Cookie的名字的名字String getValue(); /返回該返回該Cookie的值的值44package ch12;import java.io.*;import javax.servlet. *;import javax.servlet.http.*;public class Cookie1 extends HttpServlet public void service (HttpServletRequest request

42、,HttpServletResponse response) throws ServletException ,IOException Cookie c1=new Cookie (Cookie1,javacat); c1.setMaxAge(60); /寫入寫入theCookie到客戶端規(guī)定的文件中到客戶端規(guī)定的文件中 response.addCookie (c1); Cookie c2=new Cookie (Cookie2,redkey); c2.setMaxAge(100*60); /寫入寫入theCookie到客戶端規(guī)定的文件中到客戶端規(guī)定的文件中 response.addCookie

43、 (c); PrintWriter out=response.getWriter(); out.print(the first cookie); out.print(+we have written the cookies into the IE); out.print (); out.close (); 45package ch12;import java.io.*;import javax.servlet. *;import javax.servlet.http.*;public class Cookie2 extends HttpServlet public void service (

44、HttpServletRequest request,HttpServletResponse response) throws ServletException ,IOException Cookie c; Cookie x=request.getCookies(); response.setContentType(text/html); PrintWriter out=response.getWriter(); for(int i=0;ix.length;i+) String v=xi.getValue(); String n=xi.getName(); out.println(x.leng

45、th=+x.length);out.println(cookiename+n+cookievalue+v+Age=+xi.getMaxAge()+); if(n.equals(Cookie1) v+=-fengbo; c=new Cookie(Cookie1,v); response.addCookie(c); out.close (); 4612.3.4 Session應(yīng)用編程應(yīng)用編程12.3 Servlet編程編程l javax.servlet.http.HttpSession接口接口l 實現(xiàn)會話跟蹤。實現(xiàn)會話跟蹤。l HttpSession實例由實例由Servlet/JSP容器來維護,容

46、器來維護,針對每個連接的用戶會生成唯一針對每個連接的用戶會生成唯一HttpSession實例,實例,此此HttpSession實例代表相應(yīng)的用戶,可在同一個實例代表相應(yīng)的用戶,可在同一個Web應(yīng)用中被所有應(yīng)用中被所有Servlet訪問。訪問。計算機科學(xué)與技術(shù)系計算機科學(xué)與技術(shù)系4712.3.4 Session應(yīng)用編程應(yīng)用編程12.3 Servlet編程編程l 相關(guān)方法:相關(guān)方法:HttpSession getSession(boolean create);HttpSession getSession();/*HttpServletRequest接口中定義的接口中定義的getSession方法方

47、法 *該方法可獲得當前用戶的正在使用的會話,此會話類型為該方法可獲得當前用戶的正在使用的會話,此會話類型為HttpSession類。類。 *如果當前用戶沒有對應(yīng)的如果當前用戶沒有對應(yīng)的HttpSession對象,當對象,當create參數(shù)為參數(shù)為true時,該方法會自動創(chuàng)建一個新的時,該方法會自動創(chuàng)建一個新的HttpSesion對對象。象。*/計算機科學(xué)與技術(shù)系計算機科學(xué)與技術(shù)系48計算機科學(xué)與技術(shù)系計算機科學(xué)與技術(shù)系12.3.4 Session應(yīng)用編程應(yīng)用編程12.3 Servlet編程編程l 相關(guān)方法:相關(guān)方法:lvoid setAttribute(String key, Object v

48、alue);lObject getAttribute(String key);lvoid removeAttribute(String key);lvoid invalidate();lString getID();lboolean isNew(); lEnumeration getAttributeNames() lint getMaxInactiveInterval()lvoid setMaxInactiveInterval(int interval) 4912.3.4 Session應(yīng)用編程應(yīng)用編程l Session的應(yīng)用購物車的應(yīng)用購物車 例如把購物車作為屬性存儲在例如把購物車作為屬性

49、存儲在session中,在其他中,在其他Servlet中可以通過中可以通過session再獲得購物車。付款完成,再獲得購物車。付款完成,使使session無效。無效。12.3 Servlet編程編程/得到用戶得到用戶session和購物籃和購物籃HttpSession session = request.getSession(true);ShoppingCart cart = (ShoppingCart)session.getAttribute(cart); /付款完成,使付款完成,使session無效無效session.invalidate();使得會話被終止,釋放其中的任意對象50計算機科

50、學(xué)與技術(shù)系計算機科學(xué)與技術(shù)系12.4.1 監(jiān)聽監(jiān)聽Servletl Servlet按請求的處理方式不同分為:按請求的處理方式不同分為: 標準標準Servlet、過濾、過濾Servlet、監(jiān)聽、監(jiān)聽Servlet。l 監(jiān)聽監(jiān)聽Servlet的主要作用:監(jiān)聽的主要作用:監(jiān)聽Servlet生命周期中生命周期中產(chǎn)生的事件并對其作出反應(yīng)??梢员O(jiān)聽客戶端的請求、產(chǎn)生的事件并對其作出反應(yīng)。可以監(jiān)聽客戶端的請求、服務(wù)端的操作等。服務(wù)端的操作等。l 按用途不同,選擇實現(xiàn)下列監(jiān)聽接口之一:按用途不同,選擇實現(xiàn)下列監(jiān)聽接口之一:12.4 Servlet應(yīng)用實例應(yīng)用實例51計算機科學(xué)與技術(shù)系計算機科學(xué)與技術(shù)系12.4

51、.1 監(jiān)聽監(jiān)聽Servletl 常用的監(jiān)聽接口有以下幾個(按用途不同):常用的監(jiān)聽接口有以下幾個(按用途不同):12.4 Servlet應(yīng)用實例應(yīng)用實例lServletContextListenerlServletContextAttributeListenerlHttpSessionListenerlHttpSessionAttributeListenerlServletRequestListener lServletRequestAttributeListener 52計算機科學(xué)與技術(shù)系計算機科學(xué)與技術(shù)系12.4.1 監(jiān)聽監(jiān)聽Servlet12.4 Servlet應(yīng)用實例應(yīng)用實例1. Se

52、rvletContextListenerl監(jiān)聽監(jiān)聽ServletContext的創(chuàng)建和銷毀。的創(chuàng)建和銷毀。l當創(chuàng)建當創(chuàng)建ServletContext時,激發(fā)時,激發(fā)l當銷毀當銷毀ServletContext時,激發(fā)時,激發(fā)contextInitialized(ServletContextEvent sce);contextDestroyed(ServletContextEvent sce);5312.4.1 監(jiān)聽監(jiān)聽Servlet12.4 Servlet應(yīng)用實例應(yīng)用實例2. HttpSessionListenerl監(jiān)聽監(jiān)聽HttpSession的操作。的操作。l當創(chuàng)建一個當創(chuàng)建一個Sessio

53、n時,激發(fā)時,激發(fā)sessionCreated(HttpSessionEvent se);l當銷毀一個當銷毀一個Session時,激發(fā)時,激發(fā)sessionDestroyed(HttpSessionEvent se);計算機科學(xué)與技術(shù)系計算機科學(xué)與技術(shù)系5412.4.1 監(jiān)聽監(jiān)聽Servlet12.4 Servlet應(yīng)用實例應(yīng)用實例3. HttpSessionAttributeListenerl監(jiān)聽監(jiān)聽HttpSession中的屬性的操作。中的屬性的操作。l當在當在Session增加一個屬性時,激發(fā)方法增加一個屬性時,激發(fā)方法l當在當在Session刪除一個屬性時,激發(fā)方法刪除一個屬性時,激發(fā)

54、方法l當在當在Session屬性被重新設(shè)置時,激發(fā)方法屬性被重新設(shè)置時,激發(fā)方法attributeAdded(HttpSessionBindingEvent se);attributeRemoved(HttpSessionBindingEvent se);attributeReplaced(HttpSessionBindingEvent se);計算機科學(xué)與技術(shù)系計算機科學(xué)與技術(shù)系55計算機科學(xué)與技術(shù)系計算機科學(xué)與技術(shù)系12.4.1 監(jiān)聽監(jiān)聽Servletl 通過監(jiān)聽器,可以自動激發(fā)一些操作,比如通過監(jiān)聽器,可以自動激發(fā)一些操作,比如監(jiān)聽在線監(jiān)聽在線的用戶的數(shù)量的用戶的數(shù)量。當增加一個。當增加

55、一個HttpSession時,就激時,就激發(fā)發(fā)sessionCreated(HttpSessionEvent se)方方法,這樣就可以給在線人數(shù)加法,這樣就可以給在線人數(shù)加1。l 示例:示例: SessionListener.java Servletl.java12.4 Servlet應(yīng)用實例應(yīng)用實例56package count;import java.util.*;import javax.servlet.http.*;public class SessionListener implements HttpSessionListener /會話統(tǒng)計變量會話統(tǒng)計變量count protect

56、ed static int count = 0; /session創(chuàng)建時觸發(fā)該方法。創(chuàng)建時觸發(fā)該方法。 public void sessionCreated(HttpSessionEvent event) count+; /session過期或銷毀觸發(fā)該方法過期或銷毀觸發(fā)該方法 public void sessionDestroyed(HttpSessionEvent event) if(count0) count-;/返回在線人數(shù)返回在線人數(shù)public static int getCount() return count;57package count;import javax.servl

57、et.*;import javax.servlet.http.*;import java.io.*;import java.util.*;public class Servletl extends HttpServlet static final private String CONTENT_TYPE = text/html; charset=GBK; /處理處理 HTTP Get 請求請求public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IO

58、Exception response.setContentType(CONTENT_TYPE); HttpSession session=request.getSession(true); PrintWriter out = response.getWriter(); out.println(); out.println(Servlet1); out.println(); out.println(在線人數(shù)在線人數(shù)+ SessionListener.getCount()+); out.println(); /撤消撤消Servlet線程,回收資源線程,回收資源 public void destro

59、y() 58計算機科學(xué)與技術(shù)系計算機科學(xué)與技術(shù)系12.4.2 過濾過濾Servletl 必須實現(xiàn)必須實現(xiàn) javax.servlet.Filter接口接口l 是截獲并處理客戶的請求以及服務(wù)器的響應(yīng)是截獲并處理客戶的請求以及服務(wù)器的響應(yīng) 。12.4 Servlet應(yīng)用實例應(yīng)用實例5912.4.2 過濾過濾Servletl javax.servlet.Filter接口接口l 三個方法:三個方法:12.4 Servlet應(yīng)用實例應(yīng)用實例計算機科學(xué)與技術(shù)系計算機科學(xué)與技術(shù)系lvoid doFilter(ServletRequest, ServletResponse, FilterChain) thro

60、ws IOExceptionlvoid init(FilterConfig)lvoid destroy()60計算機科學(xué)與技術(shù)系計算機科學(xué)與技術(shù)系12.4.2 過濾過濾Servletl FilterChain,一個應(yīng)用程序內(nèi)的,一個應(yīng)用程序內(nèi)的Filter可以有多個,它可以有多個,它們像鏈子一樣串在一起,其中的某個們像鏈子一樣串在一起,其中的某個Filter執(zhí)行之后,可執(zhí)行之后,可以調(diào)用以調(diào)用chain.doFilter(request, response)將執(zhí)行將執(zhí)行權(quán)轉(zhuǎn)給下一個權(quán)轉(zhuǎn)給下一個Filter,直到所有的,直到所有的Filter都執(zhí)行完畢。都執(zhí)行完畢。l 舉個例子,某個網(wǎng)站里有提交

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論