Java Web 中的监听(Listener)
2014-03-29 22:11
435 查看
Java Web 中的监听器
监听器的分三类
1:Web项目应用域监听
a:ServletContext应用域监听
⑴实现ServletContextListener接口
⑵contextInitialized()方法,这方法代表Servlet容器启动时,触发该方法
⑶contextDestroyed()方法,这方法代表Servlet容器关闭时,触发该方法
实例:
public void
contextInitialized(ServletContextEvent sce) {
//得到配置参数
ServletContext
application=sce.getServletContext();
String
driver=application.getInitParameter("driver");
String
url=application.getInitParameter("url");
String
user=application.getInitParameter("user");
String
password=application.getInitParameter("password");
Connection
connection=null;
try {
Class.forName(driver);
connection=DriverManager.getConnection(url,user,password);
System.out.println("==================成功执行....");
} catch (Exception e) {
e.printStackTrace();
}
finally{
try {
if(connection!=null){
connection.close();
}
} catch
(Exception e2) {
e2.printStackTrace();
}
}
}
b:HttpSession应用域监听
⑴实现HttpSessionListener接口
⑵sessionCreated()方法,这方法代表Session创建时,触发该方法
⑶sessionDestroyed()方法,这方法代表Session销毁时,触发该方法
实例:
public void sessionCreated(HttpSessionEvent event) {
HttpSession
session=event.getSession();
ServletContext
application=session.getServletContext();
String
sessionid=session.getId();
if(session.isNew()){
String
username=(String) session.getAttribute("username");
username=(username==null)?
"游客":username;
Map
online=(LinkedHashMap)application.getAttribute("online");//
LinkedHashMap继承与HashMap,但为有序封装
if(online==null){
online=new
LinkedHashMap();
}
online.put(sessionid,
username);
System.out.println("添加用户_"+username);
application.setAttribute("online",
online);
}
}
public void
sessionDestroyed(HttpSessionEvent event) {
HttpSession
session=event.getSession();
ServletContext
application=session.getServletContext();
String
sessionid=session.getId();
Map
online=(LinkedHashMap)application.getAttribute("online");//
LinkedHashMap继承与HashMap,但为有序封装
if(online!=null){
online.remove(sessionid);
}
application.setAttribute("online",
online);
}
c:ServletRequest应用域监听
⑴实现ServletRequest接口
⑵requestInitialized()方法,这方法代表request请求激活时,触发该方法
⑶requestDestroyed()方法,这方法代表request请求死亡时,触发该方法
实例:
public void requestDestroyed(ServletRequestEvent event) {
HttpServletRequest request =
(HttpServletRequest) event
.getServletRequest();
HttpSession session =
request.getSession();
//得到用户
String username = (String)
session.getAttribute("username");
username = (username == null) ?
"游客" : username;
String sessionid =
session.getId();
String ip =
request.getRemoteAddr();
String page =
request.getRequestURI();
UserInfo userInfo=new
UserInfo();
userInfo.setSessionid(sessionid);
userInfo.setUsername(username);
userInfo.setIp(ip);
userInfo.setPage(page);
//判断用户是否存在
if(userInfoDao.findUserBySessionId(sessionid)){
userInfoDao.updateUserinfo(userInfo);//存在则更新信息
System.out.println("更新用户_"
+ username);
}else{
userInfoDao.addUserInfo(userInfo);//不存在则添加用户信息
System.out.println("添加用户_"
+ username);
}
}
2:应用域属性监听
每一个域都有自己的属性监听,如ServletContextAttributeListener就是ServletContext的属性监听,其他两个域也是一样的!其中都有3个方法
a:attributeAdded()方法,这方法代表该域中添加了一个值时,触发该方法
b:attributeRemoved()方法,这方法代表该域中删除了一个值时,触发该方法
c:attributeReplaced()方法,这方法代表该域中有一个值被替换了时,触发该方法
实例:
package cn.ouyang.lintener.uitls;
import
javax.servlet.ServletContext;
import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;
public class MyServletContextAttributeEvent implements
ServletContextAttributeListener{
//当前范围属性添加时触发此监听
public void
attributeAdded(ServletContextAttributeEvent event) {
ServletContext
application=event.getServletContext();
System.out.println(application+"范围内添加了名:"+event.getName()+"值为:"+event.getValue());
}
//当前范围属性被移除触发此监听
public void
attributeRemoved(ServletContextAttributeEvent event) {
ServletContext
application=event.getServletContext();
System.out.println(application+"范围内移除了名:"+event.getName()+"值为:"+event.getValue());
}
//当前范围属性更改时触发此监听
public void
attributeReplaced(ServletContextAttributeEvent event) {
ServletContext
application=event.getServletContext();
System.out.println(application+"范围内替换了名:"+event.getName()+"值为:"+event.getValue());
}
}
3:感知Session监听
a:HttpSessionBindingListener监听
⑴在需要监听的实体类实现HttpSessionBindingListener接口
⑵重写valueBound()方法,这方法是在当该实体类被放到Session中时,触发该方法
⑶重写valueUnbound()方法,这方法是在当该实体类从Session中被移除时,触发该方法
b:HttpSessionActivationListener监听
⑴在需要监听的实体类实现HttpSessionActivationListener接口
⑵重写sessionWillPassivate()方法,这方法是在当该实体类被序列化时,触发该方法
⑶重写sessionDidActivate()方法,这方法是在当该实体类被反序列化时,触发该方法
实例代码:
package com.ouyang.listener.entity;
import java.io.Serializable;
import
javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;
import
com.ouyang.listener.utils.doCount;
public class UserInfo implements
HttpSessionBindingListener,Serializable {
private static final long
serialVersionUID = 1L;
private String name;
private String ip;
public String getIp() {
return ip;
}
public void setIp(String ip) {
this.ip = ip;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void
valueBound(HttpSessionBindingEvent event) {
doCount.onlineCount++;
event.getSession().setAttribute("username",ip);
event.getSession().setAttribute("online",
doCount.onlineCount);
}
public void valueUnbound(HttpSessionBindingEvent
event) {
doCount.onlineCount--;
event.getSession().setAttribute("online",
doCount.onlineCount);
}
}
package com.ouyang.listener.utils;
import java.util.LinkedHashMap;
import java.util.Map;
import
com.ouyang.listener.entity.UserInfo;
public class doCount {
public static int onlineCount=0;
public static Map usermap=new LinkedHashMap();//
LinkedHashMap继承与HashMap,但为有序封装
}
-----> >> 结束
注:部分内容为转载,出处请百度搜索--->>>南昌奥斯科技
监听器的分三类
1:Web项目应用域监听
a:ServletContext应用域监听
⑴实现ServletContextListener接口
⑵contextInitialized()方法,这方法代表Servlet容器启动时,触发该方法
⑶contextDestroyed()方法,这方法代表Servlet容器关闭时,触发该方法
实例:
public void
contextInitialized(ServletContextEvent sce) {
//得到配置参数
ServletContext
application=sce.getServletContext();
String
driver=application.getInitParameter("driver");
String
url=application.getInitParameter("url");
String
user=application.getInitParameter("user");
String
password=application.getInitParameter("password");
Connection
connection=null;
try {
Class.forName(driver);
connection=DriverManager.getConnection(url,user,password);
System.out.println("==================成功执行....");
} catch (Exception e) {
e.printStackTrace();
}
finally{
try {
if(connection!=null){
connection.close();
}
} catch
(Exception e2) {
e2.printStackTrace();
}
}
}
b:HttpSession应用域监听
⑴实现HttpSessionListener接口
⑵sessionCreated()方法,这方法代表Session创建时,触发该方法
⑶sessionDestroyed()方法,这方法代表Session销毁时,触发该方法
实例:
public void sessionCreated(HttpSessionEvent event) {
HttpSession
session=event.getSession();
ServletContext
application=session.getServletContext();
String
sessionid=session.getId();
if(session.isNew()){
String
username=(String) session.getAttribute("username");
username=(username==null)?
"游客":username;
Map
online=(LinkedHashMap)application.getAttribute("online");//
LinkedHashMap继承与HashMap,但为有序封装
if(online==null){
online=new
LinkedHashMap();
}
online.put(sessionid,
username);
System.out.println("添加用户_"+username);
application.setAttribute("online",
online);
}
}
public void
sessionDestroyed(HttpSessionEvent event) {
HttpSession
session=event.getSession();
ServletContext
application=session.getServletContext();
String
sessionid=session.getId();
Map
online=(LinkedHashMap)application.getAttribute("online");//
LinkedHashMap继承与HashMap,但为有序封装
if(online!=null){
online.remove(sessionid);
}
application.setAttribute("online",
online);
}
c:ServletRequest应用域监听
⑴实现ServletRequest接口
⑵requestInitialized()方法,这方法代表request请求激活时,触发该方法
⑶requestDestroyed()方法,这方法代表request请求死亡时,触发该方法
实例:
public void requestDestroyed(ServletRequestEvent event) {
HttpServletRequest request =
(HttpServletRequest) event
.getServletRequest();
HttpSession session =
request.getSession();
//得到用户
String username = (String)
session.getAttribute("username");
username = (username == null) ?
"游客" : username;
String sessionid =
session.getId();
String ip =
request.getRemoteAddr();
String page =
request.getRequestURI();
UserInfo userInfo=new
UserInfo();
userInfo.setSessionid(sessionid);
userInfo.setUsername(username);
userInfo.setIp(ip);
userInfo.setPage(page);
//判断用户是否存在
if(userInfoDao.findUserBySessionId(sessionid)){
userInfoDao.updateUserinfo(userInfo);//存在则更新信息
System.out.println("更新用户_"
+ username);
}else{
userInfoDao.addUserInfo(userInfo);//不存在则添加用户信息
System.out.println("添加用户_"
+ username);
}
}
2:应用域属性监听
每一个域都有自己的属性监听,如ServletContextAttributeListener就是ServletContext的属性监听,其他两个域也是一样的!其中都有3个方法
a:attributeAdded()方法,这方法代表该域中添加了一个值时,触发该方法
b:attributeRemoved()方法,这方法代表该域中删除了一个值时,触发该方法
c:attributeReplaced()方法,这方法代表该域中有一个值被替换了时,触发该方法
实例:
package cn.ouyang.lintener.uitls;
import
javax.servlet.ServletContext;
import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;
public class MyServletContextAttributeEvent implements
ServletContextAttributeListener{
//当前范围属性添加时触发此监听
public void
attributeAdded(ServletContextAttributeEvent event) {
ServletContext
application=event.getServletContext();
System.out.println(application+"范围内添加了名:"+event.getName()+"值为:"+event.getValue());
}
//当前范围属性被移除触发此监听
public void
attributeRemoved(ServletContextAttributeEvent event) {
ServletContext
application=event.getServletContext();
System.out.println(application+"范围内移除了名:"+event.getName()+"值为:"+event.getValue());
}
//当前范围属性更改时触发此监听
public void
attributeReplaced(ServletContextAttributeEvent event) {
ServletContext
application=event.getServletContext();
System.out.println(application+"范围内替换了名:"+event.getName()+"值为:"+event.getValue());
}
}
3:感知Session监听
a:HttpSessionBindingListener监听
⑴在需要监听的实体类实现HttpSessionBindingListener接口
⑵重写valueBound()方法,这方法是在当该实体类被放到Session中时,触发该方法
⑶重写valueUnbound()方法,这方法是在当该实体类从Session中被移除时,触发该方法
b:HttpSessionActivationListener监听
⑴在需要监听的实体类实现HttpSessionActivationListener接口
⑵重写sessionWillPassivate()方法,这方法是在当该实体类被序列化时,触发该方法
⑶重写sessionDidActivate()方法,这方法是在当该实体类被反序列化时,触发该方法
实例代码:
package com.ouyang.listener.entity;
import java.io.Serializable;
import
javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;
import
com.ouyang.listener.utils.doCount;
public class UserInfo implements
HttpSessionBindingListener,Serializable {
private static final long
serialVersionUID = 1L;
private String name;
private String ip;
public String getIp() {
return ip;
}
public void setIp(String ip) {
this.ip = ip;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void
valueBound(HttpSessionBindingEvent event) {
doCount.onlineCount++;
event.getSession().setAttribute("username",ip);
event.getSession().setAttribute("online",
doCount.onlineCount);
}
public void valueUnbound(HttpSessionBindingEvent
event) {
doCount.onlineCount--;
event.getSession().setAttribute("online",
doCount.onlineCount);
}
}
package com.ouyang.listener.utils;
import java.util.LinkedHashMap;
import java.util.Map;
import
com.ouyang.listener.entity.UserInfo;
public class doCount {
public static int onlineCount=0;
public static Map usermap=new LinkedHashMap();//
LinkedHashMap继承与HashMap,但为有序封装
}
-----> >> 结束
注:部分内容为转载,出处请百度搜索--->>>南昌奥斯科技
相关文章推荐
- java WEB应用中的中文乱码问题初探
- web.xml 中的listener、&nbsp…
- Java Web总结(一)
- 【JavaWeb-12】Listener监听3个方面、Filter过滤器、全局编码过滤器案例
- 关于JAVA EE项目在WEB-INF目…
- Java Web分页标签
- 如何学习Java Web开发
- java中dynamic web proj…
- Java Web技术——JSP
- 配置Java Web虚拟目录(Tomca…
- 【原创】java web Actio…
- Tomcat与JavaWeb 5.3 HTTP会话的监听-HttpSessionListener等
- java web项目部署tomcat
- tomcat启动java web项目时报…
- java web项目用cookie记住用…
- java web 笔试题
- javaweb listener 对象的创建销毁-监听
- 【原创】java web strut…
- java web开发之高并发处理
- 用Maven构建Java Web开发环境…