仓酷云

标题: JAVA网站制作之JSP 处置Cookie [打印本页]

作者: 若天明    时间: 2015-1-18 11:34
标题: JAVA网站制作之JSP 处置Cookie
IDE是好。java中的IDE更是百花齐放,你用jbuilder能说jbuilder赶不上vs吗?用eclipse,netbeans也很舒服啊。我就不明白“稍微差一些”那一些是从哪里差来的。cookie|js9.1Cookie概述

  Cookie是服务器发送给扫瞄器的体积很小的纯文本信息,用户今后会见统一个Web服务器时扫瞄器会把它们原样发送给服务器。经由过程让服务器读取它本来保留到客户真个信息,网站可以为扫瞄者供应一系列的便利,比方在线买卖过程当中标识用户身份、平安请求不高的场所制止用户反复输出名字和暗码、流派网站的主页定制、有针对性地投放告白,等等。

  Cookie的目标就是为用户带来便利,为网站带来增值。固然有着很多误传,现实上Cookie其实不会形成严峻的平安威逼。Cookie永久不会以任何体例实行,因而也不会带来病毒或打击你的体系。别的,因为扫瞄器一样平常只同意寄存300个Cookie,每一个站点最多寄存20个Cookie,每一个Cookie的巨细限定为4KB,因而Cookie不会塞满你的硬盘,更不会被用作“回绝服务”打击手腕。

  9.2Servlet的CookieAPI

  要把Cookie发送到客户端,Servlet先要挪用newCookie(name,value)用符合的名字和值创立一个或多个Cookie(2.1节),经由过程cookie.setXXX设置各类属性(2.2节),经由过程response.addCookie(cookie)把cookie到场应对头(2.3节)。

  要从客户端读进Cookie,Servlet应当挪用request.getCookies(),getCookies()办法前往一个Cookie对象的数组。在年夜多半情形下,你只必要用轮回会见该数组的各个元素寻觅指命名字的Cookie,然后对该Cookie挪用getValue办法获得与指命名字联系关系的值,这部份内容将在2.4节会商。

  9.2.1创立Cookie

  挪用Cookie对象的机关函数能够创立Cookie。Cookie对象的机关函数有两个字符串参数:Cookie名字和Cookie值。名字和值都不克不及包括空缺字符和以下字符:
[]()=,"/?@:;




  9.2.2读取和设置Cookie属性

  把Cookie到场待发送的应对头之前,你能够检察或设置Cookie的各类属性。上面择要先容这些办法:

getComment/setComment
猎取/设置Cookie的正文。
getDomain/setDomain
猎取/设置Cookie合用的域。一样平常地,Cookie只前往授与发送它的服务器名字完整不异的服务器。利用这里的办法能够唆使扫瞄器把Cookie前往给统一域内的其他服务器。注重域必需以点入手下手(比方.sitename.com),非国度类的域(如.com,.edu,.gov)必需包括两个点,国度类的域(如.com.cn,.edu.uk)必需包括三个点。
getMaxAge/setMaxAge
猎取/设置Cookie过时之前的工夫,以秒计。假如不设置该值,则Cookie只在以后会话内无效,即在用户封闭扫瞄器之前无效,并且这些Cookie不会保留到磁盘上。拜见上面有关LongLivedCookie的申明。
getName/setName
猎取/设置Cookie的名字。实质上,名字和值是我们一直体贴的两个部分。因为HttpServletRequest的getCookies办法前往的是一个Cookie对象的数组,因而一般要用轮回来会见这个数组查找特命名字,然后用getValue反省它的值。
getPath/setPath
猎取/设置Cookie合用的路径。假如不指定路径,Cookie将前往给以后页面地点目次及其子目次下的一切页面。这里的办法能够用来设定一些更一样平常的前提。比方,someCookie.setPath("/"),此时服务器上的一切页面都能够吸收到该Cookie。
getSecure/setSecure
猎取/设置一个boolean值,该值暗示是不是Cookie只能经由过程加密的毗连(即SSL)发送。
getValue/setValue
猎取/设置Cookie的值。如前所述,名字和值实践上是我们一直体贴的两个方面。不外也有一些破例情形,好比把名字作为逻辑标志(也就是说,假如名字存在,则暗示true)。
getVersion/setVersion
猎取/设置Cookie所服从的协定版本。默许版本0(服从本来的Netscape标准);版本1服从RFC2109,但还没有失掉普遍的撑持。
  9.2.3在应对头中设置Cookie

  Cookie能够经由过程HttpServletResponse的addCookie办法到场到Set-Cookie应对头。上面是一个例子:
