Tomcat 使用 Java 8 SDK,但不会编译具有 Java 8 语言功能的 JSP。如何修复它?

2023-12-11

我想我正在考虑 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.jsp
Method references are allowed only at source level 1.8 or above

我自己没有设置服务器,但它运行 Java 8 的某些版本,并且具有相同的 Tomcat 版本(8.5.8),因此我怀疑某个地方有一个配置文件告诉它以较旧的语言编译 JSP等级。 (证据是它知道什么是方法引用但拒绝编译它;是异常而不是错误。)

告诉 Tomcat 在较旧的语言级别编译 JSP 的配置可能隐藏在哪里?


Per https://tomcat.apache.org/tomcat-8.0-doc/jasper-howto.html,

实现 Jasper 的 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>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Tomcat 使用 Java 8 SDK,但不会编译具有 Java 8 语言功能的 JSP。如何修复它? 的相关文章

随机推荐

  • 使用 Typescript 1.7.5 找不到全局类型“IterableIterator”

    我安装了 NPM 版本的 Typescript 1 7 5 和 angular2 beta 在 Visual Studio 2015 Update 1 中构建项目时 出现以下错误 1 gt VSTSC error TS2318 Build
  • 如何处理Python中子进程返回码得到的负数?

    这段Python脚本 cmd installer exe install this works fine the just represent many arguments process subprocess Popen cmd proc
  • PHP Implode 包裹在标签中

    一直试图用谷歌搜索答案 但似乎找不到任何东西 我有以下内容 我想把每一个都包裹起来 value在跨度标签中 但我不确定如何 I tried 如果运气不好 有人可以告诉我我哪里出了
  • 在社交网络中查找“发布者”的 O(n) 算法

    有人问我如何在社交网络中找到 发布者 的问题 假设 简化的 社交网络仅在两个用户之间具有 关注 关系 并且一个用户不能关注自己 然后 我们将 发布者 定义为被所有其他用户关注但不关注任何人的用户 更具体地说 给定这样一个邻接矩阵格式的社交网
  • 如何添加 NSSpeechSynthesizer 类参考?

    我如何添加 NSSpeechSynthesizer 类参考 我认为它是在 系统 库 框架 AppKit framework 但是 当我单击 添加现有框架 时 框架窗口中没有这样的框架名称 任何人都可以帮我做到这一点吗 VSSpeechSyn
  • 在已经跟踪大量文件的现有存储库上应用 .gitignore

    我的存储库中有一个现有的 Visual Studio 项目 我最近在我的项目下添加了一个 gitignore 文件 我假设它告诉 Git 忽略该文件中列出的文件 我的问题是 所有这些文件都已经被跟踪 据我所知 在将规则添加到该文件以忽略它之
  • Java中可以使用Semaphore实现阻塞队列吗?

    我想知道是否可以使用Semaphore来实现阻塞队列 在下面的代码中 我使用一个信号量来保护关键部分 并使用另外两个信号量对象来跟踪空槽和已填充对象的数量 public class BlockingQueue private List qu
  • 使用 Spring Data 将结果集与实体和计数进行映射的首选方法

    通常存在显示所有类别以及这些类别的使用频率的业务问题 这个问题很容易通过查询来回答 SELECT c count FROM category assignment ca LEFT JOIN category c on ca c id c i
  • 如何在另一个组件中访问一个组件的变量 [Angular]

    我是角度新手 我今天正在尝试一件简单的事情 我已经浏览了很多答案 但无法正确实施它们 我想访问一些变量filter panel in filter bar 我的两个自定义组件 但两人都不是亲子关系 尽管它们位于同一目录中 但它们是独立的 在
  • jq 在输出中打印字符

    我要打印 输出标题内的分隔符 curl s http cd0a4a ethosdistro com json yes jq c rigs 0d6b27 50dc35 version driver miner gpus miner insta
  • UINavigationController“后退按钮”自定义文本?

    的 后退按钮 UINavigationController默认情况下显示堆栈中最后一个视图的标题 有没有办法在后退按钮中添加自定义文本 From 这个链接 self navigationItem backBarButtonItem UIBa
  • 如何让查询在分页结果时转移到后续页面

    我已经浏览了网站上所有的分页问题和答案 在所有冗长的代码和面向对象的解决方案中 这段代码是最短和最简单的
  • UML 中的轮廓图是什么?

    UML 中的轮廓图是什么 更具体地说 这张图的作用是什么 我们可以用它做什么 我们可以用它解决问题 或者我们可以用它简化更多解决方案 A 剖面图允许您通过定义您自己的构造型和一些其他类似元素来定义 UML 的扩展 这个想法是针对特定领域定制
  • OS X 上 Matplotlib 图形中的表情符号

    我有一个 Matplpoltlib 的奇异任务 我需要在标签内显示表情符号 我使用的是 OS X 因此系统范围内对表情符号有很好的支持 然而 Matplotlib 却无法解决问题 目前 表情符号显示为空框 我使用的是Python 3 所以U
  • 按钮切换引导程序刷新后保持状态

    我有三个切换按钮 我想在刷新页面后保持切换状态 我读了很多东西 但不知道如何在我的情况下使用它们 这是按钮和 div
  • 将数组分解成小数组

    我正在向一系列人员发送电子邮件 我有数组中的收件人列表 但该列表最多可达 500 人 我的邮件服务器一次发送的收件人数量有限制 50 个收件人 因此 如果列表 gt 50 我需要将其分成不同的邮件 将一个数组分成 50 个数组的最佳方法是什
  • 在最新版本(3.0.x)Resteasy 中,我们应该使用什么 ClientResponse 和 GenericType?

    我正在开发Resteasy 我将应用程序的 Maven 依赖项从2 2 x to 3 0 x突然我发现大多数 API 都被弃用了 因此 此迁移对我的代码和测试用例产生了影响 因为它只是说在我的整个代码中已弃用 我正在以我的测试用例为例 早期
  • 使用 Adb 输入时记录按键事件

    我使用命令adb shell su getevent lt dev input event5 gt Test txt记录触摸事件 当我触摸屏幕时它会起作用 即它会写入所有操作 按下键 移动键和向上键以及坐标 但是 当我使用命令时adb sh
  • 是否有用于解析数字(包括范围)的 Perl 模块?

    有没有一个模块可以为我做这个 样本输入 2 5 7 9 3 11 14 usr bin env perl use warnings use strict use 5 012 sub aw parse my in max chomp in m
  • Tomcat 使用 Java 8 SDK,但不会编译具有 Java 8 语言功能的 JSP。如何修复它?

    我想我正在考虑 Tomcat 配置问题与我当前的问题 我正在为 Tomcat 8 5 8 开发 Java Servlet 和 JSP 应用程序 并已开始使用 Java 8 语言功能 特别是方法引用和流 在我运行 jdk1 8 0 211 的