1、spring boot默认静态路径支持
Spring Boot 默认将 / 所有访问映射到以下目录:**
classpath:/static
classpath:/public
classpath:/resources
classpath:/META-INF/resources
也就是说什么也不用配置,通过浏览器可以直接访问这几个目录下的文件。
1.1、首先搞清楚classpath是指的哪个目录
项目中一般创建这几个目录是在resources下创建的如下图:
为什么接在resources资源目录下创建这个几个目录就是classpathc呢?
这里我们看下项目打包后target下的目录结构:
因为默认maven打包完后,会直接把resources下的文件都拷贝到classes目录下,与生成的java class目录是同级的。
所以这里才是classpath。如果你直接访问不到静态文件,那么需要看的是你的target目录下包不包含这些文件。
并且只有src/main/java/resources
目录下的文件才会被maven打包进去,如果是其它目录文件,还需要在pom中添加<resources>
包含进去才行。
启动项目后直接访问:
http://localhost:18100/bootstrap.css
http://localhost:18100/1.jpg
http://localhost:18100/2.jpg
http://localhost:18100/3.jpg
http://localhost:18100/4.jpg
1.2、给静态资源加上访问前缀
有时间为了区分静态资源和controller路径,可以给直接访问的静态资源加上前缀:
spring:
mvc:
# 设置访问资源前缀,public static resources META-INF/resources下的静态资源必须加这个前缀才能访问
static-path-pattern: /mystatic/**
那么再次访问public static resources META-INF/resources
下的静态时,就需要加上mystatic
,路径变成如下:
http://localhost:18100/bootstrap.css
http://localhost:18100/mystatic/1.jpg
http://localhost:18100/mystatic/2.jpg
http://localhost:18100/mystatic/3.jpg
http://localhost:18100/mystatic/4.jpg
1.3、自定义资源文件目录
如果不想用默认的几目录:public static resources META-INF/resources
作为静态资源的目录,那么可以自定义静态资源目录:
spring:
mvc:
# 设置访问资源前缀,public static resources META-INF/resources下的静态资源必须加这个前缀才能访问
static-path-pattern: /mystatic/**
resources:
# 自定义静态资源资源目录
static-locations: classpath:/cusres
自定义资源目录后,resources/resources resources/static
目录下的静态资源不能再访问,但public META-INF/resources
目录下的文件任可以访问。
2、spring boot支持jsp
2.1、如果我们想spring boot支持jsp视图
如果我们在项目中不想把jsp,css,js等文件放到resources目录下,而与resources目录下再创建一个webapp目录去放jsp文件,目录结构如下:
2.2、首先要让maven打包时把这个目录包含进去
如果pom中不设置额外的资源路径,直接打包看下效果:target目录下不会包含webapp目录
添加pom配置如下:
<resource>
<directory>src/main/webapp</directory>
<includes>
<include>**/*.*</include>
</includes>
<filtering>false</filtering>
</resource>
重新打包如下:
2.3、添加对spring mvc的支持
如果我们此时,直接创建一个Controller里面添加login.html,返回一个视图名字,访问
http://localhost:18100/login.html
会报如下错误:
2023-08-02 10:38:57.743 WARN 13192 --- [io-18100-exec-1] o.s.web.servlet.PageNotFound : No mapping for GET /login.html
页面没找到,因为还没有视图解析器,回想传统的spring mvc配置时,会加一个视图解析器的配置,和HandlerMapping
<!-- 配置视图解析 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!--默认的HandlerMapping和HandlerAdapter配置形式-->
<!-- 解决springMVC响应数据乱码 text/plain就是响应的时候原样返回数据-->
<mvc:annotation-driven>
</mvc:annotation-driven>
添加spring mvc视图注解
@Configuration
@EnableWebMvc
public class MvcConfig {
}
再次访问,此时错误变成:
不能解析这个视图
看下@EnableWebMvc注解
如果自定义WebMvcConfigurer,那么这里就可以获取到。
2.3.1、添加视图解析器
@Configuration
@EnableWebMvc
public class MvcConfig implements WebMvcConfigurer {
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
registry.jsp();
}
}
再次访问,后台不会报
而是提示找不到这个页面:
registry.jsp();这个方法会默认加上/WEB-INF/
前缀和.jsp
后缀,创建 InternalResourceViewResolver resolver = new InternalResourceViewResolver();