SpringMvc执行流程细节

概述:

总所周知,MVC 全名是 Model View Controller,是 模型(model)-视图(view)-控制(controller)
的缩写,是一种用于设计创建 Web 应用程序表现层的模式。MVC 中每个部分各司其职:

  • Controller(控制器):SpringMvc中,所有的请求都会通过一个前端控制器Servlet,DispatcherServlet就是前端控制器,是应用程序中处理用户交互的部分。作用一般就是处理程序逻辑的
  • Model(模型):通常指的就是我们的数据模型。作用一般情况下用于封装数据。
  • View(视图):通常指的就是我们的 jsp 或者 html。作用一般就是展示数据的。

流程和组件是SpringMVC的核心,这里包括Dispatcher,HandlerAdapter等,关于这些组件的初始化,我们可以看到spring-webmvc-xxx.jar包的属性文件DispatcherServlet.properties文件,它定义的对象都是在SpringMVC开始时就初始化,并且存放在SpringIoc容器中,有兴趣的小伙伴可以看一下源码
在这里插入图片描述

SpringMvc在三层架构的位置:
在这里插入图片描述

一个案例:

1. 配置DispatcherServlet

DispatcherServlet是SpringMvc的核心,SpringMVC的工作流程是围绕DispatcherServlet展开的,它也是SpringMVC最重要的组件,按照传统的方式DispatcherServlet会被配置在web.xml中

当DispatcherServlet启动的时候,它会创建Spring应用上下文,并加载配置文件(xml文件)或配置类中所声明的bean

 <!--配置前端控制器-->
  <servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

也可以在java中配置

import org.springframework.web.servlet.support.
AbstractAnnotationConfigDispatcherServletInitializer;

/**
 * @author rwh
 * @date 2020/3/5
 */
public class DispatcherServletDemo 
extends AbstractAnnotationConfigDispatcherServletInitializer {
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[0];
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {//指定配置类
        return new Class<?>[] {config.class};
    }

    @Override
    protected String[] getServletMappings() {//将DispatcherServlet映射到"/"
        return new String[]{"/"};
    }
}

在基于java配置的方式中,我么可以看到自定义的类继承了AbstractAnnotationConfigDispatcherServletInitializer
这里需要做一个说明:只要扩展了AbstractAnnotationConfigDispatcherServletInitializer的任意类都会自动地配置DispatcherServlet和spring应用上下文(指定配置类),在这里简单了解一下

2.开启注解扫描,装载bean

注意:
当我们好Dispatcher后,Dispatcher会自动的创建spring应用上下文,加载我们的bean
这是对应的xml文件

 <!-- 开启注解扫描 -->
    <context:component-scan base-package="****"/>

    <!-- 视图解析器对象 -->
    <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/pages/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

3.编写基本的控制器

@Controller
public class Hello {
    @RequestMapping(path="/hello")
    public String sayHello(){
        System.out.println("Hello StringMVC");
        return "success";
    }
}

目录结构:
在这里插入图片描述
开始运行:
在这里插入图片描述
现在分析过程:
在这里插入图片描述
附:
在这里插入图片描述

发布了37 篇原创文章 · 获赞 11 · 访问量 3895

猜你喜欢

转载自blog.csdn.net/Alphr/article/details/104678465