5,springboot静态资源访问
一、springboot项目访问静态资源
1,发现问题
springboot项目,src/main/webapp目录下的静态资源无法访问;
2,问题的原因
springboot项目,静态资源的映射路径如下,且优先级从上至下:
源码如下:
具体的设计目的、如何实现的,看了源码会清楚,现在没分析源码不清楚;
从效果看,请求服务器时,应该是先经由DispatcherServlet处理,DispatcherServlet发现该请求涉及静态资源时,会经由这个WebMvc处理?
3,测试效果
可以看出,对静态资源的请求,会按照优先级去上面5个映射路径中去寻找;
二、springboot项目通过mvc访问html
1,pom添加依赖
springboot不推荐使用jsp,可能和不能以java -jar的方式请求jsp有关;推出了thymeleaf:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
<version>2.4.0</version>
</dependency>
2,application.yml(properties)配置
prifix可以是其他路径,其他配置亦同:
spring:
thymeleaf:
cache: false
prefix: classpath:/static/
suffix: .html
encoding: UTF-8
content-type: text/html
mode: HTML5
3,测试效果
三、springboot项目通过mvc访问jsp
以下为如何成功的访问jsp:
1,pom添加依赖
先注释thymeleaf依赖,添加tomcat-embed-jasper依赖,且version须和spring-boot-starter-tomcat里
的内置依赖包tomcat-embed-core的版本一致,不然会导致jar包冲突引起启动失败
2,application.yml(properties)配置
先注释掉thymeleaf配置,添加mvc配置
spring:
mvc:
view:
prefix: /WEB-INF/jsp/
suffix: .jsp
3,添加jsp文件
注意上图文件目录,且网上说要注意下图:
且打包后,targer/classes也没有这个jsp,不影响:
4,修改启动参数
这种方式属于main方法启动,只不过可以配置一些参数;且配置后,找到面方法所在的类右击run效果也一样;
5,测试效果
以下为如何不成功的访问jsp
a,thymeleaf相关的pom或者application配置没有注释,因为从名字
spring-boot-starter-thymeleaf
可以看出,springboot启动时会关联这个,不注释的话,jsp会被当成thymeleaf去加载,然后报错;
b,jsp文件需放到webapp/WEB-INF下,且webapp和java、resources同级;
c,pom中
tomcat-embed-jasper
的version需要和
spring-boot-starter-tomcat
的内置依赖包
tomcat-embed-core
一致,不然会jar包冲突,导致项目启动失败;
d,使用main方法启动时,需要设置Working directory为模块路径:$MODULE_WORKING_DIR$
如果使用spring-boot:run则不需要设置: