我只是遇到了同样的问题,并且一直在试图找出问题所在。
我从头开始开发了许多网络应用程序。这个怎么突然不合作了?
不同之处在于这次我使用了 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 标头之一,重新构建并重新部署。没有雪茄。不敢相信这不是问题所在。清理项目,重新启动tomcat。没有。
RHSeeger 的回答让我尝试放入 <%@ 页面 isELIgnored="false" %>。这解决了问题。但我仍然想知道为什么 el 一开始就开始被忽视。
我认为 el 被忽略是因为我的 web.xml 有问题,所以我仔细检查了它,并与另一个我知道工作正常的 webapp 的 web.xml 进行了比较。没有明显的差异。
然后我从我的 JSP 中删除了 <%@ page isELIgnored="false" %> 并重新部署,假设不会再次评估 el,但令我惊讶的是,el 评估得很好!
然后,确定它一定是某种缓存问题,我撤消了对 web.xml 的更改以重新创建问题。我重新部署了,但仍然对 el 进行了正确评估,即使 web.xml 有问题。然后我清理了我的整个项目(我正在使用展开的部署),吹走展开的目录并重新创建它。然后我重新启动了tomcat。尽管如此,尽管 web.xml 不好,el 似乎得到了正确的评估。
终于让我明白了。我只是在 JSP 中的某个地方添加了一个空格,重新打包它,然后刷新了页面。答对了!现在 el 没有得到评估。
所以问题出在web.xml 上。除非 JSP 发生更改,否则不会重新编译,这会使情况变得更加复杂。不确定 tomcat 是否使用 MD5 和来决定是否需要重新编译 JSP 或什么。另一种可能性是我正在使用瓷砖,我知道它有一个缓存机制,但我不希望它能够在 tomcat 重新启动后继续存在。
无论如何,除非您在修复 web.xml 之后修改您的 JSP,否则关于 EL 是否会再次开始工作的所有赌注都将失败。希望这可以避免其他人头疼。如果有人能告诉我是tomcat没有重新编译JSP还是缓存JSP的输出,我也很感兴趣。我很确定这是重新编译,因为在编译时 JSP 必须弄清楚如何处理 ${} el 表达式,对吧?Tiles 不能真正缓存被替换到 el 表达式中的内容,否则会出现各种问题。