1.MVC设计模式

Web项目的架构模式
1.数据访问接口:DAO层
2.处理业务逻辑:Service层
3.数据实体:POJO
4.负责前端请求的接受并处理:servlet
5.负责前端页面展示:JSP
这种架构模式就是MVC设计模式,它是软件工程中的一种软件架构模式。它强制性地使软件系统的输入、处理和输出分开,把软件系统分为三个基本部分:
模型(Model)、视图(View)、控制器(Controller)
在这里插入图片描述
(1)视图(View):负责格式化数据并把它们呈现给用户,包括数据展示、用户交互、数据验证、界面设计等功能。对应组件:JSP或者HTML文件
(2)控制器(Controller):负责接收并转发请求,对请求进行处理后指派视图并将响应结果发送给客户端。对应组件:Servlet
(3)模型(Model):模型对象拥有最多的处理任务,是应用程序的主体部分,它负责数据逻辑(业务规则)的处理和实现数据操作(即在数据库中存取数据)。对应组件:JavaBean(如超市系统-处理业务逻辑的Service层,与数据库操作相关的Dao层,贯穿于各层之间的数据模型,即数据实体POJO)
通过以上分析,我们发现超市订单管理系统所采用的设计模式-JSP+Servlet+JavaBean,其实就是最经典的MVC

1.1JSP Model1
当业务流程较为简单的时候,可以把控制器的功能交给视图来实现,这种模式称为JSP Model1。故Model1模式只有视图和模型,没有控制器(即JSP+JavaBean)
在这里插入图片描述
我们可以发现Model1的基础是JSP,它由JSP和JavaBean组成,JSP从HTTP Request中获得所需的数据,并进行业务逻辑的处理,然后将结果通过HTTP Response返回给前端浏览器。从中可见,Model1在一定程度上实现了MVC,即JSP将控制层和视图层合二为一,JavaBean为模式层。其中JSP身兼多职,既要负责视图层的数据展示,又要负责业务流程的控制,结构较为混乱,并且也不是我们所希望的松耦合加购模式,所以当业务流程复杂的时候并不推荐使用。

1.2JSP Model2
相对于JSP Model1,当业务流程复杂的时候,就需要把业务流程控制交给控制器来实现,JSP专注于视图的展现即可。这种模式就是JSP Model2(即JSP+Servlet+JavaBean)
在这里插入图片描述
JSP:复杂生成动态网页
Servlet:复杂流程控制
JavaBean负责业务逻辑处理
相比Model1,Model2是将控制层(Servlet)单独划分出来负责业务流程的控制,接收请求,创建所需的JavaBean实例,并将处理后的数据再返回给视图层(JSP)进行界面数据展示。这样的结构清晰,效果明显优化很多,并且也是一个松耦合的加购模式,所以除非项目非常简单,一般情况下建议使用JSP Model2

1.3小结
1.MVC处理过程
在这里插入图片描述
(1)首先视图提供系统与用户交互的界面,并发送用户输出给控制器。
(2)控制器接收用户的请求,并决定应该调用哪个模型来进行处理
(3)模型根据用户请求进行相应的业务逻辑处理,并返回处理结果(数据)
(4)控制器根据返回的处理结果,调用相应的视图格式化模型返回的数据,并通过视图呈现给用户结果。
2.MVC优缺点
(1)优点
多视图共享一个模型,大大提高代码的可重用性。
MVC三个模块相互独立,松耦合架构
控制器提高了应用程序的灵活性和可配置性
有利于软件工程化管理
总之,我们通过MVC的设计模式最终可以打造出一个松耦合+高重用性+高可适用性的完美架构,当然这也是架构设计的目标之一
(2)缺点
原理复杂
增加了系统结构和实现的复杂性
视图对模型数据的低效率访问

2.Spring MVC 介绍及其环境搭建

