为了账号安全,请及时绑定邮箱和手机立即绑定

Tomcat 使用 Java 8 SDK 但不会编译具有 Java 8 语言功能的 JSP。

Tomcat 使用 Java 8 SDK 但不会编译具有 Java 8 语言功能的 JSP。

拉风的咖菲猫 2023-02-23 14:30:02
我想我正在查看当前问题的 Tomcat 配置问题。我正在为 Tomcat 8.5.8 开发 Java Servlet 和 JSP 应用程序,并且已经开始使用 Java 8 语言功能(特别是方法引用和流)。在我运行 jdk1.8.0_211 的本地机器上,新代码可以正常工作,在运行时按预期方式编译 JSP。在我们的测试服务器 (RH Linux) 上,新的 JSP 无法编译(但应用程序的其余部分可以运行)。错误是org.apache.jasper.JasperException: Unable to compile class for JSP: An error occurred at line: 135 in the jsp file: /jsp/directory/page.jspMethod references are allowed only at source level 1.8 or above我自己没有设置服务器,但它运行了一些 Java 8 版本,并且具有相同的 Tomcat 版本(8.5.8),所以我怀疑某处有一个配置文件告诉它以旧语言编译 JSP等级。(证据是它知道方法引用是什么但拒绝编译它;一个异常而不是一个错误。)告诉 Tomcat 在旧语言级别编译 JSP 的配置可能隐藏在哪里?
查看完整描述

2 回答

?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

根据https://tomcat.apache.org/tomcat-8.0-doc/jasper-howto.html

实现 Jasper 的 servlet 使用全局 $CATALINA_BASE/conf/web.xml 中的初始化参数进行配置。

compilerSourceVM - 源文件与哪个 JDK 版本兼容?(默认值:1.7) compilerTargetVM - 生成的文件与哪个 JDK 版本兼容?(默认值:1.7)

举个例子,如果你的web.xml文件包含如下代码,它会将JSP编译到1.8语言级别:

<servlet>
    <servlet-name>jsp</servlet-name>
    <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>

    <init-param>
        <param-name>compilerSourceVM</param-name>
        <param-value>1.8</param-value>
    </init-param>
    <init-param>
        <param-name>compilerTargetVM</param-name>
        <param-value>1.8</param-value>
    </init-param>

    <init-param>
        <param-name>fork</param-name>
        <param-value>false</param-value>
    </init-param>
    <init-param>
        <param-name>xpoweredBy</param-name>
        <param-value>false</param-value>
    </init-param>
    <load-on-startup>3</load-on-startup>
</servlet>


查看完整回答
反对 回复 2023-02-23
?
缥缈止盈

TA贡献2041条经验 获得超4个赞

我在使用 JDK1.8 和 Tomcat9.0 时遇到了这个问题,并浏览了所有谷歌。

我的解决办法:重装Tomcat9,非常非常清楚,Start Ok!

Tomcat 中的某些东西崩溃了,我们不知道!!!


查看完整回答
反对 回复 2023-02-23
  • 2 回答
  • 0 关注
  • 88 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信