zoukankan      html  css  js  c++  java
  • JavaWeb chapter6 对象作用域

    1、  对象属性所在作用域:谁能看到并使用这个属性,以及它能存活多久。

    2、  应用上下文ServletContext对象作用域:

    • 对于整个Web应用,只有一个ServletContext对象,而且在Web应用中的所有地方都可以访问它;
    • ServletContext对象由Web容器创建并实例化,它可以多线程同时读/写属性;
    • 是线程不安全的,所以需要对属性的读/写进行同步处理或进行深度复制;
    • 当web容器关闭,会销毁ServletContext对象;
    • 建议:在ServletContext对象中尽可能少量保存不会被修改的数据,常用的方法是用单例模式来处理共享数据。

    3、  HTTPSession对象作用域:

    • 用于维护服务器与一个客户的会话状态。在HttpSession对象中设置属性,不能被Web应用中的所有地方访问;
    • HttpSession对象在用户会话期间存在,只能在处理属于同一个HttpSession的请求的线程中被访问;
    • HttpSession对象的属性访问理论上是线程安全的,但当用户打开多个属于一个进程的浏览器窗口,在这些窗口的访问属于同一个HttpSession对象,会出现多次请求,需要多个工作线程处理请求,可能造成线程不安全,这时需要对属性的读写进行线程同步处理,一般使用同步块synchronized来处理;
    • 当会话被销毁,HttpSession的设置属性也会被销毁;

    4、  HTTPServletRequest对象作用域:

    • HttpServletRequest对象用于一次客户端请求过程。对于每一个请求,由一个线程来执行,都会创建一个新的HttpServletRequest对象;
    • 所以HttpServletRequest对象只能在一个线程中被访问,它是线程安全的;

    5、  三个对象的共同点:都是内置对象,都相当于容器,可以存取属性,拥有相同的属性操作方法。

    6、  三个对象的不同点:

    • 作用域大小比较:ServletContext>HttpSession对象>HttpServletRequest对象;
    • 存活时间长短比较:ServletContext>HttpSession对象>HttpServletRequest对象;
    • 资源消耗多少比较:ServletContext>HttpSession对象>HttpServletRequest对象;
    • 线程安全性比较:ServletContext<HttpSession对象<HttpServletRequest对象;
  • 相关阅读:
    java-以月为单位,得到一年中某一个月份的范围
    计算两个时间段相差几个月(包含相差的哪些月份)
    单个进程最大线程数
    Dell PowerEdge R720内存安装原则
    Java [parms/options] range -b 100 -c 10 -i 100 -t 300 -s 180
    PhysicalDrive
    classpath和环境变量设置
    MySQL正则表达式
    MySQL模式匹配(LIKE VS REGEXP)
    ubuntu为什么没有/etc/inittab文件? 深究ubuntu的启动流程分析
  • 原文地址:https://www.cnblogs.com/littlejava/p/5618714.html
Copyright © 2011-2022 走看看