1.今天开始学习spring boot.按照惯例先来个hello world,先跑一把.结果按照网上其它大神的示例.不管怎么生成示例.maven生成 , spring.io生成的每一个跑起来都会显示.Unable to start ServletWebServerApplicationContext due to missing ServletWebServerFactory.错误打印,然后就退出了.按照其它网友的做法,怎么弄都不行.
2.实在没办法下了一个别人的helloworld示例,结果别人的就没问题.然后我再把各种配置对照了一遍,基本一模一样.就差把类名改成一样的了.结果还是那个问题
3.没办法了,去看源码这个错误到底代表什么.然后大体看了下,这个是mvc进行dispatch的时候.需要至少有一个ServletWebServerFactory子类的对象来接收处理请求.那这里的问题应该就是tomcat没有主动拉起了.至于为什么同样的代码我的为什么没拉,别人的就拉成功了.那就不是现在能知道的了,先跑起来再说吧.
那么,既然你系统不拉.我自己手动拉一个总可以吧.参照源码里面的示例代码.自己拉一个,结果就没问题了.成功跑起来了.代码如下
package com.bruk;
import com.bruk.Controller.HelloController;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.apache.catalina.connector.Connector;
import org.springframework.web.bind.annotation.RequestMapping;
@SpringBootApplication
public class ApplicationRun {
@Bean
public ServletWebServerFactory servletContainer() {
System.out.println("++++++++++++++++++++++++++++++++++++++++");
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
tomcat.addAdditionalTomcatConnectors(createStandardConnector());
return tomcat;
}
private Connector createStandardConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setPort(0);
return connector;
}
@RequestMapping("/hello")
public String hello(){
return "ApplicationRun hello方法";
}
public static void main(String[] args){
SpringApplication.run(ApplicationRun.class ,args);
}
}
主动拉的是servletContainer这个接口.注意这个方法是个Bean的注解方法.程序在启动时会自己把它注册到Bean的Map中.好了,这里至少给了一个ServletWebServerFactory了.这下不为0了,总可以跑过去了吧.