Tomcat使用了Java8SDK,但是无法编译具有Java8语言特性的JSP,如何修复?

wkftcu5l  于 2022-12-23  发布在  Java
关注(0)|答案(2)|浏览(146)

我想我目前的问题是Tomcat配置问题。我正在为Tomcat 8.5.8开发一个Java Servlet和JSP应用程序,并且已经开始使用Java 8语言特性(特别是方法引用和流)。在我运行jdk1.8.0_211的本地机器上,新代码可以正常工作,在运行时编译JSP。
在我们的测试服务器(RHLinux)上,新的JSP无法编译(但是应用程序的其余部分可以工作)。

org.apache.jasper.JasperException: Unable to compile class for JSP: 

An error occurred at line: 135 in the jsp file: /jsp/directory/page.jsp
Method references are allowed only at source level 1.8 or above

我没有自己设置服务器,但是它运行一些Java8版本,并且具有相同的Tomcat版本(8.5.8),所以我怀疑在某处存在一个配置文件,该文件告诉它在较旧的语言级别编译JSP。(证据是它 * 知道Method引用是什么 *,但是拒绝编译它;异常而不是错误。)
告诉Tomcat在较旧的语言级别编译JSP的配置可能隐藏在哪里?

kqqjbcuj

kqqjbcuj1#

根据https://tomcat.apache.org/tomcat-8.0-doc/jasper-howto.html
实现碧玉的servlet是使用全局$ Catalina _BASE/conf/web.xml中的init参数配置的。
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>
6l7fqoea

6l7fqoea2#

我在JDK1.8和Tomcat9.0上遇到了这个问题,浏览了谷歌的所有内容。
我的解决方案:重新安装Tomcat9,非常非常清楚,并开始确定!
Tomcat中的一些东西崩溃了,我们不知道!!!

相关问题