SpringMVC —— 第十章 SpringMVC 组件解析
1.SpringMVC 的执行过程
- 客户端发送请求至前端控制器 DispatcherServlet。
- DispatcherServlet 收到请求调用 HandlerMapping 处理器映射器。
- 处理器映射器找到具体的处理器(可以根据 XML 配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给 DispatcherServlet。
- DispatcherServlet 调用 HandlerAdapter 处理器适配器。
- HandlerAdapter 经过适配调用具体的处理器(Controller,也叫后端控制器)。
- Controller 执行完返回 ModelAndView。
- HandlerAdapter 将 Controller 执行结果 ModelAndView 返回给 DispatcherServlet。
- DispatcherServlet 将 ModelAndView 传给 ViewReslover 视图解析器。
- ViewResolver 解析后返回具体 View。
- DispatcherServlet 根据 View 进行渲染视图(即将模型数据填充至视图中)。DispatcherServlet 响应用户。
2. SpringMVC 注解解析
@RequestMapping
作用:用于请求 URL 和处理请求方法之间的对应关系
位置:
- 在类上,请求 URL 的第一级访问目录。不写的话,就相当于应用的根目录
- 在方法上,请求的 URL 的第二级访问目录,与类上的
@RequestMapping
标注的一级目录一起组成访问虚拟路径
属性:
value
:用于指定请求的 URL。它和path
属性的作用是一致的(默认属性)method
:用于指定请求方式params
:用于指定限制请求参数的条件。它支持简单的表达式。要求请求参数的key
和value
必须和配置的一模一样- 例如:
- **
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 = ""; // 视图名称后缀