




已閱讀5頁,還剩24頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第二卷 Web組件-1(Servlet),Servlet中文亂碼和會話跟蹤,2,回顧,Servlet 使用戶可以在服務(wù)器上運行 Java 代碼和生成動態(tài)內(nèi)容 HTTP Servlet 發(fā)送 HTTP 請求和接受 HTTP 響應(yīng) Servlet 生命周期由三種方法組成,即 init()、service() 和 destroy() Servlet API 包含于兩個包中,分別為 javax.servlet 和 javax.servlet.http Servlet 繼承 GenericServlet 類或 HttpServlet 類。 利用Eclipse平臺 開發(fā)Servlet,3,目標(biāo),Servlet中文亂碼 定義會話跟蹤 創(chuàng)建會話 標(biāo)識會話跟蹤技術(shù),中文亂碼,在Servlet中,經(jīng)常會有這樣一行代碼 request.setCharacterEncoding(“GBK”); 這行代碼的作用就是避免Servlet響應(yīng)頁面中出現(xiàn)中文亂碼的問題 。 為什么會產(chǎn)生亂碼? 不同的組件有自己默認(rèn)的字符編碼集。當(dāng)編碼和解碼的字符集不一致,就容易產(chǎn)生亂碼問題 。 中文IE默認(rèn)的編碼格式是“GB2312” Tomcat默認(rèn)的編碼格式“iso-8859-1” weblogic默認(rèn)的編碼格式“UTF-8” JAVA源文件編譯為class文件時的字符集,默認(rèn)為操作系統(tǒng)的字符集,但在IDE中可以改變。,中文亂碼解決辦法,整個系統(tǒng)從開發(fā)到運行使用統(tǒng)一的字符編碼集 開發(fā)應(yīng)用程序的IDE工具設(shè)置。 開發(fā)所使用的容器的配置文件的設(shè)置。 請求處理方式的設(shè)置 響應(yīng)處理方式的設(shè)置 存取數(shù)據(jù)庫時的設(shè)置 最好選擇以下其中一種進(jìn)行統(tǒng)一 Iso-8859-1 GBK(GB2312) UTF-8(支持所有語言),中文亂碼解決辦法,IDE 開發(fā)環(huán)境(MyEclipse)中,設(shè)置字符集,中文亂碼解決辦法,開發(fā)中所使用容器的配置文件的設(shè)置,例如修改weblogic容器中的weblogic.xml配置文件,在部分加入: compilerSupportsEncoding true encoding GBK ,中文亂碼解決辦法,響應(yīng)處理方式中的設(shè)置 在Servlet中加入 JSP中加入:,中文亂碼解決辦法,請求處理方式中的設(shè)置 對于POST請求: request.setCharacterEncoding(“GBK”) 對于GET請求: String info = request.getParameter(“information“); String newinfo=new String(info.getBytes(“utf-8“),“GBK“);,中文亂碼解決辦法,存取數(shù)據(jù)庫時的設(shè)置,11,有必要保持同一客戶的會話(會話跟蹤),會話跟蹤,保持客戶端狀態(tài) Internet 協(xié)議兩種類型: 有狀態(tài):Telnet、FTP; 無狀態(tài):Http(服務(wù)器一旦響應(yīng)完客戶的請求之后,斷開其之間網(wǎng)絡(luò)連接,該客戶下次請求將重新建立網(wǎng)絡(luò)連接,服務(wù)器判斷是否為同一個客戶發(fā)出請求),12,會話跟蹤,請求 1,請求 2,請求 n,.,服務(wù)器將唯一的會話 ID 分配給客戶端以跟蹤用戶,13,會話如何工作,beer網(wǎng)上交易平臺,客戶端A,ServletA,請求Dark beer 單價?,請求1,線程A,HttpSessionA,SetAttribute(),線程發(fā)現(xiàn)與客戶A的會話,把他的選擇Darkbeer作為一個屬性保存在HttpSessionA會話中,響應(yīng)15,響應(yīng)15,請求Expensive,線程B,請求2,線程找到該會話,把Expensive作為一個屬性保存會話中,響應(yīng)15 off8,響應(yīng)15 off8,客戶端B,線程C,請求Polo beer單價?,請求3,HttpSessionB,SetAttribute(),線程為客戶B開始一個新會話,并保存Polo beer,響應(yīng)12,響應(yīng)12,發(fā)現(xiàn):容器會為每一個客戶端維護(hù)一個單獨的HttpSession對象,ServletA,14,問題,容器怎么知道客戶是誰? 因為Http協(xié)議無狀態(tài),對同一客戶所發(fā)出的每次請求對容器而言都是一個新的客戶。 答案 客戶需要一個唯一的會話ID 即:對客戶的第一次請求,容器會生成一個唯一的會話ID,并通過響應(yīng)把它返回給客戶; 客戶再在以后的每一個請求中發(fā)回這個會話ID,容器看到ID后,就會找匹配的會話,并把這個會話與請求關(guān)聯(lián)。,15,會話跟蹤,請求1 Darkbeer,請求 2 Blackbeer ID#42,.,Hi,Server,這是我的第一個請求,參數(shù)是Darkbeer,我們可以開始一個會話嗎?,好,但是我很健忘,可能記不得你,所以給你一個唯一的ID,每次你發(fā)送請求時一定把它交還給我,這樣我就知道那是你了,ID#42,new SessionID #42,SetAttribute(Darkbeer),響應(yīng) ID#42,讓我看看,#42哦有你,對了我現(xiàn)在想起來你是誰了,上一次你說你喜歡Darkbeer,SetAttribute(Blackbeer),響應(yīng),16,創(chuàng)建會話,創(chuàng)建會話對象HttpSession 若發(fā)來的請求中無會話ID,容器創(chuàng)建新會話; 若發(fā)來的請求中有會話ID,無需創(chuàng)建新會話,找到相關(guān)的會話ID。,HttpServletRequest 的 getSession() 方法用于獲取或創(chuàng)建會話,其語法如下:,public HttpSession getSession(); public HttpSession getSession(boolean value);,如果沒有與當(dāng)前請求關(guān)聯(lián)的會話,則 getSession() 方法用于創(chuàng)建會話。,如果布爾值為 true 且當(dāng)前沒有與請求關(guān)聯(lián)的會話,則使用 getSession(boolean value) 創(chuàng)建會話。如果布爾值為 false,如果沒有與當(dāng)前請求關(guān)聯(lián)的會話,返回null。,17,示例,創(chuàng)建會話對象,要求判斷會話是已經(jīng)存在,還是剛剛創(chuàng)建。,18,運行,重新刷新請求,19,會話跟蹤技術(shù),會話跟蹤技術(shù),隱藏表單域,URL 重寫,Cookie,以下是各種會話跟蹤技術(shù):,20,隱藏表單域,將會話信息保存在隱藏域中,但是不會顯示在客戶端瀏覽器中,在 GET 和 POST 方法中指定用于存儲有關(guān)會話消息的名稱和值。,21,會話跟蹤實例-1,22,運行,23,URL 重寫,如果客戶不接受cookie,可以把URL重寫作為一條后路,即使用HttpServletResponse對象的encodURL方法把服務(wù)器端生成的會話ID傳到客戶端,客戶端下次請求時,顯示包含會話ID的信息發(fā)送到服務(wù)器 URL+;jsessionid=會話ID 注意:容器一般先會使用cookie來完成會話管理,只有當(dāng)cookie方法失敗時,顯示地URL編碼才起作用(URL重寫自動發(fā)生) 靜態(tài)頁面不能URL重寫,24,會話跟蹤實例-2,getContextPath() 返回上下文路徑,encodeURL() 將字符串轉(zhuǎn)換為 URL 路徑,25,運行,26,Cookie-1,容器必須以某種方式把會話ID作為響應(yīng)的一部分交給客戶,而客戶必須把會話ID作為請求的一部分發(fā)回。最常用的方式是通過cookie交換這個會話ID信息。 Cookie 用于存儲 Web 服務(wù)器發(fā)送給客戶端的信息。服務(wù)器通過設(shè)置響應(yīng)標(biāo)題中的 Set-Cookie 方法來發(fā)送 cookie。其語法如下: 在響應(yīng)中發(fā)送一個會話cookie(name=value) HttpSession session=request.getSession(); 該方法不只是創(chuàng)建一個會話,在請求上第一次調(diào)用該方法時,會導(dǎo)致響應(yīng)發(fā) 一個cookie;客戶端將接收并保存該cookie,客戶端每次訪問該服務(wù)器上的頁 時,會將cookie發(fā)回到服務(wù)器 注)cookie與會話的壽命一樣長,一旦客戶離開瀏覽器,cookie就會消失,但可以設(shè)置cookie在客戶端上待得更久一些,甚至在瀏覽器關(guān)閉之后還持久保存,Set-Cookie: Name=VALUE; Comment=COMMENT; Domain=DOMAINNAME; Max-age=SECONDS; Path=PATH; secure;,27,Cookie-2,javax.servlet
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 車位合同和認(rèn)購協(xié)議
- 轉(zhuǎn)讓房屋貸款合同協(xié)議
- 追回欠款協(xié)議書范本
- 水電開孔協(xié)議書
- 車輛免責(zé)協(xié)議書范本
- 送菜防疫協(xié)議書模板
- 車安全合同協(xié)議
- 車輛買賣中介合同協(xié)議
- 跟物業(yè)合作合同協(xié)議
- 郵政快遞外包合同協(xié)議
- 2023年《移動式壓力容器充裝質(zhì)量管理手冊》
- 賓館行業(yè)信用評價規(guī)范
- 2023北京朝陽區(qū)初三二模英語試卷及答案
- 達(dá)美樂比薩線上整合營銷規(guī)劃方案
- 水泥產(chǎn)品生產(chǎn)許可證實施細(xì)則
- 德意志意識形態(tài)
- 2023年安徽省中考生物總復(fù)習(xí)二輪專題:科學(xué)探究創(chuàng)新題(有答案)
- 六年級語文畢業(yè)總復(fù)習(xí)
- YY/T 1778.1-2021醫(yī)療應(yīng)用中呼吸氣體通路生物相容性評價第1部分:風(fēng)險管理過程中的評價與試驗
- GB/T 4955-2005金屬覆蓋層覆蓋層厚度測量陽極溶解庫侖法
- GB/T 37078-2018出入口控制系統(tǒng)技術(shù)要求
評論
0/150
提交評論