cookie&session完整笔记

cookie&session
第一章 浏览器与服务器交互信息的获取
1-1请求头:浏览器告诉服务器请求的基本信息

1-2响应头:服务器告诉浏览器响应的基本信息

1-3响应状态码
200:响应成功
404:找不到的资源(访问路径有问题)
405:你的请求方式不被允许(不被接受)
我们自定义一个方法来接收请求
fun()我们规定这个方法就是用来接收get请求的(代替我们传统的doGet方法)

500:服务器内部编码错误(java代码),找不到的servlet类
302:重定向
304:读取浏览器缓存

1-4 浏览器对于头信息的观察
打开浏览器,在浏览器地址栏输入访问地址
在发出请求之前,点击F12
F12信息框弹出之后,我们再发出请求

第二章cookie
2-1 cookie概述,画图说明cookie执行原理
客户端的会话技术,是因为cookie对象保存在浏览器上了.

2-3 通过观察头信息,掌握cookie的使用
javax.servlet.http.Cookie
(1)创建一个cookie
new Cookie(String key,String value)
(2)写回浏览器:
response.addCookie(Cookie c)

在不设置cookie对象失效时间的基础上

案例1:
访问servlet1,由servlet1创建一个cookie对象,响应回浏览器
不重启浏览器的情况下
访问servlet2,携带着cookie对象访问

案例2:
访问servlet1,由servlet1创建一个cookie对象,响应回浏览器
重启浏览器的情况下
访问servlet2,不携带cookie对象访问

1和2以上两个案例得出结论
cookie对象在不做任何设置的情况下,是保存在浏览器的内存上.关闭了浏览器,内存中的cookie对象自动销毁.

在为cookie对象设置了失效时间的基础上
案例3
访问servlet1,由servlet1创建一个cookie对象(设置了失效时间),响应回浏览器
不重启浏览器的情况下
访问servlet2,只要没有超过cookie的失效时间,携带着cookie对象访问.如果超过了失效时间,cookie对象自动销毁,访问时就不携带cookie对象了.

案例4
访问servlet1,由servlet1创建一个cookie对象(设置了失效时间),响应回浏览器
重启浏览器的情况下
访问servlet2,只要没有超过cookie的失效时间,携带着cookie对象访问.如果超过了失效时间,cookie对象自动销毁,访问时就不携带cookie对象了.

3和4以上两个案例得出结论
为cookie对象设置了失效时间,不管是否重新启动浏览器,只要cookie对象没有超过失效时间,访问就一定携带,如果超过了失效时间,就不携带.设置了失效时间后,cookie对象是保存在了浏览器的硬盘上.

2-4 cookie的常用方法
(1)获取cookie:
Cookie[] request.getCookies()
(2)获取cookie的key(名称)
getName():
(3)获取指定cookie的值
getValue()
(4)设置访问域
setPath("/1_servlet1")
(5)设置存储时间
setMaxAge(秒)
时间大于0:cookie存放到硬盘中
不设置:cookie存放到内存中

2-5 cookie的常用方式及在浏览器中的设置
(1)结合126的十天免登陆
(2)浏览器启用/禁用cookie的方式
(3)浏览器清除cookie的方式
(4)如果是不同的浏览器发送请求,cookie如何处理
cookie不能跨浏览器
不同的浏览器,cookie对象是不共享的
第三章session
3-1 session概述画图说明session执行原理
session是服务器端会话技术
会话是保存在服务器上

3-2 session对象的创建及获取
request.getSession()
request.getSession(boolean)
request.getSession(true):若存在有效会话则返回该会话,否则新建一个会话。
request.getSession(false):若存在会话则返回该会话,否则返回NULL

3-3 session的常用方法
(1)获取JSESSIONID
getId() String
(2)判断是否是新的session对象
isNew() boolean
(3)session对象的销毁
invalidate()
(4)设置空闲失效时间
setMaxInactiveInterval(秒)
如果我们没有使用以上代码为session对象设置失效时间
那么session对象的失效时间会默认的执行tomcat为我们配置好的空闲失效时间 30分钟
在tomcat conf/web.xml
500多行

