手写tomcat内置容器时,无法初始化ProtocolHandler(引用tomcat9.0以后版本出现的错误,在9.0版本以前没有)错误小记

今天在尝试通过java代码手写tomcat内置容器时,发现自己引用tomcat9.0.1版本 启动后控制台不报错,通过浏览器访问后发现,这是一个伪启动,随后我将tomcat版本换成8.5.42,再用java类启动ttomcat后,浏览器成功通过我自定义端口号访问到自定义路径,并且控制台的信息较之9.0.0也多了很多其他信息,如下图手写tomcat内置容器时,无法初始化ProtocolHandler(引用tomcat9.0以后版本出现的错误,在9.0版本以前没有)错误小记_第1张图片
随后,我便就此问题上网寻找答案,然而在网上并没有发现该问题的提问以及分析,紧接着我就比较俩版本tomcat类的源码,在对比过程中,我发现9.0.1较之8.5.42多了一个方法getConnector(方法) 如下图(左图9.0.1版本,右图8.5.42版本)
手写tomcat内置容器时,无法初始化ProtocolHandler(引用tomcat9.0以后版本出现的错误,在9.0版本以前没有)错误小记_第2张图片
8.5.42版本截图手写tomcat内置容器时,无法初始化ProtocolHandler(引用tomcat9.0以后版本出现的错误,在9.0版本以前没有)错误小记_第3张图片
手写tomcat内置容器时,无法初始化ProtocolHandler(引用tomcat9.0以后版本出现的错误,在9.0版本以前没有)错误小记_第4张图片
显然在9.0版本之前,init()和start()方法都会主动调用getConnector()方法,而9.0以后init()和start()方法中不在有this.getConnector()的调用,这就需要我们在手写tomcat内置容器时,手动去调用
随后在我将代码修改成如下图,便成功解决问题手写tomcat内置容器时,无法初始化ProtocolHandler(引用tomcat9.0以后版本出现的错误,在9.0版本以前没有)错误小记_第5张图片

你可能感兴趣的:(springboot学习)