??斗地主捕鱼电竞提现秒到 广告位招租 - 15元/月全站展示
??支付宝搜索579087183领大额红包 ??伍彩集团官网直营彩票
??好待遇→招代理 ??伍彩集团官网直营彩票
??络茄网 广告位招租 - 15元/月全站展示
java技术学习路径之:Javaweb监听器总结(应用场景、方法、配置)

转载   QFdongdong   2018-11-15   浏览量:24


JavaWeb中,监听器是一种组件,能够监听项目的启动和停止,用户会话的创建和销毁,以及各种组件的添加、更新和删除,能够通过监听对象的状态改变,自动做出反应执行响应代码。

应用场景:

启动网站后进行初始化、检测用户的数量等。

常用的监听器接口:

ServletContextListener 监听项目的启动和停止

方法:

contextInitialized 项目加载完成

contextDestroyed 项目停止

HttpSessionListener 监听用户会话的创建和销毁

sessionCreated 每一个用户第一次访问时调用

sessionDestroyed 每个用户退出系统后调用

监听器的配置:

方式1 web.xml

<listener>

<listener-class>包名+类名</listener-class>

</listener>

方式2 注解

@WebListener

案例:监听网站的启动

/**

?* 项目的监听器

?* @author chenheng

?*

?*/

@WebListener

public class WebApplicationListener implements ServletContextListener{

?

//项目启动

@Override

public void contextInitialized(ServletContextEvent sce) {

System.out.println("项目启动了?。。?!");

//保存一些数据到项目中

sce.getServletContext().setAttribute("money", 999999);

}

?

//项目停止

@Override

public void contextDestroyed(ServletContextEvent sce) {

System.out.println("项目停止了?。。。?!");

}

}

案例:监听网站的用户数

/**

?* 会话监听器

?* @author chenheng

?*

?*/

@WebListener

public class UserListener implements HttpSessionListener{

?

//用户会话创建

@Override

public void sessionCreated(HttpSessionEvent se) {

//把用户的数量保存到ServletContext(application)中

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

//获得用户的总数

Object count = application.getAttribute("count");

if(count == null){

//如果是第一个用户,没有总数,添加总数

application.setAttribute("count", 1);

System.out.println("第一个用户");

}else{

//如果不是第一个,就用户数量加1

application.setAttribute("count", (int)count + 1);

System.out.println("新用户来了");

}

}

?

//用户会话销毁

@Override

public void sessionDestroyed(HttpSessionEvent se) {

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

Object count = application.getAttribute("count");

if(count != null && (int)count > 0){

application.setAttribute("count", (int)count - 1);

System.out.println("用户走了");

}

}

}

?

/**

?* 关闭Session的Servlet

?*/

@WebServlet("/close.do")

public class CloseSessionServlet extends HttpServlet{

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

//关闭Session

req.getSession().invalidate();

}

}

?

?

JSP页面:

<%@ page language="java" contentType="text/html; charset=UTF-8"

????pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "//www.w3.org/TR/html4/loose.dtd">;

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>测试</title>

</head>

<body>

当前网站在线人数:${count}<br>

<a href="javascript:location.href='close.do';">退出</a>

</body>

</html>

转载自://blog.51cto.com/14070466/2317519

招聘 不方便扫码就复制添加关注:程序员招聘谷,微信号:jobs1024



