導航:首頁 > 編程語言 > java獲取在線用戶

java獲取在線用戶

發布時間:2025-06-11 23:24:25

java 怎麼實現限制用戶在線人數,求實例

鎖加單例:

publicclassRegist{
privatestaticRegistrgst=newRegist();
privateRegist(){}
privateintcnt=0;
privateintmax=100;
publicstaticgetRegist(){returnrgst;}
///設置最大上線人數
publicvoidsetMax(intmax){this.max=max;}
///判斷新用戶能否登入
(){
if(cnt>=max)returnfalse;
++cnt;
returntrue;
}
///用戶退出時調用
publicsynchronizedvoidlogout(){
--cnt;
}
};

有新用戶要登入時,先Regist::getRegist().login()判斷能否登入,返回true則表示沒到用戶上限,可以登入,否則表示到上限了,不能登入,用戶退出時需要調用Regist::getRegist().logout()

synchronized不清楚可以網路,是種類似鎖的東西。作用於方法上,相當於調用方法前先lock,調用之後unlock,其鎖的對象是該方法的類對象。

線程不是太多可以用這個方法,線程太多用這個可能慢了些,好像加鎖比較耗時間,如果同一個時間太多人進行登入操作,都得在那等著,一個一個進行,反應慢

⑵ Java多個用戶同時登入時,如何將用戶對象存放到Session里

第一種方式,每次登錄 都需要操作資料庫,多了一些不必要的性能開銷,而且在登錄狀專態下 萬一突屬然電腦關閉了,那就永遠都不能登錄了,可用性比較低。

但是第二種方式就不一樣了,可操作性強,很方便維護所有在線用戶的信息。

在處理登錄的login方法中,先查詢資料庫驗證下該用戶是否存在,如果存在 判斷該登錄賬戶是否已經鎖定了, 然後從application內置作用域對象中取出所有的登錄信息,查看該username賬戶是否已經登錄,如果登錄了,就友好提示下,反之表示可以登錄,將該登錄信息以鍵值對的方式保存在application中。

⑶ 如何實現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頁面代碼使用以下代碼就可以實現當前在線人數統計輸出:

⑷ JavaWeb開發網站,監測用戶在線狀態

用ajax吧。

網頁裡面加點javascript代碼,在後台每120秒和伺服器端通信一次。失敗的話,表示客戶端退出了

不過這樣,伺服器並發壓力很大。

⑸ java 代碼怎麼在頁面現在當前用戶是在線狀態呢

我開發論壇時寫的,效果偶爾有一兩個人的誤差,但完全可忽略:
package com;
public class OnlineCount
implements HttpSessionListener
{
private static int activeSessions = 0;

public void sessionCreated(HttpSessionEvent se) {
activeSessions += 1;
}

public void sessionDestroyed(HttpSessionEvent se) {
if (activeSessions > 0)
activeSessions -= 1;
}
public static int getActiveSessions() {
return activeSessions;
}
}

jsp頁面調用:
<%=OnlineCount.getActiveSessions()%>
希望對你有幫助,如果有改進方案,一起探討哦,嘿嘿

也要配置web.xml:
<listener>
<listener-class>com.OnlineCount</listener-class>
</listener>

⑹ java-web怎麼獲取在線用戶列表

如果要在頁面中看到所有登陸用戶的信息的話,必須在每個用戶登陸成功以後,把該用戶信息存入application中。然後在jsp頁面上把application中存放的所有用戶列表取出來,顯示在畫面上,這樣返回給客戶端的頁面上就能看到所有的登陸用戶列表。示例如下:
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

String userName = request.getParameter("username");
ServletContext application = req.getServletContext();
ArrayList loginList = (ArrayList)application.getAttribute("loginlist");
if(loginList == null){
loginList = new ArrayList();
application.setAttribute("loginlist",loginList);
}
loginList.add(userName);
req.getRequestDispatcher("/WEB-INF/jsp/main.jsp").forward(req,resp);
}

⑺ 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>

⑻ 瘋狂Java講義:使用MulticastSocket實現多點廣播(2)

下面將結合MulticastSocket和DatagramSocket開發一個簡單的區域網內的即時通信工具 區域網內每個用戶啟動該工具後 就可以看到該區域網內所有在線用戶 他也會被其他用戶看到 即看到如圖 所示的窗口

在圖 的用戶列表中雙擊任意一個用戶 即可啟動一個如圖 所示的交談窗口

圖 區域網聊天工具

圖 與特定用戶交談

如果雙擊圖 所示用戶列表窗口中 所有人 列表項 即可啟動一個與圖 相似的交談窗口 不同的是通過該窗口發送的消息將會被所有人看到

該程序的實現思路是每個用戶都啟動 個Socket 一個MulticastSocket 一個DatagramSocket

