概念
现实中:我进入办公室和班主任聊天,包括中间聊的事情。是一次完整的会话 java中:浏览器和服务器开始交互,到交互结束,包括中间做的事情,属于一次完整的会话。
简单点说
多次请求和响应
客户端技术
cookie
概念
存储在浏览器端数据的一种技术,可以被发送到服务器端,实现客户端和服务器端的数据交互
API
创建 new Cookie(String name, String value)
获取客户端所有的 Cookie[] request.getCookies();
向客户端写入 response.addCookie(Cookie cookie);
演示
代码
cookie工具类
为什么要写工具类
因为request只提供了一个获取所有cookie的方法,如果每次查找指定的cookie很不方便,所以定义工具类,工具类的功能是根据cookie的名字获取对应的cookie
添加的cookie的时候经常忘了设置maxage,domain,path
删除cookie的时候也会忘了maxage的值是多少
代码
查询
添加
删除
生命周期
默认
关掉浏览器就清除,因为默认存在内存中 setMaxAge(-数);
延长生命周期
c.setMaxAge(60);//1分钟的意思
c.setMaxAge(60*60);//一小时
c.setMaxAge(365*24*60*60);//一年,一般一年起步
注意事项
cookie.setMaxAge设置为0时,会在浏览器上删除指定的cookie
cookie.setMaxAge设置为-1时,代表关闭当前浏览器即失效。
删除cookie
setMaxAge(0)
cookie共享问题
setPath("/day16/dir1") 表示只能被dir1目录下的资源访问cookie
setPath("/day16"):表示可以被/day16下面的资源访问
setPath("/") 表示可以被localhost:8080/下面的所有的servlet操作
结论:以后全部写/,这样子相当于没有限制了,操作起来方便.
domain以后写公司域名比如.baidu.com
案例
需求
用户第一次访问servlet,页面显示欢迎访问,否则页面显示上一次访问的时间
思路
1.从cookie中获取上次访问时间 2.如果没有获取到页面显示欢迎您,否则页面显示上次访问时间 3.将本次访问时间通过cookie存入到浏览器中
代码
服务端技术
session
获取
HttpSession session = request.getSession();
生命周期
在一次会话。多次请求中有效。(记忆的时候要和request进行比较,request是一次请求中有效)
原理
每次将cookie中的JSESSIONID传给服务器,然后去服务器的内存中去找对应的seession数据,从而保证数据在多次请求中有效
应用场景
因为每个用户使用的浏览器不一样,里面的JESSIONID也不一样,那么JSESSIONID我们可以看成用户的唯一标识。所以session中一般用来存储每个用户的相关数据
session中的问题
1.浏览器关闭了,服务器中的session还存在吗?
经常问:session的生命周期什么时候结束,很多人都回答浏览器关闭session就销毁了,这句话对吗?
不对,浏览器关闭了服务器中的session还在,但是浏览器器中的JSEESIONID默认情况下浏览器关闭就没了,当重新打开浏览器再次访问服务器的时候只会重新创建一个Session。如果想要让两次获取到的session是同一个,可以修改保存在浏览器的JSESSIONID的maxAge的值,来延长cookie的生命周期
浏览器关闭了,重新打开,还是之前的session吗?
不是的,因为浏览器cookie中有一个JSESSIONID,这个cookie默认是存在内存中的,浏览器关闭,cookie就没了,所以重新打开浏览器,再次访问时会生成一个新的JESSIONID,所以通过新的JSESSIONID找到的就不是同一个sesion
如何让浏览器关闭,重新打开,访问的还是原来的session
延长JSESSIONID这个cooked的生命周期 Cookie cookie = new Cookie("JSESSIONID",session.getId()); cookie.setMaxAge(60*60); response.addCookie(cookie);
2.服务器重启后原来的sesssion还在吗?
在
原理
正常关闭tomcat的时候,会把所有内存中的session写入到硬盘中的文件,这个操作叫做(序列化/钝化/写入) 当再次启动tomcat的时候,会把硬盘中的session读取到内存。这个操作叫做(反序列化/活化/读取)
3.session销毁
默认30分钟,修改默认配置:D:\develop\apache-tomcat-8.5.31\conf\web.xml 修改
request.getSession().invalidate();
session和cookie的区别
session存在服务器,cookie存在客户端
session没有大小限制,cookie有4k
session安全,cookie不安全
session基于cookie
JSP
概念:
长的像html页面的servlet。当访问这个jsp页面的时候tomcat会把jsp变成xxx_servlet.java文件,并且执行编译后的servlet代码
JSP页面每次访问都会重新编译成对应的servlet吗?
不是、第一次才编译,除非修改了JSP页面
如何向jsp中插入java代码(脚本)
插入任意Java代码
<% Java代码 %>
将变量值显示到页面
<%=变量%>
内置对象9个
request
回显数据用
response
out
这个out和response.getWriter()的区别
out会把数据写入到缓冲区。 response.getWriter()会直接把数据写到页面。
session
验证码、购物车、存用户信息
pageContext
讲EL表达式的时候简单用一下
application
一般不用
page
config
exception
session和cookie的使用场景
session
验证码
登录成功后将用户信息存到session
购物车
cookie
浏览记录
帐号和密码(记住密码功能)
案例
登陆功能
知识点
1.登陆成功后要将用户信息存入session
2.登陆失败返回login.jsp页面,要回显错误信息
3.只有转发不加虚拟路径
4.虚拟路径能写活不要写死