jsp中使用javabean的两点注意事项
首先一点:javabean一定要放在命名包里,不能放在默认包里,也就是在bean文件的开头要package pname;了,如果不放在命名包里而放在了默认包里,最后将报如下这样的错误:
org.apache.jasper.JasperException: Unable to compile class for JSP:
An error occurred at line: 18 in the jsp file: /javabean.jsp
TempBean cannot be resolved to a type
原因:java现在已经不允许命名包里的类调用默认包里的类了,也不允许在命名包里使用import classname(这个是默认包里的类)来引用默认包里的类了,所以才会出现以上问题。拿tomcat来说,它是先将jsp文件转换成java文件,然 后再将其编译成class文件来使用,但是tomcat转换成的java文件是定义在一个包里的,这个可以在tomcat的work目录中的java文件 中看到,所以如果javabean放在默认包里的话,因为java本身的语言规范定义,jsp生成的java文件就无法使用javabean了。我觉得也 由此可以得出,在jsp网页中以各种形式来使用放在默认包里的java类,都可能会引起编译错误,所以在jsp项目中,所有的类应该都放到自己相应的包 里,不要使用默认包。但是这里也有一个比较诡异的问题,虽然按JAVA规范说的是那样,但是如果在jsp网页中使用了默认包的类,只要把它用到的默认包的 class文件考到tomcat的work目录中的相应文件夹下,就不会发生上面所说的编译错误而能正常运行,至于原因是什么我也搞不懂,不太清楚 tomcat对类的搜寻机制。反正为了确保不出错误,还是把类放在命名包中,不要使用默认包就好。
第二点,就是在使用jsp:setProperty,jsp:getProperty这样的标签的时候,它的 property属性一定要用小写,不管javabean里的属性名的大小写如何,这里一定要写小写,不然就报什么Cannot find any information on property 'Msg' in a bean of type 'test.TestBean'之类的错误。
至于其他的基本上就是标准的javabean使用了,什么要有公共无参的构造函数,还有各个属性要有set/get方法,还有javabean要是一个public类。就这些吧!