Java基于servlet监听器达成在线人数监察和控制功用的点子,servlet监听器

当用户注销会话时将用户名从应用上下文范围中的List列表中删除,当用户登录成功把用户名设置到Session中时同时将用户名存放到ServletContext中的List列表中,只有点击注销按钮才能减少在线用户,同时将用户名方法到ServletContext的List中,可以创建如下的监听器,首先需要创建一个监听器,实例化实现HttpSessionAttributeListener的类并注册给应用程序,则同样也是在实现类上标注@WebListener

正文首要介绍了java使用监听器完结三个计算网址在线人数的亲自过问,具有一定的参谋价值,有亟待的朋友能够精晓一下。

Java基于servlet监听器完结在线人数监察和控制作用的主意,servlet监听器

本文实例讲述了Java基于servlet监听器完毕在线人数监察和控制功用的不二等秘书技。分享给我们供我们参谋,具体如下:

1、分析:

做3个网址在线人数计算,能够通过ServletContextListener监听,当Web应用上下文运营时,在ServletContext中加多2个List.用来希图存放在线的用户名,然后通过HttpSessionAttributeListener监听,当用户登入成功,把用户名设置到Session中。同时将用户名艺术到ServletContext的List中,最终通过HttpSessionListener监听,当用户注销会话时,讲用户名从应用上下文范围中的List列表中除去。

二、注意事项

测试时,须求运转分裂的浏览器来登入分化的用户,唯有一点点击注销按键能力压缩在线用户,关闭浏览器无法减小在线用户。

三、项目源代码

(1)java代码

OnlineListener类

package com.smalle.listener;
import java.util.LinkedList;
import java.util.List;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class OnlineListener implements
  ServletContextListener, HttpSessionAttributeListener, HttpSessionListener {
  private ServletContext application = null;
  //应用上下文初始时会回调的方法
  @Override
  public void contextInitialized(ServletContextEvent e) {
    //初始化一个application对象
    application = e.getServletContext();
    //设置一个列表属性,用于保存在线用户名
    this.application.setAttribute("online", new LinkedList<String>());
  }
  //往会话中添加属性时的回调方法
  @Override
  public void attributeAdded(HttpSessionBindingEvent e) {
    //取得用户名列表
    List<String> onlines = (List<String>) this.application.getAttribute("online");
    if("username".equals(e.getName())){
      onlines.add((String) e.getValue());
    }
    //将添加后的列表重新设置列application属性中.
    this.application.setAttribute("online", onlines);
  }
  //会话销毁时会回调的方法
  @Override
  public void sessionDestroyed(HttpSessionEvent e) {
    //取得用户名列表
    List<String> onlines = (List<String>) this.application.getAttribute("online");
    //取得当前用户名
    String username = (String) e.getSession().getAttribute("username");
    //将此用户从列表中删除
    onlines.remove(username);
    //讲删除后的列表重新设置到application属性中.
    this.application.setAttribute("online", onlines);
  }
  public void sessionCreated(HttpSessionEvent e) {}
  public void attributeRemoved(HttpSessionBindingEvent e) {}
  public void attributeReplaced(HttpSessionBindingEvent e) {}
  public void contextDestroyed(ServletContextEvent e) {}
}

LoginServlet类

package com.smalle.listener;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoginServlet extends HttpServlet {
  private static final long serialVersionUID = 1L;
  public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    this.doPost(request, response);
  }
  public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    request.setCharacterEncoding("utf-8");  //设置响应内容类型
        String username= request.getParameter("username");  //获取请求参数中的用户名
        //往session中添加属性,会触发HttpSessionAttributeListener中的attributeAdded方法
        if(username != null && !username.equals("")) {
          request.getSession().setAttribute("username",username);
        }
        //从应用上下文中获取在线用户名列表
        List<String> online = (List<String>)getServletContext().getAttribute("online");
System.out.println("LoginServlet" + online);
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        out.println("");
        out.println(" <title>用户列表</title>");
        out.println(" ");
        out.println("当前用户是:" + username);
        out.print("  <hr><h3>在线用户列表</h3>");
        int size = online == null ? 0 : online.size();
        for (int i = 0; i < size; i++) {
          if(i > 0){
            out.println("<br>");
          }
          out.println(i + 1 + "." + online.get(i));
        }
        //注意: 要对链接URL进行自动重写处理
        out.println("<hr/><a href=\"" + response.encodeURL("logoutListener") + "\">注销</a>");
        out.println(" ");
        out.println("");
        out.flush();
        out.close();
  }
}

