java监听数据库操作_第十六篇——JDBC操作数据库之监听器

JavaWeb应用中,很多的地方都和session有关。因此session相关的事件监听器,在日常工作中非常有用。

有时候我们需要统计当前在线的人数和访问人数总数,此时就可以使用监听器技术来很简单的实现这种功能。

注意:

session并不是浏览器关闭时销毁的,而是在session失效的时候销毁下列代码就是监测session创建、销毁。

销毁session,可以设置过期时间:

1

步骤说明

2、在第十五篇基础上继续实现功能——第十六篇JDBC操作数据库之监听器。

一.InitNumListener.java

对ServletContext对象进行监听的接口有ServletContextAttributeListener 和 ServletContext-Listener。package com.listener;

import javax.servlet.ServletContext;

import javax.servlet.ServletContextEvent;

import javax.servlet.ServletContextListener;

import java.io.*;

/**

* Created by Ray on 2018/3/17 0017.

**/

public class InitNumListener implements ServletContextListener {

//初始化上下文

public void contextInitialized(ServletContextEvent sce) {

/* This method is called when the servlet context is

initialized(when the Web application is deployed).

You can initialize servlet context related data here.

*/

//创建接口

ServletContext servletContext = sce.getServletContext();

//访问总数的文件路径

String filename = servletContext.getRealPath("/WEB-INF/count.txt");

File file = new File(filename);

//初始化访问总数

Integer totalcount = 0;

if(file.exists()){

try{

//读取文件内容

FileReader fileReader = new FileReader(file);

BufferedReader bufferedReader = new BufferedReader(fileReader);

totalcount = Integer.valueOf(bufferedReader.readLine());

//关闭流

bufferedReader.close();

fileReader.close();

}catch (Exception e){

e.printStackTrace();

}

}

//设置属性name的值为value

servletContext.setAttribute("totalcount",totalcount); //访问总数

servletContext.setAttribute("accesscount",0); //在线用户数

}

//销毁上下文

public void contextDestroyed(ServletContextEvent sce) {

/* This method is invoked when the Servlet Context

(the Web application) is undeployed or

Application Server shuts down.

*/

//创建接口

ServletContext servletContext = sce.getServletContext();

//访问总数的文件路径

String filename = servletContext.getRealPath("/WEB-INF/count.txt");

File file = new File(filename);

try{

//将内容写入文件

FileWriter fileWriter = new FileWriter(file);

BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);

bufferedWriter.write(servletContext.getAttribute("totalcount").toString());

//关闭流

bufferedWriter.close();

fileWriter.close();

}catch (Exception e){

e.printStackTrace();

}

}

}

二.UserEnterListener.java

实现HttpSessionListener接口的监听器,可以监听 HttpSession 对象本身的创建和销毁。package com.listener;

import javax.servlet.ServletContext;

import javax.servlet.http.HttpSessionEvent;

import javax.servlet.http.HttpSessionListener;

/**

* Created by Ray on 2018/3/17 0017.

**/

public class UserEnterListener implements HttpSessionListener {

public void sessionCreated(HttpSessionEvent se) {

/* Session is created. */

ServletContext servletContext = se.getSession().getServletContext();

//返回属性name的值

Integer totalcount = (Integer) servletContext.getAttribute("totalcount");

Integer accesscount = (Integer) servletContext.getAttribute("accesscount");

//使用指定的属性名字绑定一个对象并储存到session中

servletContext.setAttribute("totalcount",totalcount+1);

servletContext.setAttribute("accesscount",accesscount+1);

}

public void sessionDestroyed(HttpSessionEvent se) {

/* Session is destroyed. */

ServletContext servletContext = se.getSession().getServletContext();

//返回属性name的值

Integer accesscount = (Integer) servletContext.getAttribute("accesscount");

//使用指定的属性名字绑定一个对象并储存到session中

servletContext.setAttribute("accesscount",accesscount-1);

}

}

三.web.xml

1.监听器Listener

2.设置session过期时间

3.省略部分代码(懒得删)<?xml version="1.0" encoding="UTF-8"?>

xmlns="http://java.sun.com/xml/ns/javaee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

com.listener.InitNumListener

com.listener.UserEnterListener

1

BookList

com.control.BookList

BookList

/BookList

BookAdd

com.control.BookAdd

BookAdd

/BookAdd

BookUpdate

com.control.BookUpdate

BookUpdate

/BookUpdate

BookDoUpdate

com.control.BookDoUpdate

BookDoUpdate

/BookDoUpdate

BookDelete

com.control.BookDelete

BookDelete

/BookDelete

BookDoDelete

com.control.BookDoDelete

BookDoDelete

/BookDoDelete

BookBatchAdd

com.control.BookBatchAdd

BookBatchAdd

/BookBatchAdd

BookBatchDelete

com.control.BookBatchDelete

BookBatchDelete

/BookBatchDelete

BookFind

com.control.BookFind

