ServletContext 被 Servlet 程序用来与 Web 容器通信。
web容器在启动时,它会为每个web程序都创建一个对应的ServletContext对象,它代表当前的web应用。
由于一个WEB应用中的所有Servlet共享同一个ServletContext对象,因此Servlet对象之间可以通过ServletContext对象来实现通讯。ServletContext对象通常也被称之为context域对象。
servletContext的作用:
1.获取应用的全局配置参数
2.获取web应用下的资源
3.实现各个servlet之间的资源共享
1. 获取应用的初始配置参数
首先在servle的配置文档web.xml里面加入一些全局配置参数
<context-param>
<param-name>name</param-name>
<param-value>cyh</param-value>
</context-param>
在项目里面的任意servlet我们都可以通过servletContext这个对象来获取这些初始化参数,代码如下:
//1.获取对象
ServletContext context = getServletContext();
//2.获取全局参数
String name = context.getInitParameter("name");
System.out.println("naem="+name);
2.获取web应用下的资源
有三种方式区获取web应用中的资源
1.获取资源在tomcat里面的绝对路径,使用getRealPath()方法,先获取路径再获取流对象.
2. 使用getResourceAsStream(),根据相对路径直接获取流对象
3.通过classloader(类加载器JDBC)去获取web工程下的资源
假设我们要获取一个叫config.properties的资源,它放在file文件夹下
第一种方式:根据t绝对路径获取(先获取路径在获取流对象)
//获取servletContext对象
ServletContext context = getServletContext();
String path= context.getRealPath("file/config.properties");
System.out.println("path="+path);
//1.创建属性对象
Properties properties = new Properties();
//2.指定载入的数据源
/*
* 如果想获取web工程下的资源,用普通的FileInputStream是行不通的。
* 原因出在路径上。这里相对的路径其实是jre来确定的。但这里是一个web工程
* jre后面会由tomcat来管理,所以真正的相对路径是tomcat里的bin目录。
*/
InputStream is = new FileInputStream(path);
properties.load(is);
//3.获取name的属性值
String name = properties.getProperty("name");
System.out.println("name="+name);
第二种方式:根据相对路径直接获取流对象
//获取servletContext对象
ServletContext context = getServletContext();
//1.创建属性对象
Properties properties = new Properties();
//获取web工程下的资源,将其转换为流对象。前面隐藏着当前工程的根目录。
InputStream is = context.getResourceAsStream("file/config.properties");
properties.load(is);
//2.获取name的属性值
String name = properties.getProperty("name");
System.out.println("name="+name);
第三种方式:通过classloader去获取web工程下的资源(通过类加载器)
//获取servletContext对象
ServletContext context = getServletContext();
//1.创建属性对象
Properties properties = new Properties();
//默认的classloader的路径是下面这个路径,我们必须得回到这个项目的目录下,才能进入file目录
//D:\tomcat\apache-tomcat-7.0.57\wtpwebapps\servletContextDemo\WEB-INF\classes
InputStream is = this.getClass().getClassLoader().getResourceAsStream("../../file/config.properties");
properties.load(is);
//2.获取name的属性值
String name = properties.getProperty("name");
System.out.println("name="+name);
3.实现各个servlet之间的资源共享
//先利用servletContext存入数据
//获取ServletContext对象
ServletContext context = getServletContext ();
//存入共享数据
context.setAttribute("name", "cyh");
//然后我们在其他servlet上就可以通过servletContext这个对象来获取这些数据了
String name = context.getAttribute("name");
本文章转载自:https://blog.csdn.net/weixin_44665028/article/details/100800388