Servlet+JSP+AJAX(day04)JSP

目录
1.什么是JSP
2.JSP 和 Servlet 的关系
3.JSP 语法结构
4.JSP 中的指令
5.动作
7.什么是jsp内置对象
8.JSP 中的九大内置对象
9.九大内置对象对应的API

会话跟踪 (状态管理) ***

HTTP协议 是 无状态无连接的, 我们客户端与服务器的每一次交流, 对于服务器来说都是没有记忆的!

会话指的是: 多次的请求与响应 !

关于状态管理, 提供了两种方式 !

  1. 将存储的状态, 管理在客户端: Cookie
  2. 将存储的状态, 管理在服务端: 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的优缺点 *****

  1. Cookie技术存储的数据类型有限制, 不可存储中文
  2. 数据存储在浏览器中 , 不安全, 不建议存储敏感数据
  3. 保存的数据大小 最大4KB
  4. 依赖于用户浏览器的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的常用方法 *

  1. 设置&替换数据
    session.setAttribute(String key,Object value);
  2. 获取数据
    Object value = session.getAttribute(String key);
  3. 删除数据
    session.removeAttribute(String key);
  4. 销毁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...

    通过用户点击关注按钮. 实现效果:  当用户关闭浏览器后, 再次打开, 关注的数据依然呈现关注效果 !
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值