四大域对象 |
称为实体类实例,对应数据库字段。域:翻译英文未field,即我们常用的字段或属性。作用是用于保存数据,获取数据,可以在不同的动态资源之间共享数据。
A: 产生: 第一次调用 request.getSession()时产生
B:作用: 存储访问该程序的一个用户的信息
C: 生命周期: 第一次调用request.getSession()方法时,服务器会检查是否已经有对应的session,如果没有就在内存中创建一个session并返回。当一段时间内session没有被使用(默认为30分钟),则服务器会销毁该session。如果服务器非正常关闭,没有到期的session也会跟着销毁。如果调用session提供的invalidate(),可以立即销毁session
D: 作用范围: 一次会话(服务器与浏览器的一次会话过程,这个过程是连续的,也可以时断时续的),本人认为:在session没有过期时,只要程序不关闭,就存在(服务器正常关闭,再启动,Session对象会进行钝化和活化操作。同时如果服务器钝化的时间在session 默认销毁时间之内,则活化后session还是存在的,否则Session不存在);同一个用户(区别ServletContent)
A: 产生: 在service 方法调用前由服务器创建,传入service方法。整个请求结束,request生命结束
B:作用: 在整个请求过程中共享数据,如servlet处理的结果可以放到request中传到jsp
C: 生命周期: 整个请求过程,请求结束,request生命消失
D: 作用范围::整个请求过程
A: 产生: 服务器启动时产生
B: 作用: 在所有请求该程序的用户之间共享数据
C: 生命周期: 服务器开始,其就存在,服务器关闭,其才释放
D: 作用范围: 是一个全局的储存信息的空间,所有的用户都可访问共享一个,即整个WEB应用
A: 产生: 当对JSP的请求时
B: 作用: 访问JSP之间的共享数据
C: 生命周期: 当对JSP的请求开始,当相应结束时销毁
D: 作用范围: 当前整个JSP页面,是四大作用域中最小的一个
九大内置对象 |
是在jsp页面中无需创建就可以直接使用的变量
(1) request HttpServletRequest
(2) response HttpServletResponse
(3) config ServletConfig
(4) application ServletContext
(5) session HttpSession
(6) exception Throwable
(7) page Object(this)
(8) out JspWriter
(9) pageContext PageContext
Session |
session,中文经常翻译为会话,其本来的含义是指有始有终的一系列动作/消息,比如打电话时从拿起电话拨号到挂断电话这中间的一系列过程可以称之为一个session
第一次调用 request.getSession()时产生(误区:很多人都认为时第一次访问jsp时产生,这样认为是不对的,之所以有时第一次访问一个servlet时,该service的逻辑只是返回一个逻辑视图,没有其它业务,但是查看返回的页面会有JSESSIONID,这是因为如果JSP没有显示的使用 <%@page session=“false”%> 关闭session,则JSP文件在编译成Servlet时将会自动加上这样一条语句HttpSession session = HttpServletRequest.getSession(true);这也是JSP中隐含的session对象的来历)
一般情况下,session都是存储在内存里,当服务器进程被停止或者重启的时候,内存里的session也会被清空,如果设置了session的持久化特性,服务器就会把session保存到硬盘上,当服务器进程重新启动或这些信息将能够被再次使用,Weblogic Server支持的持久性方式包括文件、数据库、客户端cookie保存和复制
一次会话
参考文章:https://www.cnblogs.com/lonelydreamer/p/6169469.html
SessionId |
标识session的一个记号(自己定义的)
产生session的同时会产生一个标识该session的记号,即sessionId
存放在客户端的cookie中
同cookie的作用范围,请看下面cookie的讲解
同cookie消失而消失(但是:之所以当关闭窗口但session未消失时,重新请求jsp,产生的JSESSIONID和关闭的窗口产生的一样,是因为session是一样的,所以再次获取的该session的sessionId是一样的)
当第一次调用HttpServletRequest.getSession(true) 产生session时会产生一个sessionId,然后返回到客户端并存放在cookie,当再次请求时,sessionId就伴随cookie给到服务端,然后服务端根据sessionId获取session(之所以当服务端的session没过期而清除缓存时,产生的sessionId和之前不一样,是因为清除缓存时cookie也给清除了,而此时请求服务端时自然没有携带sessionId [相当于第一次请求服务器],此时服务端拿不到sessinId就认为没有session,所以会生成一个新的sessin,自然会生成新的sessinId,然后返给客户端)
1)第一次访问服务器的时候,会在响应头里面看到Set-Cookie信息(只有在首次访问服务器的时候才会在响应头中出现该信息)
此cookie由于没有设置cookie有效日期,所以在关闭浏览器的情况下会丢失掉这个cookie2)当再次请求的时候(非首次请求),浏览器会在请求头里将cookie发送给服务器(每次请求都是这样)
sessionId执行的流程:
Cookie |
cookie在浏览器和服务器间来回传递的一段文本
第一次请求服务器自动创建
保存在用户硬盘上的某个文件夹中,保存在客户端(服务端产生,而存放在客户端)
一次会话中
Local Storage |
html5新增的一个本地存储API,是一个局部存储器。
解决了cookie存储空间不足的问题(cookie中每条cookie的存储空间为4k),localStorage中一般浏览器支持的是5M大小,这个在不同的浏览器中localStorage会有所不同。主要是用来作为本地存储来使用的
伴随jsp页面而产生
保存在用户硬盘上的某个文件夹中,保存在客户端
遵循同源策略,相同网站才能共享
localStorage存在硬盘上(相当于前端的一个小数据库),本身没有时效性(清缓存在清不掉,之所以有时清缓存,在浏览器的Application中没有了,是因为该页面加载时就没有写入localStorage,并不是在本地文件中读取的localStorage然后写入浏览器)
以Chrome为例:在Chrome浏览器的地址栏输入Chrome:Version查看Chrome浏览器保存文件的位置
找到leveldb文件夹下面一个.log文件,打开虽然乱码,但是还是可看到存入的信息(经常会遇到打开网页需要登录的情况,下次登录就不用输入了,信息就是保存在这个文件中了)永久
参考文章:https://www.cnblogs.com/st-leslie/p/5617130.html(讲的很好)
Session Storage |
html5新增的一个本地存储API,是一个局部存储器。
用于临时保存同一窗口(或标签页)的数据,在关闭窗口或标签页之后将会删除这些数据
伴随jsp页面而产生
保存在用户硬盘上的某个文件夹中,保存在客户端
只在本窗体内
窗口关闭(虽然是同源网站,但是是不同窗口,也不共享)
临时,与页面同生命
同 Local Storage目录下有个Session Storage文件夹,里面也有个.log文件,应该是存放session Storage数据的,但是经查看内容,并没有找到相应的内容,不知道为啥(有知道的大神期待你的留言)
参考文章:https://blog.csdn.net/mjzhang1993/article/details/70820868
这个暂时还没用到过,但度娘说适用于单页程序中传递信息
区别讲解见:https://www.cnblogs.com/endlessmy/p/8399366.html