CookieuserCookie=newCookie("user","uid1234");
response.addCookie(userCookie);




  9.2.4读取保留到客户真个Cookie

  要把Cookie发送到客户端,先要创立Cookie,然后用addCookie发送一个Set-CookieHTTP应对头。这些内容已在下面的2.1节先容。从客户端读取Cookie时挪用的是HttpServletRequest的getCookies办法。该办法前往一个与HTTP哀求头中的内容对应的Cookie对象数组。失掉这个数组以后,通常为用轮回会见个中的各个元素,挪用getName反省各个Cookie的名字,直至找到方针Cookie。然后对这个方针Cookie挪用getValue,依据取得的了局举行其他处置。

  上述处置历程常常会碰到,为便利计上面我们供应一个getCookieValue办法。只需给出Cookie对象数组、Cookie名字和默许值,getCookieValue办法就会前往婚配指命名字的Cookie值,假如找不到指定Cookie,则前往默许值。

  9.3几个Cookie工具函数

  上面是几个工具函数。这些函数固然复杂,可是,在和Cookie打交道的时分很有效。

  9.3.1猎取指命名字的Cookie值

  该函数是ServletUtilities.java的一部分。getCookieValue经由过程轮回顺次会见Cookie对象数组的各个元素,寻觅是不是有指命名字的Cookie,如找到,则前往该Cookie的值;不然,前往参数中给出的默许值。getCookieValue可以在必定水平上简化Cookie值的提取。
publicstaticStringgetCookieValue(Cookie[]cookies,
StringcookieName,
StringdefaultValue){
for(inti=0;i<cookies.length;i++){
Cookiecookie=cookies[i];
if(cookieName.equals(cookie.getName()))
return(cookie.getValue());
}
return(defaultValue);
}




  9.3.2主动保留的Cookie

  上面是LongLivedCookie类的代码。假如你但愿Cookie可以在扫瞄器加入的时分主动保留上去,则能够用这个LongLivedCookie类来代替尺度的Cookie类。
packagehall;

importjavax.servlet.http.*;

publicclassLongLivedCookieextendsCookie{
publicstaticfinalintSECONDS_PER_YEAR=60*60*24*365;
publicLongLivedCookie(Stringname,Stringvalue){
super(name,value);
setMaxAge(SECONDS_PER_YEAR);
}
}




  9.4.实例:定制的搜刮引擎界面

  上面也是一个搜刮引擎界面的例子,经由过程修正后面HTTP形态代码的例子失掉。在这个Servlet中,用户界面是静态天生而不是由静态HTML文件供应的。Servlet除卖力读取表双数据并把它们发送给搜刮引擎以外,还要把包括表双数据的Cookie发送给客户端。今后客户再次会见统一表单时,这些Cookie的值将用来事后添补表单,使表单主动显现比来利用过的数据。

  SearchEnginesFrontEnd.java

  该Servlet机关一个次要由表单组成的用户界面。第一次显现的时分,它和后面用静态HTML页面供应的界面差未几。但是,用户选择的值将被保留到Cookie(本页面将数据发送到CustomizedSearchEnginesServlet,由后者设置Cookie)。用户今后再会见统一页面时,即便扫瞄器是加入以后再启动,表单中也会主动填好上一次搜刮所填写的内容。

  注重该Servlet用到了ServletUtilities.java,个中getCookieValue后面已先容过,headWithTitle用于天生HTML页面的一部分。别的,这里也用到了后面已申明的LongLiveCookie类,我们用它来创立取消刻日很长的Cookie。
packagehall;

importjava.io.*;
importjavax.servlet.*;
importjavax.servlet.http.*;
importjava.net.*;

