似乎您尚未向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 connectortry { 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进行响应,但是,它无法以相同的方式启动并且因此没有响应使用最新的Tomcat9(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 startInternalINFO: Starting service [Tomcat]
使用Tomcat 8.0.5嵌入式jar时的控制台输出:
org.apache.coyote.AbstractProtocol initINFO: Initializing ProtocolHandler ['http-nio-8080']org.apache.tomcat.util.net.NioSelectorPool getSharedSelectorINFO: Using a shared selector for servlet write/readorg.apache.catalina.core.StandardService startInternalINFO: Starting service Tomcatorg.apache.coyote.AbstractProtocol startINFO: Starting ProtocolHandler ['http-nio-8080']