The value for the useBean class attribute XXX is invalid 异常绝对详解释
(2008-03-22 17:03:48)
Tomcat 对javabean的报错问题:
网上的一般看起来比较权威的解释是--------------------------------
先看一下普遍的答案;
1. 在编译 JSP 时,指定的 Bean 类没找到
2. Bean 虽然找到了,但是该类不是 public 的,或者找到的 class 文件是 interface 或抽象类
3. Bean 类中没有 public 的无参数构建函数
第二点很明显,不用多解释,最经常遇到的情况是 Bean 类忘了声明为 public 。
第三点中需要注意的是,如果你的 Bean 类没有提供任何构造函数,将自动生成一个默认构建函数,这没有问题。如果你有构造函数,则不会自动生成该默认构造函数。另外经常忽略的问题是写了默认构造函数却不是 public 的。
第一点看起来简单,不过却最麻烦,尤其是在开发环境里。这里需要注意的是,“在编译 JSP 时”,这意味着引用 Bean 的 JSP 是新的,或者刚刚更新过, Tomcat 将自动(重新)编译该 JSP,此时如果发现 Bean 没找到,就会报这个错。但情况因为 JSP 或者 Bean 正在开发而变得复杂,这里不会一一列举所有情况,只举一些典型例子,具体情况需具体分析。如果 JSP 没变, Tomcat 不会重新编译 JSP,同时默认情况也不会自动重新加载更新过的 Bean 类(参考 http://jakarta.apache.org/tomcat/tomcat-5.5-doc/config/context.html 中的 reloadable),所以,你会发现即时删除了 Bean 类都没有问题,当然,更新 Bean 类也不会有什么用。如果在 JSP 编译产生之后,我们重起了服务器,由于 JSP 文件编译的结果存在(TOMCAT_HOME/work 中),所以,可以访问 JSP 页面。可是如果访问前,删掉了 Bean 类,就会报过 ClassNotFoundException 而不是上述错误。不同点在于 JSP 是否经过编译,没有编译则没有找到类报告题目中的编译错误,编译过则是 ClassNotFoundException。
解决第三个问题的最简单办法就是停止服务器,确认你的 JSP 和 Bean 正确部署(也可以启动后部署),清理掉 TOMCAT_HOME/work 中的内容,重起服务器。
2. Bean 虽然找到了,但是该类不是 public 的,或者找到的 class 文件是 interface 或抽象类
3. Bean 类中没有 public 的无参数构建函数
第二点很明显,不用多解释,最经常遇到的情况是 Bean 类忘了声明为 public 。
第三点中需要注意的是,如果你的 Bean 类没有提供任何构造函数,将自动生成一个默认构建函数,这没有问题。如果你有构造函数,则不会自动生成该默认构造函数。另外经常忽略的问题是写了默认构造函数却不是 public 的。
第一点看起来简单,不过却最麻烦,尤其是在开发环境里。这里需要注意的是,“在编译 JSP 时”,这意味着引用 Bean 的 JSP 是新的,或者刚刚更新过, Tomcat 将自动(重新)编译该 JSP,此时如果发现 Bean 没找到,就会报这个错。但情况因为 JSP 或者 Bean 正在开发而变得复杂,这里不会一一列举所有情况,只举一些典型例子,具体情况需具体分析。如果 JSP 没变, Tomcat 不会重新编译 JSP,同时默认情况也不会自动重新加载更新过的 Bean 类(参考 http://jakarta.apache.org/tomcat/tomcat-5.5-doc/config/context.html 中的 reloadable),所以,你会发现即时删除了 Bean 类都没有问题,当然,更新 Bean 类也不会有什么用。如果在 JSP 编译产生之后,我们重起了服务器,由于 JSP 文件编译的结果存在(TOMCAT_HOME/work 中),所以,可以访问 JSP 页面。可是如果访问前,删掉了 Bean 类,就会报过 ClassNotFoundException 而不是上述错误。不同点在于 JSP 是否经过编译,没有编译则没有找到类报告题目中的编译错误,编译过则是 ClassNotFoundException。
解决第三个问题的最简单办法就是停止服务器,确认你的 JSP 和 Bean 正确部署(也可以启动后部署),清理掉 TOMCAT_HOME/work 中的内容,重起服务器。
==========================================================================
什么找不到 class了,目录只类的问题发生的几率是非常小的
因为jsp最基础的的开发环境是Tomcat+myeclipse
上述问题在myeclipse里面基本不会发生 就算发生 只要删除服务起里面的目录再
导入,操作十分简便
这个问题还要从N天说起,我们刚开始学jsp老师让写一个简单的购物网站,
一切都很顺利,可是今天在做注册页面的时候发生了上述问题,
<code>------------------
<%@ page import="file.User_info"%>
1.<jsp:useBean id="Con_Db" scope="page" class="file.Con_Db"></jsp:useBean>
2.<jsp:useBean id="user_info" scope="page" class="User_info">
3.<jsp:setProperty name="user_info" property="*"/>
</jsp:useBean>
2.<jsp:useBean id="user_info" scope="page" class="User_info">
3.<jsp:setProperty name="user_info" property="*"/>
</jsp:useBean>
提示2.里面的User_info有问题
在所有 的途径都测试后,真的让人崩溃呀.么有办法,就去baidu了
一看-------晕倒,千篇一律--------------怀疑------------
Tomcat的目录我都看了好多遍了,决度没有问题,就当世界仿佛都离我而去的时候我发现了一个问题---------------
<jsp:useBean id="user_info" scope="page" class="User_info">
class=后面我是第一次这样写,因为,在我写file.回车后myeclipse自己生成了上述语句,以前我总是觉得都page指令中加太多的import很影响美观,所以总是把路径写在上面,而这次,小小的情绪改变了很多,
class=后面我是第一次这样写,因为,在我写file.回车后myeclipse自己生成了上述语句,以前我总是觉得都page指令中加太多的import很影响美观,所以总是把路径写在上面,而这次,小小的情绪改变了很多,
将上述代码改为
<code>----------------------------
<jsp:useBean id="user_info" scope="page" class="file.User_info">
<code>--------------------
写上路径------------
测试通过,
我想这只是一种技巧,在理论上不可能出错的地方出了错,不排除是myeclipse在本次处理的过程中发生了一点小小的问题,因为在这种地方出现问题简直是天方夜谈
我想这只是一种技巧,在理论上不可能出错的地方出了错,不排除是myeclipse在本次处理的过程中发生了一点小小的问题,因为在这种地方出现问题简直是天方夜谈
=============================
再此我感叹一下:
qq:470852080;
E-mail:Starsecond@126.com