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

时间:2010-10-25 21:51:12

标签: java jsp tomcat el

最近我将我的开发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标识符的语法要求适用的方式阅读此行,但不应用保留字(因为更明确的classstatic出现在EL中的保留字列表中)。 JLS没有被称为术语“Java标识符”(并且它适用于2.2规范中的其他一些情况,我没有完全回顾)

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

2 个答案:

答案 0 :(得分:5)

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

staticclass都是Java关键字,因此不可能是有效的标识符。例如,你不能这样写:

public int static = 7;

因此staticclass都不是有效的标识符。

答案 1 :(得分:3)

来自JSP 2.2 EL specification

  

1.14保留字

     

以下字词是为该语言保留的,不得用作   标识符

    and   eq     gt     true   instanceof
    or    ne     le     false  empty
    not   lt     ge     null   div        mod
     

请注意,许多这些单词现在不在语言中,但它们可能在   未来,开发人员必须避免使用这些词语。

我没有看到staticclass等.Tomcat 7.0.4 中的这种变化对我来说不是