首页 > 代码库 > 监听器
监听器
1.什么是监听器
监听器主要用来监听request、session、application等对象的创建与销毁,以及属性的变化
2.监听器的使用
a.创建监听器处理类
普通的java类,实现Listner接口和AttributeListener接口
b.在web.XML文件中配置监听器
完成:利用监听器,实现在线人数的统计
package com.zuxia.listener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;
public class User implements HttpSessionBindingListener{
private String name;
private UserList ul = UserList.getInstance();
public User() {
}
public User(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void valueBound(HttpSessionBindingEvent arg0) {
ul.addUser(name);
}
public void valueUnbound(HttpSessionBindingEvent arg0) {
ul.removeUser(name);
}
}
package com.zuxia.listener;
import java.util.*;
public class UserList {
private static final UserList userList = new UserList();
private Vector<String> vec;
public UserList() {
vec = new Vector<String>();
}
/**
* 得到在线用户实例
* @return
*/
public static UserList getInstance(){
return userList;
}
/**
* 用户登录时向在线用户列表中添加一个用户
* @param name 登陆用户
*/
public void addUser(String name){
if (name != null) {
vec.addElement(name);
}
}
/**
* 用户退出时,从在线用户列表中移除一个用户
* @param name
*/
public void removeUser(String name){
if (name != null) {
vec.remove(name);
}
}
public Enumeration<String> getUserList(){
return vec.elements();
}
/**
* 返回当前用户个数
* @return
*/
public int getUserCount(){
return vec.size();
}
}
package com.zuxia.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.zuxia.listener.User;
@SuppressWarnings("serial")
public class LoginOutServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
HttpSession session = request.getSession();
User user= (User)session.getAttribute("user");
session.invalidate();
PrintWriter out = response.getWriter();
out.print("<html><head><title>退出登陆</title></head><body>");
out.print(user.getName()+",您已经退出登陆<br/>");
out.print("<p><a href=http://www.mamicode.com/‘login.jsp‘>重新登陆
out.print("</body></html>");
out.close();
}
}
package com.zuxia.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.zuxia.listener.User;
import com.zuxia.listener.UserList;
@SuppressWarnings("serial")
public class OnlineUser extends HttpServlet {
@Override
protected void service(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
String userName = request.getParameter("userName");
String userPwd = request.getParameter("userPwd");
if (userName == null || userName == "" || userPwd == null
|| userPwd == "") {
response.sendRedirect("login.jsp");
} else {
HttpSession session = request.getSession();
User user= (User)session.getAttribute("user");
if (user == null || !userName.equals(user.getName())) {
user = new User(userName);
session.setAttribute("user", user);
}
out.print("欢迎用户<b>"+userName+"</b>登陆");
UserList ul = UserList.getInstance();
out.print("<br/>当前在线用户:<br/>");
System.out.println(ul.getUserList());
Enumeration<String> enums = ul.getUserList();
int i = 0;
while (enums.hasMoreElements()) {
out.println(enums.nextElement());
out.println(" ");
i++;
}
out.println("<br/>当前在线用户数" + i);
out.print("<p><a href=http://www.mamicode.com/‘out‘>退出登陆
out.close();
}
}
}
/*login.jsp*/
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="http://www.mamicode.com/">
<title>用户登录</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<style type="text/css">
body{font-family: "微软雅黑";}
#box{width: 230px ;margin: 100px auto; }
span{line-height: 50px;}
.txt{width:150px;height: 27px;}
.btn{margin-left:25px;width:70px;height: 27px;}
</style>
</head>
<body>
<div id="box">
<form action="OnlineUser" method="post">
<span>用户名:</span><input class="txt" type="text"name="userName"/>
<span>密 码:</span><input class="txt" type="password" name="userPwd"/>
<input class="btn" type="submit" value="http://www.mamicode.com/登陆"/>
<input class="btn" type="reset" onclick="window.close()" value="http://www.mamicode.com/取消"/>
</form>
</div>
</body>
</html>
/*web.xml*/
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
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">
<servlet>
<servlet-name>OnlineUser</servlet-name>
<servlet-class>com.zuxia.servlet.OnlineUser</servlet-class>
</servlet>
<servlet>
<servlet-name>LoginOutServlet</servlet-name>
<servlet-class>com.zuxia.servlet.LoginOutServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>OnlineUser</servlet-name>
<url-pattern>/OnlineUser</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>LoginOutServlet</servlet-name>
<url-pattern>/out</url-pattern>
</servlet-mapping>
<listener>
<listener-class>com.zuxia.listener.User</listener-class>
</listener>
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>
</web-app>
监听器