LogoutServlet类

package com.smalle.listener;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LogoutServlet extends HttpServlet{
  public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    this.doPost(request, response);
  }
  public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    request.setCharacterEncoding("utf-8");  //设置响应内容类型
    //销毁会话,会触发SessionLinstener中的sessionDestroyed方法
    request.getSession().invalidate();
    //从应用上下文中获取在线用户名列表
    List<String> online = (List<String>)getServletContext().getAttribute("online");
    response.setContentType("text/html;charset=utf-8");
    PrintWriter out = response.getWriter();
    out.println("");
    out.println(" <title>用户列表</title>");
    out.println(" ");
    out.print("  <h3>在线用户列表</h3>");
    int size = online == null ? 0 : online.size();
    for (int i = 0; i < size; i++) {
      if(i > 0){
        out.println("<br>");
      }
      out.println(i + 1 + "." + online.get(i));
    }
    out.println("<hr><a href='\'index.html\''>主页</a>");
    out.println(" ");
    out.println("");
    out.flush();
    out.close();
  }
}

(2)web.xml代码

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
 <display-name>testServlet</display-name>
  <listener>
    <listener-class>com.smalle.listener.OnlineListener</listener-class>
  </listener>
  <servlet>
    <servlet-name>LoginServlet</servlet-name>
    <servlet-class>com.smalle.listener.LoginServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>LoginServlet</servlet-name>
    <url-pattern>/loginListener</url-pattern>
  </servlet-mapping>
  <servlet>
    <servlet-name>LogoutServlet</servlet-name>
    <servlet-class>com.smalle.listener.LogoutServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>LogoutServlet</servlet-name>
    <url-pattern>/logoutListener</url-pattern>
  </servlet-mapping>
 <welcome-file-list>
  <welcome-file>index.jsp</welcome-file>
 </welcome-file-list>
</web-app>

(三)表现层代码

<!DOCTYPE html>
<html>
 <head>
  <title>index.html</title>
  <meta name="content-type" content="text/html; charset=UTF-8">
 </head>
 <body>
  <form action="loginListener" method="post">
    用户名:<input type="text" name="username">
  <input type="submit" value="登录"><br><br>
  </form>
 </body>
</html>

越多关于java算法相关内容感兴趣的读者可查看本站专项论题:《Java网络编制程序技艺计算》、《Java数据结构与算法教程》、《Java操作DOM节点本事总括》、《Java文件与目录操作手艺汇总》和《Java缓存操作技巧汇总》

指望本文所述对大家java程序设计有着支持。

本文实例讲述了Java基于servlet监听器完毕在线人数监察和控制功能的方式。分享给…

监听器是JAVA Web开荒中很重大的故事情节,当中涉嫌到的学问,能够参照他事他说加以考察上边导图:

【Spring】一、Spring 中的监听器 Listener,监听器listener

一、接口

1、EventListener

2、HttpSessionAttributeListener   继承EventListener接口

   
 HttpSessionAttributeListener是“属性更动监听器”,当在对话对象中参加属性、移除属性或沟通属性时,相呼应的attributeAdded()、attributeRemoved()与

   
 attributeReplaced()方法就能够被调用,并分别传入HttpSessionBinding伊芙nt。

    

package javax.servlet.http;

import java.util.EventListener;

public interface HttpSessionAttributeListener extends EventListener {
public void attributeAdded ( HttpSessionBindingEvent se );
public void attributeRemoved ( HttpSessionBindingEvent se );
public void attributeReplaced ( HttpSessionBindingEvent se );

}

 

假诺愿意容器在安插应用程序时,实例化完结HttpSessionAttributeListener的类并注册给应用程序,则1律也是在促成类上标明@WebListener:

@WebListener()
public class HttpSessionAttrListener
                   implements HttpSessionAttributeListener {

}

另1个艺术是在web.xml下开展设置:
    …
    <listener>
       
<listener-class>cc.openhome.HttpSessionAttrListener</listener-class>
    </listener>

3、HttpSessionListener    继承EventListener接口

public interface HttpSessionListener extends EventListener {
    public void sessionCreated(HttpSessionEvent se);
    public void sessionDestroyed(HttpSessionEvent se);
}

   在HttpSession对象开首化或截至前,会独家调用sessionCreated()与session-
