我想我现在的问题是Tomcat的配置问题。我正在为Tomcat 8.5.8开发一个Java和JSP应用程序,并且已经开始使用Java 8语言特性(特别是方法引用和流)。在运行jdk1.8.0_211的本地机器上,新代码可以工作,在运行时编译JSP,就像它打算做的那样。
在我们的测试服务器(RH )上,新的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我没有亲自设置服务器,但它运行的是Java 8的一些构建,并且具有相同的Tomcat版本(8.5.8),因此我怀疑某个地方有一个配置文件告诉它在旧的语言级别上编译JSP。(证据表明,它知道什么是方法引用,但拒绝编译它;异常而不是错误。)
告诉Tomcat在较旧的语言级别编译JSP的配置可能隐藏在哪里?
发布于 2019-06-28 13:00:28
根据https://tomcat.apache.org/tomcat-8.0-doc/jasper-howto.html,
实现Jasper的servlet是使用全局$CATALINA_BASE/conf/web.xml中的init参数配置的。
compilerSourceVM -源文件兼容的JDK版本是什么?(默认值: 1.7) compilerTargetVM -生成的文件兼容什么版本?(默认值: 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>https://stackoverflow.com/questions/56807251
复制相似问题