导航:首页 > 编程语言 > 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获取在线用户相关的资料

热点内容
怎么让一个网站打不开 浏览:710
pek文件都是什么 浏览:901
华为手机qq文件怎么发到微信没反应 浏览:393
文件如何扫描发送 浏览:135
12代皇冠导航升级硬盘和光盘区别 浏览:883
mac106升级107 浏览:919
app筛选页面 浏览:376
设置jsp背景图片语句 浏览:627
车载导航不出数据怎么回事 浏览:423
计算机网络期末试卷 浏览:318
桌面上的照片怎么弄到文件夹里 浏览:576
霸刀战神手游苹果 浏览:742
h5代码在线生成器 浏览:915
腾讯课堂如何设置ppt执行文件路径 浏览:764
指纹打卡机考勤表密码 浏览:800
安卓手机如何打开webp文件 浏览:764
php数据库换行符 浏览:190
桌面图片文件系统错误 浏览:297
ps文件很小打开很大 浏览:755
如何在网站上发布材料 浏览:751

友情链接