servlet设置cookie实验
【README】 本文旨在 通過servlet 設(shè)置cookie ,查看cookie長(zhǎng)什么樣子,來達(dá)到了解cookie的目的;
cookie作用: 因?yàn)閔ttp協(xié)議是無狀態(tài)的,要想維護(hù)web訪問的狀態(tài),就需要使用專門的技術(shù)解決。cookie 是一種在客戶端保持 http狀態(tài)信息的技術(shù);?
瀏覽器第1次訪問服務(wù)器時(shí),傳入個(gè)人信息,服務(wù)器把這些信息封裝到cookie, 返回給客戶端;(第1次訪問,客戶端沒有傳入 cookie)
瀏覽器第2次訪問服務(wù)器時(shí),會(huì)帶著第1次服務(wù)器響應(yīng)報(bào)文中的cookie 傳給 服務(wù)器,然后服務(wù)器通過 客戶cookie 信息來獲取請(qǐng)求狀態(tài); 即把第1次訪問和第2次訪問當(dāng)做同一個(gè)會(huì)話。 只不過這個(gè)會(huì)話有多個(gè)請(qǐng)求和響應(yīng)。
?
什么是web中的會(huì)話?指的是 瀏覽器與web服務(wù)器之間連續(xù)發(fā)生的一系列請(qǐng)求和響應(yīng)過程;?
web會(huì)話狀態(tài): 指web服務(wù)器與瀏覽器在會(huì)話過程中產(chǎn)生的狀態(tài)信息,借助會(huì)話狀態(tài), 服務(wù)器可以把屬于同一個(gè)會(huì)話的一系列請(qǐng)求和響應(yīng)關(guān)聯(lián)起來,使得他們可以相互依賴,傳遞和共享數(shù)據(jù);?
?
【1】代碼,servlet設(shè)置cookie (本代碼轉(zhuǎn)自張孝祥老師,感謝辛苦付出)
public class CookieServlet1 extends HttpServlet {public void service(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException{response.setContentType("text/html;charset=gb2312");PrintWriter out = response.getWriter();String name = request.getParameter("name");String nickname = request.getParameter("nickname");if(name == null || nickname == null){out.println("請(qǐng)傳遞參數(shù)name和nickname后繼續(xù)實(shí)驗(yàn)!");return;}/*下面的程序代碼最好改成如下結(jié)構(gòu),以增強(qiáng)代碼的閱讀性:if(…){…return;}…因?yàn)楣P者在后來校對(duì)書稿的過程中,讀到下面的if從句時(shí),腦海里面很自然地出現(xiàn)了“if從句執(zhí)行完后,程序繼續(xù)干了什么?”的疑問 ,如果在if從句中增加了return語句,顯然就不會(huì)產(chǎn)生這種疑問。*/if("".equals(name.trim()) || "".equals(nickname.trim())){out.println("name和nickname不能為空白串");}else{Cookie ckName = new Cookie("name",name);Cookie ckNickname = new Cookie("nickname",nickname);ckNickname.setMaxAge(365*24*3600);Cookie ckEmail = new Cookie("email","test1@it315.org");Cookie ckPhone = new Cookie("phone","1111111");response.addCookie(ckName);response.addCookie(ckNickname);response.addCookie(ckEmail);response.addCookie(ckPhone);/*應(yīng)將下面的代碼設(shè)計(jì)成一個(gè)專門用于查詢某個(gè)名稱的Cookie的方法,然后用這個(gè)方法來查詢名稱為nickname的Cookie值。*/String lastNickname = null;Cookie [] cks = request.getCookies();for(int i=0; cks!=null && i<cks.length; i++){if("nickname".equals(cks[i].getName())){lastNickname = cks[i].getValue();break;} } if(lastNickname != null){out.println("歡迎您,<b><i>" + lastNickname + "</i></b>!<br>");}else{out.println("歡迎您,新客人!<br>");}String cookieHeader = request.getHeader("Cookie");if(cookieHeader != null){out.println("請(qǐng)求頭中的Cookie頭字段如下:<br>");out.println("Cookie: " + cookieHeader + "<br>");}else{out.println("請(qǐng)求頭中沒有Cookie頭字段<br>");}}} }【2】訪問效果,這是第2次訪問的效果, 即服務(wù)器顯示的是第1次訪問時(shí),服務(wù)器根據(jù)請(qǐng)求信息設(shè)置的cookie?
訪問url:?http://localhost:8080/myweb2/cookie/servlet1?name=zhangsan&nickname=zhangsanhao??
【3】cookie 長(zhǎng)什么樣子呢??
可以參考這篇文章?https://www.cnblogs.com/Marydon20170307/p/11613226.html?
第1步: chrome://settings/cookies?
第2步:查看所有cookie 和 網(wǎng)站數(shù)據(jù);?
第3步: 搜索 localhost 域名的cookie
上圖,我們就看到了cookie的真面目,共計(jì)4個(gè);?
?
補(bǔ)充: 本文只是簡(jiǎn)要展示了cookie是什么?作用以及它的樣子。 cookie還有其他東西,比如生命周期....... 大家可以參考其他資料?
?
總結(jié)
以上是生活随笔為你收集整理的servlet设置cookie实验的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么理解设计(怎么理解设计的基本含义)
- 下一篇: 转:常用的几种加密算法以及java实现