Tomcat 8是否支持Java 8?

时间:2013-08-13 12:13:18

标签: tomcat

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

其中Tomcat 8支持Java EE 7:

  • Websockets
  • Servlet api 3.1(Asynch servlet支持)

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


更新

关于infoq的一篇有趣的文章表明tomcat 8已经为java 8做好了准备。即使是Tomcat 7也是如此。

请参阅文章here


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

7 个答案:

答案 0 :(得分:33)

根据Tomcat Docs

  

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

答案 1 :(得分:10)

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

答案 2 :(得分:5)

它不支持开箱即用。你必须做一些改变。 在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中添加了以下条目: 导出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

答案 3 :(得分:3)

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。
  4. 详情请见:http://blog.gopivotal.com/products/apache-tomcat-8-what-it-is-what-you-need-to-know#sthash.nVw8CTJ9.dpuf

答案 4 :(得分:2)

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

仅在源级别1.8或更高级别允许使用Lambda表达式 Apache Tomcat / 8.0.14

它在JDK jdk1.8.0_25上运行

答案 5 :(得分:2)

感谢Chewy,我正在寻找最后1个小时在jsp中编译lambdas它对我有用。

更新了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>

答案 6 :(得分:0)

您可以在web..xml中初始化编译值 然后你就可以使用Tomcat8。

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