SpringMVC-SpringMVC简介以及原理

什么是MVC

MVC : 模型、视图、控制器 , 是一种软件设计规范,说明不是设计模式;

本质:将业务逻辑 , 数据 , 显示 分离的方式来编写代码; 前后端分离;

Model:数据模型,提供要展示的数据,一般我们都会把这两个分离开来 , 数据Dao,服务层Service。

View :负责进行数据的渲染和展示;客户端想要看到的东西

Controller:接收用户请求,交给Model处理,从Model更新后的数据或者结果,返回给前端。调度员

面向接口编程;

最典型的案例就是:JSP:View + Servlet:Controller + JavaBean:Model;

Model1

在早期的Web开发中,就是用的Model1模式

只有两层:视图层和模型层;

在这里插入图片描述

优点:架构简单,适合小型项目开发;

缺点:JSP职责不单一 , 承受它不该承受的压力,不便于维护;

Model2

将项目分为三个模块:M:模型 V:视图 C :控制器

在这里插入图片描述
职责分析:

controller:

  • 取得表单的数据
  • 调用业务的逻辑方法
  • 转向指定的页面

Model:

  • Dao:操作数据库
  • Service:业务逻辑
  • 保存数据的更新状态

View:

  • 显示页面

Model2优化了Model1时代的缺点,让所有层职责更加分明;降低了维护难度,

什么是SpringMVC

在这里插入图片描述

springMVC是spring框架的一个模块,springMVC和spring无需通过中间整合层进行开发。

​ springMVC是一个基于mvc的web框架。

​ Spring web mvc和Struts2都属于表现层的框架,它是Spring框架的一部分,我们可以从Spring的整体结构中看得出来:

img

我们为什么要学习SpringMVC

  • 趋势,使用的人多。
  • 简单,易学,轻量级
  • 高效,基于请求和响应的MVC框架;
  • 约定优于配置;
  • 功能强大:RestFul、数据验证、格式化{json}、主题,本地化、异常处理…

官网上说Spring的web模块提供了大量独特的功能,包括:

清晰的角色划分:控制器(controller)、验证器(validator)、 命令对象(command object)、表单对象(form object)、模型对象(model object)、 Servlet分发器(DispatcherServlet)、 处理器映射(handler mapping)、视图解析器(view resolver)等等。 每一个角色都可以由一个专门的对象(类)来实现。< Bean>

强大而直接的配置方式:将框架类和应用程序类都能作为JavaBean配置,而且支持跨多个context 的引用。

可适配、非侵入:可以根据不同的应用场景,选择合适的控制器子类 (simple型、command型、form型、wizard型、multi-action型或者自定义),而不是从单一控制器 (比如Action/ActionForm)继承。

可重用的业务代码:可以使用现有的业务对象作为命令或表单对象,而不需要去扩展某个特定框架的基类。

可定制的绑定(binding) 和验证(validation):比如将类型不匹配作为应用级的验证错误, 这可以保存错误的值。再比如本地化的日期和数字绑定等等。在其他某些框架中,你只能使用字符串表单对象, 需要手动解析它并转换到业务对象。

可定制的handler mapping和view resolution:Spring提供从最简单的URL映射, 到复杂的、专用的定制策略。与某些web MVC框架强制开发人员使用单一特定技术相比,Spring显得更加灵活。

灵活的model转换:在Springweb框架中,使用基于Map的 键/值对来达到轻易地与各种视图技术的集成。

可定制的本地化和主题(theme)解析:支持在JSP中可选择地使用Spring标签库、支持JSTL、支持Velocity(不需要额外的中间层)等等。

简单而强大的JSP标签库(Spring Tag Library):支持包括诸如数据绑定和主题(theme) 之类的许多功能。它提供在标记方面的最大灵活性。

JSP表单标签库:在Spring2.0中引入的表单标签库,使得在JSP中编写 表单更加容易。

Spring Bean的生命周期可以被限制在当前的HTTP Request或者HTTP Session。 准确的说,这并非Spring MVC框架本身特性,而应归属于Sping MVC使用的WebApplicationContext容器。

正因为SpringMVC较Struct2好 , 简单 , 便捷 , 易学 , 天生和Spring无缝集成(使用SpringIoC和Aop) , 使用约定优于配置 . 能够进行简单的junit测试 . 支持Restful风格 .异常处理 , 本地化 , 国际化 , 数据验证 , 类型转换 , 拦截器 等等…所以我们要学习 .

SpringMVC框架围绕着DispatcherServlet(Servlet请求分发器)设计

The DispatcherServlet

在这里插入图片描述

在这里插入图片描述

SpringMVC框架介绍

img

(1).发起请求到前端控制器(DispatcherServlet);

(2).前端控制器请求HandlerMapping查找Handler,可以根据xml配置、注解进行查找;

(3).处理器映射器HandlerMapping向前端控制器返回Handler;

(4).前端控制器调用处理器适配器去执行Handler;

(5).处理器适配器去执行Handler;

(6).Handler执行完成给适配器返回ModelAndView;

(7).处理器适配器向前端控制器返回ModelAndView(是springmvc框架的一个底层对象,包括Model和View);

(8).前端控制器请求视图解析器去进行视图解析,根据逻辑视图名称解析真正的视图(jsp…);

(9).视图解析器向前端控制器返回View;

(10).前端控制器进行视图渲染,视图渲染就是将模型数据(在ModelAndView对象中)填充到request域中。

(11).前端控制器向用户响应结果。

组件:

1、前端控制器DispatcherServlet,由框架提供

作用:接收请求,响应结果,相当于转发器,中央处理器。有了dispatcherServlet减少了其它组件之间的耦合度。

​ 用户请求到达前端控制器,它就相当于mvc模式中的c,dispatcherServlet是整个流程控制的中心,由它调用其它组件处理用户的请求,dispatcherServlet的存在降低了组件之间的耦合性。

2、处理器映射器HandlerMapping,由框架提供

作用:根据请求的url查找Handler

​ HandlerMapping负责根据用户请求找到Handler即处理器,springmvc提供了不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等。

3、处理器适配器HandlerAdapter

作用:按照特定规则(HandlerAdapter要求的规则)去执行Handler

​ 通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。

4、处理器Handler(需要工程师开发)

注意:编写Handler时按照HandlerAdapter的要求去做,这样适配器才可以去正确执行Handler

​ Handler 是继DispatcherServlet前端控制器的后端控制器,在DispatcherServlet的控制下Handler对具体的用户请求进行处理。

​ 由于Handler涉及到具体的用户业务请求,所以一般情况需要攻城狮根据业务需求开发Handler。

5、视图解析器View resolver,由框架提供

作用:进行视图解析,根据逻辑视图名解析成真正的视图(view)

View Resolver负责将处理结果生成View视图,View Resolver首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。 springmvc框架提供了很多的View视图类型,包括:jstlView、freemarkerView、pdfView等。

一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要由攻城狮根据业务需求开发具体的页面。

6**、视图View(需要工程师编写jsp…)**

处理结果通过页面展示给用户。 springmvc框架提供了很多的View视图类型,包括:jstlView、freemarkerView、pdfView等。

一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要由攻城狮根据业务需求开发具体的页面。
  View是一个接口,实现类支持不同的View类型(jsp、freemarker、pdf…)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值