SpringBoot运行NoSuchMethodError

来源:互联网 发布:知乎日报变成读读日报 编辑:程序博客网 时间:2024/06/05 11:00

最近在看《精通Spring 4.x 企业应用开发实战》,学习到第三章Spring Boot,发现配套代码报出如下错误:

2017-06-24 15:36:16.905 ERROR 37076 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Exception sending context initialized event to listener instance of class org.apache.tomcat.websocket.server.WsContextListenerjava.lang.NoSuchMethodError: javax.servlet.ServletContext.getVirtualServerName()Ljava/lang/String;    at org.apache.tomcat.websocket.server.WsServerContainer.<init>(WsServerContainer.java:149) ~[tomcat-embed-websocket-8.0.32.jar:8.0.32]    ……

一番苦查,终于找到了问题的原因:http://blog.csdn.net/mjt_284321/article/details/62418379

解决

我本地的tomcat版本是7.0.69,而spring boot默认使用到了tomcat8.0.32,所以就出现了方法找不到。在maven配置文件pom.xml中加上:

<properties>        <tomcat.version>7.0.69</tomcat.version>    </properties>

终于运行成功。

另外书中指出了另外一个坑也被我完美的踩到:

基于Spring boot应用,由于当前应用包含了一个可直接运行的Application类,所以在开发过程中,大家很容易在IDE(如IDEA工具)中单机鼠标右键运行当前类。虽然可以启动当前应用,在非Web应用中可能不会有什么问题,但在Web应用中,如果采用上述方法直接运行应用,那么在访问有视图的页面时(如JSP),会一直报404错误。
因为直接运行当前启动类,Spring Boot无法找到当前页面资源。因此,基于Spring Boot的应用在开发调试的时候,一定要基于Spring Boot提供的spring-boot-maven-plugin插件命令来运行应用或通过Spring Boot命令行来运行应用。

直接运行当前类是这个样子:

Whitelabel Error Page

这里写图片描述