【问题标题】:Does Tomcat 8 support Java 8?Tomcat 8 是否支持 Java 8?
【发布时间】:2013-08-15 01:15:13
【问题描述】:

tomcat 8(今天为 RC1 - 请参阅 this)是否支持 Java 8,即使它仍处于测试阶段?

其中 Tomcat 8 支持 Java EE 7:

  • Websocket
  • Servlet api 3.1(异步 servlet 支持)

我在使用 Tomcat 7 / Java 7 的 past 中遇到了麻烦,这就是我问这个问题的原因。


更新

关于 infoq 的一篇有趣的文章指出,tomcat 8 已经为 java 8 做好了准备。甚至 Tomcat 7 也可以。

见文章here


如果您发现任何兼容性问题,我会在这里报告。

【问题讨论】:

  • 嗯? Tomcat 只是用 Java 编写的。它肯定会像所有其他 Java 程序一样在 Java 7/8/9/10/11/etc 上运行。
  • @kirdie:这不依赖于 Tomcat,而是依赖于 JVM。
  • BalusC 当然是错的。由于存在许多微妙的问题,Tomcat 可能无法使用较新的 JRE 运行。
  • BalusC 通常对 Tomcat 是正确的。想详细说明 Tomcat 在 Java 8 中存在哪些问题?
  • 运行 JSP 时出现一些问题 - stackoverflow.com/questions/19243458/…

标签: tomcat


【解决方案1】:

根据Tomcat Docs

可以使用任何已安装的 Java 7 或更高版本的 JRE(32 位或 64 位)。

【讨论】:

【解决方案2】:

测试 Tomcat 7.0.50 与基于 Java 8 + Spring 4.0.2 编写的 Web 应用程序,使用 lambda 表达式、方法引用和流 - 就像一个魅力!

【讨论】:

  • 也许......或者不是。 Tomcat 正式支持 Java 7,而不是 Java 8。
  • 我写了我的真实经历。官方 - 是的,Tomcat 的网站告诉我们支持 Java 7 及更高版本。
  • 取决于tomcat7版本。 ubuntu 存储库上的版本似乎有一些问题。不过7.0.50应该没问题。
  • 但是如果你使用 Mojarra 2.1(我已经测试过 2.1.29),甚至使用 Tomcat 7.0.68(TomEE 1.7.4 测试过)你也不能使用 lambda 表达式。否则将引发以下异常:INFO: Initializing Mojarra 2.1.29 (20140702-1445 svn.java.net/svn/mojarra~svn/tags/2.1.29@13392) for context '/reflex' márc。 2016 年 2 月 23 日 7:10:35 DU org.apache.openejb.server.cxf.rs.CxfRsHttpListener configureFactory 错误 jeresource.webcontainer.jsf.config - 位置 41 处的未知类型常量池 18 错误 jeresource.webcontainer.jsf.config - 位置 42 处的未知类型常量池 0
【解决方案3】:

它不支持开箱即用。你必须做出一些改变。 在 apache home\conf\web.xml 的 jsp 部分中添加以下行。

<init-param>
    <param-name>compiler</param-name>
    <param-value>modern</param-value>
</init-param>
<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>suppressSmap</param-name>
    <param-value>true</param-value>
</init-param>

我还在 setenv.sh(或 bat)中的类路径中添加了以下条目: 导出CLASSPATH=$JAVA_HOME/lib/tools.jar:$CLASSPATH

请注意,我还需要将 java_home 设置为 1.8(这里有点废话,但可能值得一提)

这里有一些来源: http://tomcat.apache.org/tomcat-8.0-doc/jasper-howto.html http://mail-archives.apache.org/mod_mbox/tomcat-dev/201301.mbox/%3C7CF0788AAB53854AB15567D68F41960238297F32@CH1PRD0410MB369.namprd04.prod.outlook.com%3E

【讨论】:

    【解决方案4】:

    Tomcat 8.0 设计为在 Java 7 上运行。作为参考,已支持以下规范:

    1. Tomcat 6:Servlet 2.5、JSP 2.1 和 EL 2.1。
    2. Tomcat 7:Servlet 3.0、JSP 2.2 和 EL 2.2。
    3. Tomcat 8:Servlet 3.1、JSP 2.3 和 EL 3.0。此外,还支持新规范 Java WebSocket 1.0。

    查看更多信息:http://blog.gopivotal.com/products/apache-tomcat-8-what-it-is-what-you-need-to-know#sthash.nVw8CTJ9.dpuf

    【讨论】:

    • 不。 Tomcat 8 在 Java 7 或更高版本上运行。
    • tomcat 7 也提供 websockets
    【解决方案5】:

    我在 Linux 上尝试过,但它不起作用。在 JSP 页面中执行 lambda 表达式时会抛出以下错误

    Lambda 表达式只允许在源代码级别 1.8 或更高版本中使用 Apache Tomcat/8.0.14

    它在 JDK jdk1.8.0_25 上运行

    【讨论】:

      【解决方案6】:

      感谢 Chewy,我一直在寻找最后 1 小时在 jsp 中编译 lambda,它对我有用。

      将tomcat的web.xml中的jsp部分更新如下(只需要这么多改动):

      <servlet>
          <servlet-name>jsp</servlet-name>
          <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
          <init-param>
              <param-name>compiler</param-name>
              <param-value>modern</param-value>
          </init-param>
          <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>suppressSmap</param-name>
              <param-value>true</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>
          <init-param>
            <param-name>mappedfile</param-name>
            <param-value>true</param-value>
          </init-param>
          <load-on-startup>3</load-on-startup>
        </servlet>
      

      【讨论】:

        【解决方案7】:

        你可以在 web..xml 中初始化编译值 那么你就可以使用Tomcat8了。

        Tomcat 8:Servlet 3.1、JSP 2.3 和 EL 3.0。

        【讨论】:

          猜你喜欢
          • 2015-12-18
          • 1970-01-01
          • 1970-01-01
          • 2017-03-25
          • 1970-01-01
          • 1970-01-01
          • 2014-11-27
          • 2020-03-26
          • 2013-12-07
          相关资源
          最近更新 更多