是什么

SpringMVC是基于Java实现MVC模型的轻量级框架
MVC:Model(模型) View(视图)Controller(控制器)

怎么用

入门案例

  1. 导入MVC坐标

    1. <!-- servlet3.1规范的坐标 -->
    2. <dependency>
    3. <groupId>javax.servlet</groupId>
    4. <artifactId>javax.servlet-api</artifactId>
    5. <version>3.1.0</version>
    6. <scope>provided</scope>
    7. </dependency>
    8. <!--jsp坐标-->
    9. <dependency>
    10. <groupId>javax.servlet.jsp</groupId>
    11. <artifactId>jsp-api</artifactId>
    12. <version>2.1</version>
    13. <scope>provided</scope>
    14. </dependency>
    15. <!--spring的坐标-->
    16. <dependency>
    17. <groupId>org.springframework</groupId>
    18. <artifactId>spring-context</artifactId>
    19. <version>5.1.9.RELEASE</version>
    20. </dependency>
    21. <!--spring web的坐标-->
    22. <dependency>
    23. <groupId>org.springframework</groupId>
    24. <artifactId>spring-web</artifactId>
    25. <version>5.1.9.RELEASE</version>
    26. </dependency>
    27. <!--springmvc的坐标-->
    28. <dependency>
    29. <groupId>org.springframework</groupId>
    30. <artifactId>spring-webmvc</artifactId>
    31. <version>5.1.9.RELEASE</version>
    32. </dependency>
  2. 定义表现层业务处理器Controller,并配置成spring的bean spring-mvc.xml(等同于Servlet) ```xml <?xml version=”1.0” encoding=”UTF-8”?> <beans xmlns=”http://www.springframework.org/schema/beans

    1. xmlns:context="http://www.springframework.org/schema/context"
    2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    4. http://www.springframework.org/schema/context
    5. http://www.springframework.org/schema/context/spring-context.xsd">

  1. 3. web.xml中配置SpringMVC核心控制器
  2. ```xml
  3. <servlet>
  4. <servlet-name>DispatcherServlet</servlet-name>
  5. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  6. <init-param>
  7. <param-name>contextConfigLocation</param-name>
  8. <param-value>classpath*:spring-mvc.xml</param-value>
  9. </init-param>
  10. </servlet>
  11. <servlet-mapping>
  12. <servlet-name>DispatcherServlet</servlet-name>
  13. <url-pattern>/</url-pattern>
  14. </servlet-mapping>
  15. <!--乱码处理过滤器,与Servlet中使用的完全相同,差异之处在于处理器的类由Spring提供-->
  16. <filter>
  17. <filter-name>CharacterEncodingFilter</filter-name>
  18. <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  19. <init-param>
  20. <param-name>encoding</param-name>
  21. <param-value>UTF-8</param-value>
  22. </init-param>
  23. </filter>
  24. <filter-mapping>
  25. <filter-name>CharacterEncodingFilter</filter-name>
  26. <url-pattern>/*</url-pattern>
  27. </filter-mapping>
  1. 设定具体Controller的访问路径(等同于Servlet在web.xml中的配置)

    1. //设定当前方法的访问映射地址
    2. @RequestMapping("/save")
    3. public void save(){
    4. System.out.println("user mvc controller is running ...");
    5. }
  2. 设置返回页面

    1. //设定当前方法的访问映射地址
    2. @RequestMapping("/save")
    3. //设置当前方法返回值类型为String,用于指定请求完成后跳转的页面
    4. public String save(){
    5. System.out.println("user mvc controller is running ...");
    6. //设定具体跳转的页面
    7. return "success.jsp";
    8. }

    架构图

    image.png

  • DispatcherServlet:前端控制器, 是整体流程控制的中心,由其调用其它组件处理用户的请求, 有效的降低了组件间的耦合性
  • HandlerMapping:处理器映射器, 负责根据用户请求找到对应具体的Handler处理器
  • Handler:处理器,业务处理的核心类,通常由开发者编写,描述具体的业务
  • HandlAdapter:处理器适配器,通过它对处理器进行执行
  • View Resolver:视图解析器, 将处理结果生成View视图
  • View:视图,最终产出结果, 常用视图如jsp、 html

    配置说明

  1. 扫描加载指定包下的所有的控制类
  2. 过滤器
  3. 使用mvc提供默认的放行方式

    面试题

    谈一下 SpringMVC 的执行流程以及各个组件的作用(必会)

  4. 用户发送请求到前段控制器(DispatcherServlet)

  5. 前端控制器收到请求调用处理器映射器(HandleMapping),去查找处理了(Handler)
  6. 处理器映射器找到具体的处理器,生成处理器对象及处理器拦截器一并返回给DispatcherServlet
  7. 前端控制器调用处理器映射器
  8. 处理器适配器(HandlerAdapter)调用自定义处理器Controller,也叫后端控制器
  9. 自定义的处理器类Controller将得到的参数进行处理并返回结果给处理器映射器
  10. 处理器适配器将得到的结果返回给前端控制器
  11. 前端控制器将ModelAndView传给试图解析器(ViewReslover)
  12. 视图解析器将得到的参数从逻辑视图转换为物理视图,并返回给前端控制器
  13. 前端控制器调用物理视图进行渲染并返回
  14. 前端控制器将渲染后的结果返回