框架-SpringMVC
1 MVC设计模式
- 控制程序流转的控制器(Controller)
- 封装数据处理数据的模型(Model)
- 负责展示数据的视图(view)
- 符合MVC设计思想的软件应该保证上面这三部分相互独立,互不干扰,每一个部分只负责自己擅长的部分。这样做的好处是,软件的结构会变得更加的清晰,可读性强。有利于后期的扩展和维护,并且代码可以实现复用
2 SpringMVC简介
- Springmvc是spring框架的一个模块,spring和springmvc无需中间整合层整合
- Springmvc是一个基于mvc的web框架
3 springmvc执行原理
- 用户发送请求 至 前端控制器(DispatcherServlet);
- 前端控制器(DispatcherServlet)收到请求后调用处理器映射器(HandlerMapping)
处理器映射器(HandlerMapping)找到具体的Controller(可以根据xml配置、注解进行查找),并将Controller返回给DispatcherServlet; - 前端控制器(DispatcherServlet)调用处理器适配器(HandlerAdapter)。处理器适配器经过适配调用具体的Controller;(Controller–> service --> Dao --> 数据库)
Controller执行完成后返回ModelAndView,
处理器适配器(HandlerAdapter)将controller执行的结果(ModelAndView)返回给前端控制器(DispatcherServlet);
提示:Model(模型数据,即Controller处理的结果,Map) View(逻辑视图名,即负责展示结果的JSP页面的名字)
- 前端控制器(DispatcherServlet)将执行的结果(ModelAndView)传给视图解析器(ViewReslover)
视图解析器(ViewReslover)根据View(逻辑视图名)解析后返回具体JSP页面 - 前端控制器(DispatcherServlet)根据Model对View进行渲染(即将模型数据填充至视图中);前端控制器(DispatcherServlet)将填充了数据的网页响应给用户。
4 Struts2 和 SpringMvc的区别
- 入口不同:
Struts2:filter过滤器
SpringMvc:一个Servlet即前端控制器(DispatcherServlet) - 开发方式不同:
Struts2:基于类开发,传递参数通过类的属性,只能设置为多例
SpringMvc:基于方法开发(一个url对应一个方法),请求参数传递到方法形参,可以为单例也可以为多例(建议单例) - 请求方式不同:
Struts2:通过OGNL存取数据
SpringMvc:通过参数解析器将request请求内容解析,给方法形参赋值,将数据和视图封装成ModelAndView对象,最后又将ModelAndView中的模型数据通过request域传输到页面,jsp视图解析器默认使用的是jstl。
5 Spring MVC的主要组件
- 前端控制器 DispatcherServlet(不需要程序员开发)
作用:接收请求、响应结果,相当于转发器,有了DispatcherServlet 就减少了其它组件之间的耦合度。 - 处理器映射器HandlerMapping(不需要程序员开发)
作用:根据请求的URL来查找Handler - 处理器适配器HandlerAdapter
- 处理器Handler(需要程序员开发)
- 视图解析器 ViewResolver(不需要程序员开发)
作用:进行视图的解析,根据视图逻辑名解析成真正的视图(view) - 视图View(需要程序员开发jsp)
View是一个接口, 它的实现类支持不同的视图类型(jsp,freemarker,pdf等等)