BookFind

/BookFind

Login

com.control.Login

Login

/Login

DrawImage

com.control.DrawImage

DrawImage

/DrawImage

Register

com.control.Register

Register

/Register

LoginUser

com.control.LoginUser

LoginUser

/LoginUser

ExitLogin

com.control.ExitLogin

ExitLogin

/ExitLogin

Upload

com.control.Upload

Upload

/Upload

ListFile

com.control.ListFile

ListFile

/ListFile

Download

com.control.Download

Download

/Download

CharSetFilter

com.Filter.CharSetFilter

charset

UTF-8

CharSetFilter

/*

404

/error/error404.jsp

500

/error/error500.jsp

ErrorFilter

com.Filter.ErrorFilter

ErrorFilter

/error.jsp

ERROR

四.listen.jsp

String path = request.getContextPath();

String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";

%>

Listen

访问人数:${totalcount}    在线人数:${accesscount}

五.count.txt(总访问人数19)

411e52550848f2bc1bec5d5199a2d1d4.png

六.页面效果

6c824348bf121c36f0fc2b06d8c7ac3f.png

另一个浏览器(模拟多个用户)

6e492e70a356c45e14f362fdc9ac91eb.png

关闭浏览器(模拟在线人数退出),等1-2分钟刷新

db510b17d62feeef1e5d6b7852af9c3a.png

ok!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/507797.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pythonsuper函数_怎么使用python super函数调用父类

怎么使用python super函数调用父类 发布时间&#xff1a;2020-11-19 09:19:47 来源&#xff1a;亿速云 阅读&#xff1a;93 作者&#xff1a;小新 小编给大家分享一下怎么使用python super函数调用父类&#xff0c;希望大家阅读完这篇文章后大所收获&#xff0c;下面让我们一起…

java listview颜色_[摘]android listview选中某一行,成选中状态颜色高亮显示

构造自己的adapter&#xff0c;在getView中&#xff0c;设置颜色&#xff0c;点击item&#xff0c;刷新listview。代码&#xff1a;view plaincopy to clipboardprint?import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;impor…

python2.7安装matplotlib_Ubuntu-Python2.7安装 scipy,numpy,matplotlib 和pip

一、 scipy,numpy,matplotlib sudo apt-get install python-scipy sudo apt-get install python-numpy sudo apt-get install python-matplotlib python import scipy import numpy import pylab scipy.test() numpy.test() pylab.test() 二、pip 1、先说一下什么是pip pip 是“…

instring java_Decode a string in Java

java中decode字符串&#xff1a;public class Utils {private static Pattern validStandard Pattern.compile("%([0-9A-Fa-f]{2})");private static Pattern choppedStandard Pattern.compile("%[0-9A-Fa-f]{0,1}$");private static Pattern va…

加装的硬盘进入后点不了文件夹_在外接移动硬盘上制作win to go教程

有很多使用Mac Book的小伙伴免不了要使用一些Windows下才有的软件(强行暗示Solidworks)&#xff0c;这类的大型软件在虚拟机当中运行稳定性又不太好&#xff0c;所以双系统便成了许多人的选择&#xff0c;但boot camp让本就拮据的机身内存雪上加霜&#xff0c;由此win to go便成…

java使窗体最大化_[转]java窗体运行时最大化及关闭方法示例

其实这原本是一个有关java的基础话题&#xff0c;不过既然有人提出来&#xff0c;不妨说两句&#xff0c;顺便也可做为初学者的一个参考。//1.窗体启动时最大化//Frame1.javaimport java.awt.*;import java.awt.event.*;import javax.swing.UIManager;public class Frame1 exte…

python爬虫动态解析js_Python爬虫实战入门五:获取JS动态内容—爬取今日头条

F12打开网页调试工具&#xff1a;选择“网络”选项卡后&#xff0c;发现有很多响应&#xff0c;我们筛选一下&#xff0c;只看XHR响应。&#xff08;XHR是Ajax中的概念&#xff0c;表示XMLHTTPrequest&#xff09;然后我们发现少了很多链接&#xff0c;随便点开一个看看&#x…

openjdk怎么执行java命令_Ubuntu 18.04 上使用 OpenJDK 安装并运行 Tomcat

在Linux上安装与卸载JDK和JRE&#xff0c;两种常用方法&#xff1a;一、通过 apt-get 命令在线进行安装与卸载(会自动配置好环境变量)二、通过下载并解压 .tar.gz 包进行手动安装与手动卸载(需要手动配置环境变量)注&#xff1a;javac命令是JDK中的&#xff0c;java命令是JRE中…

vscode卸载background插件_萌妹程序员鼓励师24小时在线陪你写代码,给我吹爆这个VSCode插件...

开源最前线(ID&#xff1a;OpenSourceTop) 猿妹综合整理项目地址&#xff1a;https://github.com/SaekiRaku/vscode-rainbow-fart最近&#xff0c;Github上有一个名为Rainbow Fart的VSCode 插件被玩坏了&#xff0c;有了这个插件&#xff0c;程序员鼓励师这个物种就要灭绝了。为…

python webui测试ie浏览器环境配置_python+selenium做ui自动化测试用法必会

一、前言大家都知道&#xff0c;基于Web端的测试的基础框架是需要Selenium做主要支撑的&#xff0c;这里边给大家介绍下Web测试核心之基于 Python 的 SeleniumSelenium 是用于测试 Web 应用程序用户界面 (UI) 的常用框架。它是一款用于运行端到端功能测试的超强工具。您可以使用…

python调用matlab函数_从python调用MATLAB函数

我知道这是一个老问题&#xff0c;已经得到答复。 但是我一直在寻找相同的东西&#xff08;对于Mac&#xff09;&#xff0c;发现有很多选择与matlab交互的方法和成熟度不同。 这是我发现的&#xff1a; pymat 使用matlab引擎&#xff08;libeng&#xff09;进行通讯的低级接口…

java 获取td_[Java教程]jQuery获取table表中的td标签

[Java教程]jQuery获取table表中的td标签0 2017-07-28 00:00:08首先我来介绍一下我遇到的问题1.当有一个table表包含了标签&#xff0c;标签&#xff0c;大致可以认为是这样的&#xff1a;scene.ID scene.SceneName scene.QRUrl scene.LocalUrl if (!string.IsNullOrWhiteSpace(…

引用另一模板的宏_生信人值得拥有的编程模板Shell

前言“工欲善其事必先利其器”&#xff0c;生信工程师每天写代码、搭流程&#xff0c;而且要使用至少三门编程语言&#xff0c;没有个好集成开发环境(IDE&#xff0c;Integrated Development Environment)那怎么行&#xff1f;本人使用过vim, editplus, ultraedit, notepad, su…

avlib java_fatal error: libavutil/avconfig.h: No such file...

根据这位仁兄的记录&#xff0c;可以在android程序里调用ffmpeg的avcodec_version()函数&#xff1b;下载了最新版的ffmpeg源码(2.4.1)&#xff0c;在cygwin里用NDK编译时可能会报错&#xff0c;报错如下&#xff1b;your_nameAP-CHN-LP140129 /cygdrive/c/Workspace_my/TestAp…

python 绘制分布直方图_统计学中常见的4种抽样分布及其分布曲线(Python绘制)...

现代统计学奠基人之一、英国统计学家费希尔(Fisher)曾把抽样分布、参书估计和假设检验看作统计推断的三大中心内容。统计学中&#xff0c;需要研究统计量的性质&#xff0c;并评价一个统计推断的优良性&#xff0c;而这些取决于其抽样分布的性质&#xff0c;所以&#xff0c;抽…

js 即时上传php_php+js实现异步图片上传实例分享

Html5 Ajax 上传文件var xhr;function createXMLHttpRequest(){if(window.ActiveXObject){xhr new ActiveXObject("Microsoft.XMLHTTP");}else if(window.XMLHttpRequest){xhr new XMLHttpRequest();}}function UpladFile(){var fileObj document.getElementById(…

php 文件 不更新,php页面不刷新更新数据

php页面不刷新更新数据php页面不刷新更新数据实现起来很简单&#xff0c;我们可以使用前端的ajax技术。ajax作用&#xff1a;ajax技术的目的是让javascript发送http请求&#xff0c;与后台通信&#xff0c;获取数据和信息。实现前后端分离。ajax技术的原理是实例化xmlhttp对象&…

master节点部署pod_小伙!Kubernetes 部署如此简单,你看完全明白了

将项目迁移到k8s平台是怎样实现的?制作镜像控制器管理PodPod数据持久化暴露应用对外发布应用日志/监控1、制作镜像分为三步第一基础镜像&#xff0c;是基于哪个操作系统&#xff0c;比如Centos7或者其他的第二步中间件镜像&#xff0c;比如服务镜像&#xff0c;跑的像nginx服务…

PHP逻辑运算符如何写,PHP 逻辑运算符

PHP 逻辑运算符在接下来的时间里面&#xff0c;我们准备为大家继续介绍“PHP 逻辑运算符”。(&#xff11;)在PHP中逻辑运算符分为&#xff13;种&#xff0c;分别是“与”、“或”、“非”&#xff0c;首先&#xff0c;我们来看看&#xff13;种运算符的符号&#xff0c;分别如…

c++从入门到精通_资料下载:从入门到精通,手把手教你学DSP

学习一个东西首先是了解它&#xff0c;比如DSP到底是什么&#xff1f;用在什么地方&#xff1f;怎么用&#xff1f;和单片机特点有那些相同与不同&#xff1f;开发需要注意什么&#xff1f;想了解清楚这些问题自然就清楚比较清楚的认识DSP。DSP&#xff0c;因为它是用来做数据处…