當前位置:首頁 » 網頁前端 » javaweb在線人數
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

javaweb在線人數

發布時間: 2022-06-30 03:30:24

A. javaweb訪客計數,判斷是第幾位訪問網站的,用session

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);
}

// 新創建的session均添加到HashSet集中
sessions.add(session);
// 可以在別處從application范圍中取出sessions集合
// 然後使用sessions.size()獲取當前活動的session數,即為「在線人數」
}

public void sessionDestroyed(HttpSessionEvent event) {
HttpSession session = event.getSession();
ServletContext application = session.getServletContext();
HashSet sessions = (HashSet) application.getAttribute("sessions");

// 銷毀的session均從HashSet集中移除
sessions.remove(session);
}
}

B. java網頁中怎樣統計在線人數

1.用session超時,session為null就表示下線了

2.也可以採用資料庫中設置 臨時表 來處理
一個用戶登陸時向表中插進一條記錄,用戶離開時候刪除該記錄
如想統計在線人數,簡單地執行
select count(*) from table... 即可

3.application對象中可以記住現在的人數,application的生命周期和伺服器的生命周期一樣長。

4.還有一種方法要用到一個文件global.jsa ,方法是(在JSP中)是sessionDestroy(),其中它是以session對象為參數的。還有要把global.jsa文件必須房子和JSP程序相同的文件目錄內才行。

5.網頁自動刷新的代碼是:
在文件頭部加上
<meta http-equiv="refresh" content="15">
刷新間隔時間是15秒

6.在session中加入監聽類,類的示例代碼如下:

onLineUser.java
import javax.servlet.http.*;
import javax.servlet.*;
import java.util.*;

public class onLineUser implements HttpSessionBindingListener {
public onLineUser(){
}

private Vector users=new Vector();
public int getCount(){
users.trimToSize();
return users.capacity();
}
public boolean existUser(String userName){
users.trimToSize();
boolean existUser=false;
for (int i=0;i<users.capacity();i++ )
{
if (userName.equals((String)users.get(i)))
{
existUser=true;
break;
}
}
return existUser;
}

public boolean deleteUser(String userName) {
users.trimToSize();
if(existUser(userName)){
int currUserIndex=-1;
for(int i=0;i<users.capacity();i++){
if(userName.equals((String)users.get(i))){
currUserIndex=i;
break;
}
}
if (currUserIndex!=-1){
users.remove(currUserIndex);
users.trimToSize();
return true;
}
}
return false;
}

public Vector getOnLineUser()
{
return users;
}
public void valueBound(HttpSessionBindingEvent e) {
users.trimToSize();
if(!existUser(e.getName())){
users.add(e.getName());
System.out.print(e.getName()+"\t 登入到系統\t"+(new Date()));
System.out.println(" 在線用戶數為:"+getCount());
}else
System.out.println(e.getName()+"已經存在");
}

public void valueUnbound(HttpSessionBindingEvent e) {
users.trimToSize();
String userName=e.getName();
deleteUser(userName);
System.out.print(userName+"\t 退出系統\t"+(new Date()));
System.out.println(" 在線用戶數為:"+getCount());
}
}

jsp:
<%@ page contentType="text/html;charset=gb2312" %>
<%@ page import="java.util.*" %>
<jsp:useBean id="onlineuser" class="temp.jb.onLineUser" scope="application"/>
<html>
<head>
</head>
<body onUnload="postMessage()">
<center>
<p><h1>登陸成功,歡迎訪問</h1></p>
</center>
<% session = request.getSession(false); %>
<%
String username=request.getParameter("username");
if (onlineuser.existUser(username)){
out.println("用戶<font color=red>"+username+"</font>已經登陸!");
}else{
session.setMaxInactiveInterval(50); //Sesion有效時長,以秒為單位
session.setAttribute(username,onlineuser);
out.println("歡迎新用戶:<font color=red>"+username+"</font>登陸到系統!");
}
out.println("<br>當前在線用戶人數:<font color=red>"+onlineuser.getCount()+"</font><br>");
String ip = request.getRemoteAddr();
out.println("<br>IP:<font color=red>"+ip+"</font><br>");
Vector vt=onlineuser.getOnLineUser();
Enumeration e = vt.elements();
out.println("在線用戶列表");
out.println("<table border=1>");
out.println("<tr><td>用戶名</td></tr>");
while(e.hasMoreElements()){
out.println("<tr><td>");
out.println((String)e.nextElement()+"<br>");
out.println("</td></tr>");
}
out.println("</table>");

%>
<center>
<p> </p>
[<a href="javascript:window.close()">關閉窗口</a>]
<%
out.println("<p><a href='logout.jsp?username="+username+"'>退出系統</a></p>");
%>
</center>
<Script>
function postMessage(){
<%onlineuser.deleteUser(request.getParameter("username"));%>
}
</Script>
</body>
</html>

C. java web開發 如何統計正在訪問JSP頁面的人數總和

我以前是通過 定義一個變數(假設名字為currentuser)保存到application作用域中,每個用戶一上線就會創建一個session,在這個時候把currentuser變數加1,session銷毀的時候currentuser變數減1 。但是這樣做的話可能不能及時反映在線人數,因為並不是用戶一下線session就馬上銷毀的。僅供參考,期待改進。

