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
来源:51CTO
作者:启程QiCheng
链接:https://blog.csdn.net/qq_45243069/article/details/100807988