ServletContext介绍和用法总结

本文详细介绍了ServletContext的概念、作用及其在Web应用中的多种用途,包括作为作用域对象、获取初始化参数、读取资源文件和获取项目名字。在Spring环境中,通过注解可以方便地获取和使用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介绍和用法的总结了,代码仅供参考,欢迎讨论交流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值