一个ServletContext就代表一个Web应用,可以用于与Web容器(Tomcat)通信
ServletContext - 图1
比如在Tomcat部署3个项目aaa、bbb、ccc。就有3个不同的ServletContext。
在一个项目里面的任何地方拿到的ServletContext都是同一个,想在项目里面获取到web容器(如Tomcat)里面的东西,就可以使用ServletContext。

获取方式

  1. request.getServletContext();
  2. getServletContext(); //在servlet内调用此方法

同一个项目,任何地方拿到的都是同一个。

ServletContext创建和销毁时机

当一个项目部署到web容器时,就会创建一个唯一的ServletContext。
Snipaste_2021-10-23_14-40-48.png
类似于点击上面的按钮就会创建一个ServletContext。
当一个项目从web容器中移除时就会销毁这个唯一的一个ServletContext。
Snipaste_2021-10-23_14-51-57.png
类似点击上面的按钮就会销毁这个ServletContext。

监听项目的部署和取消部署

如果想监听项目的部署和取消部署可以使用监听器。
最常用的就是ServletContextListener。创建一个类,实现ServletContextListener接口就可以了

  1. package com.lff;
  2. import javax.servlet.*;
  3. import javax.servlet.annotation.*;
  4. @WebListener
  5. public class ContextListener implements ServletContextListener{
  6. public ContextListener() {
  7. }
  8. @Override
  9. public void contextInitialized(ServletContextEvent sce) {
  10. /* This method is called when the servlet context is initialized(when the Web application is deployed). */
  11. System.out.println("在项目部署的时候做一些一次性的操作。");
  12. }
  13. @Override
  14. public void contextDestroyed(ServletContextEvent sce) {
  15. /* This method is called when the servlet Context is undeployed or Application Server shuts down. */
  16. System.out.println("在项目取消部署的时候,销毁资源");
  17. }
  18. }

也可以使用XML的方式配置ServletContextListener。在web.xml中配置如下信息,并且把上面的类@WebListener注解去掉即可

  1. <listener>
  2. <listener-class>com.lff.ContextListener</listener-class>
  3. </listener>

ServletContext常用方法

  1. getServletContext().setAttribute("name","lff");
  2. getServletContext().getAttribute("name");
  3. getServletContext().removeAttribute("name");

�request、session也有上面的方法,用于保存数据。
保存范围 request < session < ServletContext