一尘不染

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

jsp

最近,我将开发tomcat从7.0.0升级到7.0.4。我有这样的事情:

<c:set var="static" value=".." />
<c:set var="class" value=".." />

两者都在7.0.0上运行,但停止在7.0.4上运行。我打开了一个错误,将其关闭,其答案是:

该标签本身将进行编译。

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

这听起来还不太清楚,但是我没有得到后续的答案,因此我查看了EL规格。对于JSP 2.1(最新版本是2.2),我发现:

第1章,第21页:标识符被限制为Java标识符-例如,no-,no /等。

这是我发现的最多的东西。我将以适用于Java标识符的语法要求而不适用保留字的方式来阅读此行(因为nighter
class也不会static出现在EL的保留字列表中)。JLS没有用“
Java标识符”一词来指代(并且在2.2规范中的某些其他情况下,我没有完整介绍过)

因此,Tomcat有权拒绝这些名称吗?他们指的是规范的哪一点,您认为他们在正确地解释它。


阅读 284

收藏
2020-06-08

共1个答案

一尘不染

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

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

public int static = 7;

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

2020-06-08