CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  Web 开发

监听 使用的几个问题?盼解答....谢哦

楼主lndlzcy(落日弓)2004-12-03 22:58:01 在 Java / Web 开发 提问

在网上找到个监听的例子,在使用过程(想实现限制重复登陆)却中遇到几个问题:  
   
  package   aaa;  
   
  import   java.util.Date;  
  import   java.util.Vector;  
   
  import   javax.servlet.http.HttpSessionBindingEvent;  
  import   javax.servlet.http.HttpSessionBindingListener;  
     
  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)     {     //session失效时会激活valueUnbound事件  
        users.trimToSize();      
        String     userName=e.getName();      
        deleteUser(userName);      
        System.out.print(userName+"\t             退出系统\t"+(new     Date()));      
        System.out.println("                         在线用户数为:"+getCount());      
        }      
  }    
   
  ---------------------------------------  
  在web.xml中配置如下:  
  <listener>  
  <listener-class>aaa.OnLineUser</listener-class>  
  </listener>  
  问题1:该类是否是一个servlet,是否需要在web.xml中定义如下:  
  <servlet>  
  <servlet-name>OnLineUser</servlet-name>  
  <servlet-class>aaa.OnLineUser</servlet-class>  
  </servlet>  
   
  <!--   Mapping   -->  
  <servlet-mapping>  
  <servlet-name>OnLineUser</servlet-name>  
  <url-pattern>/OnLineUser</url-pattern>  
  </servlet-mapping>  
  ----------------------------------------------------------  
  假设有3个jsp,a.jsp为登陆,b.jsp为验证用户成功后的页面,c.jsp为b.jsp的下一级页面,我在b.JSP中使用如下:  
  <jsp:useBean     id="onlineuser"     class="aaa.OnLineUser"     scope="application"/>    
   
  问题2:是否还需要这么定义?  
  继续:  
  <%  
                if(onlineuser.existUser(userID)){  
          response.sendRedirect("errorpage.jsp");  
                }else{      
                            session.setAttribute(userID,onlineuser);          
                }      
  %>  
  这样能实现限制重复登陆,但是...  
   
  问题3:这样定义后,从a.jsp进入b.jsp的过程没有问题,也限制了别的用户登陆,但是问题来了,当我从c.jsp返回到b.jsp时就会提示我该用户正在使用中???  
  遇到这个问题,我该怎么解决?怎么才能使返回没有问题?  
   
  为了解决这个问题,我想在a.jsp对应的servlet中使用这个监听程序(为了避免c.jsp返回出现的问题),但是使用却没有反应?我是这么使用的:  
  OnLineUser   onlineuser   =   new   OnLineUser();  
  *  
  *  
  if(onlineuser.existUser(userID)){  
  message   =   "此用户已存在";  
  doError(req,res,message);  
  }else{  
  session.setAttribute(userID,onlineuser);    
  *  
  *}  
  这又是为啥啊?  
   
  谢谢了啊....了解这方面知识的朋友帮忙解答下啊..... 问题点数:100、回复次数:8Top

1 楼lndlzcy(落日弓)回复于 2004-12-04 11:52:09 得分 0

晕晕...谁都不知?99999啊…………Top

2 楼okitgo(IT浪涛儿)回复于 2004-12-04 14:15:59 得分 40

你要得到每个登陆用户的session的ID号,   用这个ID也加在判断中,如果一个用户的userName相同并且session的ID号也相同,我们不能把他看成是重复登陆!!  
   
  Top

3 楼okitgo(IT浪涛儿)回复于 2004-12-04 14:19:48 得分 0

我写过一个很简单的限制重复登陆程序.  
  用到了application   和session对象再加这个用户的UserName,也句话就搞定了事.  
   
  Top

4 楼lndlzcy(落日弓)回复于 2004-12-04 16:55:09 得分 0

恩,先谢谢你的回复啊...  
  按您的意思,我在判断时加了session的判断:  
  if(session.isNew()   &&   onlineuser.existUser(userID))  
   
  但是没啥用....  
  对了,  
  HttpSessionBindingEvent     e.getName  
  我看了J2EE   API,这么解释的:  
  Returns   the   name   with   which   the   attribute   is   bound   to   or   unbound   from   the   session  
   
  这是返回哪个属性的名字?没理解....Top

5 楼lndlzcy(落日弓)回复于 2004-12-04 18:12:18 得分 0

唉,刷新了N+1遍了,还没更新...Top

6 楼power_zh(专门在技术区灌水赚分)回复于 2004-12-04 22:56:05 得分 30

upTop

7 楼lndlzcy(落日弓)回复于 2004-12-05 10:55:00 得分 0

弄好了  
    private   Vector   users   =   new   Vector();  
  改为:  
    private   static   Vector     users   =   new     Vector();      
   
  郁闷........Top

8 楼jFresH_MaN(十一月的萧邦-夜曲)回复于 2004-12-05 11:04:45 得分 30

呵呵,学习Top

相关问题

  • Oracle多个监听服务的问题,哪位大哥帮忙解答?
  • 高手帮忙解答关于组件监听的问题?小弟先谢了!
  • 急盼解答
  • 极盼解答~~~~
  • 在使用DataGrid时产生了一个奇怪的问题???盼解答!重谢
  • 请问如何使用vc实现对端口监听?
  • 关于使用UDP进行端口监听
  • 使用 TcpListener 怎样才能同时监听多台机子?
  • 如何使用SOCKET控件监听某一端口的UDP包
  • 在Tocmat中使用监听器出错,很奇怪的问题???

关键词

  • 用户
  • vector
  • jsp
  • servlet
  • onlineuser
  • existuser
  • 登陆
  • 问题
  • 使用
  • 限制

得分解答快速导航

  • 帖主:lndlzcy
  • okitgo
  • power_zh
  • jFresH_MaN

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo