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. 作用
- 是一个域对象
- 可以读取全局配置参数
- 可以搜索当前工程目录下面的资源文件
- 可以获取当前工程名字
3. 获取
3.1 在实现类中获取
- 通过 GenericServlet 提供的 getServletContext() 获取
ServletContext servletContext = getServletContext();
- 通过 ServletConfig 提供的 getServletContext() 获取
ServletContext servletContext = getServletConfig().getServletContext();
- 通过HttpServletRequest获取
ServletContext servletContext1 = req.getServletContext();
- 通过HttpSession获取
ServletContext servletContext = req.getSession().getServletContext();
3.2 在 Spring 容器中获取
- 在 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介绍和用法的总结了,代码仅供参考,欢迎讨论交流。