文章目录
参考资料
运行环境
- windows10
- JDK8
- IDEA 2021.1专业版
- Spring 5.0.5
一、Spring MVC
学习任务:
- 完成Spring MVC 环境的搭建,并实现视图层 View 与 控制器 Controller 之间的参数传递
- 超市系统的登录功能
1.1 相关概念
1. SpringMVC
Spring MVC是Spring框架提供的一个 MVC 设计模式的优秀web开发框架,本质上加了@Controller对象,SpringMVC充当控制器(Controller)来建立模型与视图的交互
2.DispatcherServlet **
DispatcherServlet,即中央调度器,是web开发底层Servlet类的子类,它负责接收用户的所有请求** ,用户把请求提交给 DispatherServlet,之后 DispatherServlet把请求转发给Controller对象,最后是由Controller对象处理请求
DispatcherServlet 是SpringMVC中最核心的类,通常在web.xml里配置
3.Handler
处理器,对应MVC中的C,Controller层
- 类型:Obejct
- 作用:处理实际请求
- 标注了@RequestMapping的所有方法都可以看做是一个 Handler
4.ModelAndView
逻辑视图名 + 视图解析器(找到真实视图)
5.Model
- 类型:Map
- 常用方法:添加模型数据
- 处理方法的传入参数为Model类型
- 页面也可以直接根据model的key取值
6.View
模型对象,一般为业务层交互后返回的数据
7.InternalResourceViewResolver
视图解析器,重要的有prefix前缀和suffix后缀两个参数
1.2 SpringMVC框架的特点
- 清晰的角色划分
- 灵活的配置功能
- 提供了大量的控制器接口和实现类
- 真正做到与View层的实现无关(JSP、Velocity、Xslt等)
- 国际化支持
- 面向接口编程
- Spring提供了Web应用开发的一整套流程,不仅仅是MVC,他们之间都可以很方便的结合在一起
1.3 SpringMVC 体系架构与执行流程
1.3 执行流程示意图
1.4 执行流程分析
- 浏览器提交请求到中央调度器
DispatcherServlet
- 中央调度器
DispatcherServlet
直接将请求转发给处理器映射器HandleMapping
- 处理器映射器
HandleMapping
会根据请求,找到该请求的处理器Handle
,并将其封装为处理器执行链后返回给中央调度器DispatcherServlet
- 中央调度器
DispatcherServlet
根据处理器执行链中的处理器Handle,找到能够执行该处理器的处理器适配器HandleAdapter
- 处理器适配器
HandleAdapter
调用执行控制器Controller
- 控制器
Controller
将处理结果以及要跳转的视图封装到一个对象ModleAndView
中,并将其返回给处理器适配器HandleAdapter
- 处理器适配器
HandlerAdapter
直接将结果返回给中央调度器DispatcherServlet
- 中央调度器
DispatcherServlet
调用视图解析器ViewResolver
,将ModelAndView
中的视图名称封装为视图对象View - 视图解析器
ViewResolver
将封装了的视图对象View
返回给中央调度器DispatcherServlet
- 中央调度器
DispatcherServlet
调用视图对象View
,让其自己进行渲染,即进行数据填充,形成影响对象 - 中央调度器
DispatcherServlet
响应浏览器
1.5 SpringMVC 请求处理流程
1.6 源代码分析
- Tomcat启动,创建容器的过程
通过 load-on-start 标签指定,创建 DispatcherServlet 对象,该类是HttpServlet的子类,在创建时候会执行 init()方法 - 在DispatcherServlet对象的init()方法中
- 创建容器,读取配置文件:
WebApplicationContext ctx = new ClassPathXmlApplicationContext("springmvc.xml");
- 把容器对象放到ServletContext中
getServletContext().setAttribute(key, ctx);
上面创建容器的作用: 创建@Controller注解所在的类的对象,创建 MyController对象,把这个对象放到springmvc的容器中,容器是map,类似于 `map.put(“myController”, MyController对象)
二、SpringMVC的参数处理
2.1 请求数据
请求数据有三种形式:Get请求、Post请求和文件请求
请求方式与提交常见的应用场景
序号 | 请求方式 |
---|---|
表单请求 | 默认GET,可以指定 POST |
AJAX请求 | 默认GET,可以指定 POST |
地址栏请求 | GET 请求 |
超链接请求 | GET 请求 |
src资源路径请求 | GET 请求 |
Get请求:
@RequestMapping(method=RequestMethod.GET)
Post请求
@RequestMapping(method=RequestMethod.POST)
2.2 GET请求
固定参数1 —— @RequestParam
若请求参数与方法定义的参数名不一致,可使用@RequestParam指定请求域的名称,赋给参,例如:
@RequestMappping