publicclassSearchEnginesFrontEndextendsHttpServlet{
publicvoiddoGet(HttpServletRequestrequest,
HttpServletResponseresponse)
throwsServletException,IOException{
Cookie[]cookies=request.getCookies();
StringsearchString=
ServletUtilities.getCookieValue(cookies,
"searchString",
"JavaProgramming");
StringnumResults=
ServletUtilities.getCookieValue(cookies,
"numResults",
"10");
StringsearchEngine=
ServletUtilities.getCookieValue(cookies,
"searchEngine",
"google");
response.setContentType("text/html");
PrintWriterout=response.getWriter();
Stringtitle="SearchingtheWeb";
out.println(ServletUtilities.headWithTitle(title)+
"<BODYBGCOLOR=\"#FDF5E6\">\n"+
"<H1ALIGN=\"CENTER\">SearchingtheWeb</H1>\n"+
"\n"+
"<FORMACTION=\"/servlet/hall.CustomizedSearchEngines\">\n"+
"<CENTER>\n"+
"SearchString:\n"+
"<INPUTTYPE=\"TEXT\"NAME=\"searchString\"\n"+
"VALUE=\""+searchString+"\"><BR>\n"+
"ResultstoShowPerPage:\n"+
"<INPUTTYPE=\"TEXT\"NAME=\"numResults\"\n"+
"VALUE="+numResults+"SIZE=3><BR>\n"+
"<INPUTTYPE=\"RADIO\"NAME=\"searchEngine\"\n"+
"VALUE=\"google\""+
checked("google",searchEngine)+">\n"+
"Google|\n"+
"<INPUTTYPE=\"RADIO\"NAME=\"searchEngine\"\n"+
"VALUE=\"infoseek\""+
checked("infoseek",searchEngine)+">\n"+
"Infoseek|\n"+
"<INPUTTYPE=\"RADIO\"NAME=\"searchEngine\"\n"+
"VALUE=\"lycos\""+
checked("lycos",searchEngine)+">\n"+
"Lycos|\n"+
"<INPUTTYPE=\"RADIO\"NAME=\"searchEngine\"\n"+
"VALUE=\"hotbot\""+
checked("hotbot",searchEngine)+">\n"+
"HotBot\n"+
"<BR>\n"+
"<INPUTTYPE=\"SUBMIT\"VALUE=\"Search\">\n"+
"</CENTER>\n"+
"</FORM>\n"+
"\n"+
"</BODY>\n"+
"</HTML>\n");
}

privateStringchecked(Stringname1,Stringname2){
if(name1.equals(name2))
return("CHECKED");
else
return("");
}
}




  CustomizedSearchEngines.java

  后面的SearchEnginesFrontEndServlet把数据发送到CustomizedSearchEnginesServlet。本例在很多方面与后面先容HTTP形态代码时的例子类似,区分在于,本例除要机关一个针对搜刮引擎的URL并向用户发送一个重定向应对以外,还要发送保留用户数据的Cookies。
packagehall;

importjava.io.*;
importjavax.servlet.*;
importjavax.servlet.http.*;
importjava.net.*;

publicclassCustomizedSearchEnginesextendsHttpServlet{
publicvoiddoGet(HttpServletRequestrequest,
HttpServletResponseresponse)
throwsServletException,IOException{

StringsearchString=request.getParameter("searchString");
CookiesearchStringCookie=
newLongLivedCookie("searchString",searchString);
response.addCookie(searchStringCookie);
searchString=URLEncoder.encode(searchString);
StringnumResults=request.getParameter("numResults");
CookienumResultsCookie=
newLongLivedCookie("numResults",numResults);
response.addCookie(numResultsCookie);
StringsearchEngine=request.getParameter("searchEngine");
CookiesearchEngineCookie=
newLongLivedCookie("searchEngine",searchEngine);
response.addCookie(searchEngineCookie);
SearchSpec[]commonSpecs=SearchSpec.getCommonSpecs();
for(inti=0;i<commonSpecs.length;i++){
SearchSpecsearchSpec=commonSpecs[i];
if(searchSpec.getName().equals(searchEngine)){
Stringurl=
searchSpec.makeURL(searchString,numResults);
response.sendRedirect(url);
return;
}
}
response.sendError(response.SC_NOT_FOUND,
"Norecognizedsearchenginespecified.");
}

publicvoiddoPost(HttpServletRequestrequest,
HttpServletResponseresponse)
throwsServletException,IOException{
doGet(request,response);
}
}




恰恰证明了java的简单,要不怎么没有通过c/c++来搞个这种框架?
作者: 活着的死人    时间: 2015-1-21 10:15
当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?
作者: 透明    时间: 2015-1-30 14:47
接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。
作者: 变相怪杰    时间: 2015-2-2 16:50
Java是一种计算机编程语言,拥有跨平台、面向对java
作者: 不帅    时间: 2015-2-6 00:11
设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧
作者: 老尸    时间: 2015-2-6 23:36
是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能
作者: 兰色精灵    时间: 2015-2-9 03:15
科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
作者: 蒙在股里    时间: 2015-2-26 19:49
应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展
作者: 海妖    时间: 2015-2-28 17:11
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
作者: 飘灵儿    时间: 2015-2-28 20:26
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
作者: 简单生活    时间: 2015-3-12 20:45
是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能
作者: 谁可相欹    时间: 2015-3-20 02:14
《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。
作者: 只想知道    时间: 2015-3-22 02:13
Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台
作者: 仓酷云    时间: 2015-3-24 07:52
如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。
作者: 小女巫    时间: 2015-4-1 22:35
至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。
作者: 深爱那片海    时间: 2015-4-12 03:52
当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?
作者: 精灵巫婆    时间: 2015-4-18 00:40
J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。
作者: 山那边是海    时间: 2015-4-19 02:41
设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧
作者: 冷月葬花魂    时间: 2015-4-20 22:59
让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。
作者: 柔情似水    时间: 2015-4-23 23:15
如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2