Servlet中listener效果及运用ITeye - 娱乐之横扫全球

Servlet中listener效果及运用ITeye

2019-01-13 17:38:25 | 作者: 昌淼 | 标签: 效果,目标,接口 | 浏览: 141

之前对servlet的listener监听感觉生疏,不知道详细效果及用法,今日梳理了一下其效果,并相应做了以下的测验。

 

效果:

首要分三种,第一种是监听使用发动和封闭,需求完成ServletContextListener接口;

                     第二种是监听session的创立与毁掉;特点的新增、移除和更改,需求完成HttpSessionListener和HttpSessionAttributeListener接口。

                     第三种是HttpSessionBindingListener接口

 

 

测验:

先装备web.xml:

代码:

 

 context-param 
 param-name username /param-name 
 param-value pandita /param-value 
 /context-param 
 context-param 
 param-name password /param-name 
 param-value bsoft /param-value 
 /context-param 
 listener 
 listener-class com.pandita.servlet.listener.ApplicationListener /listener-class 
 /listener 
 listener 
 listener-class com.pandita.servlet.listener.SessionListener /listener-class 
 /listener 
 listener 
 listener-class com.pandita.servlet.listener.BindingListener /listener-class 
 /listener 

 

 

 

第一种:完成ServletContextListener接口,接口有两个办法

             1)public void contextInitialized(ServletContextEvent sce); //使用发动事情

             2)public void contextDestroyed(ServletContextEvent sce); //使用中止事情

             示例代码:

            

package com.pandita.servlet.listener;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
 * 监听web使用的发动和中止
 * @author Bsoft
public class ApplicationListener implements ServletContextListener {
 public static long applicationInitialized = 0L;
 /*使用中止事情*/
 //测验时在myeclipse里边点击中止按钮无法触发此办法,进入tomcat的bin目录下履行shutdown.bat就能够看到输出句子
 public void contextDestroyed(ServletContextEvent servletcontextevent) {
 System.out.println("ApplicationListener : 监听到使用封闭了!");
 /*使用发动事情*/
 public void contextInitialized(ServletContextEvent servletcontextevent) {
 applicationInitialized = System.currentTimeMillis();
 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 String datestr = sdf.format(new Date(applicationInitialized));
 System.out.println("ApplicationListener : 监听到使用发动时刻为 " + datestr);

 

 

第二种:完成HttpSessionListener和HttpSessionAttributeListener接口

             1、HttpSessionListener接口有两个办法:

                  1)public void sessionCreated(HttpSessionEvent httpsessionevent);

                  2)public void sessionDestroyed(HttpSessionEvent httpsessionevent);

 

             2、HttpSessionAttributeListener接口有三个办法:

                  1)public void attributeAdded(HttpSessionBindingEvent httpsessionbindingevent);
                  2)public void attributeRemoved(HttpSessionBindingEvent httpsessionbindingevent);
                  3)public void attributeReplaced(HttpSessionBindingEvent httpsessionbindingevent);

 

             示例代码:

          

package com.pandita.servlet.listener;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class SessionListener implements HttpSessionListener , HttpSessionAttributeListener {
 private static int activeSessions = 0; //核算活动会话的数量
 /*创立session*/
 public void sessionCreated(HttpSessionEvent arg0) {
 activeSessions ++ ;
 System.out.println("SessionListener : 新建了一个session,当时session数量为" + activeSessions);
 /*毁掉session*/
 public void sessionDestroyed(HttpSessionEvent arg0) {
 System.out.println("SessionListener : session被毁掉了,能够在毁掉session的时分做一些操作");
 /*在session中增加目标时触发此操作*/
 @SuppressWarnings("unchecked")
 public void attributeAdded(HttpSessionBindingEvent arg0) {
 String attributeName = arg0.getName();
 HttpSession session = arg0.getSession();
 System.out.println("SessionListener : session被增加了特点" + attributeName + ",特点值为" + session.getAttribute(attributeName));
 /*从session中移除目标时触发此操作*/
 public void attributeRemoved(HttpSessionBindingEvent arg0) {
 String attributeName = arg0.getName();
 System.out.println("SessionListener : " + attributeName + "特点被从session上移除了");
 /*当session中目标被从头设置时触发此操作*/
 public void attributeReplaced(HttpSessionBindingEvent arg0) {
 String attributeName = arg0.getName();
 HttpSession session = arg0.getSession();
 System.out.println("SessionListener : " + attributeName + "特点被从头设置值了,新值为" + session.getAttribute(attributeName));

 

第三种:完成HttpSessionBindingListener接口

            1、接口的两个办法:

             1).public void valueBound(HttpSessionBindingEvent event)
                  当目标正在被绑定到Session中,Servlet容器调用这个办法来告诉该目标。
              2).public void valueUnbound(HttpSessionBindingEvent event)                  当从Session中删去目标时,Servlet容器调用这个办法来完成了HttpSessionBindingListener接                       口的目标,而这个目标 能够使用HttpSessionBindingEvent目标来访问与它相联系的

                  HttpSession目标。               

 

            介绍:假如一个目标完成了HttpSessionBindingListener接口,当这个目标被绑定到Session中或许从session中被删去时,Servlet容器会告诉这个目标,而这个目标在接收到告诉后,能够做一些初始化或铲除状况的操作。

 

           效果:在线人数计算

使用HttpSessionBindingListener接口,编写一个在线人数计算的等程序。当一个用户登陆时,增加Session到在线人名单中,当一个用户退出时或许Session超不时,从在线人名单中删去该用户。
在OnlineUserList这个类中,使用单件形式,向程序供给一个大局访问点。

 

          OnlineUserList.java类代码:

package com.pandita.servlet.listener;
import java.util.Enumeration;
import java.util.Vector;
public class OnlineUserList {
 //单例形式
 private static final OnlineUserList userlist = new OnlineUserList();
 private Vector String v = new Vector String 
 public OnlineUserList(){
 public static OnlineUserList getInstance(){
 return userlist;
 public Enumeration String getUserList(){
 return v.elements();
 public int getUserCount(){
 return v.size();
 public boolean isExist(String username){
 if(v.indexOf(username) = 0){
 return true;
 return false;
 public void addUser(String username){
 if(username != null){
 if(isExist(username)){
 return ;
 v.addElement(username);
 public void removeUser(String username){
 if(username != null){
 v.removeElement(username);

        

           BindingListener.java类代码:

package com.pandita.servlet.listener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;
public class BindingListener implements HttpSessionBindingListener {
 private String username = "";
 private OnlineUserList userlist = OnlineUserList.getInstance();
 public BindingListener(String username) {
 this.username = username;
 //发动加载监听类,上面界说了一个带参数的结构器,如不写出类的默许结构器,则会抛错:java.lang.InstantiationException
 public BindingListener(){
 public void setUserName(String username){
 this.username = username;
 public String getUserName(){
 return this.username;
 public boolean isExist(String username){
 return userlist.isExist(username);
 @SuppressWarnings("unchecked")
 public void valueBound(HttpSessionBindingEvent arg0) {
 System.out.println("BindingListener : 我被作为特点绑定到session中了。");
 userlist.addUser(this.username);
 public void valueUnbound(HttpSessionBindingEvent arg0) {
 System.out.println("BindingListener : 我被session从特点列表中移除了。");
 userlist.removeUser(this.username);

 

 

           Servlet代码:

package com.pandita.servlet;
import java.io.IOException;
import java.io.OutputStreamWriter;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;                          
			
版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表娱乐之横扫全球立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章