(5)域对象存值(专题讲解)
	setAttribute(String key,Object value)
(6)域对象取值(专题讲解)
	getAttribute(String key) Object

3-4总结session与cookie的关系与区别
在我们的实际项目开发中,普遍使用的都是session对象
session对象是保存在服务器端的,而且方便管理,安全性更高.
session对象的执行原理,返回JSESSIONID的这一步是通过cookie的技术完成的.
如果遇到特殊需求,比如126的十天免登录操作,就只能使用cookie技术来完成.

第四章 域对象的生命周期及使用
4-1 域对象的生命周期
在servlet中,域对象一共有3个
分别是
上下文域 application
会话域 session
请求域 request
以上3个域对象都是在web开发中,用来做存取值操作的,当我们在域对象中存值之后,在域对象销毁之前,都可以从域对象中将我们存的值给取出来.

常用方法:
存值: setAttribute(String key,Object value)
取值:getAttribute(String key) Object
移除值:removeAttribute(String key)

域对象的生命周期
域对象从创建到销毁的全过程
application
创建:服务器启动的时候,服务器会自动的为我们创建一个上下文对象.
销毁:服务器关闭.

session
创建:执行request.getSession(),如果当前浏览器和服务器之间没有一个有效的会话,以上代码会为我们创建出来一个session对象
销毁:
(1) 关闭服务器
(2) 执行代码session.invalidate()
(3) session.setMaxInactiveInterval(10)
超过session的空闲失效时间,session对象自动销毁.
(4) 如果上述代码没有设置
默认30分钟session对象自动销毁
conf/web.xml 5xx 30
(5) 关闭浏览器,session对象不销毁的,但是存储在浏览器上的JSESSIONID销毁了.
关闭浏览器后,此时是这样一种情况
服务器中的session对象还在
浏览器上的JSESSIONID销毁了
当浏览器访问服务器执行request.getSession的时候,由于JSESSIONID销毁,就已经失去了有效的会话,以上代码会为我们创建出来一个新的会话.老会话会随着空闲失效时间的到来自动销毁.

request
创建:当请求访问到项目,那么服务器会为我们的项目创建出来一个request对象.
销毁:当servlet将请求处理完毕,准备响应的时候,request对象自动销毁.

从图上看,我们的每一次请求和响应,都是request对象创建以及销毁全过程.
从以上生命周期分析
我们域对象的取值范围
上下文域 > session域 > request域

4-2 练习:使用域对象来设置值和取值
不切换浏览器的情况下,分析以上案例结果,request域不能够取值,其他域能够取值

4-3 域对象的实际应用
(1)如何取得request域的值
转发能够取得request域的值

(2)使用重定向是否可以取得request域的值
取不到,转发是唯一能够取得request域对象中值的方式
 

(3)使用重定向是否可以取得request/session域的值
	request

不能,重定向是两次请求,两次响应
第一次请求创建的request对象中存的值,在第一次响应的时候,值会随着request对象的销毁而销毁.
在第二次发出请求的时候,是新建一个request对象.里面是没有值的.
session
能够取得session域的值.
重定向后,session没有手动销毁,也没有超时,我们也没有关浏览器(JSESSIONID),所以我们是维持着有效的会话.存值的session并没有销毁,作为有效的会话,我们是可以从他身上取值的.

(4)系统登录操作后,用户名应保存在哪个域
	在实际项目开发中,我们使用session域来保存用户名
	使得其他的每一个页面都能够取到我们的用户名并显示出来

(5)服务器缓存(cache),应该使用哪个域来操作
	使用上下文域来操作
	使用服务器缓存的目的是使得我们每一次在取数据的过程中,不用每一次都去连接数据库,从数据库中取数据,我们直接从缓存中读取数据是最方便最快的.
