8 ServletContext

 

1 为什么需要ServletContext 技术

显示网站多少人在线,显示当前登录者是第几位登录者等信息。

 

2 什么是ServletContext

  可以把它想象成一个服务器上的公共空间,每个用户都可以访问到它。 Web 容器在启动时,它会为每个Web 应用程序都创建一个对应的ServletContext对象,它代表当前web应用。

① ServletContext 在服务器端

② ServletContext 被所有客户端共享

③ ServletContext 当Web应用启动时,自动创建

④ web应用关闭/tomcat关闭/reload,ServletContext自动消亡

 

3 创建

ServletContext 对象可以通过 getServletConfig().getServletContext()方法获得,也可以通过this.getServletContext()获得。

 

4 删除

ServletContext.removeAttribute("counter");

 

5 实际应用

① 获取web应用的初始化参数

复制代码
 1 <!-- 所有servlet都可以访问 -->
 2   <context-param>
 3       <param-name>name</param-name>
 4       <param-value>latinyTest3</param-value>
 5   </context-param>
6 //获取: 7 ServletContext serCon = this.getServletContext(); 8 String name = serCon.getInitParameter("name"); 9
10 //如果文件在src下,应该使用类加载器读取 11 InputStream 12 inpStr2= ContextTest5.class.getClassLoader().getResourceAsStream("dbinfo.properties");
复制代码

 

② 跳转页面技术

//1 response.sendRedirect("/web应用名/资源名");
//2 request.getRequestDispatcher("/资源名").forward(request, response);
//3 this.getServletContext().getRequestDispatcher("/url").forward(request, response);

 

③ 读取资源文件

//a 创建资源文件,dbinfo.properties
username=latiny
password=123456abc
age=28
sex=male

  

复制代码
//b读取资源文件
ServletContext serCon = this.getServletContext();
//1 首先读取到文件
InputStream inpStr = serCon.getResourceAsStream("dbinfo.properties");
//2 创建Properties,然后loadinStr到Properties对象里
Properties proper= new Properties();
proper.load(inpStr);
        
//根据Properties对象的key获取value
String name=proper.getProperty("username");
String password=proper.getProperty("password");
复制代码

  

④ 获取文件全路径

ServletContext serCon = this.getServletContext();
//读取到文件全路径
String path = serCon.getRealPath("/images/2.png");
String path = serCon.getRealPath("2.png");

 

⑤ web网站实际应用

网站计数器;网站在线用户显示;简单聊天系统;

如果涉及到不同用户共享数据,并且这些数据量不大,同时又不希望写入到数据库中,则可以考虑ServletContext实现;

 

实现网站计数器功能时,用户每刷新一次会自动增加一次访问记录,如何避免表单重复提交:

使用sendRedirect 访问即可:

response.sendRedirect("/UserManager4/MainFrame");

 

⑥ 使用ServletContext注意事项

ServletContext会长时间保存在服务器内存中,因此建议不要想ServletContext中添加过大的数据。

 

posted @   Latiny  阅读(160)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示