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表中而来
上海 广州 深圳 每一次都从数据表中取值,非常的麻烦,而且耗费时间,所以我们的这张表单的使用效率不高. 我们可以这样来做,将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是一个项目的名字
response.sendRedirect("/oa/emp/list.do");
response.sendRedirect("/oa/emp/save.html");
/emp/list.do
request.getRequestDispatcher("/emp/list.do").forward(request,response);
request.getRequestDispatcher("/emp/save.html").forward(request,response);
emp/list.do
emp/save.html
第八章 实战:登录操作结合session
需求:
我们在没有登录成功的情况下,拿到了访问路径,直接能够访问到我们想要访问的资源的.
要求我们需要对代码结构进行改造,使得我们的以下资源
必须是在登录成功之后才能访问到
如果没有登录成功,直接访问以上3个资源,则自动跳转到登录页
我们如何判断已经登录过!!!
动力节点-就业班第3阶段-第4天
欢迎大家使用知识点评估系统,请大家认真的对当天知识点进行评估,我们会根据大家的评估来合理的调整课程;当然,大家在评估知识点的过程当中就等同于将当天重要内容回顾了一遍;您认真对待知识点评估就是认真对待自己,谢谢大家全力配合!
1.Cookie由name和value组成,并且name和value都是字符串类型*
new Cookie(String key,String value)
2.不同的浏览器,cookie对象是不共享的
知道
4.当设置Cookie有效期大于0的时候,Cookie被保存在硬盘文件当中。*
知道
5.Cookie和请求路径path之间的关系你理解吗?浏览器不同的请求路径会发送不同的Cookie*
通过设置path,设置cookie访问权限,同一个包下cookie可以互相访问
6.能够在服务器端创建Cookie对象,并且能够将该Cookie响应给浏览器*
new Cookie(String key,String value)
response.addCookie(Cookie c)
7.浏览器发送Cookie给服务器之后,能够在服务器端通过request获取所有的Cookie*
获取cookie: Cookie[] request.getCookies()
2-4 cookie的常用方法
(1)获取cookie:
Cookie[] request.getCookies()
(2)获取cookie的key(名称)
getName():
(3)获取指定cookie的值
getValue()
(4)设置访问域
setPath("/1_servlet1")
(5)设置存储时间
setMaxAge(秒)
时间大于0:cookie存放到硬盘中
不设置:cookie存放到内存中
8.能够使用Cookie机制实现十天内免登录功能。*
设置失效时间后cookie对象保存在浏览器客户端的
9.Cookie会将会话状态保存在浏览器客户端上*
为cookie对象设置了失效时间,不管是否重新启动浏览器,只要cookie对象没有超过失效时间,访问就一定携带,如果超过了失效时间,就不携带.设置了失效时间后,cookie对象是保存在了浏览器的硬盘上(也就是在客户端).
cookie对象在不做任何设置的情况下,是保存在浏览器的内存上.关闭了浏览器,内存中的cookie对象自动销毁.
10.session机制可以将会话状态保存在服务器端。*
理解
11.session机制也是http协议的一部分,任何一个web系统都支持session机制,不只是java编程中存在*
理解
不理解
12.session实现原理********************(loginServlet StudentListServlet)
重点:我们首先将请求发送到LoginServlet,登录成功,创建一个session对象,保存在session服务器中,
响应回给浏览器JsessionID(这个过程是用cookie技术实现的),浏览器拿到了jsessionID,然后携带JSESSIONID去
访问另一个服务器,另一个服务器(StudentlistServlet)将浏览器携带的JSESSIONID和保存session对象的服务器的JESSIONID作比对。
如果是同一个说明仍然是本次会话,说明有效的会话,返回也就是你拿到了session对象, 如果不是,那么本次会话结束。
13.session与cookie的关系,以及session与cookie的区别*
在我们的实际项目开发中,普遍使用的都是session对象
session对象是保存在服务器端的,而且方便管理,安全性更高.
session对象的执行原理,返回JSESSIONID的这一步是通过cookie的技术完成的.
如果遇到特殊需求,比如126的十天免登录操作,就只能使用cookie技术来完成.因为当你把浏览器关了以后,JSESSIONID就没了,它是通过浏览器携带的。
14.javaweb编程中如何获取session对象,request.getSession()和request.getSession(boolean)有什么区别*
request.getSession()
request.getSession(boolean)
request.getSession(true):若存在有效会话则返回该会话,否则新建一个会话。
request.getSession(false):若存在会话则返回该会话,否则返回NULL
16.session如何销毁,调用什么方法*
invalidate()
17.session为什么要有超时机制?*
空闲失效时间的设置(当浏览器保留在这个页面不动,时间一到SESSION会话就结束了,如果你一直对这个浏览器操作的话,失效时间到了也不起作用,重点理解空闲俩字。
18.session默认超时时间是多少?怎么设置?*
在tomcat conf/web.xml设置
默认30min
也可以 setMaxInactiveInterval(秒)方法代码实现
HttpSession session = request.getSession();
session.setMaxInactiveInterval(40);
19.能够从session这个会话范围对象中存取数据:setAttribute,getAttribute*
能
不能
…能够使用request接口的setAttribute()和getAttribute()在请求作用域当中存取数据。*
能
不能
20.浏览器Cookie禁用后,使用URL重写机制实现session机制。*
理解
不理解
21.什么是真正的一次完整的会话?
见原理。
21—2.浏览器关闭会话就一定结束了吗?浏览器不关闭会话就不会结束吗?*
1. cookie对象在不做任何设置的情况下,是保存在浏览器的内存上.关闭了浏览器,内存中的cookie对象自动销毁.
在为cookie对象设置了失效时间的基础上,不重启浏览器的情况下,访问servlet ,只要没有超过cookie的失效时间,携带着cookie对象访问.如果超过了失效时间,cookie对象自动销毁,访问时就不携带cookie对象了.
重启浏览器的情况下
访问servlet,只要没有超过cookie的失效时间,携带着cookie对象访问.如果超过了失效时间,cookie对象自动销毁,访问时就不携带cookie对象了.
总结:2.为cookie对象设置了失效时间,不管是否重新启动浏览器,只要cookie对象没有超过失效时间,访问就一定携带,如果超过了失效时间,就不携带.设置了失效时间后,cookie对象是保存在了浏览器的硬盘上.
********* 关闭浏览器session或者服务器,session会话就结束。*********
22.application(上下文对象ServletContext)、session、request,这三个域对象生命周期以及如何选择使用?*
理解
不理解
24.request接口中常用方法:getRemoteAddr(),getContextPath(),getMethod(),getRequestURI(),getRequestURL(),getServletPath()。这些方法都理解吗?*
理解
不理解
25HTTP协议是无状态/无连接协议*
知道
25.HTTP协议的请求协议包括几部分,分别是什么*
知道
不知道
26.HTTP协议的响应协议包括几部分,分别是什么*
知道
不知道
29.什么情况下考虑向application范围中绑定数据*
知道
不知道
30.你听说过缓存cache吗,这种机制通常在开发中起到什么作用*
理解
不理解
31.能够独立完成用户登录、显示学员列表、删除学员信息功能。*
见代码。
32.转发和重定向怎么选择?*(7/10早上视频有介绍。)
如果我们进行重新登录操作,那么我们要选择转发(保留在老页面)
如果我们进行刷新本页面的操作,那么我们选择重定向!!!(重定向就是跳转到了新页面,对于代码重构有重要作用,以后可以根据客户的需求灵活的选择这种重定向)
32.HttpServletRequest通常叫做request,对应一个请求的范围。ServletContext通常叫做application,对应一个应用的范围。*
作用范围是服务器的开启与关闭
第2部:当我们的浏览器发生请求,用到指定servlet时候,servlet对象才开始创建。serlet创建后
当第二~第n次访问的时候就不重新创建对象了,而是使用第一次创建的那个对象(单例)
第3步:当servlet对象创建完成之后,马上调用init方法进行初始化操作。
4.我们以后的请求真正是由doGet/doPost方法来进行处理。
5.关闭服务器,servlet对象销毁
6.如果只是正常的关闭服务器servlet在销毁前,要调用distory的方法进行最后的处理工作
ServletContex是项目中的全局管理者。 可以应用在每个servlet中,也服务于每个servlet。当服务器启动时,
服务器会自动的为我们创建一个上下文对象以单例的形式存在于服务器上,关闭服务器的时候销毁。
取得方式一。 ServletContext application= this.getServletContext(); 创建1次
application是存在于服务器中的,所以当统计登录次数操作时,次数都会+1,与关闭浏览器/切换浏览器
更换谷歌浏览器都无关
23.404和500错误如何在web.xml文件中进行统一处理*
200:响应成功
404:找不到的资源(访问路径有问题)
405:你的请求方式不被允许(不被接受)
500:服务器内部编码错误(java代码),找不到的servlet类
Powered By 动力节点
网页之间跳转,用超链接
服务器直跳转用重定向