玩springboot这一路上可谓是路途艰辛,这两天就遇到了一个找不到页面的问题,可以说是花费了我很大的力气才给找到,但是又痛恨自己大意。下边就给大家分享一个错误问题的解决方案,其实这个问题包含两个子问题,先看下边两个页面:
相信你对上边两个问题经常看到吧,但是,上边这是两个完全不同的问题导致的。
先说第一个图这个找不到页面的问题,这个问题可能有多重原因 导致的:
- Application启动类的位置不对.要将Application类放在最外侧,即包含所有子包
原因:spring-boot会自动加载启动类所在包下及其子包下的所有组件. - 在springboot的配置文件:application.yml或application.properties中关于视图解析器的配置问题:
当pom文件下的spring-boot-starter-paren版本高时使用:
spring.mvc.view.prefix/spring.mvc.view.suffix
当pom文件下的spring-boot-starter-paren版本低时使用:
spring.view.prefix/spring.view.suffix这个东西我感觉不是主要的原因,但是我又没有遇到过解决该问题使用该方法的场景。 - 控制器的URL路径书写问题
@RequestMapping(“xxxxxxxxxxxxxx”)
实际访问的路径与”xxx”不符合.这个就更少出现了。除非你真是小马虎。
就是你把WEB-INF直接放在main目录下了,没有建立webapp目录,(这就是我犯的错误)
第二个图片的错误其实很简单:
需要在pom文件中加入:
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
究其原因:
使用过Springboot的同学都知道其已内置tomcat(spring-boot-starter-web),无需打war包,打成jar包直接运行。最近学习使用Springboot发现项目中的pom文件引入了tomcat-embed-jasper(对jsp的支持的依赖)但scope为provided。
于是不明白感觉springboot的tomcat应该自带了tomcat-embed-jasper吧,遂将pom文件该依赖删掉,eclipse启动项目无报错,访问页面发现所有的jsp页面都会被下载而不能被访问。但是又一个令我疑惑的问题是其依赖scope为provided,也就是说打包时该依赖不会被包含在lib包内,但是我的jar启动的页面访问却没有问题。
以上说明一个问题:springboot自带的tomcat并没有携带tomcat-embed-jasper的依赖。
又做了一个实验:将tomcat-embed-jasper的scope去掉后,打成jar包,启动项目时报错==>jasper的jar包冲突。
结论猜测:检查pom文件后,猜测一定是spring-boot-maven-plugin(1.4.2.RELEASE)插件在打包时自动额外的添加tomcat-embed-jasper的支持。而我们在工具中启动项目时并没有打包,所以需要该依赖对我们eclipse中项目jsp的支持,为防止其打包冲突,遂设置其scope为provided。
最后分享一下关于application.properties和application.yml文件的内容写法:
#applicatioin.properties内容如下
spring.mvc.view.prefix=/WEB-INF/views/jsp/
spring.mvc.view.suffix=.jsp
server.port=9990
#application.yml文件内容如下:
spring:
mvc:
view:
prefix : /WEB-INF/jsp/
suffix : .jsp
server:
port: 9990
##上边是两个文件,二选一即可,目录都放在src/main/resources下一定要注意文件名
相信上边的两点肯定对你有帮助,也希望你看到之后能给个赞鼓励一下,不嫌弃的话加一下关注哦,后期分享更多springboot相关问题总结。