假如你的web server是几种,比如是apache+tomcat,那就很简单了,统计各自处理的页面
最傻瓜的办法就是监视端口了
最傻瓜的办法就是监视端口了
解决方案 »
- 站内通信如何实现啊?我想做一个论坛,A给B发个消息,B不刷新,就会有提示
- 数组排列组合
- 想做个密码找会的模块,找回的密码发送到你的注册时邮箱,是不是要用到javaemail啊,如果是请给个思路,
- 关于继承了抽象类的类的构造器的问题?
- 一个javascript的超级简单的问题
- spring xml配置转换到annotation的一个小问题
- Java如何将业务层打包?
- snap connectionpool的初始化问题?
- 作业求救
- JSP简单问题
- rs.getString("Book_Content").substring(0,15)控制标题长度
- <a href="soft/00.ceb">为什么不能象<a href="soft/00.zip">那样下载,而是打开一堆乱码。。。。。请帮助解决
{
public void sessionCreated(HttpSessionEvent evt)
{
HttpSession session = evt.getSession();
if(session.isNew())
{
if(Count()<0)
{
System.out.println("新session计数器出现错误");
}
}
}
public void sessionDestroyed(HttpSessionEvent evt)
{
}
public synchronized int Count()
{
SqlModify count = new SqlModify();
return count.modify("Update counter set hitcount=hitcount+1 where range = 'allsite'");
}
}
实现当前在线人数之类只需要放入ServletContext里面就行了
package com;import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class Listener implements HttpSessionListener, ServletContextListener { ServletContext context;
int users = 0;
public void sessionCreated(HttpSessionEvent arg0) {
//session创建时候触发
users++;
System.out.print("sessionCreated:SessionID="+ arg0.getSession().getId()+ ",目前有"+ users+ "个用户");
context.setAttribute("users", new Integer(users));
} public void sessionDestroyed(HttpSessionEvent arg0) {
//session销毁时候触发
users--;
System.out.print("sessionDestoryed:SessionID="+ arg0.getSession().getId()+ ",目前有"+ users+ "个用户");
context.setAttribute("users", new Integer(users));
}
public void contextInitialized(ServletContextEvent arg0) {
//服务启动后创建ServletContex时触发
this.context = arg0.getServletContext();
System.out.print("ServletContext初始化了"); }
public void contextDestroyed(ServletContextEvent arg0) {
System.out.print("ServletContext被销毁");
this.context = null; }}
<listener>
<listener-class>com.Listener</listener-class>
</listener>
我认为在Context中维护一个变量就可以了,没必要每次都在数据库中更新
只需在服务关闭前写入,在服务启动时再重新读入作为计数器的初始值就可以了
package list;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());
}
}