02.springMVC执行流程

125 阅读3分钟

上节访问演示

@Controller
@RequestMapping("/laoma")
public class MyController {
    @RequestMapping("/first")
    public String first() {
        System.out.println("hello world");
        return "first";
    }
}

根据上面controller的RequestMapping的请求路径叠加后,访问结果如下:

image-20230321110623901

执行时序图

image-20230321144837992

image-20230321145705784

几大器逻辑流转图

image-20230321150224809

  • DispatcherServlet:前端控制器

    用户请求到达前端控制器,它就相当于 MVC 模式中的 C,dispatcherServlet 是整个流程控制的中心,由 它调用其它组件处理用户的请求,dispatcherServlet 的存在降低了组件之间的耦合性。

  • HandlerMapping:处理器映射器

    HandlerMapping 负责根据用户请求找到 Handler 即处理器,SpringMVC 提供了不同的映射器实现不同的 映射方式,例如:配置文件方式,实现接口方式,注解方式等。

  • Handler:处理器 (自己定义的Controller处理单元)

    就是我们开发中要编写的具体业务控制器。由 DispatcherServlet 把用户请求转发到 Handler。由 Handler 对具体的用户请求进行处理。

  • HandlAdapter:处理器适配器

    通过 HandlerAdapter 对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行

  • View Resolver:视图解析器

    View Resolver 负责将处理结果生成 View 视图,View Resolver 首先根据逻辑视图名解析成物理视图名 即具体的页面地址,再生成 View 视图对象,最后对 View 进行渲染将处理结果通过页面展示给用户。

  • View:视图

    SpringMVC 框架提供了很多的 View 视图类型的支持,包括:jstlView、freemarkerView、ThymeleafView等。我们最常用的视图就是 jsp。 一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要由程序员根据业务需求开 发具体的页面。

springmvc.xml中配置三大组件

目前项目的springmvc.xml已经配置了视图解析器:

<!--配置视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/views/"/>
    <property name="suffix" value=".jsp"/>
</bean>

还是需要配置处理器映射器和处理器适配器的,这里仅仅开启注解驱动即可:

image-20230322103746677

<!--命名空间增加mvc-->
xmlns:mvc="http://www.springframework.org/schema/mvc"
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
​
<!--开启MVC注解驱动,它会自动配置好处理器映射器和处理器适配器-->
<mvc:annotation-driven>

解释:

在 SpringMVC 的各个组件中,处理器映射器、处理器适配器、视图解析器称为 SpringMVC 的三大组件。

使 用 mvc:annotation-driven 自动加载 RequestMappingHandlerMapping (处理映射器) 和 RequestMappingHandlerAdapter ( 处 理 适 配 器 ) , 可 用 在 SpringMVC.xml 配 置 文 件 中 使 用 mvc:annotation-driven替代注解处理器和适配器的配置。

而且当配置了mvc:annotation-driven后,Spring就知道了我们启用注解驱动。然后Spring通过context:component-scan标签的配置,会自动为我们将扫描到的@Component,@Controller,@Service,@Repository等注解标记的组件注册到工厂中,来处理我们的请求,这个时候接收返回json数据、参数验证、统一异常等功能。

静态资源放行

1. 修改index.jsp

<html>
<head>
    <link rel="stylesheet" type="text/css" href="static/css/bbb.css">
    <script src="static/js/ccc.js"></script>
</head>
<body>
<h2>Hello World!</h2>
<img src="static/image/aaa.png">
</body>
</html>

2. 增加相关静态资源

image-20230322110253056

3. 出现404错误

image-20230322110420977

4. 配置静态资源放行(springmvc.xml)

<!--静态资源放行-->
<mvc:resources mapping="/static/**" location="/static/"/>

5. 代码地址

gitee.com/mayuanfei/s…下的springmvc02

记忆印记

  • springmvc的四大器:前端控制器、处理器映射器、处理器适配器、视图解析器
  • 前端控制器:相当于C的位置,进行全局控制;
  • 处理器映射器:通过用户请求找到具体的处理器
  • 处理器适配器:对处理器进行执行
  • 视图解析器:负责将处理结果生成 View 视图
  • 大概记住四大器的逻辑流转图
  • 启用注解驱动会自动配置好处理器映射器和处理器适配器,还能使返回json数据、参数验证、统一异常等功能生效
  • 会配置静态资源放行