欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

springboot中unexpected error (type=Not Found, status=404)/WEB-INF/upload.jsp和No message available解决方案

程序员文章站 2022-07-08 23:29:02
...

玩springboot这一路上可谓是路途艰辛,这两天就遇到了一个找不到页面的问题,可以说是花费了我很大的力气才给找到,但是又痛恨自己大意。下边就给大家分享一个错误问题的解决方案,其实这个问题包含两个子问题,先看下边两个页面:

springboot中unexpected error (type=Not Found, status=404)/WEB-INF/upload.jsp和No message available解决方案

springboot中unexpected error (type=Not Found, status=404)/WEB-INF/upload.jsp和No message available解决方案

相信你对上边两个问题经常看到吧,但是,上边这是两个完全不同的问题导致的。

先说第一个图这个找不到页面的问题,这个问题可能有多重原因 导致的:

  1. Application启动类的位置不对.要将Application类放在最外侧,即包含所有子包 
    原因:spring-boot会自动加载启动类所在包下及其子包下的所有组件.
  2. 在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这个东西我感觉不是主要的原因,但是我又没有遇到过解决该问题使用该方法的场景。
  3. 控制器的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的支持,为防止其打包冲突,遂设置其scopeprovided。

最后分享一下关于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相关问题总结。