急等有一个有效的例子!!
3个100分的帖子有效的!
3个100分的帖子有效的!
解决方案 »
- 怎样捕获404错误?就是资源不存在错误
- 模式对话框设置的大小无效
- Struct2 textfield不能正确显示包含“`”符号的值
- Help me!:request.parameter("")方法始终获取不到某一个页面form的name值
- 禁止重复登录,在踢出之前的那个session时,怎样给之前那个session对应的用户弹出IE提示对话框
- 不知道为什么,接口加载不进去!
- 关于Statment的属性写法?
- 如何着手做一个影院系统,大家都进来说说。
- 连接数据库问题
- smooks谁知道怎么从其他文件类型转成edi
- ●●●●●●●怎么设置frameset的高度?
- java.lang.NoClassDefFoundError: org/apache/log4j/Layout
http://community.csdn.net/Expert/topic/5509/5509437.xml?temp=.8490564
* 实现在线注册用户数量和用户名字监听
* 从而查询到在线用户的名字列表.
* 此类实例的作用域应为application
* @author lichuxiong
*/
package arch.listener;import javax.servlet.http.*;
import javax.servlet.*;
import java.util.Vector;public class OnLineUser implements HttpSessionBindingListener{
private static Vector users=new Vector();
public OnLineUser(){}
/**
* 加入session时处理
*/
public void valueBound(HttpSessionBindingEvent e){
users.trimToSize();
if(!existUser(e.getName()))
users.add(e.getName());
}
/**
* 从session中移除时处理
*/
public void valueUnbound(HttpSessionBindingEvent e) {
users.trimToSize();
String userName=e.getName();
deleteUser(userName);
}
/**
* 返回注册登陆的用户数量
* @return
*/
public int getCount(){
users.trimToSize();
return users.capacity();
}
/**
* 判断用户是否已经登陆
* @param userName
* @return
*/
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;
}
/**
* 退出时删除用户
* @param userName
* @return
*/
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;
}
/**
* 获得用户向量,实现在线用户昵称查询
* @return
*/
public Vector getOnLineUser(){
return users;
}
/* public static void main(String[] args){
OnLineUser users=new OnLineUser();
System.out.println(users.getCount());
}*/
}
* @author lichuxiong
* 记录用户在线人数类(游客和登陆系统的用户全部统计)
*/
package arch.listener;import javax.servlet.*;
import javax.servlet.http.*;public class UserListener implements HttpSessionListener,ServletContextListener {
private static int count=0;
private ServletContext context=null;
public UserListener(){
count=0;
}
/**
* session创建时运行
* @param se
*/
public void sessionCreated(HttpSessionEvent se){
count++;
setContext(se);
}
/**
* session销毁时执行
* @param se
*/
public void sessionDestroyed(HttpSessionEvent se){
count--;
if(count<0)count=0;
setContext(se);
}
/**
* 把用户数保存到对所有用户共享的ServletContext中
* @param se
*/
public void setContext(HttpSessionEvent se){
se.getSession().getServletContext().setAttribute("onLine", new Integer(count));
}
/**
* context销毁时激发
*/
public void contextDestroyed(ServletContextEvent event){
this.context=null;
}
/**
* context初使休时激发
*/
public void contextInitialized(ServletContextEvent event){
this.context=event.getServletContext();
}
}
<listener-class>arch.listener.UserListener</listener-class>
</listener>
页第一个OnLineUser 类就不用在web-xml中配置,只要在登录时加入此对象到session中即可如:
<jsp:useBean id="onLineUser" class="arch.listener.OnLineUser" scope="page"/>
第二步:
session.setAttribute(username,onLineUser);//以当前登录用户的名字加入监听对象中
其它的自己慢慢想吧
现在也没法细说,实在对不起了
即使如此,我发的第一个也不能达到精确计数,比如一个人关闭IE后再来此网站可能就会再记一个用户,有人提出控制session的有效时间,但这个想法实在太烂了.但不这样又很难精确计数.
所以折中处理吧,不一定要精确的。
lichuxiong() 提供的方法来对文件进行操作。文件其实也不合适,要是可以的话,到可以用一个数据库表来记录这些东西 ,只要一个查询就可以了。