本次项目所有能够使用的静态资源可以免费进行下载
spring boot架构除了对自动化进行了整体的提升,他还对springmvc架构进行了配置,例如如何在原本中配置中进行扩展和定制
那么在官方文档中对与这种方法的使用是如何进行阐述的呢?
spring boot官方文档可以去看看官方对与功能的描述(全英文)
上面图片则是spring官方对与在spring boot实现实现对springmvc配置调整的阐述什么意思呢?
1:springboot为spring mvc提供了自动化配置,极大的解放了双手
2:自动化配置在原本spring基础功能的基础上增加了视图解析器和静态资源目录以及webjars功能
注意:增加的这些功能在博主spring boot专栏有着详细的讲解有感兴趣的可以先去了解一下增加的功能
3:除了视图解析器还有convert和转换器和格式化器等等
4:关于定制方面:首页定制 图标定制
5:初始化数据绑定器:它可以帮助我们将请求的数据添加到JavaBean中
6:关于定制方面的详细步骤
如果您希望保留Spring Boot MVC功能,并且希望添加其他MVC配置(拦截器、格式化程序、视图控制器和其他功能),则可以添加自己
的@configuration类,类型为webmvcconfiguer,但不添加@EnableWebMvc。如果希望提供
RequestMappingHandlerMapping、RequestMappingHandlerAdapter或ExceptionHandlerExceptionResolver的自定义
实例,则可以声明WebMVCregistrationAdapter实例来提供此类组件。
7:如果您想完全控制Spring MVC,可以添加自己的@Configuration,并用@EnableWebMvc进行注释。
假设我们想要自己定制该怎么进行定制呢?
首先我们需要从底层代码去了解spring boot中自动化对视图解析器是如何进行配置的
自动化配置类:WebMvcAutoConfiguration
在此类中关于viewResolver的方法
该方法标注了@Bean,所以会把ContentNegotiatingViewResolver加入容器。根据注释可以看到,ContentNegotiatingViewResolver用于管理所有的ViewResolver,即所有实现了ViewResolver的Bean,然后对于每个View找到最合适的ViewResolver去解析。我们可以向容器中添加自定义视图解析器,添加的自定义视图解析器也会被ContentNegotiatingViewResolver所管理。
@Bean
@ConditionalOnBean(ViewResolver.class)
@ConditionalOnMissingBean(name = "viewResolver", value = ContentNegotiatingViewResolver.class)
public ContentNegotiatingViewResolver viewResolver(BeanFactory beanFactory) {
ContentNegotiatingViewResolver resolver = new ContentNegotiatingViewResolver();
resolver.setContentNegotiationManager(beanFactory.getBean(ContentNegotiationManager.class));
// ContentNegotiatingViewResolver uses all the other view resolvers to locate
// a view so it should have a high precedence
resolver.setOrder(Ordered.HIGHEST_PRECEDENCE);
return resolver;
}
从viewResolver方法中可以看出,视图解析器调用的类是@ContentNegotiatingViewResolver点击去看看
找到getCandidateViews方法获取候选视图,其中一行代码是这样的
Iterator var8 = requestedMediaTypes.iterator();
这行代码的意思是将所有的视图解析器都拿来进行循环输出
以上就是关于spring boot对视图解析器的配置,接下来实现的是在现有配置的基础上,对视图解析器进行扩展
创建一个新的视图解析器,看看能否显示出来
package com.example.demo.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.View;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.util.Locale;
@Configuration
public class Myconfig_viewResolver implements WebMvcConfigurer { //按照官方文档对功能扩展类,添加配置注解并实现webmvc配置接口
@Bean //将下面创建新的视图解析器,添加给bean管理,添加到容器中
public ViewResolver viewResolver(){
return new MyviewResolver();
}
public static class MyviewResolver implements ViewResolver{ //配置视图解析器
@Override
public View resolveViewName(String viewName, Locale locale) throws Exception {
return null;
}
}
}
新的视图解析器配置好了,接下来通过断点来查询这配置新的视图解析器能否加入到容器中
前后端交互是通过DispatcherServlet来实现的 SpringMVC的核心就是DispatcherServlet,DispatcherServlet实质也是一个HttpServlet。DispatcherSevlet负责将请求分发,所有的请求都有经过它来统一分发。
doService是作为springmvc承接Servlet的入口函数,调用doDispatch实现:在dodispatch方法添加一个断点,再通过前后段交互看看,来看看视图解析器都有哪些?
运行项目,在通过前后端访问,再查看
在断点去查看
视图解析容器中有五个视图解析器其中一个就是上边咱们添加的视图解析器,配置成功,这是扩展,同样也可以举一反三,一环接着一环即可。
上面介绍了自己如何进行diy设置一个配置类,并将diy配置的内容添加到容器中得到该功能的实现,接下来讲解一下如何修改spring boot中的功能?
如果在前端访问一下,那么他就会去静态资源目录中去寻找,或者是去controller类中去寻找,我们要实现的是实现网页跳转,定义一个域名,将这个域名跳转到其他的网页
代码
package com.example.demo.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration //配置类
public class Myconfig_viewcontroller implements WebMvcConfigurer { //实现webmvc配置接口
@Override
public void addViewControllers(ViewControllerRegistry registry) { //重写接口中一个方法,实现网页的跳转
registry.addViewController("/test").setViewName("demo5"); //前端访问test域名,他会跳转到demo5这个静态资源
}
}
访问域名为test
网页跳转成功,成功修改spring boot默认配置