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

目录

一、传统MVC模式

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

1.servlet-name的配置注入

2.编写的@Controller注解类

3.指定ViewResolver


一、传统MVC模式

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

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

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

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

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

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

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

1.servlet-name的配置注入

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

<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath*:spring-mvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

可以看到这个配置是非常常规的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文件中的配置:

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="suffix" value=".html"/>
</bean>

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

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

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值