Spring MVC
Model 1时代
所有请求直接转发到jsp然后在jsp编写业务代码,然后根据不同的结果跳转不同的页面
Model 2时代
Controller
- 取得表单数据
- 处理业务逻辑
- 根据不同的情况跳转不同的页面
View
- 展示数据
Model
- 业务逻辑
- 保存数据
简介
SpringMVC的特点:
- 轻量级,简单易学
- 与spring无缝结合,可以将mvc中所有需要的类注册到ioc容器中
- 高效,基于请求和响应的mvc框架
- 功能强大,RESTFUL风格,格式化,数据验证
- 约定大于配置
说白了学它就一个原因,因为它让我们开发变得简单了
原理
回顾servlet
我们都学过java web,那时候我们对于前端的请求都是通过一个servlet来处理的,然后在servlet里面,处理前端传来的数据,调用业务逻辑,返回处理之后的数据,然后servlet根据这些数据,进行重定向或者请求转发
一个请求对应一个servlet,这就会导致我们在开发中写了大量的servlet,而且每次都需要在web.xml中注册,十分繁琐。
没有什么是加一层解决不了的,所以,springmvc在servlet之前加了一层来简化我们的开发
SpringMVC的web框架是以围绕DispatcherServlet(前端控制器,调度器,请求分发器)设计的。它的作用就是将请求分发到不同的处理器(方法或者类,下面的初识mvc是以类级作为处理器,但是一般都会使用方法级去做处理器)
下图是DispatcherServlet的结构图,我们可以看到一些在javaweb阶段比较眼熟的类,比如Servlet,GenericServlet,HttpServlet。因此我们可以得出,DispatcherServlet本质就是一个和我们当时写的servlet是一样的,只是他帮我们做了很多事情。
人到中年有三大件,枸杞大枣保温杯。
SpringMVC中也有三大件,分别是
- 处理器映射器(HandlerMapping)
- 处理器适配器(HandlerAdapter)
- 视图解析器(ViewResolver)
我们来看看这三大件是如何在springmvc中发挥作用的,原理图如下:
核心类图
简要分析
- DispatcherServlet就可以简单理解为前端控制器,他会将所有客户端的请求拦截
- 将该请求发送给HandlerMapping实现类,该实现类根据url查找到对应的控制器,将结果返回给DispatcherServlet
- DispatcherServlet根据HandlerMapping解析的结果,适配并执行对应的控制器的逻辑,
- 控制器返回信息,HandlerAdapter实现类接收该信息并将其解析成ModelAndView对象返回到DispatcherServlet
- DispatcherServlet调用ViewResolver实现类将HandlerAdapter实现类传回来的视图逻辑和模型解析
- 视图解析器将解析后的逻辑视图名传回DispatcherServlet
- DispatcherServlet根据解析后的视图名称找到该视图
- 渲染视图,返回页面,作出响应