第三章 会话跟踪简介 在这一章里面我们将要学习以下几点内容: 1:Servlet中页面跳转的方法 2:Sevlet中session对像 3:Serlvet中Cookie对像 4:Serlvet上下文 Servlet中页面跳转的方法 1:request.getRequestDispatcher("目标").forward(request,response); 2:response.sendRedirect("目标"); 3:forward与sendRedirect的区别: A:forward跳转之后在地址栏中显示依然是旧网页的地址,sendRedirect显示的是新网页的地址 B:forward只能跳转到当前Web程序中的页面,而sendRedirect可以跳到任何目录。 比如: request.getRequestDispatcher("http://www.sina.com").forward(request,response);错误 response.sendRedirect("http://www.sina.com"); 正确 什么是Session对像 1:首先你应该把session想像成为一个大盒子,里面用来存放客户的数据 2:当你打开一个网站的首页时,服务器就会为你创建一个大盒子,并且为这个大盒子编一个号, 于是这个大盒子就可以让你在这个网站的不同页面之间共享,直到你离开这个网站的时候,这服务器又会 收回这个大盒子 3:可见session对像的其中的一个功能就是为了实现让同一个客户端在不同页面之间实现数据共享. 但是一旦用户离开这个网站,那么session也就会自动消失 4:一个网站可以被很多人同时访问,访问的每一个人在打开主页时,都会有一个大盒子,即session. 如果另一个用户也同时访问网站,他也拥有自己的Session,但两个用户之间无法通过Session共享信息 5:以游泳分配一个柜子为例来说明sesson的用法 6:session对像的常用手法: A:在一个页面里面创建一个session变量. B:在另外一个页面里面去使用该session变量. Session对像的方法 1)在Servlet中要使用Session,必须要使用HttpSession接口 2)Session对像是一个数据集合,也就是一个Session对像里面可以放很多session变量, 每一个Session变量都可以存放数据 3)if(request.getSession().getAttribute("IsLogin")!=null) 判断一个Session变量IsLogin是否存在,只有存在才可以继续读取里面的数据 3)得到一个IsLogin变量的值 if(request.getSession().getAttribute("IsLogin")!=null) 只有判断存在了,才可以读数据 request.getSession().getAttribute("IsLogin"): 4)request.getSession().setAttribute("IsLogin","Yes");设置session中IsLogin里面的值 什么是Cookies对像 cookies对像可以客户端长期保存信息。在客户端的计算机里面会有一个cookies文件夹,那里就是存放客户端的信息的。当客户端第一次去访问某个网站时,该网站就会在客户端的计算机里面偷偷地写入一个Cookies下一次再访问该网站时,它就会读取你的计算机硬盘上cookies,并将新的信息保存在你的计算机上。跟session不同的,cookies是把信息存储在客户端,不是在服务器里面。 操作cookies 1:得到所有的Cookies Cookie[] cookies=request.getCookies(); 2:得到指定Cookies的名字: Cookie.getName() 3:得到指定Cookies的值 Cookie.getValue(); 4:设置指定Cookies的值 cookie.setValue(值) 5:添加一个Cookies cookie= new Cookie("Visted","1"); cookie.setMaxAge(10000);设置cookie的过期时间以钞为单位 response.addCookie(cookie); 4:修改指定cookie的值:注意修改之后也要重新添加,否则添加之后无效 cookie.setValue(值); cookie.setMaxAge(1000); response.addCookie(cookie); 应用举例: 1:证明正常情况下,一个网页或Servlet的数据是不能给另外一个网页或servelt共享 做两个servlet,一个servlet里面给一个session变量赋值,给一个私有变量赋值 在另外一个servlet里面去使用session变量与私有变量的值,看一下结果 2:有一个登录界面(login.html),一个主页面(index),在主页面里面有二个超链接分别为 无限下载,新闻快递。用户必须要登录之后进入主页面,然后才能使用这二个超链接功 能,如果直接使用Index.html则会提示没有登录,然后转到登录界面 [注意使用session对像] 登录页面-------->转到servlet1,用来处理用户名是否正确,如果正确,转到主页面,否则转到 错误页面 主页面---------->转到servlet2,用来判断用户是否登录过,如果登录过则转到无限下载或新闻 快递页面,否则转到登录页面 3:统计某个客户端曾经访问某个网站的次数,和网站的所有访问次数 Cookie[] cookies=request.getCookies(); if (cookies!=null) //如果cookies不为空 { for (i = 0; i < cookies.length; i++) { if (cookies[i].getName().equals("Visted")) { break; } } if (i<cookies.length) //找到 { cookie=cookies[i]; int n=Integer.parseInt(cookie.getValue()); cookie.setValue(Integer.toString(n+1)); cookie.setMaxAge(1000); response.addCookie(cookie); } else { cookie= new Cookie("Visted","1"); cookie.setMaxAge(10000); response.addCookie(cookie); } } else //为空,一定要创建 { cookie= new Cookie("Visted","1"); cookie.setMaxAge(10000); response.addCookie(cookie); } out.println("你共访问网"+cookie.getValue()); 4:在登录时,选择自动登录,下次在登录时直接进入主页面 创建一个Servlet,在里面判断是否有Cookies,如果有则直接进入主页面, 如果没有则首先进入登录页面 Serlvet上下文 1:Servlet中的Session可以让同一个客户端在不同网页之间进行共享 2:Servlet中的上下文可以让不同的客户端来共享一些数据,这些数据要存放在上下文中, 可以把上下文看成一个容器,里面存放的数据可以被所有客户端来共享 3:如何得到上下文的一个实例: ServletContext context=this.this.getServletContext(); 4:如何得到一个上下文指定键的值: if (context.getAttribute("Pwd")!=null) { Pwd=context.getAttribute("Pwd").toString(); } 5:如何设置一个上下文的值: if (context.getAttribute("Pwd")==null) { context.setAttribute("Pwd","***"); } 举例: 1:通过示例,说明Servlet中的Session与上下文的不同 步骤: 1)做一个appser1,在它里面创建一个Session和一个上下文, 创建在appser2中输出Session和上下文 2)打开IE,先在同一个浏览器中先执行appser1,再执行appser2 3)打开另外一个IE直接执行appser2,看数据共享情况 2:通过上下文做一个聊天室 A:一个登录页面,提交到Dowithser中 B:一个Dowith的Serlvet用来把Dowithser中的用户名放入session中 C:一个框架集,含有上下两部分,下一部分包含一个talk.html页面, 上一个是一个topser的Servlet,用来显示所有发言

评论