2.1 Spring MVC框架介绍
Spring MVC是Spring框架中用于Web应用开发的一个模块,是Spring提供的一个基于MVC设计模式的优秀Web开发框架,它本质上相当于Servlet。
(1)结构最清晰的MVC Model2实现
(2)Controller
(3)ModelAndView
在这里插入图片描述
Spring MVC框架中,Controller替换Servlet来担负控制器的职责,Controller接收请求,调用相应的Model进行处理,处理器完成业务处理后返回处理结果。Controller调用相应的View并对处理结果进行视图渲染,最终客户端得到消息

2.2 Spring MVC环境搭建
使用Spring MVC框架的步骤如下:
(1)引入jar文件
(2)Spring MVC配置:
①在web.xml中配置Servlet,定义DispatcherServlet
②创建Spring MVC的配置文件
(3)创建Controller(处理请求的控制器)
(4)创建View(我们使用JSP作为视图)
(5)部署运行

1.下载需要的jar文件
(1)Spring-web-3.2.13.RELEASE.jar:在Web应用开发时使用Spring框架所需的核心类
(2)Spring-webmvc-3.2.13.RELEASE.jar:Spring MVC框架相关的所有类,包含框架的Servlets,Web MVC框架,以及对控制器和视图的支持
在这里插入图片描述
2.在web.xml中配置Servlet
Spring MVC是基于Servlet的,DispatcherServlet是整个Spring MVC框架的核心,它负责截获请求并将其分派给相应的处理器处理。那么配置Spring MVC,首先就要进行DispatcherServlet的配置。当然跟所有的Servlet一样,用户必须在web.xml中进行配置。
在这里插入图片描述
在上述代码中,配置了一个名为”springmvc”的Servlet。该Servlet是DispatcherServlet类型,它就是Spring MVC的入口(前面已经介绍过Spring MVC的本质就是一个Servlet),并通过”1”配置标记容器在启动的时候就加载此DispatcherServlet,即自动启动。然后通过servlet-ampping映射到”/”,即DispatcherServlet需要截获并处理该项目的所有URL请求。
在配置DispstcherServlet的时候,通过设置contextConfigLocation参数来指定Spring MVC配置文件的位置,此处使用Spring资源路径的方式进行指定(classpath:applicationContext-*.xml)
3.创建Spring MVC的配置文件(springmvc-servlet.xml)
在这里插入图片描述
在上述配置中,主要配置以下两个部分内容
(1)配置处理器映射
(2)配置视图解析器

2.3 Spring MVC框架的请求处理流程及体系结构

1.Spring MVC框架的请求处理流程
在这里插入图片描述
Spring MVC框架也是一个基于请求驱动的Web框架,并且也使用了前端控制器模式来进行设计,再根据请求映射规则分发给相应的页面控制器(处理器)来进行处理。下面我们就来分析Spring MVC请求处理的流程步骤
(1)首先用户发送请求到前端控制器(DispatcherServlet),前端控制器根据请求信息(如url)来决定选择哪个页面控制器(Controller)来进行处理,并把请求委托给它,即Servlet控制器的控制逻辑部分(步骤1,2)
(2)页面控制器接收到请求后,进行业务处理,处理完毕后返回一个ModelAndView(模型数据和逻辑视图名)(步骤3,4,5)
(3)前端控制器收回控制权,然后根据返回的逻辑视图名,选择相应的真正视图,并把模型数据传入以便将视图渲染展示(步骤6,7)
(4)前端控制器再次收回控制权,将响应结果返回给用户,至此整个流程结束(步骤8)