其中MulticastSocket會周期性地向 發送在線信息 且所有用戶的MulticastSocket都會加入到 這個多點廣播IP中 這樣每個用戶都可以收到其他用戶廣播的在線信息 如果系統經過一段時間沒有收到某個用戶廣播的在線信息 則從用戶列表中刪除該用戶 除此之外 該MulticastSocket還用於向所有用戶發送廣播信息

DatagramSocket主要用於發送私聊信息 當用戶收到其他用戶廣播來的DatagramPacket時 即可獲取該用戶MulticastSocket對應的SocketAddress 這個SocketAddress將作為發送私聊信息的重要依據 本程序讓MulticastSocket在 埠監聽 而DatagramSocket在 埠監聽 這樣程序就可以根據其他用戶廣播來的DatagramPacket得到他的DatagramSocket所在的地址

本系統提供了一個UserInfo類 該類封裝了用戶名 圖標 對應的SocketAddress以及該用戶對應的交談窗口 失去聯系的次數等信息 該類的代碼片段如下

程序清單 codes/ / /LanTalk/UserInfo java

public class UserInfo

{

//該用戶的圖標

private String icon;

//該用戶的名字

private String name;

//該用戶的MulitcastSocket所在的IP和埠

private SocketAddress address;

//該用戶失去聯系的次數

private int lost;

//該用戶對應的交談窗口

private ChatFrame chatFrame;

public UserInfo(){}

//有參數的構造器

public UserInfo(String icon String name SocketAddress address int lost)

{

this icon = icon;

this name = name;

this address = address;

this lost = lost;

}

//此處省略了該類所有屬性的setter和getter方法

//使用address作為該用戶的標識 所以根據address作為

//重寫hashCode()和equals方法的標准

public int hashCode()

{

return address hashCode()

}

public boolean equals(Object obj)

{

if (obj != null && obj getClass()==UserInfo class)

{

return ((UserInfo)obj) getAddress() equals(address)

}

return false;

}

}

返回目錄 瘋狂Java講義

編輯推薦

Java程序性能優化 讓你的Java程序更快 更穩定

新手學Java 編程

lishixin/Article/program/Java/hx/201311/27257

⑼ 用java實現web在線客服功能.不需要任何插件,用jsp和servlet如何實現。或者拿ssh框架。求源碼或者詳細思路

我嘗試了兩種不同的方案來解決在線客服的問題。首先,我排除了使用插件的可能性,這意味著像QQ或MSN這樣的即時通訊工具無法實現這一目標。

第一個方案是採用網頁聊天的形式。客服人員和客戶分別在不同的網頁上進行交流。我們利用了Ajax技術,當某一方發送消息時,JavaScript會監控該頁面的輸入端,然後將消息發送至伺服器。伺服器處理消息後,再將消息發送給另一方。接收方的頁面會進行局部刷新,以顯示新收到的消息。

第二個方案是開發一個Applet小程序,通過TCP/IP協議實現通信。我們將這個Applet嵌入到網頁中,用戶需要客服時可以運行這個小程序。這樣,用戶可以更直接地與客服人員進行交流。

這兩個方案各有優缺點。使用網頁聊天的形式更加簡潔,但可能需要更多的前端開發工作。而Applet小程序則提供了一種更加直接的交互方式,但可能需要更多的技術投入。

在實際應用中,我更傾向於選擇第一個方案。它不僅不需要額外安裝插件,還可以利用現有的瀏覽器功能,使得用戶可以更方便地與客服人員進行交流。

通過這兩個方案的實現,我學到了如何利用Ajax技術實現網頁間的消息傳遞,以及如何使用Applet進行網路通信。這些經驗對於進一步開發在線客服系統非常有幫助。

閱讀全文

與java獲取在線用戶相關的資料

熱點內容
壓縮文件加密後文件損壞 瀏覽:470
爐石閃退安卓2017 瀏覽:982
qq空間網名 瀏覽:30
ps怎麼文件名都沒有了 瀏覽:280
百度網盤app傳輸列表的文件放哪裡 瀏覽:634
羅塞塔石碑rsd文件 瀏覽:570
u盤大文件復制 瀏覽:101
有哪些作業題目app 瀏覽:777
重裝前如何硬體文件徹底清除 瀏覽:806
保山衡水網站設計多少錢 瀏覽:21
蘋果6p下邊框怎麼拆 瀏覽:544
放入回收站並刪除的文件如何恢復 瀏覽:597
linux查找文件關鍵字 瀏覽:140
pscs5抹除調整工具 瀏覽:661
手機開發軟體app有哪些 瀏覽:831
kk唱響50版本下載 瀏覽:649
360雲盤同步文件夾怎麼用 瀏覽:385
vb編程語言能做什麼 瀏覽:357
如何wifi傳輸文件 瀏覽:519
老年人用的微信頭像 瀏覽:440

友情鏈接