(二)SpringMVC原理解析之大致流程分析

目录

一、传统MVC模式

二、SpringMVC对MVC的改变以及封装

1.servlet-name的配置注入

2.编写的@Controller注解类

3.指定ViewResolver


一、传统MVC模式

既然要了解SpringMVC,就应该了解MVC架构的模型。其架构图如下:

(二)SpringMVC原理解析之大致流程分析_第1张图片

该图大致描述了MVC的运行流程:

  1. 用户通过在view视图上操作产生事件;
  2. 事件经过controller控制层进行处理,也可以直接请求model模型层;
  3. 接受控制层的处理操作模型层,或者通过模型层来反向影响控制层;
  4. 最后更新视图层事件。

也可以看下图来更直观的感受MVC各个模块的功能:

(二)SpringMVC原理解析之大致流程分析_第2张图片

二、SpringMVC对MVC的改变以及封装

SpringMVC对MVC改动的大致流程图:

(二)SpringMVC原理解析之大致流程分析_第3张图片

可以清楚地看到SpringMVC通过一个自己写的Servlet来做中转,从而延续到框架的其他的功能。接下来大致分析一下各个流程所对应的显式配置。

1.servlet-name的配置注入

那么从(一)SpringMVC集成原理解析之项目搭建文章中的配置流程来看,配置完jar包后,在web.xml文件中配置的如下代码,就对应了图中servlet-name的配置注入:


    dispatcher
    org.springframework.web.servlet.DispatcherServlet
    
        contextConfigLocation
        classpath*:spring-mvc.xml
    
    1


    dispatcher
    /

可以看到这个配置是非常常规的Servlet应用配置,因此DispatcherServlet初步可以推断为其就是Servlet的实现子类。

2.编写的@Controller注解类

@Controller
@RequestMapping(path = "/")
public class TestController {

    @Autowired
    private TestService testService;

    @RequestMapping(path = "/test")
    public String getTestPage() {
        System.out.println("test");
        return "/WEB-INF/views/test";
    }

    @RequestMapping(path = "/")
    public String defaultMethod() {
        System.out.println("hello");
        testService.testPrint();
        return "hello";
    }

    @RequestMapping(path = "/json")
    @ResponseBody
    public JsonDto jsonTest() {
        JsonDto jsonDto = new JsonDto();
        jsonDto.setResultCode("0");
        jsonDto.setMessage("success");
        System.out.println("jsonDto:" + jsonDto);
        return jsonDto;
    }

}

可以看到其中的大部分方法就是有一个请求URL路径,然后返回了指定的路径String,此过程我们可以看做图中2-5的流程。

3.指定ViewResolver

再接着看spring-mvc.xml文件中的配置:


    

其就对应了步骤6,对视图的解析,从而判断具体要返回到哪个视图上。

至此,SpringMVC的大致流程就走完了,相较于普通的servlet开发每增加一个serlvet都需要指定servlet-name和servlet-mapiing,SpringMVC对该流程进行了封装,使MVC开发模式更加简单便捷。

 

 

你可能感兴趣的:(Java第三方集成框架,#,SpringMVC相关,mvc,spring,java)