猿教程 Logo

HttpSessionEvent和HttpSessionListener

会话对象更改时通知HttpSessionEvent。 此事件的相应侦听器接口为HttpSessionListener。

我们可以在这个事件上执行一些操作,例如当前登录的用户计数总计,记录登录时间,注销时间等用户详细信息。



HttpSessionListener接口的方法

在HttpSessionListener接口中声明了两个方法,这些方法必须由servlet程序员来执行以执行某些操作。

public void sessionCreated(HttpSessionEvent e):在创建会话对象时被调用。

public void sessionDestroyed(ServletContextEvent e):当会话无效时被调用。


统计当前登录用户总数的示例

在这个例子中,是对当前登录的用户进行计数。 为此,我们创建了三个文件:

index.html:从用户处获取输入。

MyListener.java:一个监听器类,用于计算总登录用户和当前登录的用户,并将此信息作为属性存储在ServletContext对象中。

First.java:一个创建会话并打印总登录用户和当前登录用户的Servlet类。

Logout.java:一个使会话无效的Servlet类。

index.html

<form action="servlet1">  
Name:<input type="text" name="username"><br>  
Password:<input type="password" name="userpass"><br>  
  
<input type="submit" value="login"/>  
</form>

MyListener.java


import javax.servlet.ServletContext;  
import javax.servlet.http.HttpSessionEvent;  
import javax.servlet.http.HttpSessionListener;  
  
public class CountUserListener implements HttpSessionListener{  
    ServletContext ctx=null;  
    static int total=0,current=0;  
      
    public void sessionCreated(HttpSessionEvent e) {  
    total++;  
    current++;  
      
    ctx=e.getSession().getServletContext();  
    ctx.setAttribute("totalusers", total);  
    ctx.setAttribute("currentusers", current);  
      
    }  
  
    public void sessionDestroyed(HttpSessionEvent e) {  
        current--;  
        ctx.setAttribute("currentusers",current);  
    }  
  
}

First.java


import java.io.IOException;  
import java.io.PrintWriter;  
  
import javax.servlet.ServletContext;  
import javax.servlet.ServletException;  
import javax.servlet.http.HttpServlet;  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  
import javax.servlet.http.HttpSession;  
  
public class First extends HttpServlet {  
public void doGet(HttpServletRequest request,  
 HttpServletResponse response)  
    throws ServletException, IOException {  
  
        response.setContentType("text/html");  
        PrintWriter out = response.getWriter();  
      
        String n=request.getParameter("username");  
        out.print("Welcome "+n);  
          
        HttpSession session=request.getSession();  
        session.setAttribute("uname",n);  
          
        //retrieving data from ServletContext object  
        ServletContext ctx=getServletContext();  
        int t=(Integer)ctx.getAttribute("totalusers");  
        int c=(Integer)ctx.getAttribute("currentusers");  
        out.print("<br>total users= "+t);  
        out.print("<br>current users= "+c);  
          
        out.print("<br><a href='logout'>logout</a>");  
          
        out.close();  
    }  
  
}

Logout.java


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;  
  
  
public class LogoutServlet extends HttpServlet {  
public void doGet(HttpServletRequest request,  
 HttpServletResponse response)  
        throws ServletException, IOException {  
  
        response.setContentType("text/html");  
        PrintWriter out = response.getWriter();  
      
        HttpSession session=request.getSession(false);  
        session.invalidate();//invalidating session  
          
        out.print("You are successfully logged out");  
          
          
        out.close();  
    }  
  
}



版权声明:本站所有教程均为本站原创或翻译,转载请注明出处,请尊重他人劳动果实。请记住本站地址:www.yuanjiaocheng.net (猿教程) 作者:卿文刚
本文标题: C#环境
本文地址:http://www.yuanjiaocheng.net/Servlet/HttpSessionEvent.html