第5章 会话及其会话技术.docx
- 文档编号:26072087
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:19
- 大小:799.43KB
第5章 会话及其会话技术.docx
《第5章 会话及其会话技术.docx》由会员分享,可在线阅读,更多相关《第5章 会话及其会话技术.docx(19页珍藏版)》请在冰豆网上搜索。
第5章会话及其会话技术
第5章补充案例
案例5-1Cookie对象和常用API介绍
一、案例描述
1、考核知识点
名称:
Cookie对象和常用API介绍
编号:
028005002
2、练习目标
Ø掌握Cookie对象和常用API的运用。
3、需求分析
现状电商网站发展迅速,在网站浏览的客户,包括非注册用户较多,时常浏览各种商品信息,在用户关闭浏览器,下次再进行访问的时候,有些网站会记住该浏览器用户上次的访问查看记录,这是一种非常便捷友好的设计。
本案例就模拟演示展示用户上次浏览商品记录信息。
4、设计思路(实现原理)
1)创建Demo1类继承Httpservlet类,
2)在Demo1中获取所有的cookie并遍历,查看是否有上次存储的浏览商品记录信息,然后进行相关处理
3)在web.xml中配置初始化参数和类的映射
4)通过浏览器访问Demo1,查看页面效果。
二、案例实现
编写Demo1,其代码如下:
publicclassDemo1extendsHttpServlet{
protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)
throwsServletException,IOException{
resp.setContentType("text/html;charset=utf-8");
PrintWriterout=resp.getWriter();
//查询所有cookie信息
Cookie[]cookies=req.getCookies();
if(cookies!
=null){
for(inti=0;i Stringname=cookies[i].getName(); if(name.equals("product")){ out.println("您上次浏览商品为: "+cookies[i].getValue()); break; } } }else{ out.println("Nocookie."); Cookiecookie=newCookie("product","IPhone7"); cookie.setMaxAge(60*60); resp.addCookie(cookie); } } protectedvoiddoPost(HttpServletRequestreq,HttpServletResponseresp) throwsServletException,IOException{ doGet(req,resp); } } 配置web.xml文件: 启动Tomcat服务器,在地址栏中输入http: //localhost: 8080/chapter05/Demo1,首次访问浏览器显示的结果如下图所示: 在浏览器上新打开一个页面,再次访问http: //localhost: 8080/chapter05/Demo1,浏览器显示的结果如下图所示: 三、案例总结 1、可以通过request对象获取cookie信息,并且通过cookie对象常用API进行相关操作。 2、本案例中使用cookie记录了第一次访问信息并存储在浏览器写数据,第二次再次访问就获取到了上次浏览的记录信息。 案例5-2Session对象和常用API介绍 一、案例描述 1、考核知识点 名称: Session对象和常用API介绍 编号: 028005004 2、练习目标 Ø掌握Session对象和常用API的运用。 3、需求分析 在实际运用中的表单信息提交的时候,可能会由于网络原因导致提交页面刷新缓慢,有些用户就会重复提交表单,就会产生重复数据和请求。 本案例就模拟演示在servlet中如何使用session对象控制表单重复提交。 4、设计思路(实现原理) 1)创建Demo2类,用户返回表单,同时生成唯一的随机token, 2)创建Demo2类,Demo2类中获取提交的表单信息,同时验证token来验证用户是否重复提交, 3)在web.xml中配置初始化参数和类的映射 4)通过浏览器访问Demo2,查看页面效果。 二、案例实现 编写Demo2,其代码如下: publicclassDemo2extendsHttpServlet{ protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp) throwsServletException,IOException{ resp.setContentType("text/html;charset=utf-8"); PrintWriterout=resp.getWriter(); Stringtoken=(newDate()).getTime()+"";//获得当前时间随机数 req.getSession().setAttribute("token",token);//在服务器端保存随机数 //产生表单 out.println(" out.println(" out.println("用户名: out.println(" out.println(""); } protectedvoiddoPost(HttpServletRequestreq,HttpServletResponseresp) throwsServletException,IOException{ doGet(req,resp); } } 编写Demo3,其代码如下: publicclassDemo3extendsHttpServlet{ protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp) throwsServletException,IOException{ resp.setContentType("text/html;charset=utf-8"); PrintWriterout=resp.getWriter(); try{ Thread.sleep(2000);//模拟服务器处理数据时间 }catch(InterruptedExceptione){ e.printStackTrace(); } booleanb=isToken(req);// if(b==false){ out.write("请不要重复提交! "); return; } //处理提交请求之前,需要先将session中保存的随机数移除掉 req.getSession().removeAttribute("token"); out.write("处理用户提交请求成功! "); } protectedvoiddoPost(HttpServletRequestreq,HttpServletResponseresp) throwsServletException,IOException{ doGet(req,resp); } privatebooleanisToken(HttpServletRequestrequest){ StringclientToken=request.getParameter("token");//客户端token if(clientToken==null) returnfalse; StringserverToken=(String)request.getSession().getAttribute("token");//服务器端token if(serverToken==null)//如果已经提交过一次了,服务器会把随机数移除掉,serverToken就变成null了 returnfalse; if(! clientToken.equals(serverToken)) returnfalse; returntrue; } } 配置web.xml文件: 启动Tomcat服务器,在地址栏中输入http: //localhost: 8080/chapter05/Demo2,访问浏览器显示的结果如下图所示: 在输入框随机输入用户名,如”zhangsan”,连续2次点击提交按钮,浏览器显示的结果如下图所示: 再在浏览器上新打开一个页面,再次在地址栏中输入http: //localhost: 8080/chapter05/Demo2,在浏览器输入框输入用户名,后再次点击一次提交按钮,短暂延迟后浏览器显示的结果如下所示: 三、案例总结 可以通过Session对象和常用API来记录用户提交表单信息,将两次提交进行对比,在后台控制表单提交。 案例5-3Session的超时管理 一、案例描述 1、考核知识点 名称: Session的超时管理 编号: 028005005 2、练习目标 Ø掌握Session失效的一般用法和场景。 3、需求分析 在实际网站用户登陆后,在浏览其他页面过程中,可能中间会有其他事情停顿,一段时间内没有对该网站页面再次发送请求访问,待到一定时间过后(即保存登陆用户信息的session超时),当该用户再次点击其他请求链接的时候,就会返回到登陆界面,要求用户重新登陆。 本案例将模拟简单的登陆然后session超时跳转到再次登陆界面。 4、设计思路(实现原理) 1)创建User用户实体类,有username和password两个属性, 2)创建Demo4类,Demo4类提供用户登陆跳转方法, 3)创建Demo5类,Demo5类模拟session超时失效,然后再次跳转到登陆页面 4)创建login.html登陆页面, 5)在web.xml中配置初始化参数和类的映射 6)通过浏览器访问login.html,并进行相关操作,查看页面效果。 二、案例实现 编写User,其代码如下: publicclassUser{ privateStringusername; privateStringpassword; publicStringgetUsername(){ returnusername; } publicvoidsetUsername(Stringusername){ this.username=username; } publicStringgetPassword(){ returnpassword; } publicvoidsetPassword(Stringpassword){ this.password=password; } } 编写Demo4,其代码如下: publicclassDemo4extendsHttpServlet{ protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp) throwsServletException,IOException{ resp.setContentType("text/html;charset=utf-8"); PrintWriterout=resp.getWriter(); Stringusername=req.getParameter("username"); Stringpassword=req.getParameter("password"); Useruser=newUser(); user.setUsername(username); user.setPassword(password); HttpSessionsession=req.getSession(); session.setAttribute("user",user); out.print("您已登录,欢迎你,"+user.getUsername()+"! "); out.print(" //创建Cookie存放Session的标识号 Cookiecookie=newCookie("JSESSIONID",session.getId()); cookie.setMaxAge(60*30); cookie.setPath("/chapter05"); resp.addCookie(cookie); } protectedvoiddoPost(HttpServletRequestreq,HttpServletResponseresp) throwsServletException,IOException{ doGet(req,resp); } } 编写Demo5,其代码如下: publicclassDemo5extendsHttpServlet{ protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp) throwsServletException,IOException{ resp.setContentType("text/html;charset=utf-8"); HttpSessionsession=req.getSession(); PrintWriterout=resp.getWriter(); Useruser=null; try{ Thread.sleep(1000); session.invalidate();//模拟session超时失效 user=(User)session.getAttribute("user"); }catch(Exceptione){ e.printStackTrace(); System.out.println("异常: "+e.getMessage()); }finally{ if(user==null){ resp.getWriter().print( "您还没有登录,请 }else{ out.print("苹果7手机: 5555元"); } } } protectedvoiddoPost(HttpServletRequestreq,HttpServletResponseresp) throwsServletException,IOException{ doGet(req,resp); } } 编写login.html,其代码如下:
用户名:
密码:
name="password"type="password"/> value="提交"id="bt"/> 配置web.xml文件: 启动Tomcat服务器,在地址栏中输入http: //localhost: 8080/chapter05/login.html,访问浏览器显示的结果如下图所示: 在输入框随机输入用户名和密码,如”zhangsan”、”123”,然后提交,浏览器显示的结果如下图所示: 在上图中显示用户登陆成功,并将用户放在了session中管理,再点击上图中的查看手机商品链接,短暂延迟后浏览器显示的结果如下所示: 同时观察Eclipse项目控制台可以发现报错Sessionalreadyinvalidated(session已经失效),信息如下: 三、案例总结 1、本案例简单模拟了日常用户浏览网站中可能发生session失效的情况,会要求登陆用户重新登陆,才可以继续进行网站相关页面访问,使用了session.invalidate()方法进行管理session。 2、同时在会话过程中,会话的有效时间也可以在web.xml文件中设置,其默认值由Servlet容器定义。 在 案例5-4[任务5-3]Session实现用户登录 一、案例描述 1、考核知识点 名称: [任务5-3]Session实现用户登录 编号: 028005007 2、练习目标 Ø掌握Session对象和常用API的运用。 3、需求分析 在实际运用中的用户登陆网站中,多提供有记住密码和自动登陆等功能,方便同一用户短时间内不用再输入用户名和密码等繁琐信息可以快捷登陆。 本案例将模拟用户自动登陆功能。 4、设计思路(实现原理) 4)创建login.html页面,编写用户登陆界面 5)创建Demo6类,编写用户登陆判断逻辑处理和自动登陆业务, 6)在web.xml中配置初始化参数和类的映射 4)通过浏览器访问login.html,进行相关操作,查看页面效果。 二、案例实现 编写Demo6,其代码如下: publicclassDemo6extendsHttpServlet{ protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp) throwsServletException,IOException{ resp.setContentType("text/html;charset=utf-8"); PrintWriterout=resp.getWriter(); //首次遍历用户登陆信息,查看是否存储有自动登陆相关信息 Cookie[]cookies=req.getCookies(); for(Cookiecookie: cookies){ if(cookie.getName().equals("username")){ cookie.setMaxAge(5); resp.addCookie(cookie); out.print("您已登录,欢迎你! "); out.print(" return; } } //用户收集用户登陆信息 Stringusername=req.getParameter("username"); StringautoLogin=req.getParameter("
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第5章 会话及其会话技术 会话 及其 技术