我只是遇到了同样的问题,并花了很长时间试图找出问题所在。
我从头开始开发了很多Web应用程序。为什么这个人突然不合作了?
一个不同之处在于,这次我使用 maven webapp 原型来生成项目结构。它创建了一个 web.xml文件,如下所示:
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
</web-app>
一旦我意识到这是我的问题,我就确信我有答案。因此,我复制了一个 2.5 web.xml 标头,重新构建并重新部署。没有雪茄。不敢相信这不是问题所在。清理了项目,重新启动了雄猫。不。
RHSeeger的回答使我尝试输入<%@ 页面isELIgnored=“false” %>。这解决了问题。但我仍然想知道为什么一开始就被忽视了。
我认为 el 被忽略了,因为我的 web.xml出了问题,所以我仔细检查了它与另一个 webapp 的 web 进行比较.xml我知道它工作正常。没有明显的差异。
然后我从我的JSP中删除<%@页面isELIgnored=“false” %>,并重新部署,假设不会再次评估el,但令我惊讶的是,el被评估得很好!
然后,考虑到它一定是某种缓存问题,我撤消了对Web的更改.xml以重新创建问题。我重新部署了,但仍然正确评估了el,即使网络不好.xml。然后,我清理了整个项目(我使用的是分解部署),吹走了分解的目录并重新创建它。然后我重新启动了雄猫。尽管如此,尽管网络很糟糕.xml,但el似乎得到了正确的评估。
终于,我恍然大悟。我只是在 JSP 中的某个位置添加了一个空格,重新打包了它,然后刷新了页面。宾果游戏!现在 el 没有得到评估。
所以问题出在网络.xml。由于JPP除非更改,否则不会被重新编译,这将使情况变得更加复杂。不确定tomcat是否使用MD5总和来决定是否需要重新编译JSP或什么。另一种可能性是我正在使用磁贴,我知道它有一个缓存机制,但我不希望它在tomcat重新启动后幸存下来。
无论如何,除非您在修复Web.xml后修改JPP,否则所有关于EL是否会再次开始工作的赌注都是错误的。希望这能省去别人的头疼。如果有人能告诉我是tomcat没有重新编译JSP还是瓷砖缓存JSP的输出,我也很感兴趣。我很确定这是重新编译,因为在编译时,JSP应该弄清楚如何处理${} el表达式,对吧?切片实际上无法将替换的内容缓存到 el 表达式中,否则会出现各种问题。