ServletContext

web容器在启动时,它会为web程序都创建一个servletContext对象,代表当前的web应用

(面向对象的思想,一个对象代表一个应用,比如一个对象代表老师,就会有讲课的方法)

一个web应用指的就是tomcat文件夹下webapps下的每一个文件夹,即对应每一个web程序

由于一个web应用中所有的Servlet共享同一个ServletContext对象,所以多个Servlet通过servletContext对象实现数据共享

servletContext对象通常也被称之为Context域对象

servletContext域说明两个问题

1. 这是一个容器

2. servletContext域说明这个容器的作用范围,是整个应用程序。

获取servletcontext对象的两种方式

  • ServletConfig对象里维护了一个ServletContext对象,可以直接通过ServletConfig.ServletContext获取
  • 也可以在Servlet类中使用this.ServletContext获取

1. 多个Servlet之间实现数据共享

实际web开发中,适用于聊天室

两个Servlet之间传递数据、

Servlet1:

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {    
        
        String dataString = "aaa";
        this.getServletContext().setAttribute("data",dataString);        
        
    }


Servlet2:

public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {    
        
        
        String valueString = (String) this.getServletContext().getAttribute("data");        
        
    }


这样的话需要先执行Servlet1然后再执行Servlet2

2. 获取web应用的初始化参数

  <context-param>
      <param-name>data</param-name>
      <param-value>xxxx</param-value>
  </context-param>

前面都是为某个特定的Servlet配置初始化参数,这里是为整个web应用配置初始化参数。

这时候,只要web服务器一加载web应用,就会创建代表web应用的ServletContext对象,对象创造出来之后,会自动把配置的初始化参数封装到servletContext对象中去。然后在程序中只需要去取就行了。

 实际开发中,比如连接数据库

 3. 实现Servlet的转发

 当客户端向某一个Servlet请求时,Servlet要返回数据,但是Servlet不适合做输出(因为对文字的渲染很麻烦),它会把数据交给jsp文件,由jsp来做输出

这个过程就是转发

Servlet把数据传递给jsp,可以通过servletContext域,但是这种方式不安全,会涉及到线程安全问题

一般是通过Request域

 4. 利用servletContext对象读取资源文件

1. 得到文件路径

2. 读取资源文件的三种方式

3. .propertities文件(属性文件)

servletContext生命周期

服务器启动的时候,就会为服务器中的每一个web应用创建一个servletContext

可以在路径C: omcatwebapps下看出这个服务器下有多少个web应用

服务器停掉的时候,对象消失。 

原文地址:https://www.cnblogs.com/tech-bird/p/3831019.html