cookie保存在客户端(浏览器端的)
第一次请求的时候, 没有cookie的, 先由服务器写给浏览器.
cookie里面只能保存字符串, 大小有限制
cookie的key默认不支持中文,解决中文办法 ,**以后都不用使用中文**
URLEncode.encode(value,"utf-8");//存入的时候(先通过utf-8编码)
URLDecode.decode(value,"utf-8");//取出 (通过utf-8解码)
cookie 封装工具类获取指定cookie cookie 存活时间
默认情况下,cookie 存储在浏览器内存中,当浏览器关闭,内存释放,则cookie被销毁
setMaxAge(int seconds):设置cookie存活时间
正数:将 cookie写入浏览器所在电脑的硬盘,持久化存储。到时间自动删除
负数:默认值,cookie在当前浏览器内存中,当浏览器关闭,则 cookie被销毁
零:删除对应 cookie
setPath(String url) ;设置路径,如果不设置路径,就是默认路径
**默认路径**,例如:
- 访问http://localhost:8080/day25/ServletDemo5; cookie默认路径 /day25
+ 访问http://localhost:8080/day25/aa/ServletDemo6; cookie默认路径 /day25/aa
+ 访问http://localhost:8080/day25/aa/bb/ServletDemo7; cookie默认路径 /day25/aa/bb
**随带cookie需要的条件**(设置有效路径): ==只有当访问资源的url包含此cookie的有效path的时候,才会携带这个cookie;==反之不会.
- eg: 假设cookie路径是: /day25
- 访问http://localhost:8080/day25/ServletDemo8; 会携带该cookie过来
+ 访问http://localhost:8080/day25/aa/ServletDemo9; 会携带该cookie过来
+ 访问http://localhost:8080/day25/aa/bb/ServletDemo10; 会携带该cookie过来
+ ....
+ eg: 假设cookie路径是: /day25/aa
+ 访问http://localhost:8080/day25/ServletDemo11; 不会携带该cookie过来
+ 访问http://localhost:8080/day25/aa/ServletDemo12; 会携带该cookie过来
+ 访问http://localhost:8080/day25/aa/bb/ServletDemo13; 会携带该cookie过来
cookie小结
- 有效路径作用 :
1. 保证不会携带别的网站/项目里面的cookie到我们自己的项目
2. 保证自己的项目可以合理的利用自己项目的cookie,建议设置路径的时候,使用request.getContextPath()获取部署路径来设置
3. 如果路径不一样, cookie的key可以相同
4. 如果路径一样, cookie的key相同,那么后面的cookie会覆盖前面的cookie
- cookie的路径通常设置为项目的部署路径. 当前项目下的Servlet都可以使用该cookie. 一般这么设置: cookie.setPath(request.getContextPath());
只要是当前项目里面的资源 路径必须包cookie路径的时候,才会携带该cookie过来.
session
服务端会话跟踪技术:将数据保存到服务端,服务器为每一个浏览器开辟一块内存空间,即session对象。由于session对象是每一个浏览器特有的,所以用户的记录可以存放在session对象中。同时**,每一个session对象都对应一个sessionId,服务器把sessionId写到cookie中,再次访问的时候,浏览器把sessionId带过来,找到对应的session对象**(session是基于cookie的)
#### cookie和Session的不同
cookie是保存在浏览器端的,大小和个数都有限制。session是保存在服务器端的, 原则上大小是没有限制(实际开发里面也不会存很大的数据), 安全一些。
cookie不支持中文,并且只能存储字符串;session可以存储基本数据类型,集合,对象等
Session 作为域对象存取值
JavaEE 提供 HttpSession接口,来实现一次会话的多次请求间数据共享功能
使用:
获取Session对象:HttpSession session = request.getSession();
Session对象功能:
void setAttribute(String name, Object o):存储数据到 session 域中
Object getAttribute(String name):根据 key,获取值
void removeAttribute(String name):根据 key,删除该键值对
3.范围: 一次会话(多次请求多次响应)
关于Session对象的销毁
浏览器关闭了, session使用不了, 是session销毁了吗?
session没有销毁,只是浏览器端的含有sessionId的cookie没有了.
session基于cookie, sessionId保存到cookie里面的, 默认情况下cookie是会话级别,浏览器关闭了cookie就是消失了,也就是说==sessionId消失了==, 从而找不到对应的session对象了, 就不能使用了.
分析:
1.服务器响应的sessionId,是使用的默认级别的cookie,关闭浏览器,cookie销毁了,也就是sessionId没有了,但session对象还在服务器中
2.服务器响应的sessionId是持久级别的cookie,关闭浏览器,cookie还在,也就是sessionId还在,并且session对象也还在服务器中, 可以获取上一次会话保存在session中的数据
**实现: 自己获得sessionId, 自己写给浏览器 设置cookie的有效时长, 这个cookie的key必须: JSESSIONID**
Seesion 销毁:
默认情况下,无操作,30分钟自动销毁(Tomcat的web.xml查看)
调用 Session对象的 invalidate()方法
session.invalidate()
关于Session对象的钝化、活化
服务器重启后,Session中的数据是否还在?
钝化:在服务器正常关闭后, Tomcat会自动将 Session数据写入硬盘的文件中
活化:再次启动服务器后,从文件中数据到Session中
`C:UserspengzhilinAppDataLocalJetBrainsIntelliJIdea2020.1tomcat`目录查看
三个域对象比较(最好从最小的开始用【最下面】) JSP快速入门
JSP执行流程
第一次访问的xxx.jsp时候,服务器收到请求,JspServlet会去查找对应的jsp文件
找到之后,服务器会将这个jsp文件转换成java文件(Servlet)
服务器编译java文件,生成class文件
服务器运行class文件,生成动态的内容
服务器收到内容之后,返回给浏览器
JSP 脚本语法我们可以通过JSP脚本在JSP页面上编写Java代码. 一共有三种方式:
JSP 脚本分类:
<%...%>:内容会直接放到_jspService()方法之中
<%=…%>:内容会放到out.print()中,作为out.print()的参数
<%!…%>:内容会放到_jspService()方法之外,被类直接包含



