servlet学习(七)ServletContext

一、问题

session可以解决同一个用户之间不同请求的数据共享问题,那么不同用户之间的需要数据共享怎么办?

二、解决

使用ServletContext对象

三、原理

ServletContext对象是由服务器进行创建的,也就是说一个项目里面只有一个ServletContext对象,不同的用户获取到的ServletContext对象都是同一个,该ServletContext对象由所有用户所共有。

四、特点

服务器进行创建,用户共享,一个项目只有一个。

五、生命周期

服务器启动->服务器关闭

六、作用域

整个项目内

七、使用

1.获取ServletContext对象

	//获取ServletContext对象的四种方式
		ServletContext sc1=this.getServletContext();
		ServletContext sc2=req.getSession().getServletContext();
		ServletContext sc3=req.getServletContext();
		ServletContext sc4=this.getServletConfig().getServletContext();
		System.out.println(sc1==sc2);//true
		System.out.println(sc1==sc3);//true
		System.out.println(sc1==sc4);//true

2.使用作用域进行数据共享流转

		//数据存入
		sc1.setAttribute("num", 1);
		//取出数据
		int num=(int) sc1.getAttribute("num");
		System.out.println(num);//1

3.获取WebRoot/WebContent下资源的绝对路径

	//获取WebContent下资源的绝对路径
		String path=sc1.getRealPath("1.jsp");
		System.out.println(path);//F:\Etomcat\webapps\018-ServletXuexi\1.jsp

4.获取web.xml中的全局配置

作用:将静态数据和代码进行解耦

先配置web.xml中的数据,如下所示:

注意:一个  <context-param>  </context-param>之间只能存放一个键值对,多组声明多个存储。

  <context-param>
  <param-name>charset</param-name>
  <param-value>utf-8</param-value>
  </context-param>
   <context-param>
  <param-name>type</param-name>
  <param-value>text/html</param-value>
  </context-param>
//获取web.xml中的全局配置
		String type=sc1.getInitParameter("type");
		System.out.println(type);//text/html
		String charset=sc1.getInitParameter("charset");
		System.out.println(charset);//utf-8

或者

Enumeration enumeration=sc1.getInitParameterNames();
		while(enumeration.hasMoreElements()) {
			String name=(String) enumeration.nextElement();
			String value=sc1.getInitParameter(name);
			System.out.println(name+" "+value);
		}
//输出
//charset utf-8
//type text/html

5.获取webroot/webcontent下项目资源流对象

	InputStream inputStream=sc1.getResourceAsStream("1.jsp");
		System.out.println(inputStream);//java.io.ByteArrayInputStream@469c52eb

注意:此种方式只能获取项目根目录下的资源流对象,class的流对象需要使用类加载器来获取。

猜你喜欢

转载自blog.csdn.net/weixin_40327259/article/details/83312116