当前课程知识点:Web后端开发技术 >  第7章 Filter和Listener >  7.2 监听器 >  7.2.1.2示例:访问网站计数功能

返回《Web后端开发技术》慕课在线视频课程列表

7.2.1.2示例:访问网站计数功能在线视频

下一节:7.2.2.1与Session相关的监听器

返回《Web后端开发技术》慕课在线视频列表

7.2.1.2示例:访问网站计数功能课程教案、知识点、字幕

同学你好

今天我们学习这个知识点

给大家演示一个我们访问网站计数

然后如果我们的服务器关闭了

那么这个计数它能够保存起来

保存到一个文件当中

或者保存到数据库当中

当这个服务器在启动的时候

我原先的计数会从我们的文件或者是

数据库当中再读回来

当然了

这里面我们是以文件为主

首先我们打开我们的eclipse

首先我们要监听我们的

servletContext这么

一个listener

也就是说我们的

servletContext启动的时候

我们要从文件当中把这个数据给给他

读取出来

如果当它销毁的时候

我们要把当前的计数存到我们文件

当中

现在我们先去建立一个

listener

我们点击new一个

listener

这个listener我们叫做

VisitCountListener

这时候我们要去实现的就是

servletContextListener

这样的一个接口

点击

Finish

那么在这个接口里面

我们主要是当它初始化的时候

我们要把计数给它读出来

当它销毁的时候

我们把当前的计数给它存到那个文件

当中

我们先去实现

initialized这个方法

那么假如说我们有一个文件在

这里src一下

我新建一个普通的文本文件

我们就new一个普通的文本文件

我们的点击src选择

general下面的file

点击next

我们叫做count.

txt

finish

那么这里面就存着我当前的一个计数文件

比如说我这里随便写一个30

表示我当前已经有了30个访问了

那么当我服务器启动的时候

我要把它读进来

那么首先我先通过我管它叫sce

sce

我可以拿到我的servletContext

上下文

servlet

context

我叫做context这么一个对象

好了

然后我通过文件读取的方法

我叫做BufferedReader

我new一个我的BufferedReader

这都是我们文件里面读取

读取文件的API

new一个inputStreamReader

那么inputStreamReader里面

我们需要传入

我们这个文件在哪儿

我可以通过我的context对象

.get

resource

AsStream

直接在我的根目录下有一个叫做

count.txt这样就可以了

那么读进来以后

我就可以通过

因为我只有一行

我就直接通过reader.readLine

给它读进来

它是一个count类型

会发生异常

我就直接给它进行一下处理

try catch

好了

然后我判断一下

如果我们的count是空

或者是这样的空

那么我就让count初始化

成一个值是

0就可以了

最后我需要把 count给它转

换成整型的

countInt

叫做integer.

给它转换成我们整形的 count

因为之前它是字符串类型的

然后我给它保存到我们的对象当中

context. 我们用set

Attribute

count

我们的countInt

那么不要忘了我们刚才读完这个文件了

我们要把我们的对应的文件

都给它关掉

.close

所以说这个逻辑就是我们一旦服务器

启动

我从我 count.text当中

把我之前保存的计数给读取出来

那么我的销毁的时候

也就当我服务停止的时候

是不是与它相反的一个过程

我当前计数给写入到我 count.txt当中

把原先值给覆盖掉就可以了

所以说我们这块代码就很清晰了

我们通过还是这句话

拿都servletContextt对象

拿到这个对象以后

我们还是要取出来对象当中的integer值

我们通过context.get

attribute

我们count值

当然 count值它是一个

integer类型的了

我们对它进行取出

那么有了这个计数以后

我们就要判断一下这个计数是不是为空

如果为空

我们程序可能会出现错误

所以它不为空的情况下

我们就给它写入到文件里面

通过printWriter

这个对象

那么在printWriter

这个对象里面

我们要构造我们的文件的路径

我们可以通过 context.get

我们的realPath

连接上我们的 count.txt

这时候就把这个路径给构造出来了

然后我可以通过 pw.

println方法

我们把我当前的 count值给写进去

Int value