每天学点SpringCloud(七):路由器和过滤器-Zuul
为什么要使用Zuul先来看一下下方这个图假如现在我们具有四个微服务,分别是用户、订单、支付、催收微服务,它们的调用方式分别是使用http、restful、thrift、kafka。这个时候如果我们在客户端直接调用的话感觉是不是太费劲了,客户端需要维护这几种调用方式的客户端,如果后期新增微服务或者减少或者更换调用方式等,都需要修改客户端。那么我们来看一下加入Zuul以后是什么样子的呢Zuul呢就负责
Java笔试面试题(三)
每日一句:想,都是问题;做,才是答案。构造器Constructor是否可被Override?构造器Constructor不能被继承,因此不能重写Override,但是可以被重载Overload。接口是否可继承接口?抽象类是否可实现(implement)接口?抽象类是否可继承具体类(concreteclass)?抽象类中是否可以有静态的类方法?接口可以继承接口。抽象类可以实现接口。抽象类可以继承具体
每天学点SpringCloud(六):Hystrix使用
Hystrix是一个实现断路器模式的库。什么是断路器模式呢?就像我们家庭中的电闸一样,如果有那一处出现意外,那么电闸就会立刻跳闸来防止因为这一处意外而引起更大的事故,直到我们确认处理完那一处意外后才可以再打开电闸。而Hystrix的存在就是为了预防程序中出现这种问题而导致程序不可用的情况。比如说我们有三个微服务A、B、C,其中A依赖于B,B依赖于C,如果这时候C出现了问题,那么就导致B不可用,紧接
SpringBoot之打包成war包部署到tomcat
SpringBoot之打包成war包部署到tomcat小编花费了九牛二虎之力,总算把SpringBoot项目成功打包成war包,其中不免遇到了一些小状况,特写此文,以便其他小伙伴们不要走我的老路,避免重复这些小错误:配置文件(本地部署)启动类(war包部署)war包部署pom.xml添加maven命令生成war包(跳过测试)war部署到tomcat配置文件(本地部署)
springboot整合Quartz实现动态配置定时任务
前言在我们日常的开发中,很多时候,定时任务都不是写死的,而是写到数据库中,从而实现定时任务的动态配置,下面就通过一个简单的示例,来实现这个功能。一、新建一个springboot工程,并添加依赖org.springframework.bootspring-boot-starter-data-jpacom.h2databaseh2run
使用 SpringBoot + Ckeditor 富文本编辑器、图片上传
一、前言在一些页面中,进行发表文章、评论等功能,都要涉及到富文本编辑器,如CSDN的markdown编辑器使用传统的textarea标签是远远满足不了需求的,现在流行的富文本编辑器主要有两个,ckeditor和百度的UEditor,①前者比较简单,可以先感受一下富文本编辑器。②后者功能更加强大,可以单图、多图上传,还可以截图、代码高亮等特性,但...
SpringBoot+EHcache实现缓存
撰文背景公司开发中的一个驱动???,需要用到本地缓存,来提高驱动??榈姆梦仕俣群托阅?,然后就想到了Ehcache缓存,Ehcache是Hibernate中默认的CacheProvider,hibernate就是使用Ehcache来实现二级缓存的。本质上来说Ehcache是一个缓存管理器,不仅仅可以和Hibernate配合实现缓存,也可以和其他框架比如springboot结合,作为一个缓存管理器...
微服务 Dubbo + Zookeeper 原理解析
补充:2018-04-20值得一说的是:下方的“透明”是通过动态代理对“负载均衡和容错”的封装。此图配合下方案例代码可以更好的理解分布式服务框架-RPC原理。协议:说明:内容为小编个人见解,同时做备忘用基础准备:javaSocket,serverSocket,RPC协议。(1)网络通信数据传输靠的就是IO流(byte[]字...
基于springCloud构建微云架构技术分享
一,什么是微服务微服务英文名称Microservice,Microservice架构模式就是将整个Web应用组织为一系列小的Web服务。这些小的Web服务可以独立地编译及部署,并通过各自暴露的API接口相互通讯。它们彼此相互协作,作为一个整体为用户提供功能,却可以独立地进行扩。微服务架构需要的功能或使用场景1:我们把整个系统根据业务拆分成几个子系统。2:每个子系统可以部署多个应用,多个应用之间使用...
Spring Cloud 微服务框架技术标准分析
本系列文章主要介绍这些技术中的翘楚——SpringCloud。这是序篇,主要讲述我们为什么选择SpringCloud和它的技术概览。1为什么微服务架构需要SpringCloud简单来说,服务化的核心就是将传统的一站式应用根据业务拆分成一个一个的服务,而微服务在这个基础上要更彻底地去耦合(不再共享DB、KV,去掉重量级ESB),并且强调DevOps和快速演化。这就要求我们