【问题标题】:Expression Language skip identifier check in tomcat 7表达式语言在tomcat 7中跳过标识符检查
【发布时间】:2013-03-31 18:30:32
【问题描述】:

我收到以下错误:

SEVERE: Servlet.service() for servlet jsp threw exception
javax.el.ELException: The identifier [case] is not a valid Java identifier as required by section 1.19 of the EL specification (Identifier ::= Java language identifier). This check can be disabled by setting the system property org.apache.el.parser.SKIP_IDENTIFIER_CHECK to true.

这是由于在 tomcat 7 中默认 SKIP IDENTIFIER CHECK 功能为假(在 tomcat 6 及以下版本中为真),我在正则表达式中使用“case”,而 case 是标识符,所以它抛出错误。

我找到了以下解决方案: javax.el.ELException: The identifier [return] is not a valid Java identifier

但这对我不起作用,因为我不想更改我的代码。所以我想要将 tomcat 7 配置为 SKIP IDENTIFIER CHECK 为 true 的解决方案。

即使经过大量的谷歌搜索,我也没有找到办法做到这一点。我正在使用eclipse juno和tomcat 7,请帮我考虑一下。

【问题讨论】:

  • 我认为您需要强制修复。就个人而言,我会对所有包含违规文本的 .jsp 文件进行文件搜索。然后,我将使用搜索结果系统地将每个实例替换为适当的 param['myParam'] 版本。最后,我会重新运行文件搜索以确保没有遗漏任何内容。我过去曾重构过这样的代码,一旦你掌握了节奏,它通常会很快。
  • 是的@CodeChimp,这是我的最后一个选择,但我需要在项目的某些模块中更改它,因为现在我没有时间这样做,这个错误是因为我更改了我的 tomcat 6 to tomcat 7. 我想要问题中描述的解决方案。
  • 我认为没有解决方案。您正在使用一个关键词,这在技术上一开始是错误的。 Tomcat 7 似乎只是关闭了问题的大门。您的选择是花一个小时进行搜索和替换或再次备份到 TC6。
  • 参考这个tomcat.apache.org/tomcat-7.0-doc/config/systemprops.html,在文档中他们已经指定了那个参数,我想知道我必须在哪里设置这个参数。
  • 我猜是 catalina.properties,因为它是 Tomcat 中唯一能想到的属性文件。

标签: java eclipse tomcat


【解决方案1】:

例如,如果您使用的是 Eclipse,则必须在 Servers 文件夹中的 catalina.properties 中添加以下行(在 Package Explorer 中查找,然后选择相应的 Tomcat 文件夹):

org.apache.el.parser.SKIP_IDENTIFIER_CHECK=true

请记住,Eclipse 使用不同的位置进行配置,而不是 CATALINA 原始目录。

值得看看 Tomcat 的属性页面,https://tomcat.apache.org/tomcat-7.0-doc/config/systemprops.html

【讨论】:

    【解决方案2】:

    终于找到了eclipse的解决方案。将以下行添加到我指定的位置

    -Dorg.apache.el.parser.SKIP_IDENTIFIER_CHECK=true
    

    请看下面的逐步图片

    STEP 1 :
    

    STEP 2 :
    

    STEP 3 :
    

    干杯。 :)

    【讨论】:

      【解决方案3】:

      我在将当前的应用程序迁移到 Tomcat 7 时遇到了同样的问题(jsf 1.2 with ice faces 1.8.2)。我已经通过在下面包含一个名为 setenv.bat 的 bat 文件来解决它 里面的内容。 'SET CATALINA_OPTS=%CATALINA_OPTS% -Dorg.apache.el.parser.SKIP_IDENTIFIER_CHECK=true'

      我已将它包含在 TomcatInstallationDirectory/bin 中。

      由 catalina.bat 文件读取。在下面一行 '调用“%CATALINA_BASE%\bin\setenv.bat”'.

      因此我的 jspx 页面被正确呈现

      我通过tomcat浏览了以下文档:

      https://tomcat.apache.org/tomcat-7.0-doc/RUNNING.txt

      请发布您提出的所有解决方案

      【讨论】:

        【解决方案4】:

        我们也可以在tomcat_home目录/bin下的catalina.sh文件中添加如下命令

        CATALINA_OPTS="-Dorg.apache.el.parser.SKIP_IDENTIFIER_CHECK=true"

        【讨论】:

          【解决方案5】:

          在 CATALINA_HOME/bin 中创建一个 setenv.[bat|sh] 文件(即与所有其他脚本一起)并在该文件中设置系统属性。在 Windows 上,您将使用以下内容创建 setenv.bat:

          SET CATALINA_OPTS=%CATALINA_OPTS% -Dorg.apache.el.parser.SKIP_IDENTIFIER_CHECK=true
          

          在 Linux 上,您将使用以下内容创建 setenv.sh:

          export CATALINA_OPTS="$CATALINA_OPTS -Dorg.apache.el.parser.SKIP_IDENTIFIER_CHECK=true"
          

          您可以重复这些行(更改系统属性名称)以在同一个 setenv.[bat|sh] 文件中设置多个系统属性。

          【讨论】:

          • 感谢您的回复,我使用的是windows,我的tomcat位于D:/Tomcat 7/位置,您能告诉我必须在哪里创建这个bat文件吗?在 Config 文件夹中还是在哪里?
          • 我已按照您的指定在 bin 目录中创建了 bat 文件,但我仍然收到相同的“javax.el.E​​LException”错误
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-03-20
          • 2012-05-06
          • 2011-01-13
          • 1970-01-01
          • 1970-01-01
          • 2012-06-11
          • 1970-01-01
          相关资源
          最近更新 更多