一、监听器listener实现在线人数统计。
1.实现功能
实现HttpSessionListener接口,写一个监听类,完成对网站在人数的监听
2.核心代码
记录所有用户的数据,把生命期提取到 Application (ServletContext)层。
if (context.getAttribute("onlineUsers")!=null){
context.setAttribute("onlineUsers",(Integer)context.getAttribute("onlineUsers")+1);
}
3.框架
1.ServletContext作用域(生命周期)
4。代码
1.测试类,显示人数的页面
package com.bmft.listener;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* 监听器的测试类,展示在线时间
*/
public class ListenerTest01 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().write("<h1>onlineUser = " +
this.getServletContext().getAttribute("onlineUsers"));
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
2.监听类,实现监听
package com.bmft.listener;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
/**
* 实现HttpSessionListener接口,
* 写一个监听类,完成对网站在人数的监听
*/
public class Listener01 implements HttpSessionListener {
private ServletContext context = null;
//当一个用户打开网站的时候开启创建session执行的方法
public void sessionCreated(HttpSessionEvent httpSessionEvent) {
context = httpSessionEvent.getSession().getServletContext();
if (context.getAttribute("onlineUsers")!=null){
context.setAttribute("onlineUsers",(Integer)context.getAttribute("onlineUsers")+1);
}
else {
context.setAttribute("onlineUsers", 1);
}
System.out.println("=====有一位用户上线了=====");
System.out.println("Id: "+httpSessionEvent.getSession().getId()+"=====");
}
//关闭网站的时候销毁session执行的的方法
public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
context = httpSessionEvent.getSession().getServletContext();
if (context.getAttribute("onlineUsers")!=null){
context.setAttribute("onlineUsers", 0);
}
else {
context.setAttribute("onlineUsers",(Integer)context.getAttribute("onlineUsers")-1);
}
System.out.println("=====用户下线了=====");
System.out.println("Id: "+httpSessionEvent.getSession().getId()+"=====");
}
}
3.映射
<!--监听器测试类ListenerTest01映射-->
<servlet>
<servlet-name>ListenerTest01</servlet-name>
<servlet-class>com.bmft.listener.ListenerTest01</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ListenerTest01</servlet-name>
<url-pattern>/ListenerTest01</url-pattern>
</servlet-mapping>
<!--监听映射-->
<listener>
<listener-class>com.bmft.listener.Listener01</listener-class>
</listener>
<session-config>
<session-timeout>1</session-timeout>
</session-config>
5.页面展示
二、错误 与解决
1.无法联网下载
错误信息
Cannot access aliyunmaven (https://maven.aliyun.com/repository/public) in offline mode and the artifact org.apache.maven.plugins:maven-jar-plugin:pom:2.4 has not been downloaded from it before.
解决:
2.如何实现session的自动超时自动销毁
web.xml
<session-config>
<session-timeout>1</session-timeout>
</session-config>
3.为何session无变化?
待解决。。。。