SpringMVC 第十章 SpringMVC 组件解析


SpringMVC —— 第十章 SpringMVC 组件解析


1.SpringMVC 的执行过程

SpringMVCExecutionProcess

  1. 客户端发送请求至前端控制器 DispatcherServlet。
  2. DispatcherServlet 收到请求调用 HandlerMapping 处理器映射器。
  3. 处理器映射器找到具体的处理器(可以根据 XML 配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给 DispatcherServlet。
  4. DispatcherServlet 调用 HandlerAdapter 处理器适配器。
  5. HandlerAdapter 经过适配调用具体的处理器(Controller,也叫后端控制器)。
  6. Controller 执行完返回 ModelAndView。
  7. HandlerAdapter 将 Controller 执行结果 ModelAndView 返回给 DispatcherServlet。
  8. DispatcherServlet 将 ModelAndView 传给 ViewReslover 视图解析器。
  9. ViewResolver 解析后返回具体 View。
  10. DispatcherServlet 根据 View 进行渲染视图(即将模型数据填充至视图中)。DispatcherServlet 响应用户。

2. SpringMVC 注解解析

@RequestMapping

作用:用于请求 URL 和处理请求方法之间的对应关系

位置:

  • 在类上,请求 URL 的第一级访问目录。不写的话,就相当于应用的根目录
  • 在方法上,请求的 URL 的第二级访问目录,与类上的 @RequestMapping 标注的一级目录一起组成访问虚拟路径

属性:

  • value用于指定请求的 URL。它和 path 属性的作用是一致的(默认属性)
  • method用于指定请求方式
  • params用于指定限制请求参数的条件。它支持简单的表达式。要求请求参数的 keyvalue 必须和配置的一模一样
    • 例如:
    • **params = {"accountName"}**,表示请求参数必须有 accountName
    • **params = {"money!100"}**,表示请求参数中 money 不能是 100

示例代码:

com.yourname.controller.UserController

/**
 * @author gregperlinli
 */
@Controller
@RequestMapping(value = "/user")
public class UserController {
    @RequestMapping(value = "/quick", method = RequestMethod.GET, params = {"username"})
    public String save() {
        System.out.println("Controller save running");
        return "success.jsp";
    }
}

注意⚠️:

1. mvc 命名空间引入

命名空间:

xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"

约束地址:

http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd

2. 组件扫描

SpringMVC 基于 Spring 容器,所以在进行 SpringMVC 操作时,需要将 Controller 储存到 Spring 容器中,如果使用 @Controller 注解标注的话,就需要使用以下参数进行组件扫描。

<context:component-scan base-package="com.yourname.controller"/>

3. SpringMVC 的 XML 配置

视图解析器

SpringMVC 有默认的组件配置,默认组件都是 DispatcherServlet.properties 配置文件中配置的,该配置文件的地址 org.springframework.web.servlet.DispatcherServlet.properties,该文件中配置了默认试图解析器如下:

org.springframework.web.servlet.ViewResolver=org.springframework.web.servlet.view.InternalResourceViewResolver

翻看该解析器的源码,可以看到该解析器的默认配置如下:

REDIRECT_URL_PREFIX = "redirect:";    // 重定向前缀
FORWORD_URL_PREFIX = "forward:";        // 转发前缀(默认值)
prefix = "";        // 视图名称前缀
suffix = "";        // 视图名称后缀

4. 知识要点

SpringMVC 的相关组件

  • 前端控制器:DispatcherServlet
  • 处理器映射器:HandlerMapping
  • 处理器适配器:HandlerAdapter
  • 处理器:Handler
  • 视图解析器:ViewResolver
  • 视图:view

SpringMVC 的注解和配置

  • 请求映射注解:@RequestMapping
  • 视图解析器配置:
REDIRECT_URL_PREFIX = "redirect:";    // 重定向前缀
FORWORD_URL_PREFIX = "forward:";        // 转发前缀(默认值)
prefix = "";        // 视图名称前缀
suffix = "";        // 视图名称后缀


文章作者: gregPerlinLi
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 gregPerlinLi !
  目录