2.Spring MVC框架的体系结构
在这里插入图片描述
根据Spring MVC处理请求的流程,我们来分析下具体每个组件所负责的工作内容
(1)客户端发出HTTP请求,Web应用服务器接收此请求。若匹配DispatcherServlet的请求映射路径(在web.xml中指定),则Web容器将该请求转交给DispatcherServlet处理
(2)DispatcherServlet接收到该请求后,将根据请求的信息(包括URL、请求参数、HTTP方法等)及HandlerMapping的配置(在-servlet.xml中配置)找到处理请求的处理器(Handler)。
(3)当DispatcherServlet根据HandlerMapping找到对应当前请求的Handler之后,通过HandlerAdapter对Handler进行封装,再以统一的适配器接口调用Handler。HandlerAdapter可以理解为具体使用Handler来干活的人,HandlerAdapter接口里一共有三个方法。
(4)在请求信息到达真正调用Handler的处理方法之前的这段时间内,SpringMVC还完成了很多工作,它会将请求信息以一定的方式转换并绑定到请求方法的入参中,对于入参的对象会进行数据转换、数据格式化以及数据校验等。这些都做完之后,最后才真正地调用Handler的处理方法进行相应的业务逻辑处理
(5)处理器完成业务逻辑处理之后将返回一个ModelAndView对象给DispatcherServlet,ModelAndView对象包含了逻辑视图名和模型数据信息。
(6)ModelAndView对象中包含的是”逻辑视图名”,而非真正的视图对象。DispatcherServlet会通过ViewResolver将逻辑视图名解析为真正的视图对象View。当然,负责数据展示的视图可以为JSP、XML、PDF、JSON等多种数据格式,对此Spring MVC均可灵活配置
(7)当得到真实的视图对象View后,DispatcherServlet会使用ModelAndView对象中的模型数据对View进行视图渲染
(8)最终客户端获得响应消息,根据配置,可以是普通的HTML页面,也可以是一个XML或者JSON格式的数据等
学习方法:
由于Spring MVC结构比较复杂,故学习的时候也要掌握学习方法,首先要明确SpringMVC是一个工具。既然是工具,那么我们就需要先掌握工具的使用方法,不要陷入细节中,深入浅出,慢慢地通过实际运用来加深对其的理解。学习过程中多跟踪代码,查看SpringMVC的源代码才能对其有更深刻的理解。

3.Spring MVC框架的特点
(1)清晰地角色划分。SpringMVC在Model、View和Controller方面提供了一个非常清晰的角色划分,这三方面真正是各司其职、各负其责
(2)灵活的配置功能。因为Spring的核心是IoC,同样在实现MVC上,也可以把各种类当作Bean来通过XML进行配置。
(3)提供了大量的控制器接口和实现类。开发者可以使用Spring提供的控制器实现类,也可以自己实现控制器接口
(4)真正做到与View层的实现无关(JSP、Velocity、XSLT等)。它不会强制开发者使用JSP,也可以根据项目需求使用Velocity、XSLT等技术,使用起来更加灵活
(5)国际化支持
(6)面向接口编程
(7)Spring提供了Web应用开发的一整套流程,不仅仅是MVC,它们之间可以很方便地结合一起。
总之,一句话:一个好的框架要减轻开发者处理复杂问题的负担,内部要有良好的扩展,并且有一个支持它的强大的用户群体,恰恰Spring MVC做到了

3.参数传递

3.1参数传递(View to Controller)
@RequestMapping
标注在类定义处
标注在方法定义处
映射规则
通过请求URL进行映射
通过请求参数进行映射
若选择方法参数直接入参的话,方法入参名必须与请求中参数名保持一致
通过请求方法进行映射
GET
POST
在这里插入图片描述
注意:@RequestMapping映射的请求信息必须保持全局唯一
@RequestParam
value
required
defaultValue
在这里插入图片描述
3.2参数传递(Controller to View)
如何将模型数据传递给视图
分析:
ModelAndView
包含视图信息和模型数据信息
常用方法
添加模型数据
ModelAndView addObject(String attributeName,
Object attributeValue);
ModelAndView addAllObject(Map<String,?>modelMap);
设置视图
void setView(View view);
void setViewName(String viewName);
Model
数据结构:Map类型
常用方法:添加模型数据
在这里插入图片描述
处理方法的入参为Model类型
注意:在Model中增加模型数据,若不指定key,则默认使用对象的类型作为key在这里插入图片描述

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