最近我将我的开发tomcat从7.0.0升级到7.0.4。我有类似的事情:
<c:set var="static" value=".." />
<c:set var="class" value=".." />
两者都在7.0.0上工作但在7.0.4上停止工作。我opened a bug,它被关闭了,答案是:
就其本身而言,该标签将被编译。
对Java标识符的检查已添加到EL处理中,所以我怀疑 你在页面的其他地方有一些非法的EL。
这听起来不太清楚,但我没有得到后续的答案,所以我查看了EL规格。对于JSP 2.1(最新版本为2.2),我发现:
第1章,第21页:标识符被限制为Java标识符 - 例如,no - ,no /等。
这是我发现的最多。我会以适用于java标识符的语法要求适用的方式阅读此行,但不应用保留字(因为更明确的class
也static
出现在EL中的保留字列表中)。 JLS没有被称为术语“Java标识符”(并且它适用于2.2规范中的其他一些情况,我没有完全回顾)
那么,Tomcat是否有权拒绝这些名字;他们指的是哪个规范,你认为他们正确地解释了它。
答案 0 :(得分:5)
规范说标识符仅限于在Java中有效的标识符。
static
和class
都是Java关键字,因此不可能是有效的标识符。例如,你不能这样写:
public int static = 7;
因此static
和class
都不是有效的标识符。
答案 1 :(得分:3)
1.14保留字
以下字词是为该语言保留的,不得用作 标识符
and eq gt true instanceof or ne le false empty not lt ge null div mod请注意,许多这些单词现在不在语言中,但它们可能在 未来,开发人员必须避免使用这些词语。
我没有看到static
,class
等.Tomcat 7.0.4 中的这种变化对我来说不是。