「java实现在线人数」java统计网站每天的登录人数

博主:adminadmin 2023-03-17 19:19:09 299

今天给各位分享java实现在线人数的知识,其中也会对java统计网站每天的登录人数进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

java怎么实统计在线人数,和访问量

简单的说个我的思路供你借鉴:

在线人数,我理解为当前应用的session数目,不过sevlert好像不提供获取全部session的方法,可以通过加一个sessionlistener来记录(创建就+1,销毁就-1)

访问量相对简单,你定义一个全局的计数器就好了,来一个(这个有很多种方法,比如:有一个新的session被创建)人你就+1

java 怎样统计系统当前在线人数

用户表里面加一个字段status

当用户上线以后,就把status设置为1

统计在线人数就是一条sql语句:

select count(*) from 用户表 where status = 1

Java统计在线人数,用过滤器好还是拦截器?

你好,要想知道哪个好,要说一下两者的区别,拦截器是struts的或者spring mvc框架封装的,过滤器是java ee自身的

过滤器是在java web中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的 action进行业务逻辑,比如过滤掉非法url。主要为了减轻服务器负载。减少压力

拦截器是在面向切面编程的就是在你的service或者一个方法,前调用一个方法,或者在方法后调用一个方法。比如可以用拦截器做一些权限管理 或者log之类的事情。

两者作用是不同的。如果单纯的统计,建议还是使用过滤器比较好

希望可以解决你的问题

java 怎么实现限制用户在线人数,求实例

锁加单例:

public class Regist{

    private static Regist rgst=new Regist();

    private Regist(){}

    private int cnt=0;

    private int max=100;

    public static getRegist(){return rgst;}

    ///设置最大上线人数

    public void setMax(int max){this.max=max;}

    ///判断新用户能否登入

    public synchronized boolean login(){

       if(cnt=max)return false;

       ++cnt;

       return true;

    }

    ///用户退出时调用

    public synchronized void logout(){

        --cnt;

    }

};

有新用户要登入时,先Regist::getRegist().login()判断能否登入,返回true则表示没到用户上限,可以登入,否则表示到上限了,不能登入,用户退出时需要调用Regist::getRegist().logout()

synchronized不清楚可以百度,是种类似锁的东西。作用于方法上,相当于调用方法前先lock,调用之后unlock,其锁的对象是该方法的类对象。

线程不是太多可以用这个方法,线程太多用这个可能慢了些,好像加锁比较耗时间,如果同一个时间太多人进行登入操作,都得在那等着,一个一个进行,反应慢

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;

}

}

如何实现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-timeout10/session-timeout

/session-config

最后在Jsp页面代码使用以下代码就可以实现当前在线人数统计输出:

java实现在线人数的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java统计网站每天的登录人数、java实现在线人数的信息别忘了在本站进行查找喔。