• 详解ServletContext


    一、ServletContext定义:

    1. ServletContext是一个接口。
    2. ServletContext接口由web服务器实现。
    3. ServletContext对象在web服务器启动的时候创建,一个webapp只有一个ServletContext对象。
    4. ServletContext对象在web服务器关闭时销毁。
    5. ServletContext对象还有另外一个名字:应用域

    二、获取ServletContext对象的方法:

    ServletConfig对象的getServletContext()方法/继承了GenericServlet类的Servlet对象的getServletContext()方法。

    三、ServletContext作用:

    1. ServletContext就是整个web.xml文件,所以同一个webapp下不同servlet共享一个ServletContext对象。

    四、ServletContext接口中的方法:

    web.xml文件的初始化参数配置信息:

    	
        <context-param>
            <param-name>123param-name>
            <param-value>123param-value>
        context-param>
        
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    1. 获取所有标签中的内容,返回一个集合,

    getInitParameterNames()

    遍历方法如下:

    Enumeration<String> parameterNames = Config.getInitParameterNames();
            while(parameterNames.hasMoreElements()){
                String parameterName = parameterNames.nextElement();
            }
    
    • 1
    • 2
    • 3
    • 4
    1. 根据中的内容获取对应的的内容。

    getInitParameter("name")

    1. 获取webapp的根路径,idea中web文件夹是你的根路径,但是根路径名不是web这个根路径名是在部署的时候自己设置的。

    getContextPath()

    1. 获取文件的绝对路径,注意文件需要在根目录下,如果文件位于/根目录/子目录/文件,则需要getRealPath("/子目录/文件名")

    getRealPath("/文件名")

    1. 写日志方法,日志内容位于根目录下的log目录下。

    void log(String)void log(String,Throwable)

    1. 向ServletContext应用域中存数据,只适合存取数据量小,所有servlet共享,且不修改的数据,否则应用域范围太大,占用资源太多,拖慢服务器速度。

    setAttribute(String name,Object value)

    1. 从ServletContext应用域中取数据

    getAttribute(String name)

    1. 从ServletContext应用域中删除数据

    removeAttribute(String name)

    五、关于ServletContext应用域:

    • 如果所有的用户共享一份数据,并且这个数据很少的被修改,并且这个数据量很少,可以将这些数据放到SservletContext这个应用域中
    • 为什么是所有用户共享的数据?不是共享的没有意义。因为ServletContext这个对象只有一个,只有共享的数据放进去才有意义。
    • 为什么数据量要小?因为数据量比较大的话,太占用堆内存,并且这个对象的生命周期比较长,服务器关闭的时候,这个对象才会被销毁。大数据量会影响服务器的性能。占用内存较小的数据量可以考虑放进去。
    • 为什么这些共享给的数据很少的修改,或者说几乎不修改?所有用户共享的数据,如果涉及到修改操作,必然会存在线程并发所带来的安全问题。所以放在SservletContext对象中的数据一般都是只读的。
    • 数据量小、所有用户共享、又不修改,这样的数据放到ServletContext这个应用域当中,会大大提升效率。因为应用域相当于一个缓存,放在缓存中的数据,下次再用的时候,不需要从数据库中再次获取,大大提升执行效率
  • 相关阅读:
    如何通过 Java 合并和取消合并 Excel 单元格
    java -jar 启动项目 jvm参数配置
    Tyramide Cy5.5,Cyanine5.5 Tyramide,花青素Cy5.5酪酰胺远红色近红外发射染料
    [LeetCode周赛复盘补] 第 第 90 场双周赛20221015
    读《vue3设计与实现》1
    gcc编译器和gdb调试工具
    Web前端HTML页面input属性总结
    主从Reactor高并发服务器
    Spring Cloud Gateway 集成Sa-Token
    2024年跳槽面试心得
  • 原文地址:https://blog.csdn.net/m0_53881899/article/details/126385442