首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

实在没办法了郁闷中。jsp调用javaBean出错,哪出有关问题了

2013-09-11 
实在没办法了郁闷中。jsp调用javaBean出错,请高手看看哪出问题了在csdn上找了个统计在线人数的javaBean,但

实在没办法了郁闷中。jsp调用javaBean出错,请高手看看哪出问题了
在csdn上找了个统计在线人数的javaBean,但是引用的地方就报错,搞了一个小时没搞定,高手看看是哪的问题?
/*
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());  
        }    
}


/*
调用页面onLineUser.jsp
*/
<%@page   contentType= "text/html;   charset=gb2312 "   language= "java "   errorPage= " "%>  
<%@page   import= "java.util.* "%>
<html>
<jsp:useBean   id= "onlineuser "   scope= "application "   class= "onLineUser "   type= "onLineUser "> </jsp:useBean>
<head>    
<title> 122 </title>
</head>  
<body>    
<center>    
    <p> <h1> 333 </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> ");  
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>
<%  
out.println( " <p> <a   href= 'logout.jsp?username= "+username+ " '> 退出系统 </a> </p> ");  
%>  
</center>    
</body>    
</html>

/*
出错信息
*/

严重:   Servlet.service()   for   servlet   jsp   threw   exception
org.apache.jasper.JasperException:   Unable   to   compile   class   for   JSP

An   error   occurred   at   line:   4   in   the   jsp   file:   /onLineUser1.jsp
Generated   servlet   error:
onLineUser   cannot   be   resolved   or   is   not   a   type

An   error   occurred   at   line:   4   in   the   jsp   file:   /onLineUser1.jsp
Generated   servlet   error:
onLineUser   cannot   be   resolved   or   is   not   a   type

An   error   occurred   at   line:   4   in   the   jsp   file:   /onLineUser1.jsp
Generated   servlet   error:
onLineUser   cannot   be   resolved   or   is   not   a   type


at   org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:84)
at   org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:328)
at   org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:397)
at   org.apache.jasper.compiler.Compiler.compile(Compiler.java:288)
at   org.apache.jasper.compiler.Compiler.compile(Compiler.java:267)
at   org.apache.jasper.compiler.Compiler.compile(Compiler.java:255)
at   org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:556)
at   org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:293)
at   org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
at   org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
at   javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at   org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)


at   org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at   org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at   org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at   org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at   org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at   org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at   org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at   org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856)
at   org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:744)
at   org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at   org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at   org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at   java.lang.Thread.run(Unknown   Source)
/*
运行环境
*/

tomcat5.5
jdk1.5.0_05

请高手帮忙看看

[解决办法]
这是一个HttpSessionBindingListener
目的是在session.setAttribute的时候自动记数
在session.removeAttribute的时候减数
通过一个Vector来保存
但是这个程序似乎问题多多啊

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()+ "已经存在 ");
}

这里在session.setAttribute的时候想要记录用户名
但是users.add(e.getName()); 这里记录的e.getName()实际上却是attribute的名字
实际上这个程序做的是在每次往session里面设置attribute的时候看看这个attribute名字是否存在,如果不存在就记录这个attribute name。如果要做计数器应该记录的是对应用户名的那个attribute value

其实users不必用Vector,用Set就行了,最好设置为static

这个HttpSessionBindingListener在web.xml里面配置好就可以了
不需要在jsp页面多做什么
[解决办法]
高深,看一下飘过,楼下继续,学习..
[解决办法]
请楼主检查一下 tomcat5.5的jsp compiler与jdk1.5.0_05 是否兼容.
用jdk1.5.0_05写个简单的jsp放在tomcat5.5中看是否可以跑
[解决办法]
用jdk1.5.0_05写个简单的class放在tomcat5.5中看是否可以跑

[解决办法]
我试过了,写了个简单的class都能运行
HttpSessionBindingListener要在web.xml做配置?具体要怎么做?
请vdragon(紫龙)说清楚点,谢谢



[解决办法]
HttpSessionBindingListener不需要在web.xml中配置!把你的onLineUser.java加上包名!
[解决办法]
补充:users.add(e.getName()); 这句没有问题,他得到的就是用户名。因为在登录的时候需要把实现SessionBindingListener接口的一个对象作为属性的值存入session,而对应的属性名是用户名。即:
SessionBindingListener oSessionBindingListener = new SessionBindingListener();
session.setAttribute(sUID,oSessionBindingListener);
楼主没有把这部分代码贴出,我不知道你是否这么做了,如果没有那是没有效果的。这个代码在网上流传很广,在监控在线名单、单点登录方面效果还是不错的。

[解决办法]
<listener>
<listener-class> onLineUser </listener-class>
</listener>


这个程序根本没实现他声称的在线统计人数的功能
你要使用的话需要自己去修改很多地方
------解决方案--------------------


to pczhouji(咱也进城了):

我猜你可能搞错了HttpSessionBindingListener的用法了
这个Listener在web.xml里面声明以后
整个context运行期间所有对session.setAttribute和session.removeAttribute方法的调用都会由服务器去自动调用listener.valueBound和listener.valueUnbound方法
而参数HttpSessionBindingEvent的getName得到的是attribute name,getValue得到的是attribute value对象

使用Listener的好处是可以由服务器对session attribute进行监控,不需要在servlet/jsp中做其他特别的处理
[解决办法]
楼上,这个监听器不需要在web.xml里声明的,我估计你没有实际用过。这段代码没有问题,我现在一直用的跟这个大同小异。当然,你说的有一点是对的,存放在线用户名单的那个容器,Vector也好,Hashtable也好,必须是static的。
[解决办法]
楼上

我确实没有这样用过Listener。一般对Listener的使用我都是在web.xml里面声明
而且把listener放到session的attribute的做法确实以前没有见过
感觉比较怪异

我觉得不如修改这个listener
在valueBound和value unBound的时候
判断e.getName
假如是loginName(记录用户登陆时的用户名时,用的session attribute name)
则将e.getValue加入在线用户列表中或从在线用户列表中删除
这样其他的代码不需要在对这个listener进行操作
只需要在用户登陆的时候用session.setAttribute( "loginName ", userLoginName)就可以了
[解决办法]
所有的 bean 文件一定要放在包中,否则无法调用.
[解决办法]
to紫龙兄:呵呵,HttpSessionBindingListener是所有Listner中唯一不需要在web.xml中声明的,准确的说应该是声明了也不起作用吧。要触发它的valueBound()或者valueUnbound()方法,就必须把它的实例加入HttpSesion对象的属性或从HttpSesion对象的属性移除。的确是比较独特,我想这也是 "Binding "的体现吧。
[解决办法]
to pczhouji(咱也进城了)
确实没有遇到过这种情况
回去试试先
我的异常网推荐解决方案:org.apache.jasper.JasperException: Unable to compile class,http://www.myexception.cn/j2ee/2308.html

热点排行