ServletContext:应用域

  • Post author:
  • Post category:其他




一、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文件的初始化参数配置信息:

	<!--这是web.xml文件的初始化参数配置信息-->
    <context-param>
        <param-name>123</param-name>
        <param-value>123</param-value>
    </context-param>
    <!--结束-->
  1. 获取所有

    <param-name></param-name>

    标签中的内容,返回一个集合,


getInitParameterNames()

遍历方法如下:

Enumeration<String> parameterNames = Config.getInitParameterNames();
        while(parameterNames.hasMoreElements()){
            String parameterName = parameterNames.nextElement();
        }
  1. 根据

    <param-name></param-name>

    中的内容获取对应的

    <param-value></param-value>

    的内容。


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这个应用域当中,会大大提升效率。因为应用域相当于一个缓存,放在缓存中的数据,下次再用的时候,不需要从数据库中再次获取,大大提升执行效率



版权声明:本文为m0_53881899原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。