Destroyed()方法,能够通过传播的HttpSession伊夫nt,使用getSession()获得HttpSession,
   以针对会话对象作出相呼应的创办或终止管理操作。

4、HttpSessionBindingListener

HttpSessionBindingListener是“对象绑定监听器”,假诺有个就要投入HttpSession的质量对象,希望在装置给HttpSession成为属性或从HttpSession中移除时,能够选用HttpSession的文告,则足以让该目的实现HttpSessionBindingListener接口。

package javax.servlet.http;
import java.util.EventListener;
public interface HttpSessionBindingListener extends EventListener {
    public void valueBound(HttpSessionBindingEvent event);
    public void valueUnbound(HttpSessionBindingEvent event);
}

当用户输入准确的称号与密码时,首先会以用户名来创立User实例,而后加入HttpSession中作为品质。希望User实例被投入成为HttpSession属性时,能够自动从数据库中加载用户的别的数据,如地址、照片等,或是在日记中记录用户登入的音讯,可以让User类完结HttpSessionBindingListener接口。

  1. HttpSessionActivationListener

HttpSessionActivationListener是“对象迁移监听器”,其定义了五个措施session威尔Passivate()与sessionDidActivate()。许多气象下,大致不会动用到HttpSessionActivationListener。在应用到遍及式遭遇时,应用程序的靶子只怕分流在多少个JVM中。当HttpSession要从一个JVM迁移至另1个JVM时,必须先在本来的JVM上体系化(Serialize)全数的本性对象,在这后边若属性对象有落实HttpSessionActivationListener,就能够调用session威尔Passivate()方法,而
HttpSession迁移至另三个JVM后,就能够对具有属性对象作反连串化,此时会调用sessionDidActivate()方法。

要可以体系化的对象必须兑现Serializable接口。如若HttpSession属性对象中多少类成员无法作系列化,则足以在session威尔Passivate()方法中做些代替管理来保存该成员状态,而在sessionDidActivate()方法中做些复苏该成员状态的动作。

 

概述:

Servlet监听器用于监听一些注重事件的发生,监听器对象足以在作业时有发生前、爆发后得以做一些少不了的拍卖。

接口:

现阶段Servlet二.4和JSP二.0计算有7个监听器接口和陆个伊夫nt类,当中HttpSessionAttributeListener与

HttpSessionBindingListener
皆使用HttpSessionBinding伊夫nt;HttpSessionListener和
HttpSessionActivationListener则都施用HttpSession伊夫nt;别的Listener对应的伊夫nt如下所示:

 

Listener接口

Event类

ServletContextListener

ServletContextEvent

ServletContextAttributeListener

ServletContextAttributeEvent

HttpSessionListener

HttpSessionEvent

HttpSessionActivationListener

HttpSessionAttributeListener

HttpSessionBindingEvent

HttpSessionBindingListener

ServletRequestListener

ServletRequestEvent

ServletRequestAttributeListener

ServletRequestAttributeEvent

分级介绍:

1 ServletContext休戚相关监听接口

补给知识:

因而ServletContext
的实例能够存取应用程序的大局对象以及伊始化阶段的变量。

在JSP文件中,application 是 ServletContext
的实例,由JSP容器暗中同意创造。Servlet 中调用 getServletContext()方法获得ServletContext 的实例。

注意:

全局对象即Application范围对象,初阶化阶段的变量指在web.xml中,经由<context-param>成分所设定的变量,它的限定也是Application范围,举例:

<context-param>

<param-name>Name</param-name>

<param-value>browser</param-value>

</context-param>

当容器运维时,会确立多少个Application范围的靶子,若要在JSP网页中赢得此变量时:

String name = (String)application.getInitParameter(“Name”);

如故选用EL时:

${initPara.name}

一旦在Servlet中,获得Name的值方法:

String name = (String)ServletContext.getInitParameter(“Name”);

1.ServletContextListener:

用来监听WEB
应用运转和销毁的风浪,监听器类供给达成javax.servlet.ServletContextListener
接口。

ServletContextListener 是 ServletContext 的监听者,倘使 ServletContext
产生变化,如服务器运行时 ServletContext 被创建,服务器关闭时
ServletContext 就要被销毁。

ServletContextListener接口的诀窍:

void contextInitialized(ServletContextEvent sce)

照会正在经受的对象,应用程序已经被加载及初叶化。

void contextDestroyed(ServletContextEvent sce)

