当前位置:首页 » 网页前端 » 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使用要减掉数据需要使用部分。
这样才能综合评估出你系统究竟能支持多少连接数。