Tomcat 8支持Java 8吗?

31

Tomcat 8(目前为止是 RC1 版本-参见此处)是否支持 Java 8,即使它仍然处于beta版本?

除其他功能外,Tomcat 8 还支持 Java EE 7:

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

我以前在 Tomcat 7 / Java 7 上遇到问题,这就是我问这个问题的原因。过去


更新

infoq 上一个有趣的文章表明 tomcat 8 已经为 java 8 做好了准备。甚至 Tomcat 7 也可以。

查看文章 此处


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


4
嗯?Tomcat只是用Java编写的,肯定能像其他Java程序一样在Java 7/8/9/10/11等版本上运行。请放心。 - BalusC
@BalusC 的意思是,你是否可以运行使用 Java 8 编写的应用程序。 - Konrad Höffner
1
@kirdie:这不取决于Tomcat,而是取决于JVM。 - BalusC
7
BalusC是错误的,当然了。由于一些微妙的问题,Tomcat可能无法使用较新的JRE运行。 - Marko Topolnik
1
BalusC通常对Tomcat的看法是正确的。能否详细说明一下Tomcat在Java 8方面存在哪些问题? - Pidster
2
运行JSP时出现了一些问题 - https://dev59.com/3GIk5IYBdhLWcg3wdeDY - fgb
7个回答

33
根据 Tomcat文档:

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


7
版本矩阵也表明了相同的内容:http://tomcat.apache.org/whichversion.html - Bruno Medeiros

10

使用 lambda 表达式、方法引用和流,测试了基于 Java 8 + Spring 4.0.2 编写的 Web 应用程序在 Tomcat 7.0.50 上 - 运行得非常好!


也许...也可能不是。Tomcat 正式支持 Java 7,而不是 Java 8。 - l.cotonea
1
我写了关于我的真实经验。官方上说,Tomcat网站表示支持Java 7及更高版本。 - Denis Makarskiy
取决于tomcat7的版本。Ubuntu软件源中的版本似乎有一些问题。但是7.0.50应该没问题。 - digao_mb
但如果您使用的是Mojarra 2.1(我测试过2.1.29),即使在Tomcat 7.0.68(TomEE 1.7.4已测试)下,也无法使用lambda表达式。否则将引发以下异常:INFO:正在为上下文“/ reflex”初始化Mojarra 2.1.29(20140702-1445 https://svn.java.net/svn/mojarra~svn/tags/2.1.29@13392) márc。23, 2016 7:10:35 DU org.apache.openejb.server.cxf.rs.CxfRsHttpListener configureFactory ERROR j.e.resource.webcontainer.jsf.config - Unknow type constant pool 18 at position 41 ERROR j.e.resource.webcontainer.jsf.config - Unknow type constant pool 0 at position 42 - Miklos Krivan

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)中添加了以下内容的类路径: export 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

7
没错。Tomcat 8 可以运行在 Java 7 或更高版本上。 - Mark Thomas
Tomcat 7还提供了WebSockets。 - f.khantsis

2

谢谢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>

2

我在Linux上尝试过,但无法工作。当在JSP页面中执行lambda表达式时,会抛出以下错误:

lambda表达式仅允许在1.8或更高版本的源级别上使用 Apache Tomcat/8.0.14

它在JDK jdk1.8.0_25上运行。


0

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

Tomcat 8支持Servlet 3.1、JSP 2.3和EL 3.0。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接