黑马程序员JavaWeb之核心技术Cookie与Session.docx
- 文档编号:30572120
- 上传时间:2023-08-16
- 格式:DOCX
- 页数:16
- 大小:20.07KB
黑马程序员JavaWeb之核心技术Cookie与Session.docx
《黑马程序员JavaWeb之核心技术Cookie与Session.docx》由会员分享,可在线阅读,更多相关《黑马程序员JavaWeb之核心技术Cookie与Session.docx(16页珍藏版)》请在冰豆网上搜索。
黑马程序员JavaWeb之核心技术Cookie与Session
『黑马程序员』JavaEE就业班同步笔记第一阶段:
JavaWeb之核心技术--Cookie与Session
1案例一:
记录用户的上次登陆访问时间.
1.1需求:
用户登录完成后,显示您是第x位访问的用户,您的上次访问时间是:
yyyy-MM-dd.
*如果第一次访问的话,只显示您是第x位用户.
*如果不是第一次访问的话,显示您是第x位访问的用户,您的上次访问时间是:
yyyy-MM-dd.
1.2分析:
1.2.1技术分析:
【会话技术】
∙什么是会话:
用户翻开一个浏览器访问页面,访问网站的很多页面,访问完成后将浏览器关闭的过程称为是一次会话.
∙常见的会话技术:
*Cookie :
将数据保存到客户端浏览器.
*Session :
将数据保存到效劳器端.
∙
为什么使用会话技术?
∙
*私有的数据,购物信息数据保存在会话技术中.
参见图一和图二
∙
使用会话技术:
∙
【Cookie技术的使用】
∙
向浏览器保存数据:
∙
ServletResponse有一个方法:
*voidaddCookie(Cookiecookie);
∙
获得浏览器带过来的Cookie:
∙
ServletRequest有一个方法:
*Cookie[]getCookies();
∙
创立一个Cookie对象:
∙
*Cookie(Stringname,Stringvalue);
【JSP的简单概述】
∙
什么是JSP :
JavaServerPages(Java效劳器端页面).JSP=Java代码+HTML的元素+JSP内置东西
∙
∙
SUN公司为什么推出JSP动态网页开发技术:
∙
*SUN公司推出的Servlet技术进行动态网页开发.发现Servlet自身有缺乏没有方法与ASP,PHP技术竞争.想在动态网页中输出表单.在Servlet中获得PrintWriterout=response.getWriter();
*out.println(“
*out.println(“〞);
*SUN又推出了动态的网页开发技术就是JSP.
∙
JSP的执行过程:
∙
*JSP会被翻译成Servlet,编译成class进行执行的.
∙
JSP的嵌入Java代码:
JSP的脚本元素
∙
*<%!
%>:
翻译成类中的成员局部.定义变量,定义方法,定义类.Servlet是线程不平安的,尽量少在类中定义成员属性!
!
*<% %>:
翻译成类的service方法内部的内容.定义变量,定义类,直接写代码块.
*<%= %>:
翻译成service方法内部的out.print();
1.2.2步骤分析:
【步骤一】:
准备登陆的案例.
【步骤二】:
在统计人数的Servlet中.判断是否是第一次访问.
【步骤三】:
根据是否是第一次显示不同的信息,同时将当前的时候保存到Cookie中.
1.3代码实现
[AppleScript]纯文本查看复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
publicclassCountServletextendsServlet{
privatestaticfinallongserialVersionUID=1L;
protectedvoiddoGet(ServletRequestrequest,ServletResponseresponse)throwsServletException,IOException{
response.setContentType("text/html;charset=UTF-8");
Integercount=(Integer)this.getServletContext().getAttribute("count");
// response.getWriter().println("
现在网站被访问的次数为:
"+count+"");
/**
*获得浏览器中带过来的所有的Cookie信息,从数组中查找有没有指定名称的Cookie
*判断用户是否是第一次访问:
(从数组中没有找到指定名称的Cookie)
**如果是第一次:
显示欢送,记录当前访问的时间存入到Cookie中.
**如果不是第一次:
显示欢送,上一次访问时间,同时记录当前访问的时间存入到Cookie中。
*/
//获得浏览器带过来的所有的Cookie:
Cookie[]cookies=request.getCookies();
//从数组中查找指定名称的Cookie:
Cookiecookie=CookieUtils.findCookie(cookies,"lastVisit");
//判断是否是第一次:
if(cookie==null){
//第一次访问
response.getWriter().println("您是第"+count+"位访客!
");
}else{
//不是第一次
Longl=Long.parseLong(cookie.getValue());
Dated=newDate(l);
response.getWriter().println("您是第"+count+"位访客!
上次访问时间是:
"+d.toLocaleString());
}
//创立一个Cookie对象:
Cookiec=newCookie("lastVisit",""+System.currentTimeMillis());
//保存到浏览器端:
response.addCookie(c);
}
protectedvoiddoPost(ServletRequestrequest,ServletResponseresponse)throwsServletException,IOException{
doGet(request,response);
}
}
1.4总结:
1.4.1Cookie的常用API:
∙Cookie的常用的API:
*getName();
*getValue();
*setDomain(Stringdomain);--设置Cookie的有效域名.//
*setPath(Stringpath);--设置Cookie的有效路径.
*setMaxAge(intmaxAge);--设置Cookie的有效时间.
∙Cookie的分类有关:
*会话级别的Cookie:
默认的Cookie.关闭浏览器Cookie就会销毁.
*持久级别的Cookie:
可以设置Cookie的有效时间.那么关闭浏览器Cookie还会存在.手动销毁持久性Cookie.setMaxAge(0)---前提是有效路径必须一致.
2案例二:
记录用户的商品浏览记录:
2.1需求:
在购物网站上浏览商品的信息,商家为了留住用户,记住之前浏览的一些商品.
2.2分析:
2.2.1步骤分析:
【步骤一】:
在登录完成后,显示商品列表页面.
【步骤二】:
为商品列表页面做一些准备工作.
【步骤三】:
点击某个商品,将商品ID传递一个Servlet.
【步骤四】:
在Servlet中:
判断是否是第一次浏览商品
【步骤五】:
如果是第一次:
将商品的ID存入到Cookie中即可.
【步骤六】:
如果不是第一次:
判断该商品是否已经浏览了.
【步骤七】:
如果浏览器过.删除之前元素,将该元素添加到最前面.
【步骤八】:
如果没有浏览过该商品.判断最大长度,没有超过限制,直接加到最前,如果已经超过限制,删除最后一个,将其插入到最前.
2.3代码实现:
[AppleScript]纯文本查看复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
publicclassProductServletextendsServlet{
privatestaticfinallongserialVersionUID=1L;
protectedvoiddoGet(ServletRequestrequest,ServletResponseresponse)throwsServletException,IOException{
/**
**接收商品id.
**接收从客户端带过来的所有Cookie.
**从Cookie的数组中查找指定名称的Cookie.
**判断是否是第一次浏览商品:
* *第一次浏览商品
* *直接将商品的ID存入到Cookie.
* *将Cookie回写到浏览器.
* *不是第一次浏览商品1-2
* *判断当前的商品是否已经在浏览记录.
* *已经存在:
2-1移除当前元素,将当前元素添加到最开始.
* *没在浏览记录中:
* *判断是否已经超过了最大长度:
如果超过2-1-3:
删除最后一个将当前元素添加到最前面.
* *没有超过:
直接将该元素添加到最前位置.
* *将转换的id的值存入到Cookie,回写浏览器.
*/
//接收id:
Stringid=request.getParameter("id");
//获得所有的Cookie的信息:
Cookie[]cookies=request.getCookies();
//判断是否是第一次:
Cookiecookie=CookieUtils.findCookie(cookies,"history");
if(cookie==null){
//第一次浏览商品
Cookiec=newCookie("history",id);
c.setPath("/day11");
c.setMaxAge(60*60*24*7);
response.addCookie(c);
}else{
//不是第一次浏览
//判断选择的商品是否已经在浏览记录中2-1
Stringvalue=cookie.getValue();
String[]ids=value.split("-");
//将数组变为集合:
LinkedList
if(list.contains(id)){
//之前浏览过该商品
list.remove(id);//1-2-3
list.addFirst(id);
}else{
//没有浏览过该商品.
if(list.size()>=3){
//超过3个
list.removeLast();
list.addFirst(id);
}else{
//没到3个.
list.addFirst(id);
}
}
//将list中的元素取出,使用-连接上保存到Cookie,写回浏览器.
StringBuffersb=newStringBuffer();
for(Strings:
list){
sb.append(s).append("-");
}
StringsValue=sb.toString().substring(0,sb.length()-1);
System.out.println(sValue);
//存入到Cookie中
Cookiec=newCookie("history",sValue);
c.setPath("/day11");
c.setMaxAge(60*60*24*7);
response.addCookie(c);
}
request.getRequestDispatcher("/demo2/product_info.htm").forward(request,response);
}
protectedvoiddoPost(ServletRequestrequest,ServletResponseresponse)throwsServletException,IOException{
doGet(request,response);
}
}
2.4总结:
2.4.1清空浏览记录:
删除持久性的Cookie:
[AppleScript]纯文本查看复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
publicclassClearServletextendsServlet{
privatestaticfinallongserialVersionUID=1L;
protectedvoiddoGet(ServletRequestrequest,ServletResponseresponse)throwsServletException,IOException{
Cookiecookie=newCookie("history",null);
cookie.setPath("/day11");
cookie.setMaxAge(0);
response.addCookie(cookie);
response.sendRedirect("/day11/demo2/product_list.jsp");
}
/**
*@seeServlet#doPost(ServletRequestrequest,ServletResponseresponse)
*/
protectedvoiddoPost(ServletRequestrequest,ServletResponseresponse)throwsServletException,IOException{
//TODOAuto-generatedmethodstub
doGet(request,response);
}
}
3案例三:
将商品添加到购物车:
3.1需求:
查看某个商品详情的时候,添加到购物车.需要将商品添加到购物车.
3.2分析:
1.4.2.1技术分析:
【Session的概述】
Cookie本身是有大小和个数的限制.Session没有限制.Cookie的数据保存在客户端,Session数据保存在效劳器端.
∙Session的执行原理:
基于Cookie的.
∙使用Session:
*获得Session:
*request.getSession();
3.2.2步骤分析:
【步骤一】:
点击参加购物车提交到Servlet
【步骤二】:
在Servlet将购物的商品存入到Session中.
【步骤三】:
可以创立一个Map集合用于保存购物信息Map的key可以是商品的名称,Map的value是数量.
【步骤四】:
在购物车页面中显示Map中的数据就可以.
3.3 代码实现:
[AppleScript]纯文本查看复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
publicclassCartServletextendsServlet{
privatestaticfinallongserialVersionUID=1L;
protectedvoiddoGet(ServletRequestrequest,ServletResponseresponse)throwsServletException,IOException{
//接收商品名称:
Stringname=newString(request.getParameter("name").getBytes("ISO-8859-1"),"UTF-8");
//创立Map集合用于保存购物信息.Map
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 黑马 程序员 JavaWeb 核心技术 Cookie Session