D. java 怎樣統計系統當前在線人數

統計在線人數的方式不同(比如登錄人數或者頁面訪問人數)具體的實現方式不同,但是記錄統計人數的方法是一樣的1。定義一個靜態變數或者在application作用於放置一個變數存放在線人數,如果是登錄人數,則在用戶登錄時+1,如果是頁面訪問人數就添加一個監聽器listener進行監聽(sessionId) 如果有用戶訪問頁面就+1

E. Java統計在線人數,用過濾器好還是攔截器

你好,要想知道哪個好,要說一下兩者的區別,攔截器是struts的或者spring mvc框架封裝的,過濾器是java ee自身的

過濾器是在java web中,你傳入的request,response提前過濾掉一些信息,或者提前設置一些參數,然後再傳入servlet或者struts的 action進行業務邏輯,比如過濾掉非法url。主要為了減輕伺服器負載。減少壓力

攔截器是在面向切面編程的就是在你的service或者一個方法,前調用一個方法,或者在方法後調用一個方法。比如可以用攔截器做一些許可權管理 或者log之類的事情。

兩者作用是不同的。如果單純的統計,建議還是使用過濾器比較好
希望可以解決你的問題

F. java在線人數問題

首先給你講一下,我的理解,人數統計好說,因為,可已設置監聽器,讓其在伺服器啟動的時候進行監聽,然後統計登錄人數,但是統計在線人數,就麻煩點了,因為大多數人都不願意點擊注銷按鈕,直接關閉瀏覽器,這樣session的關閉就麻煩了點,我先給出統計人數的代碼,我想統計在線人數可以定時調用程序來統計,但是不是實時的,所以最大的障礙就是怎麼在關閉瀏覽器的時候,就關閉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"));// 將人數保存到文本文件
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"));// 讀取已經產生的人數信息,然後進行累加
count = in.nextInt();
in.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
sc.setAttribute("AccessCount", count);
}
}

在web.xml文件裡面進行設置
<listener>
<listener-class>
文件的位置也就是包名.ApplicationListener
</listener-class>
</listener>

統計的時候是設置攔截器,需要在struts.xml中設置

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");// 判斷如果登錄成功,統計數字自增
sc.setAttribute("AccessCount", count+1);
id = session.getId();
}
String result = ai.invoke();
return result;
}

}

G. 需要統計在線人數的JAVA WEB代碼~導入後直接可以運行的,後台可以動態的看用戶的增減···滿意追加50

我代表廣大程序員踩你臉:
我想你一定是:
恨爹不成剛
怨姐不是鳳
怪哥不叫春
以 一副巧奪天工的長相
滄海一粟的智商
奠定當今中國程序界蓋世無雙的第一腦殘的霸主地位

出來混要厚道,你還是玩蛋去吧!

H. 我想用javaweb做一個簡單的用戶在線數量統計,一直現實空指針異常

你要先登錄之後,在Application域中有count屬性,獲取才能獲取一個Object對象,調用toString方法,你現在沒有count屬性,調用toString方法必然是空指針呀……

I. 如何實現java 用戶在線實時統計

您好,這樣:
通過SessionListenr可以監聽session的創建和銷毀,所以首先要寫一個類MySessionListener,實現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);
}

// 新創建的session均添加到HashSet集中
sessions.add(session);
// 可以在別處從application范圍中取出sessions集合
// 然後使用sessions.size()獲取當前活動的session數,即為「在線人數」
}

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-timeout>10</session-timeout>
</session-config>
最後在Jsp頁面代碼使用以下代碼就可以實現當前在線人數統計輸出:

J. eclipse javaweb項目,區域網,支持多少人同時訪問

這樣考慮問題:
tomcat有個默認鏈接線程池,默認設置是200,可調大.

操作系統本身有個連接隊列(由操作系統管理的隊列可調)。
這兩個鏈接隊列都可以調大,但要根據系統的CPU處理能力+能存大小做調整。一般操作系統的默認連接隊列不用調(除非你機器性能真的很好,比如配置不高的PCServer,雲虛擬機不要調整)。
操作系統上對連接隊列需要佔用的內存大小有定義,看一個連接佔用的內存*可以支持的最大連接=操作系統處理連接需要的使用的內存。
【注意:為什麼會說操作系統連接數,因為運行在操作系統上的任何網路程序,連接,數據轉發,都是由操作系統中的TCP/IP模塊負責完成的】
tomcat的連接也也有固定大小,看棧內存大小。內存棧大小*乘以你調整到的連接線程數=連接線程棧要使用的內存數。
操作系統內核,操作系統管理進程,進程本身都需要一定的內存才可以跑起來。這基本上屬於固定內存。
程序(虛擬機進程),它自己在運行時,會創建對象(分配堆內存),調用方法(使用棧內存)。這塊需要做系統壓力測試評估系統上線後能支撐到多大的並發量。
(jsconsole會列出虛擬機的堆內存、棧內存、線程的、CPU等的使用情況)。
CPU資源考慮,如果你的應用屬於計算密集型,內存能支持,CPU未必能支持得了。[壓力測試的時候可以分析出來]。
不清楚你資料庫是否是單獨安裝。如果不是,內存CPU使用要減掉數據需要使用部分。
這樣才能綜合評估出你系統究竟能支持多少連接數。