目录
1.什么是JSP
2.JSP 和 Servlet 的关系
3.JSP 语法结构
4.JSP 中的指令
5.动作
7.什么是jsp内置对象
8.JSP 中的九大内置对象
9.九大内置对象对应的API
会话跟踪 (状态管理) ***
HTTP协议 是 无状态无连接的, 我们客户端与服务器的每一次交流, 对于服务器来说都是没有记忆的!
会话指的是: 多次的请求与响应 !
关于状态管理, 提供了两种方式 !
- 将存储的状态, 管理在客户端: Cookie
- 将存储的状态, 管理在服务端: Session
Cookie *****
技术原理:
服务器在向客户端响应时 , 使用Cookie消息头的方式 , 将存储的状态响应给浏览器
浏览器接收到Cookie 后 , 会将所有的Cookie存储在一个文本文件(.txt)里 , 当浏览器再次向同一个服务器发起请求时 ,浏览器会自动将这些Cookie以消息头的形式 发送给服务器
如何创建一个Cookie? ***
在Java中, Cookie是一个Java类, 它是一个描述键值对的类 , 它的对象表示一个键值对!
可以通过创建对象的方式, 得到一个Cookie , 并指定Cookie的键与值
格式:
Cookie cookie = new Cookie(String key,String value);
如何将Cookie添加到响应头中? ***
通过响应对象, 调用addCookie 将Cookie添加到响应头中 , 一次响应可以添加多个Cookie !
格式:
response.addCookie(Cookie cookie);
如何从请求头中 得到Cookie数组? ***
因为存储的cookie可能是多个 ,所以得到的是一个数组
格式:
Cookie[] cookies = request.getCookies();
获取键的格式:
String name = cookie.getName();
获取值的格式:
String value = cookie.getValue();
注意:
如果未存储Cookie , 得到的是null !
如何调整Cookie的存活时长? ***
格式:
cookie.setMaxAge(int 秒);
能存储的最大值为: int类型的最大值 !
- 传入正数 : 表示倒计时的秒数
- 传入0 : 表示立即删除此Cookie
- 传入负数 : 默认为-1 , 负数表示会话结束时自动删除!
Cookie存储的路径问题 ***
-
Cookie存在 替换 与 获取操作:
Cookie的替换 只能由相同路径来完成 ! Cookie的读取 只能由相同路径 或 子路经 可以读取! 强调: 子路经设置的Cookie , 父路径是无法读取到的!
设计三个不同的Servlet:
请求地址分别为:
AServlet : /x/a
BServlet : /x/b
CServlet : /c
案例结果:
A存储:
B : 可读 , 可替换
C : 不可读 不可替换
C存储:
AB : 可读, 不可替换 !
因为路径问题, 我们经常使用Cookie时 , 会出现一些BUG
建议在项目开发时, 将所有的Cookie路径 设置为 “/”
格式:
cookie.setPath("/");
Cookie的优缺点 *****
- Cookie技术存储的数据类型有限制, 不可存储中文
- 数据存储在浏览器中 , 不安全, 不建议存储敏感数据
- 保存的数据大小 最大4KB
- 依赖于用户浏览器的Cookie设置, 用户可以勾选禁止Cookie
优点:
数据存储在浏览器中, 分散了服务器的压力 !
Session *****
基于Cookie实现的 ! Session是一个键值对的容器 !
原理:
浏览器访问服务器时, 服务器可以创建一个Session对象 (session是一个键值对的容器) !
每一个Session在创建时 , 会产生一个JSESSIONID , sessionid的值是唯一的 !
服务器在响应数据时, 会将Session的id 通过Cookie的方式 传递给浏览器 , 浏览器会存储到Cookie中 !
当浏览器再次访问此服务器时, 会将SessionID发送给服务器 , 服务器会自动寻找匹配的Session对象 , 当程序员使用Session的相关操作时, 操作的对象就是针对于这个SESSIONID的对象 !
如何获取Session ***
(Java中Session的类: HttpSession)
在Servlet中, 通过getSession方法 , 得到Session对象 !
格式:
无参方法:
request.getSession(); 推荐使用
用来获取一个Session对象,内部的实现是调用了一参的方法, 传入了一个Boolean类型的值 true
一参的方法:
request.getSession(boolean isNew);
获取Session对象 , 参数的含义:
- true : 根据当前浏览器的SessionId获取一个Session ,如果SessionId不存在 ! 则创建一个新的Session 使用!
- false : 根据当前浏览器的SessionId获取一个Session , 如果SessionId不存在, 则返回null
Session的常用方法 *
- 设置&替换数据
session.setAttribute(String key,Object value); - 获取数据
Object value = session.getAttribute(String key); - 删除数据
session.removeAttribute(String key); - 销毁Session
session.invalidate();
设置Session的存活时长(会话时长)
默认会话时长为 30分钟, 当浏览器最后一次访问服务器 30分钟后, 没有再次连接, 就销毁会话 !
方式1.
通过修改tomcat的conf/web.xml 来完成默认tomcat会话时长的修改
<session-config>
<session-timeout>数值分钟</session-timeout>
</session-config>
方式2.
通过调用session 的方法, 修改单个session的时长
session.setMaxInactiveInterval(int 秒);
Session的优缺点: *****
优点:
1. 数据存储在服务器中, 安全
2. session存储的数据类型是 Object
3. session存储的数据大小 理论上无限制 !
缺点:
数据存储在服务器端, 用户量大时 , 服务器压力较高 ! 很容易 耗尽服务器资源 !
Cookie和session的知识点 不是互斥的. *
我们通过在项目开发时:
对于安全不敏感的数据, 使用Cookie存储 ,
对安全有要求的数据, 存储在Session中.
对于大的数据, 存储在数据库中!
作业:
基本作业:
- 修改周四的作业内容, 实现会话跟踪, 当用户未登录访问主页时 ,跳转到登录页面 !
扩展作业:
- 使用Cookie技术 , 编写一个网页 !
网页中, 展示一些资源类型 , 和关注按钮 , 例如:
高清大图 <a href="servlet1.do"><button>关注</button></a>
亚洲视频 <button>关注</button>
欧美视频 <button...
通过用户点击关注按钮. 实现效果: 当用户关闭浏览器后, 再次打开, 关注的数据依然呈现关注效果 !