<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 70,comments - 408,trackbacks - 0
    Cookie的目的就是為用戶帶來方便,為網(wǎng)站帶來增值。雖然有著許多誤傳,事實(shí)上Cookie并不會(huì)造成嚴(yán)重的安全威脅。Cookie永遠(yuǎn)不會(huì)以任何方式執(zhí)行,因此也不會(huì)帶來病毒或攻擊你的系統(tǒng)。另外,由于瀏覽器一般只允許存放300個(gè)Cookie,每個(gè)站點(diǎn)最多存放20個(gè)Cookie,每個(gè)Cookie的大小限制為4?KB,因此Cookie不會(huì)塞滿你的硬盤,更不會(huì)被用作“拒絕服務(wù)”攻擊手段。?
    ???
    ??  ?9.2?Servlet的Cookie?API?
    ???
    ??  ?要把Cookie發(fā)送到客戶端,Servlet先要調(diào)用new?Cookie(name,value)用合適的名字和值創(chuàng)建一個(gè)或多個(gè)Cookie(2.1節(jié)),通過cookie.setXXX設(shè)置各種屬性(2.2節(jié)),通過response.addCookie(cookie)把cookie加入應(yīng)答頭(2.3節(jié))。?
    ???
    ??  ?要從客戶端讀入Cookie,Servlet應(yīng)該調(diào)用request.getCookies(),getCookies()方法返回一個(gè)Cookie對象的數(shù)組。在大多數(shù)情況下,你只需要用循環(huán)訪問該數(shù)組的各個(gè)元素尋找指定名字的Cookie,然后對該Cookie調(diào)用getValue方法取得與指定名字關(guān)聯(lián)的值,這部分內(nèi)容將在2.4節(jié)討論。?
    ???
    ??  ?9.2.1?創(chuàng)建Cookie?
    ???
    ??  ?調(diào)用Cookie對象的構(gòu)造函數(shù)可以創(chuàng)建Cookie。Cookie對象的構(gòu)造函數(shù)有兩個(gè)字符串參數(shù):Cookie名字和Cookie值。名字和值都不能包含空白字符以及下列字符:?
    ???[?]?(?)?=?,?"?/???@?:?;?
    ???
    ???
    ???
    ???
    ??  ?9.2.2?讀取和設(shè)置Cookie屬性?
    ???
    ??  ?把Cookie加入待發(fā)送的應(yīng)答頭之前,你可以查看或設(shè)置Cookie的各種屬性。下面摘要介紹這些方法:?
    ???
    ??getComment/setComment?
    ??獲取/設(shè)置Cookie的注釋。?
    ??getDomain/setDomain?
    ??獲取/設(shè)置Cookie適用的域。一般地,Cookie只返回給與發(fā)送它的服務(wù)器名字完全相同的服務(wù)器。使用這里的方法可以指示瀏覽器把Cookie返回給同一域內(nèi)的其他服務(wù)器。注意域必須以點(diǎn)開始(例如.sitename.com),非國家類的域(如.com,.edu,.gov)必須包含兩個(gè)點(diǎn),國家類的域(如.com.cn,.edu.uk)必須包含三個(gè)點(diǎn)。?
    ??getMaxAge/setMaxAge?
    ??獲取/設(shè)置Cookie過期之前的時(shí)間,以秒計(jì)。如果不設(shè)置該值,則Cookie只在當(dāng)前會(huì)話內(nèi)有效,即在用戶關(guān)閉瀏覽器之前有效,而且這些Cookie不會(huì)保存到磁盤上。參見下面有關(guān)LongLivedCookie的說明。?
    ??getName/setName?
    ??獲取/設(shè)置Cookie的名字。本質(zhì)上,名字和值是我們始終關(guān)心的兩個(gè)部分。由于HttpServletRequest的getCookies方法返回的是一個(gè)Cookie對象的數(shù)組,因此通常要用循環(huán)來訪問這個(gè)數(shù)組查找特定名字,然后用getValue檢查它的值。?
    ??getPath/setPath?
    ??獲取/設(shè)置Cookie適用的路徑。如果不指定路徑,Cookie將返回給當(dāng)前頁面所在目錄及其子目錄下的所有頁面。這里的方法可以用來設(shè)定一些更一般的條件。例如,someCookie.setPath("/"),此時(shí)服務(wù)器上的所有頁面都可以接收到該Cookie。?
    ??getSecure/setSecure?
    ??獲取/設(shè)置一個(gè)boolean值,該值表示是否Cookie只能通過加密的連接(即SSL)發(fā)送。?
    ??getValue/setValue?
    ??獲取/設(shè)置Cookie的值。如前所述,名字和值實(shí)際上是我們始終關(guān)心的兩個(gè)方面。不過也有一些例外情況,比如把名字作為邏輯標(biāo)記(也就是說,如果名字存在,則表示true)。?
    ??getVersion/setVersion?
    ??獲取/設(shè)置Cookie所遵從的協(xié)議版本。默認(rèn)版本0(遵從原先的Netscape規(guī)范);版本1遵從RFC?2109?,?但尚未得到廣泛的支持。?
    ??  ?9.2.3?在應(yīng)答頭中設(shè)置Cookie?
    ???
    ??  ?Cookie可以通過HttpServletResponse的addCookie方法加入到Set-Cookie應(yīng)答頭。下面是一個(gè)例子:?
    ???Cookie?userCookie?=?new?Cookie("user",?"uid1234");?
    ???response.addCookie(userCookie);?
    ???
    ???
    ???
    ???
    ??  ?9.2.4?讀取保存到客戶端的Cookie?
    ???
    ??  ?要把Cookie發(fā)送到客戶端,先要?jiǎng)?chuàng)建Cookie,然后用addCookie發(fā)送一個(gè)Set-Cookie?HTTP應(yīng)答頭。這些內(nèi)容已經(jīng)在上面的2.1節(jié)介紹。從客戶端讀取Cookie時(shí)調(diào)用的是HttpServletRequest的getCookies方法。該方法返回一個(gè)與HTTP請求頭中的內(nèi)容對應(yīng)的Cookie對象數(shù)組。得到這個(gè)數(shù)組之后,一般是用循環(huán)訪問其中的各個(gè)元素,調(diào)用getName檢查各個(gè)Cookie的名字,直至找到目標(biāo)Cookie。然后對這個(gè)目標(biāo)Cookie調(diào)用getValue,根據(jù)獲得的結(jié)果進(jìn)行其他處理。?
    ???
    ??  ?上述處理過程經(jīng)常會(huì)遇到,為方便計(jì)下面我們提供一個(gè)getCookieValue方法。只要給出Cookie對象數(shù)組、Cookie名字和默認(rèn)值,getCookieValue方法就會(huì)返回匹配指定名字的Cookie值,如果找不到指定Cookie,則返回默認(rèn)值。?
    ???
    ??  ?9.3?幾個(gè)Cookie工具函數(shù)?
    ???
    ??  ?下面是幾個(gè)工具函數(shù)。這些函數(shù)雖然簡單,但是,在和Cookie打交道的時(shí)候很有用。?
    ???
    ??  ?9.3.1?獲取指定名字的Cookie值?
    ???
    ??  ?該函數(shù)是ServletUtilities.java的一部分。getCookieValue通過循環(huán)依次訪問Cookie對象數(shù)組的各個(gè)元素,尋找是否有指定名字的Cookie,如找到,則返回該Cookie的值;否則,返回參數(shù)中給出的默認(rèn)值。getCookieValue能夠在一定程度上簡化Cookie值的提取。?
    ???public?static?String?getCookieValue(Cookie[]?cookies,?
    ???String?cookieName,?
    ???String?defaultValue)?{?
    ???for(int?i=0;?i<cookies.length;?i++)?{?
    ???Cookie?cookie?=?cookies[i];?
    ???if?(cookieName.equals(cookie.getName()))?
    ???return(cookie.getValue());?
    ???}?
    ???return(defaultValue);?
    ???}?
    ???
    ???
    ???
    ???
    ??  ?9.3.2自動(dòng)保存的Cookie?
    ???
    ??  ?下面是LongLivedCookie類的代碼。如果你希望Cookie能夠在瀏覽器退出的時(shí)候自動(dòng)保存下來,則可以用這個(gè)LongLivedCookie類來取代標(biāo)準(zhǔn)的Cookie類。?
    ??package?hall;?
    ???
    ??import?javax.servlet.http.*;?
    ???
    ??public?class?LongLivedCookie?extends?Cookie?{?
    ???public?static?final?int?SECONDS_PER_YEAR?=?60*60*24*365;?
    ???public?LongLivedCookie(String?name,?String?value)?{?
    ???super(name,?value);?
    ???setMaxAge(SECONDS_PER_YEAR);?
    ???}?
    ??}?
    ???
    ???
    ???
    ???
    ??  ?9.4.實(shí)例:定制的搜索引擎界面?
    ???
    ??  ?下面也是一個(gè)搜索引擎界面的例子,通過修改前面HTTP狀態(tài)代碼的例子得到。在這個(gè)Servlet中,用戶界面是動(dòng)態(tài)生成而不是由靜態(tài)HTML文件提供的。Servlet除了負(fù)責(zé)讀取表單數(shù)據(jù)并把它們發(fā)送給搜索引擎之外,還要把包含表單數(shù)據(jù)的Cookie發(fā)送給客戶端。以后客戶再次訪問同一表單時(shí),這些Cookie的值將用來預(yù)先填充表單,使表單自動(dòng)顯示最近使用過的數(shù)據(jù)。?
    ???
    ??  ?SearchEnginesFrontEnd.java?
    ???
    ??  ?該Servlet構(gòu)造一個(gè)主要由表單構(gòu)成的用戶界面。第一次顯示的時(shí)候,它和前面用靜態(tài)HTML頁面提供的界面差不多。然而,用戶選擇的值將被保存到Cookie(本頁面將數(shù)據(jù)發(fā)送到CustomizedSearchEngines?Servlet,由后者設(shè)置Cookie)。用戶以后再訪問同一頁面時(shí),即使瀏覽器是退出之后再啟動(dòng),表單中也會(huì)自動(dòng)填好上一次搜索所填寫的內(nèi)容。?
    ???
    ??  ?注意該Servlet用到了ServletUtilities.java,其中g(shù)etCookieValue前面已經(jīng)介紹過,headWithTitle用于生成HTML頁面的一部分。另外,這里也用到了前面已經(jīng)說明的LongLiveCookie類,我們用它來創(chuàng)建作廢期限很長的Cookie。?
    ??package?hall;?
    ???
    ??import?java.io.*;?
    ??import?javax.servlet.*;?
    ??import?javax.servlet.http.*;?
    ??import?java.net.*;?
    ???
    ??public?class?SearchEnginesFrontEnd?extends?HttpServlet?{?
    ???public?void?doGet(HttpServletRequest?request,?
    ???HttpServletResponse?response)?
    ???throws?ServletException,?IOException?{?
    ???Cookie[]?cookies?=?request.getCookies();?
    ???String?searchString?=?
    ???ServletUtilities.getCookieValue(cookies,?
    ???"searchString",?
    ???"Java?Programming");?
    ???String?numResults?=?
    ???ServletUtilities.getCookieValue(cookies,?
    ???"numResults",?
    ???"10");?
    ???String?searchEngine?=?
    ???ServletUtilities.getCookieValue(cookies,?
    ???"searchEngine",?
    ???"google");?
    ???response.setContentType("text/html");?
    ???PrintWriter?out?=?response.getWriter();?
    ???String?title?=?"Searching?the?Web";?
    ???out.println(ServletUtilities.headWithTitle(title)?+?
    ???"<BODY?BGCOLOR=\"#FDF5E6\">\n"?+?
    ???"<H1?ALIGN=\"CENTER\">Searching?the?Web</H1>\n"?+?
    ???"\n"?+?
    ???"<FORM?ACTION=\"/servlet/hall.CustomizedSearchEngines\">\n"?+?
    ???"<CENTER>\n"?+?
    ???"Search?String:\n"?+?
    ???"<INPUT?TYPE=\"TEXT\"?NAME=\"searchString\"\n"?+?
    ???"?VALUE=\""?+?searchString?+?"\"><BR>\n"?+?
    ???"Results?to?Show?Per?Page:\n"?+?
    ???"<INPUT?TYPE=\"TEXT\"?NAME=\"numResults\"\n"?+?
    ???"?VALUE="?+?numResults?+?"?SIZE=3><BR>\n"?+?
    ???"<INPUT?TYPE=\"RADIO\"?NAME=\"searchEngine\"\n"?+?
    ???"?VALUE=\"google\""?+?
    ???checked("google",?searchEngine)?+?">\n"?+?
    ???"Google?|\n"?+?
    ???"<INPUT?TYPE=\"RADIO\"?NAME=\"searchEngine\"\n"?+?
    ???"?VALUE=\"infoseek\""?+?
    ???checked("infoseek",?searchEngine)?+?">\n"?+?
    ???"Infoseek?|\n"?+?
    ???"<INPUT?TYPE=\"RADIO\"?NAME=\"searchEngine\"\n"?+?
    ???"?VALUE=\"lycos\""?+?
    ???checked("lycos",?searchEngine)?+?">\n"?+?
    ???"Lycos?|\n"?+?
    ???"<INPUT?TYPE=\"RADIO\"?NAME=\"searchEngine\"\n"?+?
    ???"?VALUE=\"hotbot\""?+?
    ???checked("hotbot",?searchEngine)?+?">\n"?+?
    ???"HotBot\n"?+?
    ???"<BR>\n"?+?
    ???"<INPUT?TYPE=\"SUBMIT\"?VALUE=\"Search\">\n"?+?
    ???"</CENTER>\n"?+?
    ???"</FORM>\n"?+?
    ???"\n"?+?
    ???"</BODY>\n"?+?
    ???"</HTML>\n");?
    ???}?
    ???
    ???private?String?checked(String?name1,?String?name2)?{?
    ???if?(name1.equals(name2))?
    ???return("?CHECKED");?
    ???else?
    ???return("");?
    ???}?
    ??}?
    ???
    ???
    ???
    ???
    ??  ?CustomizedSearchEngines.java?
    ???
    ??  ?前面的SearchEnginesFrontEnd?Servlet把數(shù)據(jù)發(fā)送到CustomizedSearchEngines?Servlet。本例在許多方面與前面介紹HTTP狀態(tài)代碼時(shí)的例子相似,區(qū)別在于,本例除了要構(gòu)造一個(gè)針對搜索引擎的URL并向用戶發(fā)送一個(gè)重定向應(yīng)答之外,還要發(fā)送保存用戶數(shù)據(jù)的Cookies。?
    ??package?hall;?
    ???
    ??import?java.io.*;?
    ??import?javax.servlet.*;?
    ??import?javax.servlet.http.*;?
    ??import?java.net.*;?
    ???
    ??public?class?CustomizedSearchEngines?extends?HttpServlet?{?
    ???public?void?doGet(HttpServletRequest?request,?
    ???HttpServletResponse?response)?
    ???throws?ServletException,?IOException?{?
    ???
    ???String?searchString?=?request.getParameter("searchString");?
    ???Cookie?searchStringCookie?=?
    ???new?LongLivedCookie("searchString",?searchString);?
    ???response.addCookie(searchStringCookie);?
    ???searchString?=?URLEncoder.encode(searchString);?
    ???String?numResults?=?request.getParameter("numResults");?
    ???Cookie?numResultsCookie?=?
    ???new?LongLivedCookie("numResults",?numResults);?
    ???response.addCookie(numResultsCookie);?
    ???String?searchEngine?=?request.getParameter("searchEngine");?
    ???Cookie?searchEngineCookie?=?
    ???new?LongLivedCookie("searchEngine",?searchEngine);?
    ???response.addCookie(searchEngineCookie);?
    ???SearchSpec[]?commonSpecs?=?SearchSpec.getCommonSpecs();?
    ???for(int?i=0;?i<commonSpecs.length;?i++)?{?
    ???SearchSpec?searchSpec?=?commonSpecs[i];?
    ???if?(searchSpec.getName().equals(searchEngine))?{?
    ???String?url?=?
    ???searchSpec.makeURL(searchString,?numResults);?
    ???response.sendRedirect(url);?
    ???return;?
    ???}?
    ???}?
    ???response.sendError(response.SC_NOT_FOUND,?
    ???"No?recognized?search?engine?specified.");?
    ???}?
    ???
    ???public?void?doPost(HttpServletRequest?request,?
    ???HttpServletResponse?response)?
    ???throws?ServletException,?IOException?{?
    ???doGet(request,?response);?
    ???}?
    ??}?
    posted on 2006-06-15 11:04 我心依舊 閱讀(1492) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 国产av无码专区亚洲av毛片搜| 一二三四免费观看在线电影| 亚洲欧洲无码AV不卡在线| 亚洲熟妇无码八AV在线播放| 国产在线观看www鲁啊鲁免费| 69视频在线是免费观看| 在线观看免费黄网站| 污网站免费在线观看| 中文字幕乱码亚洲精品一区| 亚洲一级二级三级不卡| 中文字幕亚洲日本岛国片| 日韩成全视频观看免费观看高清| 182tv免费视视频线路一二三| 青柠影视在线观看免费| 狠狠躁狠狠爱免费视频无码| 国产成人不卡亚洲精品91| 亚洲欧洲日韩极速播放 | 色费女人18女人毛片免费视频| 亚洲国产韩国一区二区| 无码乱人伦一区二区亚洲| 国产偷v国产偷v亚洲高清| 亚洲午夜福利精品久久| 亚洲国产成人乱码精品女人久久久不卡 | 国产成人精品免费视频大| 久久久久成人片免费观看蜜芽| 和老外3p爽粗大免费视频 | 亚洲精品国产精品乱码不卡√| 亚洲七七久久精品中文国产| 亚洲福利中文字幕在线网址| 国产高清免费观看| 国产成人青青热久免费精品| 暖暖日本免费在线视频| 国产精品公开免费视频| 国产免费久久精品| 免费中文字幕一级毛片| 亚洲av无码乱码在线观看野外| 免费在线视频一区| 久久久久亚洲av毛片大| 亚洲精品无码乱码成人| 久久久久亚洲Av片无码v | 亚欧色视频在线观看免费|