Spring MVC

 

 

 

JavaEE体系结构包含四层,从上到下分别是应用层、Web层、业务层、持久层。我们Spring MVC就是一个Web层框架,Spring就是业务层框架,MyBatis就是持久层框架。

为什么要使用SpringMVC?

在我们Servlet当中,程序各层之间的依赖非常强,耦合度高。这严重违背了高内聚低耦合的设计原则,在我们SpringMVC当中就把模型和视图进行了分离,降低耦合度

 

Spring MVC是一种基于Java的实现了WEB MVC设计模式的请求驱动类型的轻量级Web框架,即使使用了MVC架构模式的思想,Web层进行职责解耦。基于请求驱动指的就是使用请求-响应模型,框架得目的就是帮助我们简化开发,SpringMvc也就是简化我们得日常Web开发。

MVC设计模式

MVC全名称Model View Controller,其中model代表Java BeanView代表视图,比如JSP或者HTML文件,Controller代表控制器,对应组件Servlet

Model1

 

 

Model1在一定程序上实现了MVC的设计理念,即JSP将控制层表示层合二为一,JavaBean则为模型层。

优点:建构简单,比较适合小型项目的开发,基本上使用JSP+持久层就可以完成小型项目的开发。

缺点:JSP页面有控制页面显示的代码又有与后台业务逻辑交互的Java代码,职责不单一,页面负担很重,影响页面运行速度;而且不方便后期的维护。如果不加选择随意的使用Model1,会导致JSP页面内嵌入大量得到脚本片段或Java代码。特别是当需要处理请求量很大时,情况会更加糟糕。

 

Model2

 

 

Model2则是将控制层(Servlet)单独地划分出来了,专门负责业务流程地控制,响应页面地请求,创建所需的JavaBean实例,并将处理后台数据再返回给JSP页面,这样层次分明,不同开发人员的职责分工明确,所以项目越复杂,使用Model2架构模型的好处就越大。

优点:清晰地分离了表达式和内容,明确了角色地定义以及开发者与网页设计者地分工,适合大型项目地开发

缺点:分层过多,不适合小型项目地开发

 

MVC

 

 

MVC全名是Model View Controller,是模型(model),视图(view),控制器(controller)的缩写,是一种软件设计典范。它使用一种业务逻辑、数据与界面显示分离的方法来组织,将从多的业务逻辑聚集到一个部件里面,在需要改进和个性定制界面及用户交互的同时,不需要重新编写业务逻辑,达到减少编码的时间。

 

搭建第一个Spring MVC项目

01.创建Maven项目

 

 

02.引入所需要的jar

 

 

03.web.xml文件中添加servlet核心控制器

 

 

04.创建springmvc.xml文件

 

 

05.创建对应的Controller

 

当我们访问HelloController时候,handlerRequest()方法就默认执行,返回一个ModelAndView,

是由modelview,model底层是一个Map集合,用来保存我们前后台传输的数据,view就是一个视图名称

 

06.测试

 

 

 

处理器映射器

01. BeanNameUrlHandlerMapping

BeanNameUrlHandlerMappingSpring MVC默认的处理器映射器

 

 

使用默认的处理器映射器,控制器的Bean的名称,必须以“/”开头,否则无法访问

02. SimpleUrlHandlerMapping

SimpleUrlHandlerMapping(映射器)Spring MVC中适用最强的handler mapping类,允许明确指定URL模式和handler的映射器关系

 

 

另一种写法:

 

 

 

一个Controller处理多个方法

创建Controller

Spring提供了一个MultiActionController(多动作控制器),用于支持在一个控制器当中添加多种功能的处理方法。

 

 

注意:其余方法同上一样

方法名称解析器

001.PropertiesMethodNameResolver

 

 

 

002.ParameterMethodNameResolver

 

 

 

注解方式实现

01.修改springmvc.xml文件

 

 

02.创建一个UserController

 

 

 

03.UserController当中添加add方法

 

 

 

 

请求流程介绍

01.整体流程

 

 

(1) 首先用户发送请求到前端控制器,前端控制器根据请求(如URL)来决定选择哪一个页面页面控制器进行处理并把请求委托给它

(2) 页面控制器接收到请求后,调用业务对象,进行功能处理,处理完毕后返回一个ModelAndView(模型数据和逻辑视图名)

(3) 前端控制器收回控制权,然后根据返回的逻辑视图名,选择相应的视图进行渲染,并把模型数据传入一遍视图渲染

(4) 前端控制器再次收回控制权,将响应返回给用户

 

02.核心流程

 

 

 

(1) 用户请求至 前端控制器 DispatcherServlet

(2) 前端控制器DispatcherServlet 接收到请求后调用处理器映射器HanlderMapping

(3) 处理器映射器HanlderMapping根据请求的Url找到具体的处理器,生成处理器对象Handler及处理器拦截器HandlerIntercepter(如果有则生成)一并返回给前端控制器DispatcherServlet

(4) 前端控制chDispatcherServlet调用处理器适配器HandlerAdapter

(5) 处理器适配器HandlerAdapte根据适配的结果去执行相应的Handler(Controller,也叫做后端控制器)但是在这之前会经过一系列的数据的处理(比如数据的绑定,数据转换、格式化、验证等)

(6) Handler执行完后,给适配器返回ModelAndView

(7) 处理器适配器HandlerAdapter向前端控制器返回 ModelAndView

(8) 前端控制器得到ModelAndView以后会调用视图解析器ViewResolver进行视图解析(根据逻辑视图名解析成真正的视图(jsp))

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

(10) 前端控制器调用真实的JSP进行视图的渲染,最后响应给用户端

 

posted @ 2019-01-16 08:52  H丶  阅读(249)  评论(0编辑  收藏  举报