//查找上下文中是否有"viewName”的 Bean 定义
if (!context . containsBean(viewName)) {
return null;
//判断"viewName”的 bean 对象是否是 View 类别
if (!context. isTypeMatch(viewName, View. class)) {
if (logger . isDebugEnabled()) {
logger. debug("Found bean named '”+ viewName +”' but it does not i
mplement View");
return null;
返回上下文中指定名称的 View 类别的 Bean
return context . getBean(viewName, View. class);
BeanNameViewResolver 的 resolveViewName 途径首先通过名称判断对应视图是否存在 。当通过名称无法匹配时 。会通过类别进行视图判断 。如果存在对应的 Bean,则获得对应的View 对象并返回 。
文章插图
静态资源的接受
前端页面基本需要采访到静态资源 。SpringBoot 对静态资源(比如图片、css、js 等)的接受。也 包 括 对 webjars 的 支 持。主 要 是 通 过 实 现 接 口 WebMvcConfigurer 的addResource-Handlers 途径来完成的 。
WebMvcConfigurer 的接口实现类为 WebMvcAutoConfiguration 的内部类 。这样设计的主要目的是保证WebMvcConfigurer 不在类路径中时不会读取 WebMvcConfigurer 的实现类 。
这里的内部实现类为 WebMvcAutoConfigurationAdapter 。
而人类要讲的对静态资源的接受就是通过 WebMvcAutoConfigurationAdapter 实现接口WebMvcConfigurer 的 addResourceHandlers 途径来完成的 。
@Override
public void addResourceHandlers (ResourceHandlerRegistry registry) {
//如果默认资源处理器为不可用情况则返回
if (!this . resourceProperties. isAddMappings()) {
logger . debug("Default resource handling disabled");
return;
Duration cachePeriod = this . resourceProperties . getCache()- getPeriod();
CacheControl cacheControl = this. resourceProperties . getCache( )
. getCachecontrol() . to();
//针对 webjars 做了固定的判断处理
if (!registry . hasMappingForPattern(" /webjars/**")) {
//如果不存在针对 webjars 的配置 。则在此处添加 。并没置默认路径等
customizeResourceHandlerRegistrat ion(registry
. addResourceHandler(" /webjars/**")
. addResourceLocations("classpath:/
META-INF/resources/webjars/")
. setCachePeriod(getSeconds (cachePe
riod))
. setCacheControl(cacheControl));
String staticPathPattern = this . mvcProperties . getStaticPathPattern();
//如果目前的 ResourceHandlerRegistry 里面资源映射没有"/**",则启用默认的静态资源处
理if (!registry. hasMappingForPattern(staticPathPattern)) {
customi zeResourceHandlerRegistration(
registry . addResourceHandler(staticPathPattern)
. addResourceLocations (getResourceLocations(
this. resourceProperties . getStaticLocations()))
. setCachePeriod(getSeconds( cachePeriod))
. setCacheControl(cacheControl));
以上代码中要点进行了 webjars 资源路径和静态资源路径等默认值的初始化 。首先 。如果判断目前ResourceHandlerRegistry 中不存 在“/webjars/**”,则设置 webjars 的资源路径和缓存 配 置 为 默 认 值 ; 其 次。判 断 当 前 ResourceHandlerRegistry 是 否 存 在“/**”(getStaticPathPattern 方 法获得的默认值)映射 。如果不存在 。则使用默认的映射路径、资源路径和缓存配置 。
默 认 的 静态 资 源 映 射 路 径 在 ResourceProperties 类 中 定 义 。在 上 面 的 代 码 中是 由resourceProperties 的 getStaticLocations()途径获得。
ResourceProperties 中默认路径定义有关代码如下 。
@ConfigurationProperties(prefix = "spring . resources", ignoreUnknownFields =
false)
public class ResourceProperties{
private static final String[] CLASSPATH RESOURCE_ LOCATIONS = { "classpat
h: /META- INF/resources/",
"classpat
h:/resources/", "classpath:/static/", "classpath:/public/" };
private String[] staticLocations = CLASSPATH RESOURCE LOCATIONS;
至此人类可以就这样看出 。Spring Boot 默认会加载 classpath:/META-
INF/resources/
classpath:/resources/
classpath:/static/
classpath:/public/路径下的静态资源 。这是“约定”的一部分 。也是为什么人类在实践中默认会将静态资源都放置在以上路径下 。
文章插图
静态 index.html
当 Spring Boot 的 web 项目启动时 。会找到默认的欢迎页面 。下面人类来当 Spring Boot 的web 项目启动时 。会找到默认的欢迎页面 。下面人类来就这样看Spring Boot 默认对静态 index.html的接受是怎么样实现的 。该功能是在内部类 EnableWebMvcConfiguration 中通过 WelcomePageHandlerMapping来实现的 。主要用来查找默认路径下的 index.html (或 index 模板)页面 。并展示默认的欢迎页面 。代码如下 。
推荐阅读
- 天津有海边游泳吗?
- 宝妈一个人带娃儿,快抑郁了,有啥好办法么?
- 巧克力棒是什么东西 为什么器官被称之为巧克力棒
- 想带孩子去天津海边玩,捡捡贝壳什么的,去哪里好?
- 请列举一下你们赚到钱的手游有哪些?
- 梦幻西游哪个区人多不卡 梦幻西游最适合五开的区
- 天津有哪些地方可以看见海,风景怎么样呢?
- 现在好多游戏都说可以提现,是真的吗?那他们怎么盈利?
- 天津东疆人工沙滩怎样?