您好,這樣:
成都創(chuàng)新互聯(lián)專注于潮南網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供潮南營銷型網(wǎng)站建設(shè),潮南網(wǎng)站制作、潮南網(wǎng)頁設(shè)計、潮南網(wǎng)站官網(wǎng)定制、小程序制作服務(wù),打造潮南網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供潮南網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
通過SessionListenr可以監(jiān)聽session的創(chuàng)建和銷毀,所以首先要寫一個類MySessionListener,實現(xiàn)javax.servlet.http.HttpSessionListener接口及其sessionCreated()、sessionDestroyed()方法:
import java.util.HashSet;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class MySessionListener implements HttpSessionListener {
public void sessionCreated(HttpSessionEvent event) {
HttpSession session = event.getSession();
ServletContext application = session.getServletContext();
// 在application范圍由一個HashSet集保存所有的session
HashSet sessions = (HashSet) application.getAttribute("sessions");
if (sessions == null) {
sessions = new HashSet();
application.setAttribute("sessions", sessions);
}
// 新創(chuàng)建的session均添加到HashSet集中
sessions.add(session);
// 可以在別處從application范圍中取出sessions集合
// 然后使用sessions.size()獲取當(dāng)前活動的session數(shù),即為“在線人數(shù)”
}
public void sessionDestroyed(HttpSessionEvent event) {
HttpSession session = event.getSession();
ServletContext application = session.getServletContext();
HashSet sessions = (HashSet) application.getAttribute("sessions");
// 銷毀的session均從HashSet集中移除
sessions.remove(session);
}
}
然后再在web.xml中分別配置SessionListener和session超時時間(10分鐘):
listener
listener-class全路徑MySessionListener/listener-class
/listener
session-config
session-timeout10/session-timeout
/session-config
最后在Jsp頁面代碼使用以下代碼就可以實現(xiàn)當(dāng)前在線人數(shù)統(tǒng)計輸出:
首先給你講一下,我的理解,人數(shù)統(tǒng)計好說,因為,可已設(shè)置監(jiān)聽器,讓其在服務(wù)器啟動的時候進(jìn)行監(jiān)聽,然后統(tǒng)計登錄人數(shù),但是統(tǒng)計在線人數(shù),就麻煩點了,因為大多數(shù)人都不愿意點擊注銷按鈕,直接關(guān)閉瀏覽器,這樣session的關(guān)閉就麻煩了點,我先給出統(tǒng)計人數(shù)的代碼,我想統(tǒng)計在線人數(shù)可以定時調(diào)用程序來統(tǒng)計,但是不是實時的,所以最大的障礙就是怎么在關(guān)閉瀏覽器的時候,就關(guān)閉session
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class ApplicationListener implements ServletContextListener{
public void contextDestroyed(ServletContextEvent arg0) {
ServletContext sc = arg0.getServletContext();
Integer count = (Integer) sc.getAttribute("AccessCount");
try {
PrintWriter out = new PrintWriter(new FileWriter("c:/Users/god/count.txt"));// 將人數(shù)保存到文本文件
System.out.println("count:"+count);
out.print(count);
out.flush();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public void contextInitialized(ServletContextEvent arg0) {
Integer count = 0;
ServletContext sc = arg0.getServletContext();
try {
Scanner in = new Scanner(new FileReader("c:/Users/god/count.txt"));// 讀取已經(jīng)產(chǎn)生的人數(shù)信息,然后進(jìn)行累加
count = in.nextInt();
in.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
sc.setAttribute("AccessCount", count);
}
}
在web.xml文件里面進(jìn)行設(shè)置
listener
listener-class
文件的位置也就是包名.ApplicationListener
/listener-class
/listener
統(tǒng)計的時候是設(shè)置攔截器,需要在struts.xml中設(shè)置
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
@SuppressWarnings("serial")
public class AccessInterceptor implements Interceptor{
private String id;
public void destroy() {
}
public void init() {
}
@SuppressWarnings("unchecked")
public String intercept(ActionInvocation ai) throws Exception {
ServletContext sc = ServletActionContext.getServletContext();
HttpServletRequest request = ServletActionContext.getRequest();
HttpSession session = request.getSession();
if(!session.getId().equals(id)){
Integer count = (Integer) sc.getAttribute("AccessCount");// 判斷如果登錄成功,統(tǒng)計數(shù)字自增
sc.setAttribute("AccessCount", count+1);
id = session.getId();
}
String result = ai.invoke();
return result;
}
}
在類中聲明一個靜態(tài)變量如下 :
static int num=0 ,每次類初始化將num 加一。
靜態(tài)變量為所有類共享,num的大小即為創(chuàng)建的student對象的數(shù)目
程序稍微改動如下:
class student {
String name;
static int num =0;
String id;
float ywscore;
float sxscore;
float sumscore;
float avgscore;
student(String name,String id,float ywscore,float sxscore){
this.name=name;
this.id=id;
this.ywscore=ywscore;
this.sxscore=sxscore;
num ++;
}
float sum(){
sumscore=sxscore+ywscore;
return sumscore;
}
float avg(){
avgscore=(sxscore+ywscore)/2;
return avgscore;
}
int getNum()
{
return num;
}
void showinfo(){
System.out.println("name: "+name);
System.out.println("id: "+id);
System.out.println("mathscore: "+sxscore);
System.out.println("langue: "+ywscore);
System.out.println("avg: "+avg());
System.out.println("sum: "+sum());
}
};
正確是做不到,只能是估計,需要你定義一個閥值,估計它的取值,然后與你統(tǒng)計的在線人數(shù)相乘,得到一個近似值即可!~
統(tǒng)計在線人數(shù)的方式不同(比如登錄人數(shù)或者頁面訪問人數(shù))具體的實現(xiàn)方式不同,但是記錄統(tǒng)計人數(shù)的方法是一樣的1。定義一個靜態(tài)變量或者在application作用于放置一個變量存放在線人數(shù),如果是登錄人數(shù),則在用戶登錄時+1,如果是頁面訪問人數(shù)就添加一個監(jiān)聽器listener進(jìn)行監(jiān)聽(sessionId) 如果有用戶訪問頁面就+1
網(wǎng)頁題目:java在線人數(shù)統(tǒng)計代碼 Java統(tǒng)計
當(dāng)前路徑:http://m.newbst.com/article46/hihjhg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)、網(wǎng)站設(shè)計、面包屑導(dǎo)航、網(wǎng)站設(shè)計公司、關(guān)鍵詞優(yōu)化、用戶體驗
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)