貌似有段时间没分享干活了哈!

今天我们就来分享
ServletContext
什么是 ServletContext
当我们启动 web 容器的后,会为每个 web 应用程序都创建一个对应的 ServletContext 对象,它代表当前 web 应用。
由于一个 web 应用中的所有 Servlet 共享同一个 servletcontext 对象,因此servlet 对象之间可以通过 servletcontext 对象来实现通讯。ServletContext 对象通常也被称之为 context 域对象。公共聊天室的项目就会用到它。
ServletContext、Cookie和Session的对比

Java学习交流群:495273252
我们把 ServletContext 想像成一个共用的空间,可以被所有的客户访问,也就是说 A客户端可以访问,B客户端可以访问,C客户端也可以访问。
ServletContext 应用
初始化参数
Javax.servlet.ServletConfig

Java学习交流群:495273252
我们来创建一个
ContextServlet

Java学习交流群:495273252
虽然现在有注解的方式而且很方便 但是我们还是要知道配置的方法毕竟现在还是有很多项目用的是配置的方法
配置我们的 web.xml

Java学习交流群:495273252
好的!
现在来启动服务器运行一下

Java学习交流群:495273252
嗯!看来程序没有什么问题了
注意:
如果我们的程序有很多的Servlet需要配置,你可以复制这一段!然后把名称修改一下就可以了!(使用的配置的方法,注解的方法就不与需要配置)

Java学习交流群:495273252
在 web 应用中,我们可以创建一些初始化的参数—Init-param。我们可以通过 servletConfig 对象获取当前 servlet 的初始化参数。

Java学习交流群:495273252
这个属性就是这样配置的
然后在来写我们的 Servlet
把 name 属性的值输出到页面

Java学习交流群:495273252
保存修改
重新发布一下

Java学习交流群:495273252
那么我们现在另外创建一个 Servlet 来测试一下。

Java学习交流群:495273252
看看可不可以读取到这个 name 属性

Java学习交流群:495273252
结果显示我们的 AnotherServlet 获取不到这个 name 的值
(Init-param只能给当前的Servlet使用)
上面使用 ServletConfig 来读取配置文件
下面我们使用 ServletContext
在 web.xml 中配置一下属性

Java学习交流群:495273252
那么怎样获得 ServletContext 呢?
ServletContext 对象可以通过ServletConfig.getServletContext 方法获得对ServletContext 对象的引用,也可以通过 this.getServletContext() 来获得其对象的引用。

Java学习交流群:495273252
我们来看一下
ContextServlet 能不能获取到属性

Java学习交流群:495273252
再来看看 AnotherServlet
能不能收到这个 pwd 值

浏览器效果

Java学习交流群:495273252
这样对比就很强烈了!
总结:
ServletConfig 只能获取到当前对应的 servlet 的初始化参数。
ServletContext 可以获取到全局的初始化参数。
上下文属性
属性是一种对象,可以通过调用 servletContext 对象HttpServletRequest (或ServletRequest) 对象和HttpSession 对象的setAttribute() 方法设置到不同的范围中也叫绑定。
设置属性 setAttribute(String name, String value);
获取属性 getAtrribute(String name);
删除属性 removeAttribute(String name);
ServletContext
在web服务器启动时为每一个 web 应用程序创建相应的 ServletContext对象
在web服务器关闭时为每个web应用程序销毁相应的ServletContext对象
HttpSession
浏览器开始与服务器绘画时创建
调用HttpSession.invalidate();超过了Session的最大有效时间间隔;服务器进程背停止。
ServletRequest
每次请求开始时创建
每次访问结束后销毁
我们来验证一下
先创建一个 SetAttributeServlet

Java学习交流群:495273252
再来创建一个
GetAttributeServlet

Java学习交流群:495273252
启动服务器,先来设置一下
访问 SetAttributeServlet

Java学习交流群:495273252
再来获取属性的值
访问 GetAttributeServlet

Java学习交流群:495273252
现在我们换一个浏览器
打开 GetAttributeServlet

Java学习交流群:495273252
总结:
1.在访问URL的时候我们的每一个页面(请求)都是一个Request,重新打开一个新页面(请求)上一个页面的Rquest的值就获取不到了
2.每一个浏览器就是一个Session 再同一个浏览器内新建几个页面都可以获取到 Session 的内容,换一个浏览器就获取不到了
3.ServletContext 就是我们这个应用的范围!当服务器启动之后你用什么浏览器访问都可以获取到里面的信息
通过 ServletContext 实现数据共享
下面来做一个网站的计数器
相信伙伴们都有这样的经历
在访问网站的时候会有一条消息—欢迎!您是第x位访问本网站的人。这个就是网站的计数器,现在我们就来制作一个简易的网站计数器。
方案:
设置一个静态变量,当服务器启动时,可以通过文件或表初始化该变量,当服务器关闭时,再将变量的值写入到文件或是数据库中。
缺点:实现复杂,要求对文件操作。
优点:效率高,不会频繁的访问数据库或文件。
开动
创建一个 record.txt 文件储存浏览网站的次数
创建一个Servlet
把网页的浏览量从文件中读取出来设置到 nums 中

Java学习交流群:495273252
当请求销毁时把浏览量写入文件中

Java学习交流群:495273252
把获取到的数值输出到页面上

Java学习交流群:495273252
页面效果

Java学习交流群:495273252
监听器
在 Java Web 开发中,几乎所有的 Java EE 组件的生命周期都是由 Web 服务器进行管理的。开发人员负责诸如 JSP、Servlet 等组件的开发,然后将这些组件部署到服务器上,由容器来负责这些组件的创建、调用和销毁。
如果开发人员想在某个组件的创建或销毁,或其属性改变时,去执行一些特定的任务,就要使用监听器。
Java Web 监听器是 Servlet 规范中定义的一种特殊类,用于监听 Web 应用程序中的 ServletContext、HttpSession和 ServletRequest对象的创建与销毁事件(即生命周期),以及这些对象中的属性的变更、迁徙、绑定等事件。
这张图展示了 Servlet 3.1 版本可以使用的监听器,一共有十个监听器接口(Servlet 上下文事件有两个监听器,HTTP 会话事件有五个监听器,Servlet 请求事件有三个监听器。),开发人员可以实现这十个接口中的一个或多个,定制自己的监听器。

Java学习交流群:495273252
这里我们只介绍Servlet上下文事件的监听器。
创建一个监听器

Java学习交流群:495273252
选择监听ServletContext的生命周期

Java学习交流群:495273252
注解的方式:

Java学习交流群:495273252
把 numServlet 中的代码剪切过来

Java学习交流群:495273252

Java学习交流群:495273252
Web.xml 配置方式
使用之前记得把注解的方式删除掉

Java学习交流群:495273252
运行效果同上就不给大家看演示效果了
伙伴们可以去试一下
好的今天就分享到这里了
再见!