需求:现在有一张表单,表单下拉框中的数据是活的, 这组数据不经常发生变化(数据更新频率较低),我们应该使用哪种方式来对这些数据做显示的操作.
我们应该使用服务器缓存(cache)(将数据从表中取出存放到上下文域中)

以下数据从city表中而来
<form>
	城市:
	<select>
		<option>--  请选择  --</option>
		<option>北京</option>
上海 广州 深圳 每一次都从数据表中取值,非常的麻烦,而且耗费时间,所以我们的这张表单的使用效率不高. 我们可以这样来做,将city表中所有的城市查询出来,存放到服务器缓存中(将city表中取出的数据存放到上下文域).那么在我们每一次使用以上fomr表单的时候.直接从服务器缓存中取值就可以了(从上下文域对象中取值) 以上服务器缓存的使用,仅仅针对表中的数据不经常做更新的情况下才能够有效的时候. 4-4 域对象的应用原则总结 在我们的实际项目开发中,域对象会大量的用到. 根据不同的需求,我们使用不同的域对象来做存取值的操作. 但是有一个使用原则,能用小的域对象,就不用大的域对象. 为什么优先使用小的域? 较小的域,域对象的销毁周期比较短,所以在里面存的值安全性会得到保障.使用小的域,不耗费服务区

第五章HttpServletRequest接口和HttpServletResponse接口常用方法总结
5-1 HttpServletRequest接口常用方法
request.getParameter(arg0) 取得参数
request.setAttribute(arg0, arg1) 在request域对象中存值
request.getAttribute(arg0) 从request域对象中取值
request.removeAttribute(arg0) 移除request域对象中的值
request.getMethod() 取得请求方式 GET/POST
request.getContextPath() 动态取得当前的项目名
/项目名 重定向能用到
request.getRequestURI() 取得当前资源使用的绝对路径
/项目名 开头
request.getRequestURL() 取得当前资源浏览器访问的路径
http开头
request.getRemoteAddr() 取得浏览器端的ip地址
request.getServletPath() 取得servlet的访问路径 url-pattern
request.getCookies() 取得浏览器携带的所有的cookie对象
request.setCharacterEncoding(arg0) 设置取得参数的字符编码
仅针对post请求
request.getSession() 创建/获取 一个session对象
request.getParameterValues(arg0)
相同的key下有多个value值的情况使用该方式来取值

5-2 HttpServletResponse接口常用方法
response.addCookie(arg0) 为浏览器响应回一个cookie对象
response.addHeader(arg0, arg1) 添加响应头信息
response.setHeader(arg0, arg1) 设置响应头信息
response.getWriter() 返回响应流对象 PrintWriter out
response.sendRedirect(arg0) 重定向
response.setContentType(arg0) 设置响应流的字符编码

第六章404和500错误的统一处理

404
/error/error_404.html


500
/error/error_500.html


java.lang.NullPointerException
/error/error_exceptionByNull.html

第七章 web开发路径使用方式总结

oa是一个项目的名字


<link href="/oa/css/my.css"/>
<form action="/oa/emp/list.do"></form>
response.sendRedirect("/oa/emp/list.do");
response.sendRedirect("/oa/emp/save.html");
<url-pattern>/emp/list.do</url-pattern>
request.getRequestDispatcher("/emp/list.do").forward(request,response);
request.getRequestDispatcher("/emp/save.html").forward(request,response);

<welcome-file>emp/list.do</welcome-file>
<welcome-file>emp/save.html</welcome-file>

第八章 实战:登录操作结合session
需求:
我们在没有登录成功的情况下,拿到了访问路径,直接能够访问到我们想要访问的资源的.
要求我们需要对代码结构进行改造,使得我们的以下资源

必须是在登录成功之后才能访问到
如果没有登录成功,直接访问以上3个资源,则自动跳转到登录页

我们如何判断已经登录过!!!

  1. 在登录成功后,我们将用户名存放到session域中.
  2. 我们在访问后台资源的时候,从session域中将username取出,如果username不为null,说明登录过,如果username为null,说明没登陆过.
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值