Servlet中文亂碼和回話跟蹤.ppt_第1頁(yè)
Servlet中文亂碼和回話跟蹤.ppt_第2頁(yè)
Servlet中文亂碼和回話跟蹤.ppt_第3頁(yè)
Servlet中文亂碼和回話跟蹤.ppt_第4頁(yè)
Servlet中文亂碼和回話跟蹤.ppt_第5頁(yè)
已閱讀5頁(yè),還剩24頁(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)介

第二卷 Web組件-1(Servlet),Servlet中文亂碼和會(huì)話跟蹤,2,回顧,Servlet 使用戶可以在服務(wù)器上運(yùn)行 Java 代碼和生成動(dòng)態(tài)內(nèi)容 HTTP Servlet 發(fā)送 HTTP 請(qǐng)求和接受 HTTP 響應(yīng) Servlet 生命周期由三種方法組成,即 init()、service() 和 destroy() Servlet API 包含于兩個(gè)包中,分別為 javax.servlet 和 javax.servlet.http Servlet 繼承 GenericServlet 類(lèi)或 HttpServlet 類(lèi)。 利用Eclipse平臺(tái) 開(kāi)發(fā)Servlet,3,目標(biāo),Servlet中文亂碼 定義會(huì)話跟蹤 創(chuàng)建會(huì)話 標(biāo)識(shí)會(huì)話跟蹤技術(shù),中文亂碼,在Servlet中,經(jīng)常會(huì)有這樣一行代碼 request.setCharacterEncoding(“GBK”); 這行代碼的作用就是避免Servlet響應(yīng)頁(yè)面中出現(xiàn)中文亂碼的問(wèn)題 。 為什么會(huì)產(chǎn)生亂碼? 不同的組件有自己默認(rèn)的字符編碼集。當(dāng)編碼和解碼的字符集不一致,就容易產(chǎn)生亂碼問(wèn)題 。 中文IE默認(rèn)的編碼格式是“GB2312” Tomcat默認(rèn)的編碼格式“iso-8859-1” weblogic默認(rèn)的編碼格式“UTF-8” JAVA源文件編譯為class文件時(shí)的字符集,默認(rèn)為操作系統(tǒng)的字符集,但在IDE中可以改變。,中文亂碼解決辦法,整個(gè)系統(tǒng)從開(kāi)發(fā)到運(yùn)行使用統(tǒng)一的字符編碼集 開(kāi)發(fā)應(yīng)用程序的IDE工具設(shè)置。 開(kāi)發(fā)所使用的容器的配置文件的設(shè)置。 請(qǐng)求處理方式的設(shè)置 響應(yīng)處理方式的設(shè)置 存取數(shù)據(jù)庫(kù)時(shí)的設(shè)置 最好選擇以下其中一種進(jìn)行統(tǒng)一 Iso-8859-1 GBK(GB2312) UTF-8(支持所有語(yǔ)言),中文亂碼解決辦法,IDE 開(kāi)發(fā)環(huán)境(MyEclipse)中,設(shè)置字符集,中文亂碼解決辦法,開(kāi)發(fā)中所使用容器的配置文件的設(shè)置,例如修改weblogic容器中的weblogic.xml配置文件,在部分加入: compilerSupportsEncoding true encoding GBK ,中文亂碼解決辦法,響應(yīng)處理方式中的設(shè)置 在Servlet中加入 JSP中加入:,中文亂碼解決辦法,請(qǐng)求處理方式中的設(shè)置 對(duì)于POST請(qǐng)求: request.setCharacterEncoding(“GBK”) 對(duì)于GET請(qǐng)求: String info = request.getParameter(“information“); String newinfo=new String(info.getBytes(“utf-8“),“GBK“);,中文亂碼解決辦法,存取數(shù)據(jù)庫(kù)時(shí)的設(shè)置,11,有必要保持同一客戶的會(huì)話(會(huì)話跟蹤),會(huì)話跟蹤,保持客戶端狀態(tài) Internet 協(xié)議兩種類(lèi)型: 有狀態(tài):Telnet、FTP; 無(wú)狀態(tài):Http(服務(wù)器一旦響應(yīng)完客戶的請(qǐng)求之后,斷開(kāi)其之間網(wǎng)絡(luò)連接,該客戶下次請(qǐng)求將重新建立網(wǎng)絡(luò)連接,服務(wù)器判斷是否為同一個(gè)客戶發(fā)出請(qǐng)求),12,會(huì)話跟蹤,請(qǐng)求 1,請(qǐng)求 2,請(qǐng)求 n,.,服務(wù)器將唯一的會(huì)話 ID 分配給客戶端以跟蹤用戶,13,會(huì)話如何工作,beer網(wǎng)上交易平臺(tái),客戶端A,ServletA,請(qǐng)求Dark beer 單價(jià)?,請(qǐng)求1,線程A,HttpSessionA,SetAttribute(),線程發(fā)現(xiàn)與客戶A的會(huì)話,把他的選擇Darkbeer作為一個(gè)屬性保存在HttpSessionA會(huì)話中,響應(yīng)15,響應(yīng)15,請(qǐng)求Expensive,線程B,請(qǐng)求2,線程找到該會(huì)話,把Expensive作為一個(gè)屬性保存會(huì)話中,響應(yīng)15 off8,響應(yīng)15 off8,客戶端B,線程C,請(qǐng)求Polo beer單價(jià)?,請(qǐng)求3,HttpSessionB,SetAttribute(),線程為客戶B開(kāi)始一個(gè)新會(huì)話,并保存Polo beer,響應(yīng)12,響應(yīng)12,發(fā)現(xiàn):容器會(huì)為每一個(gè)客戶端維護(hù)一個(gè)單獨(dú)的HttpSession對(duì)象,ServletA,14,問(wèn)題,容器怎么知道客戶是誰(shuí)? 因?yàn)镠ttp協(xié)議無(wú)狀態(tài),對(duì)同一客戶所發(fā)出的每次請(qǐng)求對(duì)容器而言都是一個(gè)新的客戶。 答案 客戶需要一個(gè)唯一的會(huì)話ID 即:對(duì)客戶的第一次請(qǐng)求,容器會(huì)生成一個(gè)唯一的會(huì)話ID,并通過(guò)響應(yīng)把它返回給客戶; 客戶再在以后的每一個(gè)請(qǐng)求中發(fā)回這個(gè)會(huì)話ID,容器看到ID后,就會(huì)找匹配的會(huì)話,并把這個(gè)會(huì)話與請(qǐng)求關(guān)聯(lián)。,15,會(huì)話跟蹤,請(qǐng)求1 Darkbeer,請(qǐng)求 2 Blackbeer ID#42,.,Hi,Server,這是我的第一個(gè)請(qǐng)求,參數(shù)是Darkbeer,我們可以開(kāi)始一個(gè)會(huì)話嗎?,好,但是我很健忘,可能記不得你,所以給你一個(gè)唯一的ID,每次你發(fā)送請(qǐng)求時(shí)一定把它交還給我,這樣我就知道那是你了,ID#42,new SessionID #42,SetAttribute(Darkbeer),響應(yīng) ID#42,讓我看看,#42哦有你,對(duì)了我現(xiàn)在想起來(lái)你是誰(shuí)了,上一次你說(shuō)你喜歡Darkbeer,SetAttribute(Blackbeer),響應(yīng),16,創(chuàng)建會(huì)話,創(chuàng)建會(huì)話對(duì)象HttpSession 若發(fā)來(lái)的請(qǐng)求中無(wú)會(huì)話ID,容器創(chuàng)建新會(huì)話; 若發(fā)來(lái)的請(qǐng)求中有會(huì)話ID,無(wú)需創(chuàng)建新會(huì)話,找到相關(guān)的會(huì)話ID。,HttpServletRequest 的 getSession() 方法用于獲取或創(chuàng)建會(huì)話,其語(yǔ)法如下:,public HttpSession getSession(); public HttpSession getSession(boolean value);,如果沒(méi)有與當(dāng)前請(qǐng)求關(guān)聯(lián)的會(huì)話,則 getSession() 方法用于創(chuàng)建會(huì)話。,如果布爾值為 true 且當(dāng)前沒(méi)有與請(qǐng)求關(guān)聯(lián)的會(huì)話,則使用 getSession(boolean value) 創(chuàng)建會(huì)話。如果布爾值為 false,如果沒(méi)有與當(dāng)前請(qǐng)求關(guān)聯(lián)的會(huì)話,返回null。,17,示例,創(chuàng)建會(huì)話對(duì)象,要求判斷會(huì)話是已經(jīng)存在,還是剛剛創(chuàng)建。,18,運(yùn)行,重新刷新請(qǐng)求,19,會(huì)話跟蹤技術(shù),會(huì)話跟蹤技術(shù),隱藏表單域,URL 重寫(xiě),Cookie,以下是各種會(huì)話跟蹤技術(shù):,20,隱藏表單域,將會(huì)話信息保存在隱藏域中,但是不會(huì)顯示在客戶端瀏覽器中,在 GET 和 POST 方法中指定用于存儲(chǔ)有關(guān)會(huì)話消息的名稱和值。,21,會(huì)話跟蹤實(shí)例-1,22,運(yùn)行,23,URL 重寫(xiě),如果客戶不接受cookie,可以把URL重寫(xiě)作為一條后路,即使用HttpServletResponse對(duì)象的encodURL方法把服務(wù)器端生成的會(huì)話ID傳到客戶端,客戶端下次請(qǐng)求時(shí),顯示包含會(huì)話ID的信息發(fā)送到服務(wù)器 URL+;jsessionid=會(huì)話ID 注意:容器一般先會(huì)使用cookie來(lái)完成會(huì)話管理,只有當(dāng)cookie方法失敗時(shí),顯示地URL編碼才起作用(URL重寫(xiě)自動(dòng)發(fā)生) 靜態(tài)頁(yè)面不能URL重寫(xiě),24,會(huì)話跟蹤實(shí)例-2,getContextPath() 返回上下文路徑,encodeURL() 將字符串轉(zhuǎn)換為 URL 路徑,25,運(yùn)行,26,Cookie-1,容器必須以某種方式把會(huì)話ID作為響應(yīng)的一部分交給客戶,而客戶必須把會(huì)話ID作為請(qǐng)求的一部分發(fā)回。最常用的方式是通過(guò)cookie交換這個(gè)會(huì)話ID信息。 Cookie 用于存儲(chǔ) Web 服務(wù)器發(fā)送給客戶端的信息。服務(wù)器通過(guò)設(shè)置響應(yīng)標(biāo)題中的 Set-Cookie 方法來(lái)發(fā)送 cookie。其語(yǔ)法如下: 在響應(yīng)中發(fā)送一個(gè)會(huì)話cookie(name=value) HttpSession session=request.getSession(); 該方法不只是創(chuàng)建一個(gè)會(huì)話,在請(qǐng)求上第一次調(diào)用該方法時(shí),會(huì)導(dǎo)致響應(yīng)發(fā) 一個(gè)cookie;客戶端將接收并保存該cookie,客戶端每次訪問(wèn)該服務(wù)器上的頁(yè) 時(shí),會(huì)將cookie發(fā)回到服務(wù)器 注)cookie與會(huì)話的壽命一樣長(zhǎng),一旦客戶離開(kāi)瀏覽器,cookie就會(huì)消失,但可以設(shè)置cookie在客戶端上待得更久一些,甚至在瀏覽器關(guān)閉之后還持久保存,Set-Cookie: Name=VALUE; Comment=COMMENT; Domain=DOMAINNAME; Max-age=SECONDS; Path=PATH; secure;,27,Cookie-2,javax.servlet

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論