因为springboot默认是不支持jsp的,在网上找了点资料添加了依赖如下:
<!-- servlet依赖. -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<!-- tomcat的支持. -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
因为是maven子项目,父项目依赖是这样式的:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.2.RELEASE</version>
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Camden.SR3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
然后配置文件application.yml加了如下代码:
spring:
mvc:
view:
prefix: /WEB-INF/jsp/
suffix: .jsp
然后我运行程序的时候会报一个Failed to scan [file:/xx/xx/xx.jar] from classloader hierarchy的错,但是tomcat依然可以启动并且也能从浏览器访问到相应的jsp页面。
我就去百度了一下,没有得到什么实际的答案,只知道大概是jar包冲突之类的,折腾了很久也没有解决。后来去谷歌了一下发现是springboot的问题,基本上1.4版本以后使用jsp的都报了相应的错误。解决办法也很简单,降低tomcat到8.0.36的版本即可。
<properties>
<tomcat.version>8.0.36</tomcat.version>
</properties>
然后我就去试了一下发现还是不行,刚好看到有个哥们说降到8.0.32版本。我试了一下发现可行,但是又报另一个错tomcat启动错误:nested exception is java.lang.NoClassDefFoundError: org/apache/juli/logging/LogFactory,这下子连tomcat也无法启动了。
我又去搜了一下解决办法,添加一个tomcat-util依赖如下:
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-util</artifactId>
<version><!-- version from tomcat-embed-core --></version>
<scope>runtime</scope>
</dependency>
然后程序完美运行。
结果我又作死搞了一个idea版本,发现不报错,但是无法访问。后来看到了这个帖子,完美的解决了我的问题。
做个记录,以防下次再遇到这样的问题折腾自己。