Java关键字不允许作为EL标识符

Boz*_*zho 8 java jsp tomcat el

最近我将我的开发tomcat从7.0.0升级到7.0.4.我有类似的东西:

<c:set var="static" value=".." />
<c:set var="class" value=".." />
Run Code Online (Sandbox Code Playgroud)

两者都在7.0.0上工作但在7.0.4上停止工作.我打开了一个bug,它被关闭了,答案是:

就其本身而言,该标签将进行编译.

对Java标识符的检查已添加到EL处理中,因此我怀疑您在页面的其他位置有一些非法的EL.

这听起来不太清楚,但我没有得到随后的答案,所以我看了EL规格.对于JSP 2.1(最新版本为2.2),我发现:

第1章,第21页:标识符被约束为Java标识符 - 例如,no - ,no /等.

这是我发现的最多.我将以适用于java标识符的语法要求适用的方式读取此行,但不应用保留字(因为更新class也不会static出现在EL中的保留字列表中).JLS没有被称为术语"Java标识符"(并且它适用于2.2规范中的一些其他情况,我没有完全查看)

那么,Tomcat是否有权拒绝这些名字; 他们指的是哪个规范,你认为他们正确地解释它.

Vot*_*ple 5

规范说标识符仅限于在Java中有效的标识符.

这两个staticclass是Java关键字,所以不可能是有效的标识符.例如,你不能这样写:

public int static = 7;
Run Code Online (Sandbox Code Playgroud)

因此,这里static也不class是有效的标识符.