代码适用于嵌入式Apache Tomcat 8,但不适用于9更改了什么?

问题描述

似乎您尚未向Connector嵌入式服务器添加。Tomcat 9不再自动Connector为您添加服务器,因此您必须自己触发它:

package app;

import org.apache.catalina.LifecycleException;
import org.apache.catalina.startup.Tomcat;

public class Main {

    public static void main(String[] args) {

        Tomcat tomcat = new Tomcat();
        tomcat.setPort(8080);
        tomcat.getConnector(); // Trigger the creation of the default connector

        try {
            tomcat.start();
        } catch (LifecycleException e) {
            e.printStackTrace();
        }

        tomcat.getServer().await();
    }
}

值得一提的是,tomcat.getConnector()对于以前的Tomcat版本,添加呼叫也应该是安全的,因此这不必是“仅限Tomcat 9”的事情。

解决方法

将Apache Tomcat嵌入到Eclipse Web应用程序项目中。
当我使用最新的Tomcat 8(嵌入式8.0.5)jar作为依赖项时,该代码有效,并且此服务器在http://
localhost:8080进行
响应,但是,它无法以相同的方式启动并且因此没有响应使用最新的Tomcat
9(9.0.5嵌入式)罐时的地址。
代码很简单。我已经尽力进行了彻底的研究,但没有弄清楚出什么问题了。

package app;

import org.apache.catalina.LifecycleException;
import org.apache.catalina.startup.Tomcat;

public class Main {

    public static void main(String[] args) {

        Tomcat tomcat = new Tomcat();
        tomcat.setPort(8080);

        try {
            tomcat.start();
        } catch (LifecycleException e) {
            e.printStackTrace();
        }

        tomcat.getServer().await();
    }

}

使用Tomcat 9.0.5嵌入式jar时的控制台输出:

org.apache.catalina.core.StandardService startInternal
INFO: Starting service [Tomcat]

使用Tomcat 8.0.5嵌入式jar时的控制台输出:

org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-nio-8080"]
org.apache.tomcat.util.net.NioSelectorPool getSharedSelector
INFO: Using a shared selector for servlet write/read
org.apache.catalina.core.StandardService startInternal
INFO: Starting service Tomcat
org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-nio-8080"]

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...