通告正在经受的对象,应用程序已经被载出。

ServletContext伊夫nt中的方法:

ServletContext getServletContext()

取得ServletContext对象

2.ServletContextAttributeListener:用于监听WEB应用质量更动的轩然大波,包涵:扩大性能、删除属性、修改属性,监听器类需求完成javax.servlet.ServletContextAttributeListener接口。

ServletContextAttributeListener接口方法:

void attributeAdded(ServletContextAttributeEvent scab)

若有对象加入Application的限制,通告正在听取的对象

void attributeRemoved(ServletContextAttributeEvent scab)

若有对象从Application的范围移除,通告正在听取的目的

void attributeReplaced(ServletContextAttributeEvent scab)

若在Application的限定中,有对象替代另2个目标时,布告正在听取的靶子

ServletContextAttribute伊夫nt中的方法:

java.lang.String getName()

回传属性的称号

java.lang.Object getValue()

回传属性的值

二、HttpSession相关监听接口

1.HttpSessionBindingListener接口

专注:HttpSessionBindingListener接口是独占鳌头无需再web.xml中设定的Listener

当大家的类完毕了HttpSessionBindingListener接口后,只要对象到场Session范围(即调用HttpSession对象的setAttribute方法的时候)或从Session范围中移出(即调用HttpSession对象的
removeAttribute方法的时候或Session Time
out的时候)时,容器分别会自行调用下列八个方法:

void valueBound(HttpSessionBindingEvent event)

void valueUnbound(HttpSessionBindingEvent event)

探讨:怎么着兑现记录网址的客户登入日志, 总结在线人数?

2.HttpSessionAttributeListener接口

HttpSessionAttributeListener监听HttpSession中的属性的操作。

当在Session扩展3性格能时,激发attributeAdded(HttpSessionBinding伊夫nt
se)
方法;当在Session删除1脾气质时,激发attributeRemoved(HttpSessionBinding伊芙nt
se)方法;当在Session属性被再一次安装时,激发attributeReplaced(HttpSessionBinding伊夫nt
se) 方法。那和ServletContextAttributeListener相比周围。

3.HttpSessionListener接口

HttpSessionListener监听
HttpSession的操作。当创立2个Session时,激发session
Created(HttpSession伊夫nt
se)方法;当销毁1个Session时,激发sessionDestroyed (HttpSession伊芙nt
se)方法。

4.HttpSessionActivationListener接口

第贰用于同一个Session转移至差别的JVM的事态。

四、ServletRequest监听接口

1.ServletRequestListener接口

和ServletContextListener接口类似的,这里由ServletContext改为ServletRequest

2.ServletRequestAttributeListener接口

和ServletContextListener接口类似的,这里由ServletContext改为ServletRequest

部分listener可用于总结网址在线人数及访问量。 如下:

服务器运营时(实现ServletContextListener监听器contextInitialized方法),读取数据库,并将其用3个计数变量保存在application范围内

session创制时(达成HttpSessionListener监听器sessionCreated方法),读取计数变量加一同等对待复保存

服务器关闭时(达成ServletContextListener监听器contextDestroyed方法),更新数据库

中的监听器
Listener,监听器listener 一、接口 一、伊夫ntListener
二、HttpSessionAttributeListener 承袭伊夫ntListener接口
HttpSessionAttributeLi…

(一)创制1个监听器达成类

图片 1

要大概计算八个网址的在线人数,首先,能够由此ServletContextListener监听,当Web应用上下文运维时,在ServletContext中增多二个List,用来筹算存放在线的用户名;然后,能够经过HttpSessionAttributeListener监听,当用户登入成功把用户名设置到Session中时同时将用户名存放到ServletContext中的List列表中;最终经过HttpSessionListener监听,当用户注销会话时将用户名从应用上下文范围中的List列表中去除。

Web监听器

为此,编写OnLineListener类完成ServletContextListener、HttpSessionAttributeListener、HttpSessionListener接口,具体代码如下:

1 什么是web监听器?

package com.web.servlet; 
import Java.util.LinkedList; 
import java.util.List; 

import javax.servlet.ServletContext; 
import javax.servlet.ServletContextEvent; 
import javax.servlet.ServletContextListener; 
import javax.servlet.http.HttpSessionAttributeListener; 
import javax.servlet.http.HttpSessionBindingEvent; 
import javax.servlet.http.HttpSessionEvent; 
import javax.servlet.http.HttpSessionListener; 

