问题现象:
jsp报错JspException:Unable to find a value for “xxx” in object of class “xxx” using operator “.” (null)
很明显是因为jsp中引用的属性值,无法获取,所以报错。但是我打开jsp文件,在jsp文件却搜索不到这个属性。很奇怪,不是吗?
问题原理
tomcat有一个work目录,里面存放了页面的缓存,访问的jsp都会编译(从 work里进入Catalina后的如localhost站点文件夹下的项目,我们可以看到那些jsp页面会被编译成应该是servlet文件,下次再来 访问时,就直接运行servlet类就可以向客户端反应响应页面了,一旦编译好,那么除非jsp页面修改,不然下次访问直接运行servlet就可以响应用户),**编译后的文件都会存储在work目录下。**而tomcat显示的目录,都会从这个缓存里找编译后的jsp对应的class文件。所以当清空了work目录后,该过程将会从新来过。
tomcat会定时稍描容器内的jsp文件,读取每个文件的属性,当发现某个jsp文件发生改变时(文件的最后修改时间与上次稍描时不相同时),tomcat会重新转换、编译这个jsp文件。但是tomcat的稍描是定时的不是实时的,这也正是为什么jsp文件修改后需要几分钟的时间来等修改过的jsp生效。当然为了即刻生效,我建议在修改jsp页面后立即清除work目录里的文件
临时解决方法:
**有的时候会遇到一个问题,就是修改后的页面在tomcat运行的时候显示不了修改后的痕迹。这个时候删除work目录下对应的项目文件夹,重新启动tomcat就可以了。**
终极解决方法
一、
在安装的tomcat路径下创建独立配置文件。
创建一文件:Tomcat\conf\Catalina\localhost\testapp.xml
内容为:
重启Tomcat
二、
直接在tomcat 的配置文件conf/server.xml中添加内容如下:
注意是在标签下添加;
重启Tomcat