




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、清華大學出版社清華大學出版社 JavaEE基礎教程基礎教程 第第15 15 章章 ServletServlet的會話跟蹤技術的會話跟蹤技術15.1 session與會話與會話15.2 Servlet實現會話跟蹤實現會話跟蹤 15.3 編程示例:網上書店編程示例:網上書店.2 22022-3-615.1 session與會話與會話返回nHTTP是一種無狀態協議,也就是說,當一個客戶訪問是一種無狀態協議,也就是說,當一個客戶訪問服務器時,服務器不會保留客戶端的任何信息,因此,服務器時,服務器不會保留客戶端的任何信息,因此,Web服務器會將同一個客戶的每次訪問都當作一次新的服務器會將同一個客戶的每次
2、訪問都當作一次新的訪問。但有時需要服務器保留客戶端的信息,以識別同訪問。但有時需要服務器保留客戶端的信息,以識別同一個客戶的多次訪問,那又如何實現呢?一個客戶的多次訪問,那又如何實現呢?n為了跟蹤用戶的操作狀態,為了跟蹤用戶的操作狀態,Servlet容器使用了一個稱容器使用了一個稱為為HttpSession的對象實現這個功能,稱為會話機制。的對象實現這個功能,稱為會話機制。n會話(會話(Session)是指在一段時間內,一個客戶與)是指在一段時間內,一個客戶與Web服務器的一系列交互過程,在一次會話過程中,客服務器的一系列交互過程,在一次會話過程中,客戶可能多次訪問同一個頁面,也可能訪問多個不
3、同的服戶可能多次訪問同一個頁面,也可能訪問多個不同的服務器資源。務器資源。 .3 32022-3-6vServlet容器通過HttpSession對象實現會話管理,主要有兩種實現方式,一種是用Cookie,另一種是用URL重定向。當一個會話開始時,Servlet容器為每一個客戶創建一個HttpSession對象,在HttpSession對象中可以存放客戶狀態信息(如購物車)。在服務器中為了識別同一個Session對象,Servlet容器為每個子Session分配一個唯一標識,稱為SessionID。在客戶端向服務器發送請求時,Servlet容器將生成的SessionID保存在客戶端的Cooki
4、e中,如果客戶端關閉了Cookie,則可以通過URL重定向保存這個SessionID。15.1 session與會話與會話.4 42022-3-6vSession的生命周期是由Servlet容器來管理的,Servlet容器可通過HttpSession的setMaxInactiveInterval()方法設置Session的最大生存時間,也可以通過HttpSession的invalidate()方法結束一個會話。15.1 session與會話與會話.5 52022-3-615.1 session與會話與會話方法功能描述String getId()返回SessionIDlong getGreati
5、onTime()返回session被創建的時間Long getLastAccessedTime()返回session最后被客戶發送的時間void setMaxInactiveInterval(int interval)設置session的有效生存時間Int getMaxInactiveInterval()返回超時時間間隔(秒),負值表示session永遠不會超時。Object getAttribute(String name)根據name返回存儲在session中的Java對象void setAttribute(String name,Object value)以鍵-值對的方式將變量保存在se
6、ssion中void invalidate()使session對象失效,并釋放所有與這個session綁定的對象.6 62022-3-6v 會話的創建v 會話的使用v 結束HttpSession對象生命周期15.2 Servlet實現會話跟蹤實現會話跟蹤 返回.7 72022-3-6 在Servlet中可以通過request對象獲得HttpSession對象,具體方法如下: HttpSession session=request.getSession(Boolean value); HrrpSession session=request.getSession();會話的創建.8 82022-3
7、-6 第一種方法中,布爾值為ture時,表示如果存在與當前請求關聯的會話,就返回該會話,如果沒有關聯的會話,則創建一個新的會話。布爾值為false時,表示如果存在與當前請求關聯的會話,就返回該會話,如果沒有關聯的會話返回null,并且不創建新的會話。第二種方法的作用與第一種方法的布爾值為ture時相同。會話的創建.9 92022-3-6v在上一節我們介紹了HttpSession接口的方法,其中有兩個方法setAttribute()和getAttribute()。這兩個方法可以實現在整個會話過程中數據的正確傳輸。vsetAttribute(String name,Object value)是把一
8、個值對象value保存在HttpSession對象中,并為其指定引用名稱為name。在會話過程中,需要使用數據時可以使用getAttribute(String name)方法,將數據取出來,取出來的這個值是一個Object類型的對象,我們必須對其進行數據類型轉換,而且要與存入時的類型保持一致。會話的使用.1 10 02022-3-6v可以通過以下三方法中的任何一種結束HttpSession對象生命周期: 客戶端關閉瀏覽器時,表示這一次會話結束,HttpSession對象生命周期結束; 調用HttpSession的invalidate()方法,可結束HttpSession對象的生命周期; 兩次訪
9、問服務器的時間間隔大于session定義的最大非活動時間間隔時,也會結束session。結束HttpSession對象生命周期.1 11 12022-3-6v15.3.1 顧客瀏覽圖書顧客瀏覽圖書v15.3.2 顯示圖書詳細信息顯示圖書詳細信息v15.3.3 將圖書添加到購物車并顯示購物車將圖書添加到購物車并顯示購物車信息信息v15.3.4 添加訂單信息并結賬添加訂單信息并結賬15.3 編程示例:網上書店編程示例:網上書店返回.1 12 22022-3-615.3.1 顧客瀏覽圖書顧客瀏覽圖書v顧客進入網站首先看到的是圖書的列表,顯示的主要內容是圖書的ISBN號、書名、作者、出版社。這和前面的
10、listBook.jsp的頁面是一樣的,只是ISBN號的鏈接顯示圖書的詳細信息。v顧客瀏覽圖書信息頁面程序清單:ch15viewBook.jsp.1 13 32022-3-6v以上代碼中用到了JSP標準動作userBean,在當前頁面上創建了“TitleDaoImpl”類的一個實例名字為“dao”。在頁面中,單擊某一本書的“isbn”號會將鏈接提交給名字為“toViewTitle”的一個Servlet,在這個鏈接的后面通過URL重定向功能將這本書的isbn號一同提交給“toViewTitle”。 15.3.1 顧客瀏覽圖書顧客瀏覽圖書.1 14 42022-3-615.3.2 顯示圖書詳細信息
11、顯示圖書詳細信息v在上圖中單擊某一本書的isbn號可查看書的詳細信息。這個功能是由一個Servlet和一個JSP頁面一同完成的。對應于isbn號的鏈接的是一個Servlet,其對應的是ToViewTitle類 .1 15 52022-3-6v以上代碼中根據傳遞過來的isbn號,調用TitleDaoImpl()類的findByIsbn()方法在數據庫中查找,返回一個Titles類的實例,并將此對象保存在了會話對象session中。然后轉發到ch15/detail.jsp頁面顯示圖書詳細信息。在detail.jsp頁面中通過JSP腳本從session中取出相關圖書信息,并用JSP表達式將圖書信息顯
12、示出來,如圖下所示。15.3.2 顯示圖書詳細信息顯示圖書詳細信息.1 16 62022-3-615.3.2 顯示圖書詳細信息顯示圖書詳細信息.1 17 72022-3-615.3.3 將圖書添加到購物車并顯示購物車信息將圖書添加到購物車并顯示購物車信息v在圖15-3中當單擊“放入購物車”按鈕時,提交給處理購物車的Servlet類AddTitlesToCart。v程序清單:AddTitlesToCart.java上面的代碼中用到了會話技術和Java集合類。程序中request.getSession(false)獲取已經存在的會話,如果不存在則將頁面轉到瀏覽圖書頁面。如果存在會話,則從sessi
13、on中取出購物車,也即是一個HashMap集合類對象cart。如果是第一次添加商品,則購物車為空,此時創建一個HashMap對象cart,并將其存入session中,保存購物車的命令為session.setAttribute(cart, cart)。 .1 18 82022-3-6v在添加一種圖書之前,要在購物車cart中查找這本書是否已經添加過,這實際上是在cart中查找是否存在與要存入的書的isbn號有相同鍵值的對象,(CartItem) cart.get(titles.getIsbn()語句完成此功能。其中CartItem是對圖書的進一步封裝。v程序清單:CartItem.java15.
14、3.3 將圖書添加到購物車并顯示購物車信息將圖書添加到購物車并顯示購物車信息.1 19 92022-3-6v在Titles類中存放了圖書的相關信息,但沒有表示圖書數量的屬性,為此構建這個CartItem類,它不但可以存放圖書的相關信息,同時還可以存放某種圖書的數量。在購物車中(HashMap對象cart)的鍵必須是唯一的,圖書的isbn號是不會有重復的,可作為這個Map的鍵,購物車中的值就是每種書對應的一個CartItem對象。將圖書添加進了購物車后,轉發到ch15/viewCart.jsp頁面顯示購物車的信息。v程序清單:ch15/viewCart.jsp15.3.3 將圖書添加到購物車并顯
15、示購物車信息將圖書添加到購物車并顯示購物車信息.2 20 02022-3-6v代碼可以分為三個階段:第一個階段從購物車cart中取出所有圖書的isbn號,也即是購物車的鍵;第二階段根據isbn號從cart中取出所有的CartItem對象,即圖書商品信息,并計算商品的金額;第三階段利用JSP表達式顯示購物車的詳細信息,同時將總金額保存在session中,以備將來結賬時用。在代碼中用到一個類DecimalFormat,這是一個用來格式化小數的類,這個類可以先定義模板,并根據模板樣式輸出小數。viewCart.jsp運行結果如圖所示。15.3.3 將圖書添加到購物車并顯示購物車信息將圖書添加到購物車
16、并顯示購物車信息.2 21 12022-3-615.3.4 添加訂單信息并結賬添加訂單信息并結賬v在上圖中單擊“繼續購物”鏈接可導航到viewBook.jsp頁面,單擊“結賬”按鈕則提交給order.html頁面,這個頁面可輸入顧客的相關信息,如圖所示,代碼略去。 .2 22 22022-3-615.3.4 添加訂單信息并結賬添加訂單信息并結賬v order.html頁面中的form格式:v ,即提交到了URL為doOrder的Servlet,這個Servlet對應類DoOrder,在此進行訂單處理。v 程序清單:DoOrder.javav 在DoOrder類中引用了OrderOperation類的實例。OrderOperation類是bookorder表的操作類,該類的saveOrder()方法可將訂單數據存入數據庫中bookorder表。bookorder表的結構為:字段類型orderIdintusernameVarchar(20)zipcodeVarchar(8)phoneVarchar(2
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 七夕節活動方案 (15篇)
- 《綠野仙蹤》讀后感集合15篇
- 綠色制造工藝改造項目可行性研究報告
- 空調與照明系統優化在標準廠房節能中的作用
- 海洋科技創新的路徑與行動計劃
- 光伏電站光伏區技改項目可行性研究報告
- 工業遺產活化利用項目可行性研究報告
- 高效能電機研發項目可行性研究報告
- 家庭對學生心理健康教育
- 新疆維吾爾自治區塔城地區烏蘇市第一中學2022-2023學年高一下學期3月月考政治 含解析
- 2023年廣東廣州中考滿分作文《一樣的舞臺不一樣的我》
- 2024-2030年中國商用顯示產業投資策略及發展規劃建議研究研究報告
- 2024年共青團入團積極分子團校結業考試試題庫及答案
- 小學五年級數學奧林匹克競賽試卷及答案
- 中西文化鑒賞智慧樹知到答案2024年鄭州大學
- 人教PEP版英語六上Unit 5《What does he do》(B Let's learn)說課稿
- DL∕T 5494-2014 電力工程場地地震安全性評價規程
- DL∕T 1630-2016 氣體絕緣金屬封閉開關設備局部放電特高頻檢測技術規范
- 實驗室可靠性測試計劃表
- 居間費用協議合同范本
- 鐵路蓋板涵、框架涵施工方案培訓資料
評論
0/150
提交評論