Spring MVC体系结构和处理请求控制器
Spring MVC体系结构和处理请求控制器
一:MVC设计模式:
(1.)数据访问接口:DAO层
(2.)处理业务逻辑层:Service层
(3.)数据实体:POJO
(4.)负责前段请求接受并处理:Service
(5.)负责前端页面展示:JSP
这种构架模式就是MVC设计模式,它是软件工程的一种软件架构模式。它强制性的是软件系统的输入,处理和输出的分开,把软件系统分三个基本部分:模型(Model),视图(View)控制器(Controller)
解析:
视图(View):负责格式化数据并把它们呈现给客户
控制器(Controller):负责接收并转发请求,做出响应返回给客户
模型(Model):模型对象拥有最多的处理任务,是应用程序的主体部分,负责处理和实现数据
二:MVC两种模式:
JSP MODEL1:当业务流程较为简单的时候,可以把控制器的功能交给视图来实现,这种模式统称为 JSP MODEL1
JSP MODEL2:相当于JSP MODEL1 当业务流程复杂的时候,即需要把业务流程交给控制器来实现,JSP专注视图的展现即可
。
MVC处理过程
(1.)首先视图是提供系统与用户交互界面,并发送用户给控制器。
(2.)控制器接收用户请求,并决定改调用哪个模型来处理
(3.)模型根据用户请求进行相应的业务逻辑处理,并返回处理结果
(4.)控制器根据返回处理结果,调用相应的视图格式化模型返回的数据,并通过视图呈现给客户。
MVC优缺点:
优点:
(1.)多视图共享一个模型,大大提高代码的可用性
(2.)MVC三个模块相互独立,松耦合构架
(3.)控制器提高应用程序和灵活性和可配性
(4.)有利益软件工程化管理
缺点:
(1.)原理复杂
(2.)增加了系统结构和实现的复杂性
(3).视图对模型数据的低效访问
三:Spring MVC框架介绍流程图
1:Spring MVC 环境搭建
(1.)引入jar文件
(2.)在web.xml中配置Servlet
(3.)创建SpringMVC配置文件(springmvc-servlet.xml)(处理请求的控制器)
(4).创建Controller
(5.)创建view
(6.)部署运行
(7.)更改HandlerMapping(处理器映射)
<property name=”suffix”value=”.jsp”/>
</bean>
</beans>
四:
- Spring Mvc框架体系结构请求处理流程
(1.)首先用户发送请求到前端控制器(dispatcherServlet)前端控制器根据请求信息,来决定选择哪个控制页面(Controller)进行处理,并把请求委托给他,即service控制器的控制逻辑部分D
(2.)页面控制器接收到请求后,进行业务处理,处理完成返回一个Modelandview(模型数据名和逻辑视图名)
(3.)前端控制器收回控制器,然后根据逻辑视图名,选择相应的正在视图名,并把模型数据传入以便将视图渲染展示
(4.)前端控制器再次收回控制器,将相应结果返回给客户,至此整个流程结束
- Spring MVC框架的体系结构
(1.)客户端发出HTTP请求,web应用服务器接收此请求,若匹配DispatcherService的请求映射路径(在web.xml中指定)则web容器将根据请求交给DispatherService处理(dkz)
(2.)DispatherService接收到该请求后将根据请求的信息(包括URL,请求参数,http方法等及HandlerMapping配置(在<serviceName>-servlet.xml中配置),找到处理请求的方法K
(3.)当DispatherService根据HandlerMapping找到相应当前请求的Handler之后,通过HandlerAdater对handler进行封装,在以统一的适配器接口调用Handler.HandlerAdapter,可以理解为具体使用Handler来干活的人。三个方法
Supports(Object handler)方法,判断是否可以使用某个Handler
Handle方法:具体使用Handler干活
getLastModified方法,获取资源的Last-Modified
(4.)在请求信息达到真正调用Handler处理方法之前的这段时间内,SpringMvc还完成了很多工作,他会将请求信息以一定的方式转换并绑定到请求方法的入参中,对于入参的对象会进行数据转换,格式化及数据校检等,这些都做完后,最后才真正的调用Handler处理方法进行相应的数据逻辑处理。
(5.)处理器完成业务处理之后将返回一个ModelAndView对象给DispatcherServlet,ModelAndView对象包含了逻辑视图名和模型数据信息。
(6.)ModelAndView对象中包含的是“逻辑视图名”,而非真正的视图对象,DispatherService会通过ViewResolver将逻辑视图名解析为真正的视图对象,View当然负责数据展示的视图可以为jsp,xml,pdf,json等多种数据格式,
(7.)当得到最后的视图对象后View后,DispatherService会使用ModelAndView对象中的模型数据对View进行视图渲染。
(8.)最终客户端获得响应消息,根据配置,可以是普通的HTML页面,也可以是一个xml,或者是json格式数据等。Z
- Spring MVC框架的特点
(1.)清晰的角色划分。
(2.)灵活的功能配置
(3.)提供了大量的控制器接口和实现类
(4.)真正做到与View层实现无关(JSP,Velocity,xslt等)
(5.)国际化支持
(6.)面向接口编程
(7.)提供了web应用开发的一整套流程
五:
1.参数传递:最简单的方法就是将Controller方法中参数直接入参
@RequestMapping映射:
(1.)通过请求URL进行映射D
(2.)通过请求参数,请求方法进行映射
2.参数传递(Controller to View)
(1.)ModelAndView常用方法
处理器处理的方法返回值若为ModelAndView,则即包括视图信息,又包括模型数据信息,有了该对象之后,Spring mvc 就可以对视图模型就行数据渲染。
*.添加模型数据
*.设置视图
2.Model
除了可以使用ModelAndView对象来返回模型数据外,我们还可以使用Spring mvc 提供的Model对象来完成模型数据的传递。K
3.Map
通过前面对于Model和ModelAndView对象的学习,我们还能使用Spring MVC 的Model其实就是一个map的数据结构,可以用map作为入参处理
若希望将入参的数据对象放入数据模型中去,就需要在相应入参前使用此注解,再此我们只做简单了解。
此注解可以模型中属性存入httpSession中,以便在多个请求之间共享该属性,只做简单了解。Z
六:视图解析器
- 所有视图解析器都实现了ViewResolver接口如下:
2.Spring mvc通过视图解析器来完成视图解析的工作,把控制器的处理方法返回的逻辑视图名,解析成一个真正的视图对象
Spring MVC体系结构和处理请求控制器的更多相关文章
- Spring MVC 原理探秘 - 一个请求的旅行过程
1.简介 在前面的文章中,我较为详细的分析了 Spring IOC 和 AOP 部分的源码,并写成了文章.为了让我的 Spring 源码分析系列文章更为丰富一些,所以从本篇文章开始,我将来向大家介绍一 ...
- Spring MVC的handlermapping之请求分发如何找到正确的Handler(BeanNameUrlHandlerMapping,SimpleUrlHandlerMapping)
本文讲的是Spring MVC如何找到正确的handler, 前面请求具体怎么进入到下面的方法,不再细说. 大概就是Spring mvc通过servlet拦截请求,实现doService方法,然后进入 ...
- spring mvc: 可参数化的视图控制器(在配置中指定jsp文件)MultiActionController/SimpleUrlHandlerMapping/ParameterizableViewController
spring mvc: 可参数化的视图控制器(在配置中指定jsp文件)MultiActionController/SimpleUrlHandlerMapping/ParameterizableView ...
- spring MVC体系结构和请求控制器
MVC处理过程 spring MVC架构模式都进行了分层设计如下 数据访问接口:DAO层 处理业务逻辑层:service层 数据实体:POJO 负责前端请求的接受并处理:servlet 负责前端页面展 ...
- Spring MVC体系结构
[Spring MVC类图]<Spring实战>中:<Spring3.0就这么简单>中:[http://blog.csdn.net/gstormspire/article/de ...
- Ajax+Spring MVC实现跨域请求(JSONP)JSONP 跨域
JSONP原理及实现 接下来,来实际模拟一个跨域请求的解决方案.后端为Spring MVC架构的,前端则通过Ajax进行跨域访问. 1.首先客户端需要注册一个callback(服务端通过该callba ...
- Ajax+Spring MVC实现跨域请求(JSONP)(转)
背景: AJAX向后台(springmvc)发送请求,报错:已阻止交叉源请求:同源策略不允许读取 http://127.0.0.1:8080/DevInfoWeb/getJsonp 上的远程资源.可 ...
- 0057 Spring MVC如何获取HTTP请求头信息--URL中的动态参数--@RequestHeader--@CookieValue--@PathVariable
获取HTTP请求头信息 一个HTTP请求除了有参数和实体内容外还有HTTP请求头信息,Spring MVC也可以获取这部分信息 @RequestHeader解可以将请求头信息映射到处理方法的形参上 @ ...
- Ajax+Spring MVC实现跨域请求(JSONP)
背景: AJAX向后台(springmvc)发送请求,报错:已阻止交叉源请求:同源策略不允许读取 http://127.0.0.1:8080/DevInfoWeb/getJsonp 上的远程资源.可 ...
随机推荐
- linux下rename用法--批量重命名
Linux的rename 命令有两个版本,一个是C语言版本的,一个是Perl语言版本的,早期的Linux发行版基本上使用的是C语言版本的,现在已经很难见到C语言版本的了, 由于历史原因,在Perl语言 ...
- Win10系统下安装Ubuntu16.04.3教程与设置
在Win10上刚刚装好Ubuntu16.04.3,装了不下于10次,期间出现很多问题,趁着还有记忆,写下这篇教程,里面还有Ubuntu系统的优化与Win10的一些设置. Part 1 制作Ubuntu ...
- 使用spark对hive表中的多列数据判重
本文处理的场景如下,hive表中的数据,对其中的多列进行判重deduplicate. 1.先解决依赖,spark相关的所有包,pom.xml spark-hive是我们进行hive表spark处理的关 ...
- nodejs+express-实现文件上传下载管理的网站
Nodejs+Express-实现文件上传下载管理的网站 项目Github地址(对你有帮助记得给星哟):https://github.com/qcer/updo 后端:基于nodejs的express ...
- 热门开源项目:Guns-后台管理系统
Guns基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springmvc + shiro + mybatis-plus + beetl!Guns项目代码简洁,注释丰富,上手容易,同时 ...
- iOS 11 & iPhone X 适配资料集
本文主要简单谈谈并收集一些关于 iOS 11 & iPhone X 的适配及设计指南. iPhone X 众所周知,iPhone X 屏幕与其他的 iPhone 设备均不同,苹果称 iPhon ...
- iOS多线程基本使用
大家都知道,在开发过程中应该尽可能减少用户等待时间,让程序尽可能快的完成运算.可是无论是哪种语言开发的程序最终往往转换成汇编语言进而解释成机器码来执行.但是机器码是按顺序执行的,一个复杂的多步操作只能 ...
- CoreData归纳使用
1.CoreData简介 2.CoreData数据模型 3.CoreData的主要对象 4.使用CoreData实现数据存储 一.CoreData简介 CoreData用做数据持久化,是数据持久化的最 ...
- 吾八哥学Python(一):搭建Python开发环境(Windows)
学习Python的第一步当然是要配置一下开发环境了,这里记录一下本人在windows 10(64位)下配置Python开发环境的过程,供跟我一样的新手参考一下. 一.下载Python安装包 目前最新的 ...
- 【框架学习与探究之AOP--Castle DynamicProxy】
声明 本文欢迎转载,原始地址:http://www.cnblogs.com/DjlNet/p/7603654.html 前言 先说一点废话,在此之前博主也在早期就接触了或者看了些许AOP相关的文章,然 ...