一、監聽器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無變化?
待解決。。。。