SpringBoot为整合SpringMVC框架实现Web开发,主要提供了以下自动化配置的功能特性
内置了两个视图解析器
ContentNegotiatingViewResolver
BeanNameViewResolver
视图解析器自动配置原理:在ContentNegotiatingViewResolver.class中找到了resolveViewName方法,里面最主要的内容是
获取候选的视图
得到最好的视图
获取候选的视图代码如下:
private List<View> getCandidateViews(String viewName, Locale locale, List<MediaType> requestedMediaTypes) throws Exception {
List<View> candidateViews = new ArrayList();
if (this.viewResolvers != null) {
Assert.state(this.contentNegotiationManager != null, "No ContentNegotiationManager set");
Iterator var5 = this.viewResolvers.iterator();
?
//遍历所有的viewResolver
while(var5.hasNext()) {
ViewResolver viewResolver = (ViewResolver)var5.next();
View view = viewResolver.resolveViewName(viewName, locale);
if (view != null) {
//把遍历出来的视图解析器添加到候选视图解析器当中
candidateViews.add(view);
}
?
Iterator var8 = requestedMediaTypes.iterator();
?
while(var8.hasNext()) {
MediaType requestedMediaType = (MediaType)var8.next();
List<String> extensions = this.contentNegotiationManager.resolveFileExtensions(requestedMediaType);
Iterator var11 = extensions.iterator();
?
while(var11.hasNext()) {
String extension = (String)var11.next();
String viewNameWithExtension = viewName + ‘.‘ + extension;
view = viewResolver.resolveViewName(viewNameWithExtension, locale);
if (view != null) {
//把遍历出来的视图解析器添加到候选视图解析器当中
candidateViews.add(view);
}
}
}
}
}
if (!CollectionUtils.isEmpty(this.defaultViews)) {
candidateViews.addAll(this.defaultViews);
}
?
//把视图返回
return candidateViews;
}
总结:
Spring Boot视图解析器自动配置原理为:实现了ViewResolver的类,都可以被看做视图解析器,SpringBoot会把用户配置的视图解析器和Spring Boot自己的组合起来,选择最好的那个使用。
支持静态资源以及WebJars
自动注册了类型转换器和格式化器
自动注册了消息代码解析器
支持静态项目首页index.html
支持定制应用图标favicon.ico:新版本没有了这个功能
自动初始化Web数据绑定器ConfigurableWebBindingInitializer
在WebMvcAutoConfiguration.class中发现这一段代码:
说明我们可以在全局配置文件中配置格式,默认格式为:yyyy-MM-dd HH:mm:ss
在全局配置文件中配置格式
spring
自定义拦截类
注册自定义的拦截器
在自定义配置类MyMvcConfig中,重写addInterceptors方法
使用组件方式整合Servlet
创建自定义Servlet类
创建Servlet组件配置类
使用路径扫描方式整合Servlet
创建自定义Servlet类
在主启动程序类上添加 @ServletComponentScan 注解,开启注解方式的Servlet组件扫面支持
使用组件方式整合Filter
创建自定义Filter
@Component
public class MyFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException { }
?
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("Hello,MyFilter");
filterChain.doFilter(servletRequest,servletResponse);
}
?
@Override
public void destroy() { }
}
向Servlet组件配置类中注册自定义Filter
使用路径扫描方式整合Filter
创建自定义Filter
在主启动程序类上添加 @ServletComponentScan 注解,开启注解方式的Servlet组件扫面支持
使用组件方式整合Listener
创建自定义Listener类
向Servlet组件配置类中注册自定义Listener
使用路径扫描方式整合Listener
创建自定义Listener类
在主启动程序类上添加 @ServletComponentScan 注解,开启注解方式的Servlet组件扫面支持
导入JQuery依赖
前端页面
配置文件上传
spring
Controller
英文名文件下载
1、添加文件下载工具依赖
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
2、文件下载页面
3、Controller
中文名文件下载
在上一步的下载中文名文件时,中文文字下载时全部不显示,解决此问题的方法如下:
Controller
原文:https://www.cnblogs.com/LittleSkinny/p/13695432.html