ServletContext对象&cookie&session对象学习

ServletContext对象

  1. 概念:代表整个web应用,可以和程序的容器(服务器)来通信

    可以将其想象成表

    名字(String)值(Object)
  2. 获取:

    1. 通过request对象获取

      request.getServletContext();

    2. 通过HttpServlet获取

      this.getServletContext();

      this.getServletConfig().getServletContext();

    3. 请求转发:

      this.getServletContext().getRequestDispatcher("/url").forward(request, response);

      //效果等同request转发

  3. 功能:

    1. 获取mime类型:

      • MIME类型:在互联网通信过程中定义的一种文件数据类型
        • 格式:大类型/小类型 text/html img/jpeg
      • 获取:String getMimeType(String file)
    2. 域对象:共享数据

      添加属性:setAttribute(String name , Object obj );

      获取值:Object getAttribute(String name) ;

      删除属性:removeAttribute(String name);

      ServletContext对象范围:所有用户所有请求的数据

      谨慎使用!!这个对象会在内存中存在较长时间,占用内存

    3. 获取文件的真实(服务器)路径

      1. 方法:String getRealPath(String path)

        String realpath = context.getRealPath("/b.txt");
        //对应web目录下的资源访问
        File file = new File(realpath);
        ​```
        //src下的目录未来将被放到/WEB-INF/classes/下
        String realpath = context.getRealPath("/WEB-INF/CLASSES/a.txt");
        

      //session,cookie

Cookie

简介

Cookies 是存储在客户端计算机上的文本文件,并保留了各种跟踪信息。

识别步骤
  • 服务器脚本向浏览器发送一组 Cookies。例如:姓名、年龄或识别号码等。
  • 浏览器将这些信息存储在本地计算机上,以备将来使用。
  • 当下一次浏览器向 Web 服务器发送任何请求时,浏览器会把这些 Cookies 信息发送到服务器,服务器将使用这些信息来识别用户。
使用步骤
  1. 创建cookie对象,绑定数据

    new Cookie(String name, String value);
    
  2. 发送cookie

    response.addCookie(Cookie cookie);
    
  3. 获取Cookie,获取数据

    Cookie[] request.getCookies();
    

在服务器向浏览器发送好请求后,浏览器会自动保存cookie,

下次发送请求时,会自动放在消息头里

默认情况下,当浏览器关闭后,Cookie数据被销毁

持久储存:

​ setMaxAge(int seconds):1. 正数:将cookie数据写到硬盘文件中。cookie存活时间

​ 2. 负数:默认值

 		3. 零:删除cookie信息
  • 默认情况下cookie不能共享

setPath(String path):设置cookie的获取范围。默认情况下,设置当前的虚拟目录(如果要共享,设置"/")

特点
  1. cookie存储于客户端浏览器
  2. 浏览器对应单个cookie大小有限制(4kb),同一个域名下的cookie数量也有限制(20个)
  3. 一般用于存储少量不太敏感数据
  4. 在不登录的情况下,完成服务器对客户端的身份识别

Session

概念:

服务器会话技术,再一次会话的多次请求间共享数据,将数据保存在服务器端的对象中。HttpSession也是一个域对象,同样可以使用

getAttribute(String name)
setAttribute(String name, object value)
removeAttribute(String name)
使用步骤
  1. 获取session对象

    HttpSession session = request.getSession();
    
  2. 使用对象

原理

服务器如何确保在一次会话范围内,多次获取的Session对象是同一个:

Session是依赖于Cookie的

响应头:set-cookie:JSESSIONID=xxxxxxxx

服务通过JSESSIONID获取同一个session对象

请求头: cookie:JSESSIONID=xxxxxxxx

细节
  1. 客户端关闭后,服务器不关闭,两次获取session不是同一个

  2. 客户端不关闭,服务器关闭后,两次获取的session

    • 不是同一个,但是要确保数据不丢失
      • session的钝化:
        • 在服务器正常关闭之前,将session对象系列化到硬盘上
      • session的活化:
        • 在服务器启动后,将session文件转化为内存中的session对象即可。
  3. session对象的失效时间

    1. 服务器关闭

    2. session对象调用invalidate()

    3. 默认失效时间30分钟:

      在web.xml中进行修改

session的特点
  1. session用于一次会话中的任意请求的数据,存在服务端
  2. session可以储存任意类型,任意大小的数据
  3. 与cookie的区别
    • session存储在服务器,cookie存储在客户端
    • session没有数据大小的限制,Cookie有
    • session数据安全,Cookie相对不安全
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值