第5章 会话及其会话技术.docx
《第5章 会话及其会话技术.docx》由会员分享,可在线阅读,更多相关《第5章 会话及其会话技术.docx(13页珍藏版)》请在冰豆网上搜索。
第5章补充案例
案例5-1Cookie对象和常用API介绍一、案例描述
1、考核知识点
名称:
Cookie对象和常用API介绍编号:
028005002
2、练习目标
掌握Cookie对象和常用API的运用。
3、需求分析
现状电商网站发展迅速,在网站浏览的客户,包括非注册用户较多,时常浏览各种商品信息,在用户关闭浏览器,下次再进行访问的时候,有些网站会记住该浏览器用户上次的访问查看记录,这是一种非常便捷友好的设计。
本案例就模拟演示展示用户上次浏览商品记录信息。
4、设计思路(实现原理)
1)创建Demo1类继承Httpservlet类,
2)在Demo1中获取所有的cookie并遍历,查看是否有上次存储的浏览商品记录信息,然后进行相关处理
3)在web.xml中配置初始化参数和类的映射
4)通过浏览器访问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;iout.println("您上次浏览商品为:
"+cookies[i].getValue());break;
}
编写Demo1,其代码如下:
1
}
}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文件:
Demo1
cn.itheima.Demo1
Demo1
/Demo1
启动Tomcat服务器,在地址栏中输入http:
//localhost:
8080/chapter05/Demo1,首次访问浏览器显示的结果如下图所示:
在浏览器上新打开一个页面,再次访问http:
//localhost:
8080/chapter05/Demo1,浏览器显示的结果如下图所示:
三、案例总结
1、可以通过request对象获取cookie信息,并且通过cookie对象常用API进行相关操作。
2、本案例中使用cookie记录了第一次访问信息并存储在浏览器写数据,第二次再次访问就获取到了上次浏览的记录信息。
1
案例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,查看页面效果。
二、案例实现
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);
}
编写Demo2,其代码如下:
1
}
编写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");//客户端tokenif(clientToken==null)
returnfalse;
String serverToken =
(String)request.getSession().getAttribute("token");//服务器端token
if(serverToken==null)//如果已经提交过一次了,服务器会把随机数移除掉,
serverToken就变成null了
returnfalse;if(!
clientToken.equals(serverToken))
returnfalse;returntrue;
}
}
Demo2
cn.itheima.Demo2
配置web.xml文件:
Demo2
/Demo2
Demo3
cn.itheima.Demo3
Demo3
/Demo3
启动Tomcat服务器,在地址栏中输入http:
//localhost:
8080/chapter05/Demo2,访问浏览器显示的结果如下图所示:
在输入框随机输入用户名,如”zhangsan”,连续2次点击提交按钮,浏览器显示的结果如下图所示:
再在浏览器上新打开一个页面,再次在地址栏中输入http:
//localhost:
8080/chapter05/Demo2,在浏览器输入框输入用户名,后再次点击一次提交按钮,短暂延迟后浏览器显示的结果如下所示:
三、案例总结
可以通过Session对象和常用API来记录用户提交表单信息,将两次提交进行对比,在后台控制表单提交。
1
案例5-3Session的超时管理
一、案例描述
1、考核知识点
名称:
Session的超时管理编号:
028005005
2、练习目标
掌握