@Bean
public We lcomePageHandlerMapping welcomePageHandlerMapping(应用licationConte
xt applicationContext。
FormattingConver
sionService mvcConversionService, ResourceUrlProvider mvcResourceUrlProvide
r) {
//构造 welcomePageHandLerMapping 对象
WelcomePageHandlerMapping
we
lcomePageHandlerMapping
new
WelcomePageHand
ler-
Mapping(
new TemplateAvailabilityProviders (applicationContext), applicationConte
xt,
getWelcomePage(),
this . mvcProperties . getStaticPathPattern());
//设置拦截器
welcomePageHandlerMapping . setInterceptors(getInterceptors (mvcConversionSe
rvice, mvcResourceUrlProvider));
return welcomePageHandlerMapping;
//获得默认查找 index. html 的路径数组
static String[] getResourceLocations (String[] staticLocations) {
String[] locations = new String[staticLocations . length
SERVLET_ _LOCATIONS. length];
System. arraycopy(staticLocations, 0, locations, 0, staticLocations. lengt
h);
System. arraycopy(SERVLET_ LOCATIONS, 0, locations, staticLocat ions . length,
SERVLET_ LOCATIONS. length);
return locations;
//遍历资源路径并拼接每一个路径下的 index. htmL 文件 。过德出可用的 index. htmL 文件
private OptionalResource getwelcomePage() {
String[] locations = getResourceLocations (
this . resourceProperties . getStaticLocations());//转换并筛选出符合条件的第一个
return Arrays . stream(locations ) . map(this: :getIndexHtml)
. filter(this: :isReadable). findFirst();
//获得欢迎页资源的名称:路经+ index. html
private Resource getIndexHtml (String location) {
return this . resourceLoader . getResource(location + "index. html");
关于以上代码 。人类首先就这样看WelcomePageHandlerMapping 类, 该类本身就是为欢迎页面量身定做的 。实现了抽象类 AbstractUrlHandlerMapping 。该类的构造途径接收以下 4 个参数 。
-TemplateAvailabilityProviders: TemplateAvailabilityProvider 的 Bean 的集合 。可用来检查哪 些 ( 如 果 有 ) 模 板 引 擎 支 持 给 定 的 视 图。默 认 支 持 缓 存 响 应。除 非 将spring.template .provider.cache 属性设置为 false 。
:应用licationContext:为应用软件程序提供配置的控制接口 。在应用软件程序运行时 。它是只读的 。但是如果实现类接受。则可以从头开始加载 。
.Optional : index.html 对 应的 Resource 。主要通过上述代码中的 getWelcome-Page 途径获得。
:String staticPathPattern:静态资源路径表示式 。默觉得“/**” 。值定义于 WebMvc- Properties中 。
再简单就这样看一下 WelcomePageHandlerMapping 类构造途径中的业务逻辑处理源码 。
final class WelcomePageHandlerMapping extends AbstractUrlHandlerMapping {
WelcomePageHandlerMapping(TemplateAvailabilityProviders templateAvailabil
ityProviders 。
应用licationContext applicationContext, Optional
Resource welcomePage,
String staticPathPattern) {
if (welcomePage . isPresent() "/**" . equals(staticPathPattern)) {
logger . info("Adding welcome page: ”+ welcomePage .get());
setRootVi ewName("forward: index . html");
} else if (welcomeTemplateExists (templateAvailabilityProviders, applica
tion-
Context)) {
logger. info("Adding welcome page template: index");
setRootViewName(" index") ;
WelcomePageHandlerMapping的构造途径中处理了两个分支判断:当index.html资源存在 。并且静态资源路径为“**”时 。设置 RootView 的名称为“forward:index.html" 。也就是说会跳转到 index.html 页面 。如果不满足上述情况。再判断是否存在欢迎模板页面 。如果存在 。则设置 RootView 为 index 。
另外 。在获得WelcomePageHandlerMapping 的 OptionalResource参数时 。默认会在classpath:/META-INF/resources/、classpath:/resources/.classpath:/static、classpath:/public/路径 下去找到index.htmI 作为欢迎页面 。
这些路径的定义一样位置在于上节提到的 ResourceProperties 类中 。如果有多个 index.html 文件存在于以上路径中 。它们的第一时间级根据上面路径的顺序从高到低排列 。
关于 Spring MVC 配置的有关内容较多 。以上只是针对在官方网站文档中提到的有些典型功能的代码实现和原理进行教学。在学习 Spring MVC 有关全自动配置时 。把握住一个核心思路就可以:
对照没有使用 Spring Boot 的场景 。人类集成 MVC 需要进行哪些配置、涉 及哪些类 。而Spring Boot 又是怎么样将其全自动配置的 。
文章插图
本文给各位教学的内容是SpringBootWeb应用源码解析:SpringMVC的全自动配置下篇文章给各位教学的是SpringBootWeb应用源码解析:综合实战;觉得文章不错的朋友可以转发此文关注小编;感谢各位的接受!
推荐阅读
- 天津有海边游泳吗?
- 宝妈一个人带娃儿,快抑郁了,有啥好办法么?
- 巧克力棒是什么东西 为什么器官被称之为巧克力棒
- 想带孩子去天津海边玩,捡捡贝壳什么的,去哪里好?
- 请列举一下你们赚到钱的手游有哪些?
- 梦幻西游哪个区人多不卡 梦幻西游最适合五开的区
- 天津有哪些地方可以看见海,风景怎么样呢?
- 现在好多游戏都说可以提现,是真的吗?那他们怎么盈利?
- 天津东疆人工沙滩怎样?