java----监听器的作用_一、理解监听器的作用

一、Listener

Listener是Servlet的监听器

监听客户端的请求和服务器端的操作

通过实现Listener接口的类可以在特定事件(Event)发生时,自动激发一些操作

二、HttpSessionBindingListener

当一个实现了该接口的对象被捆绑到session中或者从session中被解放的时候启用此监听。

关键点:

创建类实现HttpSessionBindingListener接口

valueBound()

valueUnbound()

不需要在web.xml中配置监听器

监听范围:一对一

比如User这个类实现了该接口,则当这个对象被捆绑到session或者从session中被解除捆绑的时候启用此监听器。当被捆绑的时候,会自动进入valueBound()方法;当解除绑定的时候,会自动进入valueUnbound()方法。

三、实例

需求:统计在线人数;

实体类User:

package cn.kgc.pojo;

import javax.servlet.http.HttpSessionBindingEvent;

import javax.servlet.http.HttpSessionBindingListener;

import cn.kgc.util.Constants;

public class User implements HttpSessionBindingListener{

private int id;

private String userName;

private String password;

private String email;

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getUserName() {

return userName;

}

public void setUserName(String userName) {

this.userName = userName;

}

public String getPassword() {

return password;

}

public void setPassword(String password) {

this.password = password;

}

public String getEmail() {

return email;

}

public void setEmail(String email) {

this.email = email;

}

// 当User对象放进session时(一个用户登录),会自动进入该方法

public void valueBound(HttpSessionBindingEvent event) {

Constants.USER_COUNT ++;

}

// session失效(某个用户注销)、超时、手动地在session中把某个属性移除

public void valueUnbound(HttpSessionBindingEvent event) {

Constants.USER_COUNT --;

}

}

统计人数工具类,在该类中只有一个静态变量来统计人数:

package cn.kgc.util;

// 在线用户人数

public class Constants {

public static int USER_COUNT = 0;

}

登录页面:

String path = request.getContextPath();

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

%>

My JSP 'login.jsp' starting page

用户名:

登录数据处理页面:

String path = request.getContextPath();

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

%>

My JSP 'doLogin.jsp' starting page

String userName = request.getParameter("userName");

if (userName == null || userName.equals("")) {

response.sendRedirect("login.jsp");

} else {

User user = new User();

user.setUserName(userName);

// 走到这一步的时候监听器就会启动了

session.setAttribute("user", user);

response.sendRedirect("online.jsp");

}

%>

登录进来页面:

String path = request.getContextPath();

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

%>

My JSP 'online.jsp' starting page

User user = null;

if (session.getAttribute("user") == null) {

response.sendRedirect("login.jsp");

} else {

user = (User)session.getAttribute("user");

%>

欢迎你,

当前在线人数为:

离开

离开页面:

String path = request.getContextPath();

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

%>

My JSP 'loginout.jsp' starting page

// 离开、注销

session.invalidate();

%>

运行结果:

当登录一个人之后,会在online页面显示当前在线人数,当换一个浏览器登录之后,登录人数改变。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值