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则不需要设置:

  

 





 

posted @ 2020-12-08 17:37  seeAll  阅读(584)  评论(0编辑  收藏  举报