这个异常我们对它进行捕获一下

out加1

这时候如果这个服务启动

就会对按我的contextdestroyed

销毁以后

然后这个值就会写在我们的

count.txt当中

这count.txt我

应该给它搁到 WEB-INF

下面

归到 src下了

删除掉

我们先测试一下

为了方便调试

我在这里先

打印一下我的count信息

在我初始化的时候

读出来以后

我打印一下我 countInt的值

是多少

我们启动我们的服务

启动服务

这个方法就会被执行

然后就会打印出我们当前的

countInt

启动

大家可以看到了

在这里面就会有一个30

当我销毁的时候

这个30就会写回去

比如说我现在人为的把30给他删去

它这里什么都没有

我正常停止服务

待会我们再看一下这个文件里有没有东西

停止

现在服务已经停了

我们再打开这个文件

它没有写入

我们来看一下代码

之所以写错了是这个原因

我在写初始化的时候

我是刚才把 count.txt

我是搁到 src下读的

而我写回去的时候

我刚才把 count.txt搁到

webContent下面了

它读的是两个不同的东西

所以说你给统一起来

我们就改一下contextInitialized

这时候这种读的方法它是从src下读的

我们还是从 都统一成从

webContent下面读

所以说这时候我改变一下

这块 ctrl c

我用了一个叫做

new一个叫FileReader

FileReader里面我们

写这个路径是我们的实际路径

下面的 count.txt

它就会读这个txt文件

为了处理这个异常

我搁到 try catch里面

这时候就不会有任何问题了

那么我们count.txt默认情况下是

30

我们重新启动

它这里读出来的是0

我们看一下它实际部署到是这个目录

部署到这个目录以后

大家会发现这个coun.txt里它什么都没有

那么出现这个问题可能是它一个

eclipse的问题

我们可以怎么办

把这个项目给它首先把服务停掉

把服务停掉

然后我们把这个项目给他移除掉

然后再把这个项目我们重新进行一下

部署

重新我去部署一下

第7章

然后这是实际它部署的那个目录

那么我们给它重新启动一下

大家可以到部署目录里面第7章内容

都有了

可以看一下

现在是30

然后把这个值给改掉

比如说什么都没有吧

那么这时候销毁的时候

我服务一停掉的时候

它是不是就应该把我已经存在我应用里的

缓存的值30再给写回去

那么我们确认一下

这里面确实啥都没有

啥都没有

我们现在把服务停掉

可以看到停掉了

那么我们打开这里边

如果啥都没有

大家可以到目录下,它实际部署的目录

下面去看

它这里也没有写入

没有写入

没关系

我们为了确认一下这个值

我们在这里面去打印输出它一下

叫做 count值

保存

我们先重新给他一个值30

然后我们重新启动一下这个服务器

这时候30这个值是有的

把30值删掉

然后我们关掉这个服务器

我们来看一下 countDestroyed方法写的

因为我们用的是printwriter

当我们写完以后没对它进行关闭

它还在内存当中

没有真正的往文件上写

所以说我们需要调用一下它的关闭方法

这时候它里面的缓存才会真正的

写入到文件当中

那我们在 count里面

我们还是初始化成它的30

大家一定要理解

当我这个项目真正运行的时候

实际上是

它编译运行完以后

部署到的是我们实际的这个目录下

在之前的课程当中

我们也找过这个目录在哪个位置

那么这里面实际上它拷贝过来一份

这点大家一定要注意

为什么这么说

现在我这是30

这时候 count和我那里的

count是同一个count

所以说是都是30

当我启动服务器

它可以从 count当中进行读取

读完以后

注意我把我30删掉了

当然了这块30跟着也就删掉了

也就什么都没有了

那么当我关闭的时候

它是不是要往我 count里写

但是它往count写的是哪个

count.txt

写的是往我这份里写的

count.txt

而我项目里这份是没有动的

所以说我们查的时候要查那一份

count.txt

关闭

关闭完以后

我们找到我们实际部署的count.txt

我们看一下

是30没有问题

是因为我刚才没有进行把把这个删除

我给大家再重新把整个演示一遍

