jsp中使用javabean的两点注意事项
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类。就这些吧!唉,头疼!
相关文档:
JSP基本语法
大部分JSP被一个以“<%” 开头和以“%>”结尾的的标记括在其中。在更新的JSP 1.1规范出台后,就有了与XML兼容的版本。
JSP指令和脚本元素
Directives <%@ directive %>
Declarations <%! declaration %>
Expressions <%= expression %>
Code Fragment/ ......
1.添加 host 块
每一个JSP虚拟主机有它自己的 host 块。每一个至少要定义id来指定虚拟主机的名字和一个root应用程序。一个 <root-directory>通常用来为主机定一个默认的web应用程序。
配置文件片段:
<server>
<host id='gryffindor.caucho.com'>
<root-directory>/home/www/gryf ......
在JSP中的如果使用 "相对路径" 则有可能会出现问题.
因为 网页中的 "相对路径" , 他是相对于 "URL请求的地址" 去寻找资源.
上面这句话是什么意思呢 ?
举个例子:
假如我们有一个项目: MyApp
在该项目下, 有一个jsp文件夹
该文件夹下包括:
login.jsp // ......
ServletContext 被 Servlet 程序用来与 Web 容器通信。例如写日志,转发请求。每一个 Web
应用程序含有一个Context,被Web应用内的各个程序共享。因为Context可以用来保存资源并且共享,所以我所知道的
ServletContext 的最大应用是Web缓存----把不经常更改的内容读入内存,所以服务器响应请求的时候就不需要进行慢速的磁 ......