当前位置:网站首页>servlet学习(七)ServletContext
servlet学习(七)ServletContext
2022-08-03 05:24:00 【世宇同学】
一、问题
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);//[email protected]
注意:此种方式只能获取项目根目录下的资源流对象,class的流对象需要使用类加载器来获取。
边栏推荐
猜你喜欢
随机推荐
深度学习理论课程第四、五章总结
IO 复用
MATLAB给多组条形图添加误差棒
自监督论文阅读笔记 TASK-RELATED SELF-SUPERVISED LEARNING FOR REMOTE SENSING IMAGE CHANGE DETECTION
ZEMAX | 如何创建复杂的非序列物体
快速的将结构体各成员清零
Kettle 从资源库中载入新的转换出错(Invalid byte 1 of 1-byte UTF-8 sequence)
电子元器件和电子元件的区别有那些?
自监督论文阅读笔记 Self-supervised Label Augmentation via Input Transformations
A.1#【内存管理】——1.1.3 page: struct page
2021-03-22
ZEMAX | 在OpticStudio中建立扩增实境(VR)头戴式显示器
ZEMAX | 在 OpticStudio 中使用自由曲面进行设计
优雅的拦截TabLayout的点击事件
IPC通信 - 管道
IPC 通信 - IPC
常见的电容器有哪些?唯样商城
MCU接收串口字符型数据转换成数据型数据
VSCODE 常见问题
中空编码器的作用——唯样商城