当前位置:网站首页 >> 生活

jspServlet基础入门学习篇九处理

时间:2019-06-19 15:28:05 来源:互联网 阅读:0次

  9.1 Cookie概述 CAjd s/

  Cookie是服务器发送给浏览器的体积很小的纯文本信息,用户以后访问同一个Web服务器时浏览器会把它们原样发送给服务器。通过让服务器读取它原先保存到客户端的信息,站能够为浏览者提供一系列的方便,例如交易过程中标识用户身份、安全要求不高的场合避免用户重复输入名字和密码、门户站的主页定制、有针对性地投放广告,等等。 8]m#e2}L

  Cookie的目的就是为用户带来方便,为站带来增值。虽然有着许多误传,事实上Cookie并不会造成严重的安全威胁。Cookie永远不会以任何方式执行,因此也不会带来病毒或攻击你的系统。另外,由于浏览器一般只允许存放300个Cookie,每个站点多存放20个Cookie,每个Cookie的大小限制为4 KB,因此Cookie不会塞满你的硬盘,更不会被用作“拒绝服务”攻击手段。 SQU?

  9.2 Servlet的Cookie API odG=K 5R

  要把Cookie发送到客户端,Servlet先要调用new Cookie(name,value)用合适的名字和值创建一个或多个Cookie(2.1节),通过tXXX设置各种属性(2.2节),通过dCookie(cookie)把cookie加入应答头(2.3节)。 *%@MB q)z

  要从客户端读入Cookie,Servlet应该调用tCookies(),getCookies()方法返回一个Cookie对象的数组。在大多数情况下,你只需要用循环访问该数组的各个元素寻找指定名字的Cookie,然后对该Cookie调用getValue方法取得与指定名字关联的值,这部分内容将在2.4节讨论。 Kh$,3@:2m

  9.2.1 创建Cookie 4Bw'b.h?R

  调用Cookie对象的构造函数可以创建Cookie。Cookie对象的构造函数有两个字符串参数:Cookie名字和Cookie值。名字和值都不能包含空白字符以及下列字符: ,3QjGz 

  [ ] ( ) = , " / ? @ : ; -5X_9rW3

  9.2.2 读取和设置Cookie属性 dF+lbrj

  把Cookie加入待发送的应答头之前,你可以查看或设置Cookie的各种属性。下面摘要介绍这些方法: 4Yp0 Pej*

  getComment/setComment rISU{2UA t

  获取/设置Cookie的注释。 E*[ IQ "

  getDomain/setDomain d~"#o} q

  获取/设置Cookie适用的域。一般地,Cookie只返回给与发送它的服务器名字完全相同的服务器。使用这里的方法可以指示浏览器把Cookie返回给同一域内的其他服务器。注意域必须以点开始(例如.),非国家类的域(如.com,.edu,.gov)必须包含两个点,国家类的域(如.,.)必须包含三个点。 -'Bput

  getMaxAge/setMaxAge g-2?Rse

  获取/设置Cookie过期之前的时间,以秒计。如果不设置该值,则Cookie只在当前会话内有效,即在用户关闭浏览器之前有效,而且这些Cookie不会保存到磁盘上。参见下面有关LongLivedCookie的说明。 ~mLLMa6

  getName/setName q!:]"X((

  获取/设置Cookie的名字。本质上,名字和值是我们始终关心的两个部分。由于HttpServletRequest的getCookies方法返回的是一个Cookie对象的数组,因此通常要用循环来访问这个数组查找特定名字,然后用getValue检查它的值。 Q;Pmzb6X+

  getPath/setPath z/s 

  获取/设置Cookie适用的路径。如果不指定路径,Cookie将返回给当前页面所在目录及其子目录下的所有页面。这里的方法可以用来设定一些更一般的条件。例如,tPath("/"),此时服务器上的所有页面都可以接收到该Cookie。 D DcPbai

  getSecure/setSecure :6bIjN$

  获取/设置一个boolean值,该值表示是否Cookie只能通过加密的连接(即SSL)发送。 XELiuq{^

  getValue/setValue U!# ]s"|M

  获取/设置Cookie的值。如前所述,名字和值实际上是我们始终关心的两个方面。不过也有一些例外情况,比如把名字作为逻辑标记(也就是说,如果名字存在,则表示true)。 kgqEkVQK

  getVersion/setVersion E{_1*ck

  获取/设置Cookie所遵从的协议版本。默认版本0(遵从原先的Netscape规范);版本1遵从RFC 2109 , 但尚未得到广泛的支持。 V2_suKD

  9.2.3 在应答头中设置Cookie Eoy

  Cookie可以通过HttpServletResponse的addCookie方法加入到Set-Cookie应答头。下面是一个例子: fg$ M r

  Cookie userCookie = new Cookie("user", "uid1234"); ln-S[\2'z

  dCookie(userCookie); ;)4jf;{

  9.2.4 读取保存到客户端的Cookie u#fnai_0q

  要把Cookie发送到客户端,先要创建Cookie,然后用addCookie发送一个Set-Cookie HTTP应答头。这些内容已经在上面的2.1节介绍。从客户端读取Cookie时调用的是HttpServletRequest的getCookies方法。该方法返回一个与HTTP请求头中的内容对应的Cookie对象数组。得到这个数组之后,一般是用循环访问其中的各个元素,调用getName检查各个Cookie的名字,直至找到目标Cookie。然后对这个目标Cookie调用getValue,根据获得的结果进行其他处理。 N)[,v

  上述处理过程经常会遇到,为方便计下面我们提供一个getCookieValue方法。只要给出Cookie对象数组、Cookie名字和默认值,getCookieValue方法就会返回匹配指定名字的Cookie值,如果找不到指定Cookie,则返回默认值。 " w- AM

  9.3 几个Cookie工具函数 i[SMMYT rE

  下面是几个工具函数。这些函数虽然简单,但是,在和Cookie打交道的时候很有用。 ];-Rho

  9.3.1 获取指定名字的Cookie值 2} /kqR

  该函数是va的一部分。getCookieValue通过循环依次访问Cookie对象数组的各个元素,寻找是否有指定名字的Cookie,如找到,则返回该Cookie的值;否则,返回参数中给出的默认值。getCookieValue能够在一定程度上简化Cookie值的提取。 \ ) Xi7~

  /'8)RU36

  public static String getCookieValue(Cookie[] cookies, +]wP,9[

  String cookieName,  dz2\[6

  String defaultValue) { l-|^^2

  for(int i=0; i<ngth; i++) { WCG vQrX

  Cookie cookie = cookies; Q{cp*M5gN

  if (uals(tName())) VvPWM

  return(tValue()); 4wq1#g%G\

  } pzX;=:31{

  return(defaultValue); 07LnicD

  } GY6~1

  MbQX I

  9.3.2自动保存的Cookie TQiH4 [do

  下面是LongLivedCookie类的代码。如果你希望Cookie能够在浏览器退出的时候自动保存下来,则可以用这个LongLivedCookie类来取代标准的Cookie类。 JfM=Ms9X

  bmD `B20

  XCn\X 

  package hall; |\ J!jH

  x7^jk@no

  import tp.*; T~ AMBo*

  Md[ZQ

  public class LongLivedCookie extends Cookie { DLQ,w/Cs.

  public static final int SECONDS_PER_YEAR = 60*60*24*365;  -`[C$

  public LongLivedCookie(String name, String value) { Z0J]wTx '`

  super(name, value); _MwSj]'o

  setMaxAge(SECONDS_PER_YEAR); ]G# .

  } +_54$qco

  } r}g=Tb

  tO!,,^l9\y

  9.4.实例:定制的搜索引擎界面  YSm`|i

  下面也是一个搜索引擎界面的例子,通过修改前面HTTP状态代码的例子得到。在这个Servlet中,用户界面是动态生成而不是由静态HTML文件提供的。Servlet除了负责读取表单数据并把它们发送给搜索引擎之外,还要把包含表单数据的Cookie发送给客户端。以后客户再次访问同一表单时,这些Cookie的值将用来预先填充表单,使表单自动显示近使用过的数据。 M` Kz[P9$

  va RtPFBt#

  该Servlet构造一个主要由表单构成的用户界面。次显示的时候,它和前面用静态HTML页面提供的界面差不多。然而,用户选择的值将被保存到Cookie(本页面将数据发送到CustomizedSearchEngines Servlet,由后者设置Cookie)。用户以后再访问同一页面时,即使浏览器是退出之后再启动,表单中也会自动填好上一次搜索所填写的内容。 2Y/EITISF

  注意该Servlet用到了va,其中getCookieValue前面已经介绍过,headWithTitle用于生成HTML页面的一部分。另外,这里也用到了前面已经说明的LongLiveCookie类,我们用它来创建作废期限很长的Cookie。 )F4`|je U

  vj|} $JO

  package hall; O)Aq9-)(

  = dWDNh5

  import .*; M1FjF +]

  import rvlet.*; ;_0ad:l

  import tp.*; a.5CH*

  import .*; ~SIZ%ae[$2

  GU'+$ b@

  public class SearchEnginesFrontEnd extends HttpServlet {  B0r}Dk4

  public void doGet(HttpServletRequest request, c1/w6NG

  HttpServletResponse response) (loy/:l*OX

  throws ServletException, IOException { "IHjBAUR[

  Cookie[] cookies = tCookies(); IdVi p

  String searchString = RHF5w]P@6

  tCookieValue(cookies,  !#[(=

  "searchString", AvLvLu]Zik

  "Java Programming"); Y@cSeH

  String numResults = 3*F 3

  tCookieValue(cookies, Z$x/OnQ

  "numResults", @w+jXJ+

  "10"); Q^0i{s(zfM

  String searchEngine = iQBADY\CIH

  tCookieValue(cookies, = +:.3(l

  "searchEngine", 6EPC/=3Kz

  "google"); BZnx. !8

  tContentType("text/html"); I5( ;uM

  PrintWriter out = tWriter(); WPL?m})dn)

  String title = "Searching the Web"; N2 nS^vEhn

  intln(adWithTitle(title) + sV6qf= ?

  "<BODY BGCOLOR=\"#FDF5E6\">\n" + VSGi^

  "<H1 ALIGN=\"CENTER\">Searching the Web</H1>\n" + #gIU$(oP9t

  "\n" + VFuvC$

  "<FORM ACTION=\"/servlet/stomizedSearchEngines\">\n" + cN(/j#1|u

  "<CENTER>\n" + wFWc\(o[

  "Search String:\n" + rIZC*n/

  "<INPUT TYPE=\"TEXT\" NAME=\"searchString\"\n" + $ NqY5.0w

  " VALUE=\"" + searchString + "\"><BR>\n" + ^,MA5pj5v

  "Results to Show Per Page:\n" + hh,]:lT*

  "<INPUT TYPE=\"TEXT\" NAME=\"numResults\"\n" + f\c/1-/

  " VALUE=" + numResults + " SIZE=3><BR>\n" + c2{.X18rY

  "<INPUT TYPE=\"RADIO\" NAME=\"searchEngine\"\n" + :i

  " VALUE=\"google\"" + x4U

  checked("google", searchEngine) + ">\n" +  4!()kt[

  "Google |\n" + dDDqiiS5o

  "<INPUT TYPE=\"RADIO\" NAME=\"searchEngine\"\n" + _ Xg-@| 

  " VALUE=\"infoseek\"" + LQ,f:???K

  checked("infoseek", searchEngine) + ">\n" + Z!C5+I=5nI

  "Infoseek |\n" + ;+uH C*

  "<INPUT TYPE=\"RADIO\" NAME=\"searchEngine\"\n" + BalBWF{

  " VALUE=\"lycos\"" + aQB3pXW

  checked("lycos", searchEngine) + ">\n" + u}Kd8 e

  "Lycos |\n" + 7~]g$Fm{

  "<INPUT TYPE=\"RADIO\" NAME=\"searchEngine\"\n" + SL~z! 

  " VALUE=\"hotbot\"" + a8YoQ :r4

  checked("hotbot", searchEngine) + ">\n" + L+5c|MKcn

  "HotBot\n" + }eDM::=X

  "<BR>\n" + pj[k

  "<INPUT TYPE=\"SUBMIT\" VALUE=\"Search\">\n" + sv0W(0{W4

  "</CENTER>\n" + _qAWl[0?

  "</FORM>\n" + XU#Yw)YQ

  "\n" + 'P(7|C#

  "</BODY>\n" + S*)_3a5!!-

  "</HTML>\n"); vReO#nA

  } KT6Jn(

  [6\ZP`

  private String checked(String name1, String name2) { ` o`h~8

  if (uals(name2)) FCJN .B`

  return(" CHECKED"); _,g*"*bR

  else "~zwwTRt

  return(""); jG]c6{)-D

  } Kv:TY H

  } q:3y# h

  aWXN!I%

  va d ~~XB2o \

  前面的SearchEnginesFrontEnd Servlet把数据发送到CustomizedSearchEngines Servlet。本例在许多方面与前面介绍HTTP状态代码时的例子相似,区别在于,本例除了要构造一个针对搜索引擎的URL并向用户发送一个重定向应答之外,还要发送保存用户数据的Cookies。 :}`,l@Zx

  oEu3PZ}

  package hall; ,a`pp",F

  1HsoJgye

  import .*; .$%Y @AajF

  import rvlet.*; dP J*$y

  import tp.*; ?1`# r ?p

  import .*; KX{#g.t

  ,MGEOo

  public class CustomizedSearchEngines extends HttpServlet { dT?P|#)

  public void doGet(HttpServletRequest request, ~r/!S:F'

  HttpServletResponse response) awR\2#

  throws ServletException, IOException { n {'cb=

  vY= -[i`^

  String searchString = tParameter("searchString"); @Ubd%WdPA

  Cookie searchStringCookie = )YFe$

  new LongLivedCookie("searchString", searchString); 9r(Hyz'=h

  dCookie(searchStringCookie); Dv _w 2k

  searchString = code(searchString); 68wh AW

  String numResults = tParameter("numResults"); (j^"]'J

  Cookie numResultsCookie = Sx`5~hj

  new LongLivedCookie("numResults", numResults); F6 {5/

  dCookie(numResultsCookie); *qS5L/.zP

  String searchEngine = tParameter("searchEngine"); 7\4(V':x

  Cookie searchEngineCookie = v: A92h

  new LongLivedCookie("searchEngine", searchEngine); mq5\t?*ZJ

  dCookie(searchEngineCookie); XCc;z;$

  SearchSpec[] commonSpecs = tCommonSpecs(); 66, Iye

  for(int i=0; i<ngth; i++) { s(dn_hnu

  SearchSpec searchSpec = commonSpecs; =\3M/v

  if (tName().equals(searchEngine)) { TB ~}$u*

  String url = :X ;Y@k-

  keURL(searchString, numResults); t#9Gvu

  ndRedirect(url); 3[lP v6`

  return; 3lZ\os

  } qt4yz=B6l

  } )B!L^x

  ndError(_NOT_FOUND, \h9unc$|

  "No recognized search engine specified."); +SPDO6Z

  } y#(2

   .-QI:

  public void doPost(HttpServletRequest request, *V3 ou"U

  HttpServletResponse response) )-Rw8#,{

  throws ServletException, IOException { !elZRD1j

  doGet(request, response); .WG|PM9f

  } l.21jcf%M

  }

  查看本文来源

小孩晚上睡觉出汗是怎么回事
宝宝消化不良拉肚子怎么办
7个月的宝宝吃什么辅食

相关文章

一周热门

热点排行

热门精选

友情链接: 阿拉尔有哪些骨肿瘤科医院 上饶有哪些三丙医院 延安有哪些医院 抚州有哪些医院 延边有哪些医院 定西有哪些医院 拉萨有哪些医院 克拉玛依有哪些医院 文昌有哪些医院 三级医院 上海综合医院哪家好 神农架中医医院哪家好 眉山中医医院哪家好 铜陵中医医院哪家好 包头综合医院哪家好 上海高压氧科医院哪家好 上海小儿外科医院哪家好 上海小儿消化科医院哪家好 上海小儿耳鼻喉医院哪家好 上海麻醉科医院哪家好 广东地方病科医院哪家好 广东性病科医院哪家好 广东室缺医院哪家好 山东心血管医院哪家好 山东产前诊断科医院哪家好 山东感染内科医院哪家好 山东老年病科医院哪家好 山东新生儿科医院哪家好 江苏免疫科医院哪家好 江苏小儿心内科医院哪家好 江苏牙周科医院哪家好 四川老年病科医院哪家好 四川体检科医院哪家好 四川复杂先心病医院哪家好 河北过敏反应科医院哪家好 河北小儿皮肤科医院哪家好 台州成瘾医学科医院哪家好 台州心外科医院哪家好 十堰手外科医院哪家好 襄阳干部诊疗科医院哪家好 荆门整形科医院哪家好 荆门超声科医院哪家好 荆门医学影像科医院哪家好 孝感小儿肾内科医院哪家好 孝感小儿整形科医院哪家好 黄冈口腔科医院哪家好 黄冈碎石中心医院哪家好 神农架中医男科医院哪家好 濮阳遗传咨询科医院哪家好 濮阳内分泌科医院哪家好 濮阳种植科医院哪家好 濮阳中医五官科医院哪家好 许昌烧伤科医院哪家好 许昌正畸科医院哪家好 许昌牙周科医院哪家好 三门峡小儿内科医院哪家好 承德急诊科医院哪家好 承德屈光医院哪家好 承德综合医院哪家好 沧州中医老年病科医院哪家好 沧州中医皮肤科医院哪家好 沧州中医消化科医院哪家好 沧州中医免疫内科医院哪家好 娄底神经外科医院哪家好 娄底泌尿外科医院哪家好 娄底功能神经外科医院哪家好 娄底牙周科医院哪家好 娄底眼外伤医院哪家好 娄底针灸科医院哪家好 娄底民族医学科医院哪家好 合肥小儿眼科医院哪家好 阜阳有哪些新生儿科医院 阜阳有哪些小儿精神科医院 芜湖眼底医院哪家好 芜湖角膜科医院哪家好 芜湖眼整形医院哪家好 阜阳有哪些心理咨询科医院 芜湖核医学科医院哪家好 宿州有哪些心血管内科医院 蚌埠骨肿瘤科医院哪家好 蚌埠小儿整形科医院哪家好 宿州有哪些中医儿科医院 蚌埠放射科医院哪家好 蚌埠结核病科医院哪家好 蚌埠肝炎医院哪家好 六安有哪些遗传咨询科医院 福州有哪些血液科医院 西安有哪些呼吸科医院 阳泉器官移植医院哪家好 阳泉牙周科医院哪家好 铜川有哪些康复医学科医院 铜川有哪些小儿眼科医院 公主岭青光眼医院哪家好 公主岭中医内分泌医院哪家好 公主岭预防保健科医院哪家好 辽源营养科医院哪家好 辽源骨科医院哪家好 柳州实验中心医院哪家好 柳州动脉导管未闭医院哪家好 桂林泌尿外科医院哪家好
媒体合作:

Copyright (c) 2011 八零CMS 版权所有 备案号:京ICP0000001号

网站地图