初识Spring MVC,知道这些就够了

文章目录

  • Spring MVC开发流程
  • Spring MVC核心处理流程
    • 视图示例
    • controller示例
    • 分析

我现在做的系统大都是采用Spring MVC+Mybatis,除了框架的会话、流程、日志、电子存储、过滤器和拦截器的高级应用外,只要熟悉Spring MVC的基本开发流程,足以可以开展工作。最近打算再重新梳理下Spring MVC,想从两部分进行记录总结,第一部分就是“知其然”会用即可,第二部分才是“知其所以然”深入了解一下。

Spring MVC开发流程

从我自身的职业经历来说,在我从业的很长一段时间里,都是按照这个流程在做,这也就是美其名曰的“搬砖”工作。
初识Spring MVC,知道这些就够了_第1张图片从上图可以看出,所有的请求过来之后,先到达Controller,Controller是请求的入口,根据请求的url来匹配。Controller调用service层,service层主要是业务逻辑处理,该层一般也处理数据库事务问题。service层调用dao层,本流程中使用的mybatis持久层框架,mybatis需要定义接口和映射器。当Controller获取到数据后,将数据渲染到视图中,这样就展现到浏览器端了。

Spring MVC核心处理流程

Spring MVC核心是DispatcherServlet组件。
初识Spring MVC,知道这些就够了_第2张图片在spring-webmvc-5.3.12.jar中,可以看到有一个DispatcherServlet.properties文件,这个文件中的组件在容器启动时就初始化,在Spring Boot中可以通过配置进行选择性的初始化。

视图示例

以thymeleaf视图为例进行说明。在ThymeleafProperties.java文件中,定义了prefix和suffix,代码如下:

@ConfigurationProperties(
    prefix = "spring.thymeleaf"
)
public class ThymeleafProperties {
    private static final Charset DEFAULT_ENCODING;
    // 默认前缀
    public static final String DEFAULT_PREFIX = "classpath:/templates/";
    // 默认后缀
    public static final String DEFAULT_SUFFIX = ".html";
    private boolean checkTemplate = true;
    private boolean checkTemplateLocation = true;
    private String prefix = "classpath:/templates/";
    private String suffix = ".html";
    private String mode = "HTML";
    // 编码格式
    private Charset encoding;
    // 是否缓存
    private boolean cache;
    private Integer templateResolverOrder;
    private String[] viewNames;
    private String[] excludedViewNames;
    private boolean enableSpringElCompiler;
    private boolean renderHiddenMarkersBeforeCheckboxes;
    private boolean enabled;
    private final ThymeleafProperties.Servlet servlet;
    private final ThymeleafProperties.Reactive reactive;
    ...
}

项目中yml文件配置如下:

# Spring配置
spring:
  # 模板引擎
  thymeleaf:
    mode: HTML
    encoding: utf-8
    # 禁用缓存
    cache: false

controller示例

controller提供一个add请求,该请求返回一个视图,controller中为prefix = “platform/config”,完整视图路径为:classpath:/templates/platform/config/add.html。

@Controller
@RequestMapping("/platform/config")
public class PlatformConfigController
{
    private String prefix = "platform/config";
    @GetMapping("/add")
    public String add(ModelMap mmap)
    {
        // 示例
        mmap.put("config", new Config());
        return prefix + "/add";
    }
    ......    
}

分析

  • 浏览器发送一个请求:http://127.0.0.1/demo/platform/config/add
  • 请求分发到PlatformConfigController的add方法 执行完后返回视图名称给 视图解析器
  • ViewResolver视图解析器定位到View视图(/templates/platform/config/add.html)
  • 最后View视图将数据模型渲染,展示给浏览器客户端
  • 渲染时使用EL表达式

对于使用@ResponseBody注解的控制器方法,就不需要视图解析器处理了

你可能感兴趣的:(Spring,Boot,#,spring,JAVA,mvc,spring,java)