//在线人数统计监听器实现类 
public class OnlineListener implements ServletContextListener, 
  HttpSessionAttributeListener, HttpSessionListener { 
 private ServletContext application = null; 

 public void contextDestroyed(ServletContextEvent arg0) { 
  // TODO Auto-generated method stub 

 } 

 public void contextInitialized(ServletContextEvent arg0) { 
  //初始化一个application对象 
  this.application = arg0.getServletContext(); 
  //设置一个列表属性,用于保存在想用户名 
  this.application.setAttribute("online", new LinkedList<String>()); 

 } 
 //往会话中添加属性时会回调的方法 
 public void attributeAdded(HttpSessionBindingEvent arg0) { 
  //取得用户名列表 
  List<String> online = (List<String>) this.application 
    .getAttribute("online"); 
  if ("username".equals(arg0.getName())) { 
   //将当前用户名添加到列表中 
   online.add((String) arg0.getValue()); 
  } 
  //将添加后的列表重新设置到application属性中 
  this.application.setAttribute("online", online); 
 } 

 public void attributeRemoved(HttpSessionBindingEvent arg0) { 
  // TODO Auto-generated method stub 

 } 

 public void attributeReplaced(HttpSessionBindingEvent arg0) { 
  // TODO Auto-generated method stub 

 } 

 public void sessionCreated(HttpSessionEvent arg0) { 
  // TODO Auto-generated method stub 

 } 
 //会话销毁时会回调的方法 
 public void sessionDestroyed(HttpSessionEvent arg0) { 
  //取得用户名列表 
  List<String> online = (List<String>) this.application 
    .getAttribute("online"); 
  //取得当前用户名 
  String username = (String) arg0.getSession().getAttribute("username"); 
  //将此用户名从列表中删除 
  online.remove(username); 
  //将删除后的列表重新设置到application属性中 
  this.application.setAttribute("online", online); 
 } 

} 

web监听器是一种Servlet中的特殊的类,它们能援救开拓者监听web中的特定事件,比方ServletContext,HttpSession,ServletRequest的创制和销毁;变量的创立、销毁和修改等。能够在好几动作内外扩充管理,完成监察和控制。

(贰)在web.xml中登记监听器

二 监听器常用的用途

监听器完结好后,还索要在web.xml文件中开始展览注册工夫起效果,只须要在web.xml中像如下添日币素就能够

  • 万般选择Web监听器做以下的源委:
  • 总括在线人数,利用HttpSessionLisener
  • 加载发轫化音讯:利用ServletContextListener
  • 总计网址访问量
  • 贯彻访问监察和控制
<!-- 注册一个监听器 -->
 <listener>
 <!-- 指定监听器实现类的全限定名 -->
 <listener-class>
 com.web.servlet.OnlineListener
 </listener-class>
 </listener

3 接下里看看1个监听器的创办以及实行进度

最终,大家创立几个Servlet来测试这一个监听器实现的作用。

第一须求创建二个监听器,实现某种接口,比方小编想完毕一个对在线人数的监察,能够制造如下的监听器:

管理用户登入的Servlet类代码:

public class MyListener implements HttpSessionListener{
  private int userNumber = 0;
  public void sessionCreated(HttpSessionEvent arg0) {
    userNumber++;
    arg0.getSession().setAttribute("userNumber", userNumber);
  }
  public void sessionDestroyed(HttpSessionEvent arg0) {
    userNumber--;
    arg0.getSession().setAttribute("userNumber", userNumber);
  }
}
package com.web.servlet; 

import java.io.IOException; 
import java.io.PrintWriter; 
import java.util.List; 

import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

//处理用户登录的Servlet 
public class LoginServlet extends HttpServlet { 

 public void doGet(HttpServletRequest request, HttpServletResponse response) 
   throws ServletException, IOException { 
  this.doPost(request, response); 
 } 