我以debug方式去启动我们的

服务

initialized这块我们给它

跳过去

整个执行完

这样的话从我们的数据里面就读取了

30

我们为好为了更好的演示

destroy这一块

我们在这加一个断点

然后我们把 count数值给它

删除掉

这里没有了

现在我关闭我的服务

大家可以看到断点已经到这了

我依次执行

所以说这个值已经读出来了

这个值又再一次读出来

count这个值读出来

然后重新写回到这个文件

给它关闭掉

这个程序就整个执行完了

那么我们可以看一下我们

Count.txt

30这个值就回来了

那么是在实际应用当中

是不是我有其他的程序

然后不断的往我Context里面

这个对象里面

去增加我 count值

那么一旦我这个服务器服务关闭

contextDestroy这个方法就会被调用

那么我们取出来最新的 count值

就会被重新写到我这个文件当中

从而得到了保存

这个知识点就讲到这里

谢谢

Web后端开发技术课程列表:

第1章 Java Web开发准备

-1.0 导学

--1.0.1 导学

-1.1 Web应用开发概述

--1.1.1 Web应用简介

--1.1.2 Web开发技术

--1.1.3 测试

-1.2 准备Java Web应用开发环境

--1.2.1 准备Java Web应用开发环境

--1.2.2 测试

--1.2.3 谈谈JavaWeb优势和学习方法

-1.3 任务实现:Hello World Web项目

--1.3.1 Hello World Web项目

--1.3.2 测试

-1.4 小结

--1.4.1 小结

-本课程所有代码

--课程参考代码

第2章 Servlet技术基础

-2.0 导学

--2.0.1 导学

-2.1 Servlet概述

--2.1.1 Servlet简介

--2.1.2 Servlet API

--2.1.3 测试

-2.2 创建Servlet

--2.2.1 Hello Servlet

--2.2.2 Servlet配置

--2,2,3 作业

-2.3 Servlet应用

--2.3.1 处理超链接请求

--2.3.2 处理form表单请求

--2.3.3 处理结果

--2.3.4 测试

-2.4 任务实现:某高校毕业生信息发布系统-注册与登录(Servlet版)

--2.4.1 注册代码实现

--2.4.2 登录代码实现

--2.4.3 测试

--2.4.4谈一谈jQuery前端开发框架

-2.5 ServletConfig接口

--2.5.1 ServletConfig接口

-2.6 ServletContext接口

--2.6.1 ServletContext接口

-2.7 HttpServletRequest接口

--2.7.1 获取请求报文信息

--2.7.2 上传照片

--2.7.3 获取网络连接信息

--2.7.4 存取请求域属性

--2.7.5 测验

--2.7.6 在请求转发和重定向过程中传递数据

-2.8 HttpServletResponse接口

--2.8.1 HttpServletResponse接口

--2.8.2 输出服务器端图片

--2.8.3 测试

-2.9 任务实现:某高校毕业生信息发布系统-简历添加

--2.9.1 任务实现:某高校毕业生信息发布系统-简历添加

-2.10 小结

--2.10.1 小结

-动画演示:Java Web应用服务器处理客户端请求的过程

--Java Web应用服务器处理客户端请求的过程

第3章 会话跟踪

-3.0 导学

--3.0.1 导学

-3.1 Cookie技术

--3.1.1 Cookie技术概述

--3.1.2 Cookie技术应用-自动登录

--3.1.3 测试

-3.2 Session技术

--3.2.1 Session技术概述

--3.2.2 Session技术-Session技术应用购物车

--3.2.3 测试

-3.3 URL重写与隐藏表单域

--3.3.1 URL重写技术与隐藏表单域

--3.3.2 测试

-3.4 任务实现:某高校毕业生信息发布系统-简历修改

--3.4.1 任务实现:某高校毕业生信息发布系统-简历修改

--3.4.2 讨论会话跟踪技术的应用场景

-3.5 小结

--3.5.1 小结

第4章 JSP基础

-4.0 导学

--4.0.1 JSP导学

-4.1 jsp概述

--4.1.1 JSP概述

