ServletContext介绍和用法总结

ServletContext介绍和用法总结

参考文章:https://blog.csdn.net/qq_36371449/article/details/80314024

学习总结

一、ServletContext 介绍

1. 概念

  • ServletContext 也叫做 Servlet 上下文,WEB容器在启动时,它会为每个 WEB 应用程序都创建一个对应的 ServletContext 对象,它代表当前web应用。这个对象全局唯一且被项目类所有 Servlet 共享,所有叫全局应用程序共享对象

  • ServletConfig对象中维护了ServletContext对象的引用,开发人员在编写servlet时,可以通过ServletConfig.getServletContext方法获得ServletContext对象。

  • 一个WEB应用中的所有Servlet共享同一个 ServletContext 对象,因此Servlet对象之间可以通过 ServletContext 对象来实现通讯。ServletContext对象通常也被称之为 context 域对象。

2. 作用

  1. 是一个域对象
  2. 可以读取全局配置参数
  3. 可以搜索当前工程目录下面的资源文件
  4. 可以获取当前工程名字

3. 获取

3.1 在实现类中获取

  1. 通过 GenericServlet 提供的 getServletContext() 获取
ServletContext servletContext = getServletContext();
  1. 通过 ServletConfig 提供的 getServletContext() 获取
ServletContext servletContext = getServletConfig().getServletContext();
  1. 通过HttpServletRequest获取
ServletContext servletContext1 = req.getServletContext();
  1. 通过HttpSession获取
ServletContext servletContext = req.getSession().getServletContext();

3.2 在 Spring 容器中获取

  1. 在 WEB 环境下,启动 tomcat 会创建 ServletContext 对象,然后 Spring 会把这个对象注入到 Spring 容器中,我们只需要通过注解去取出来就行
@Autowired
private ServletContext servletContext;

二、ServletContext 使用

1. 作为作用域对象

1.1 作用域介绍

域对象是服务器在内存上创建的存储空间,用于在不同动态资源(servlet)之间传递与共享数据。

1.2 作用域方法

  • 哪个作用域对象调用方法就操作对应的作用域数据
作用域相关方法 作用
Object setAttribute(“键”) 从中得到一个值
void setAttribute(“键”, Object数据) 向作用域中存储键值对数据
void removeAttribute(“键”) 删除作用域种的键值对数据

1.3 域对象的代码实现

  • 实现多个 Servlet 通过 ServletContext 对象实现数据共享,在InitServlet的Service方法中利用ServletContext对象存入需要共享的数据
/*获取ServletContext对象*/  
ServletContext context = this.getServletContext();   
//存入共享的数据    
context.setAttribute("name", "haha"); 

// 在其它的Servlet中利用ServletContext对象获取共享的数据   
/*获取ServletContext对象*/  
ServletContext context = this.getServletContext();   
//获取共享的数据   
String name = context.getAttribute("name");   
System.out.println("共享的内容值是:"+name);  

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

2.1 方法

  • 根据指定的参数名获取参数值
getServletContext().getInitParameter(name);
  • 获取所有参数名称列表
getServletContext().getInitParameterNames();

2.2 代码实现

  • web.xml 文件中的全局参数
<!-- 全局配置参数,因为不属于任何一个servlet,但是所有的servlet都可以通过servletContext读取这个数据 -->
<context-param>
  <param-name>param1</param-name>
  <param-value>value1</param-value>
</context-param>
<context-param>
  <param-name>param2</param-name>
  <param-value>value2</param-value>
</context-param>
  • 读取 web.xml 文件中的全局参数
public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
   //使用servletContext读取全局配置参数数据
   //核心方法
   /*getServletContext().getInitParameter(name);//根据指定的参数名获取参数值
   getServletContext().getInitParameterNames();//获取所有参数名称列表*/
   //打印所有参数
   //1.先获取所有全局配置参数名称
   Enumeration<String> enumeration =  getServletContext().getInitParameterNames();
   //2.遍历迭代器
   while(enumeration.hasMoreElements()){
      //获取每个元素的参数名字
      String parameName = enumeration.nextElement();
      //根据参数名字获取参数值
      String parameValue = getServletContext().getInitParameter(parameName);
      //打印
      System.out.println(parameName+"="+parameValue);
   }
 }

3. 获取当前项目下的资源文件

3.1 方法

  • 根据相对路径获取服务器上资源的绝对路径
getServletContext().getRealPath(path),
  • 根据相对路径获取服务器上资源的输入字节流
getServletContext().getResourceAsStream(path)

4. 获取当前项目的名字

  • 获取当前项目的名字
getServletContext().getContextPath();

总结

以上就是对ServletContext介绍和用法的总结了,代码仅供参考,欢迎讨论交流。

上一篇:Spring Boot内嵌tomcat关于getServletContext().getRealPath获取得到临时路径的问题


下一篇:仿照MEMZ做一个特效程序