 public void doPost(HttpServletRequest request, HttpServletResponse response) 
   throws ServletException, IOException { 
  request.setCharacterEncoding("utf-8");//设置相应内容类型 

  String username= request.getParameter("username");//获取请求参数中的用户名 

  //往session中添加属性,会触发HttpSessionAttributeListener中的attributeAdded方法 
  if(username != null && !username.equals("")) {  
   request.getSession().setAttribute("username",username);  
  } 
  //从应用上下文中获取在线用户名列表 
  List<String> online = (List<String>)getServletContext().getAttribute("online");  

  response.setContentType("text/html;charset=utf-8"); 
  PrintWriter out = response.getWriter(); 
  out.println("<HTML>"); 
  out.println(" <HEAD><TITLE>用户列表</TITLE></HEAD>"); 
  out.println(" <BODY>"); 
  out.println("当前用户是:" + username); 
  out.print(" <hr/><h3>在线用户列表</h3>"); 

  int size = online == null ? 0 : online.size(); 
  for (int i = 0; i < size; i++) { 
   if(i > 0){ 
    out.println("<br/>"); 
   } 
   out.println(i + 1 + "." + online.get(i)); 
  } 

  //注意: 要对链接URL进行自动重写处理 
  out.println("<hr/><a href="/" mce_href="/""" + response.encodeURL("logout") + "/">注销</a>"); 
  out.println(" </BODY>"); 
  out.println("</HTML>"); 
  out.flush(); 
  out.close(); 
 } 
} 

接下来在web.xml中布局该监听器,在web-app中加上:

拍卖用户登入Servlet的类代码

 <listener>
   <listener-class>com.test.MyListener</listener-class>
 </listener>
package com.web.servlet; 

import java.io.*; 
import java.util.List; 
import javax.servlet.ServletException; 
import javax.servlet.http.*; 

//处理用户注销会话的Servlet 
public class LogoutServlet extends HttpServlet { 

 public void doGet(HttpServletRequest request, HttpServletResponse response) 
   throws ServletException, IOException { 
  this.doPost(request, response); 
 } 

 public void doPost(HttpServletRequest request, HttpServletResponse response) 
   throws ServletException, IOException { 
  request.setCharacterEncoding("utf-8"); 

  //销毁会话,会触发SessionLinstener中的sessionDestroyed方法 
  request.getSession().invalidate(); 

  //从应用上下文中获取在线用户名列表 
  List<String> online = (List<String>)getServletContext().getAttribute("online"); 

  response.setContentType("text/html;charset=utf-8"); 
  PrintWriter out = response.getWriter(); 
  out.println("<HTML>"); 
  out.println(" <HEAD><TITLE>用户列表</TITLE></HEAD>"); 
  out.println(" <BODY>"); 
  out.print(" <h3>在线用户列表</h3>"); 

  int size = online == null ? 0 : online.size(); 
  for (int i = 0; i < size; i++) { 
   if(i > 0){ 
    out.println("<br/>"); 
   } 
   out.println(i + 1 + "." + online.get(i)); 
  } 

  out.println("<hr/><a href="/" mce_href="/""index.html/">主页</a>"); 
  out.println(" </BODY>"); 
  out.println("</HTML>"); 
  out.flush(); 
  out.close(); 
 } 
} 

在JSP中增多访问人数:

然后创立七个index.html文件,用来供用户登入,代码如下:

<body>
  在线人数:<%=session.getAttribute("userNumber") %><br/>
</body>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
 <head> 
 <meta http-equiv="content-type" content="text/html; charset=UTF-8"> 
 <title>index.html</title> 
 </head> 

 <body> 
 <form action = "login" method = "post"> 
  用户名:<input type ="text" name = "username"/> 
  <input type = "submit" value = "登录"/><br/><br/> 

 </form> 
 </body> 
</html> 

当自家使用自家的浏览器访问时,试行结果如下:

把WEB布署到汤姆cat容器总,并运转。展开浏览器访问就可以

图片 2 

如上便是本文的全部内容,希望对大家的求学抱有帮助,也期望大家多多支持脚本之家。

当展开另三个浏览器访问时:

您恐怕感兴趣的作品:

  • Java基础
    Servlet监听器详解
  • 浅谈java监听器的效益
  • Java中的拦截器、过滤器、监听器用法详解
  • java
    web监听器总括在线用户及人数
  • 快快学习JavaWeb中监听器(Listener)的利用格局
  • 深切学习JavaWeb中监听器(Listener)的运用情势
  • JavaWeb监听器Listener实例深入分析
  • 应用java监听器达成在线人数计算
  • 浅析JAVA中过滤器、监听器、拦截器的区分
  • servlet监听器的就学应用(3)

图片 3 

鉴于展开另3个浏览器访问,相当于另三个会话,由此在线人数会大增。

对此三.0本子的Servlet来讲,还支持使用评释的诀窍开始展览布局。

那就是说接下去看看都有如何监听器以及艺术呢!