Kürzlich habe ich meinen Entwicklungs-Tomcat von 7.0.0 auf 7.0.4 aktualisiert. Ich hatte Dinge wie:
%Vor%Beide haben an 7.0.0 gearbeitet, aber an 7.0.4 nicht mehr gearbeitet. Ich habe einen Fehler geöffnet, der geschlossen wurde, mit der Antwort:
An und für sich wird dieses Tag kompiliert.
Die Prüfungen für Java-Bezeichner wurden der EL-Verarbeitung hinzugefügt, so dass ich vermute Sie haben irgendwo auf der Seite eine illegale EL.
Das klang nicht ganz klar, aber ich bekam keine Antwort darauf, also schaute ich mir die EL-Spezifikation an. Für die JSP 2.1 (die neueste Version 2.2) habe ich folgendes gefunden:
Kapitel 1, Seite 21: Ein Bezeichner wird als Java-Bezeichner festgelegt - z. B. no -, no / etc.
Und das ist das meiste, was ich gefunden habe. Ich würde diese Zeile so lesen, dass die Syntaxanforderungen gelten, die für Java-Bezeichner gelten, nicht aber die reservierten Wörter (da in der Liste der reservierten Wörter in EL die Nachbarn class
und static
erscheinen). Die JLS wird nicht als "Java-Bezeichner" bezeichnet (und für einige andere Fälle in der 2.2-Spezifikation, die ich nicht vollständig überprüft habe)
Also ist Tomcat berechtigt, diese Namen abzulehnen; Auf welchen Punkt der Spezifikation beziehen sie sich, und denken Sie, dass sie es richtig interpretieren?
Die Spezifikation besagt, dass Bezeichner auf Bezeichner beschränkt sind, die in Java gültig wären.
Sowohl static
als auch class
sind Java-Schlüsselwörter und können daher möglicherweise keine gültigen Bezeichner sein. Sie könnten dies beispielsweise nicht schreiben:
Also werden weder static
noch class
auch hier gültige Bezeichner sein.
Aus JSP 2.2 EL-Spezifikation :
1.14 Reservierte Wörter
Die folgenden Wörter sind für die Sprache reserviert und dürfen nicht als verwendet werden Identifikatoren.
%Vor%Beachten Sie, dass viele dieser Wörter jetzt nicht in der Sprache sind, aber sie können in der Sprache sein Zukunft, also müssen Entwickler vermeiden, diese Wörter zu verwenden.
Ich sehe static
, class
usw. nicht. Diese Änderung in Tomcat 7.0.4 ergibt für mich keinen Sinn.