--4.1.2 测试

-4.2 脚本元素

--4.2.1 脚本元素

--4.2.2 测试

-4.3 指令元素

--4.3.1 指令元素

--4.3.2 测试

-4.4 动作元素

--4.4.1 动作元素

--4.4.3 测试

-4.5 内置对象

--4.5.1 内置对象(1)

--4.5.2 内置对象(2)

--4.5.3 测试

-4.6 JavaBean

--4.6.1 JavaBean概述

--4.6.2 分步注册

--4.6.3 测试

-4.7 任务实现:某高校毕业生信息发布系统-首页(JSP版)

--4.7.1 任务实现:某高校毕业生信息发布系统-首页(JSP版)

--4.7.2 在JSP页面显示内容的都有哪些方法

-4.8 小结

--4.8.1 小结

第5章 表达式语言

-5.0 导学

--5.0.1 表达式语言

--5.0.2 测试

-5.1 el语法

--5.1.1 EL语法

--5.1.2 测试

-5.2 el隐含对象

--5.2.1 EL隐含对象

--5.2.2 测试

-5.3 任务实现:某高校毕业生信息发布系统-学生详细信息展示

--5.3.1 任务实现:某高校毕业生信息发布系统-学生详细信息展示

--5.3.2 测试

-5.4 小结

--5.4.1 小结

--5.4.2 讨论el表达式的优势

第6章 标准标签库

-6.0 导学

--6.0.1 标准标签库

--6.0.2 测试

-6.1 核心标签库

--6.1.1 通用标签

--6.1.2 条件标签

--6.1.3 迭代标签

--6.1.4 URL标签

--6.1.5 测试

-6.2 任务实现:某高校毕业生信息发布系统-首页(JSTL版)

--6.2.1 任务实现:某高校毕业生信息发布系统-首页(JSTL版)

--6.2.2 测试

-6.3 小结

--6.3.1 小结

--6.3.2 讨论如何实现自定义标签

第7章 Filter和Listener

-7.0 导学

--7.0_导学

-7.1 过滤器

--7.1.1过滤器(1)

--7.1.2过滤器(2)

--7.1.3 测试

-7.2 监听器

--7.2.1.1与ServletContext相关的监听器

--7.2.1.2示例:访问网站计数功能

--7.2.2.1与Session相关的监听器

--7.2.2.2示例:显示在线用户名称

--7.2.3.1与Request相关的监听器

--7.2.3.2示例:实时显示访问网站用户信息示例

--7.2.4 测试

-7.3 任务实现:某高校毕业生信息发布系统-单态登录

--7.3.1 任务实现:某高校毕业生信息发布系统-单态登录

--7.3.2 测试

-7.4 小结

--7.4.1小结

--7.4.2讨论filter和listener使用场景

第8章 JDBC

-8.0 导学

--8.0_导学

-8.1 JDBC API

--8.1.1 JDBC API

--8.1.2 测试

-8.2 JDBC API访问MySQL基本步骤

--8.2.1 JDBC API

--8.2.2 测试

-8.3 任务实现:某高校毕业生信息发布系统-注册与登录

--8.3.1 任务实现:某高校毕业生信息发布系统-注册与登录(JDBC版)

--8.3.2 测试

-8.4 小结

--8.4.1小结

--8.4.2 讨论JDBC工具类

第9章 某高校毕业生信息发布系统开发

-9.0导学

--9.0导学

-9.1 技术准备

--9.1.1技术准备-MVC模式

--9.1.2技术准备-Ajax技术

--9.1.3技术准备-jQuery对Ajax的实现

--9.1.4_技术准备- JDBC工具类

--9.1.5 测试.

-9.2 系统设计

--9.2系统设计:某高校毕业生信息发布系统开发

-9.3 系统实现

--9.3.1完善登陆和注册功能

--9.3.2完善简历添加功能

--9.3.3完善简历修改功能

--9.3.4.1首页分页显示

--9.3.4.2首页分页显示

-9.4 小结

--9.4.1小结

--9.4.2讨论:分页组件

7.2.1.2示例:访问网站计数功能笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。