整合SSM框架必备基础—SpringMVC(上)
01 MVC概述
在Web系统开发中一般按照视图(View)、模型(Model)、控制(Controller)三层设计模式进行构建,视图层负责模型数据的渲染,将数据用一定的形式展现给用户;模型层负责监听实体的变化并对实体进行解析和封装;控制层负责提供前后端交互的请求逻辑处理入口,处理用户请求,并建立适当的模型传递给视图进行渲染。层级关系一般如下图所示:
在Web开发的早期,JSP + Servlet + JavaBean的组合非常流行,那个时候JSP担任着视图层渲染工作,Servlet作为控制器负责用户的请求和响应,而JavaBean则负责一些更加复杂的业务逻辑,例如跟数据库打交道。
后来出现了一个新的MVC框架Struts2,它将action作为框架的控制器负责用户请求响应,同时为前端页面提供了标签库和有力的渲染工具-OGNL,用户请求action返回数据到JSP后,在JSP中可以采用OGNL表达式对数据进行动态的渲染,它还增加了请求过滤器以及进行请求前后处理的拦截器,方便系统过滤、拦截一些不符合规则的请求并做出及时的响应操作,不得不说它的出现降低了系统的耦合性,让MVC模式的分层更加明显,也大大的简化了开发者的代码量。
02 SpringMVC简介
由于Struts2框架带来的便利,它和Spring在过去很长一段时间被结合在一起用来构建系统,但是随着技术的发展,二者的结合出现了很多问题例如类臃肿、兼容性以及Struts2漏洞等问题,而就在这时候,Spring家族诞生了一个新的MVC框架来与Spring实现无缝结合,它就是SpringMVC。
SpringMVC是采用Java开发,一种基于Web MVC设计模式,以请求驱动为类型的轻量级Web框架。由于使用了MVC架构模式的思想,将Web层进行了职责解耦,让分层更加的明显。
03 SpringMVC优势
谈到SpringMVC的优势,首先想到的就是它依赖Spring的包才能运行,也就是说它其实是Spring的一个MVC子框架,这样的话就可以跟Spring实现无缝的结合,从而继承它的众多特性,这一点比起Struct2框架就有了很大的先天优势,另外还有其他的几个优点如下:
1、实现方法级别的请求拦截
上面提及的Struts2采用的是类级别的请求拦截,即一个类对应一个请求上下文,而SpringMVC采用方法级别的拦截,一个方法对应一个请求URL,也就是一个请求上下文。所以从架构本身上SpringMVC容易实现Restful接口,而Struts2的架构实现起来要麻烦很多,因为Struts2 action的一个方法可以对应一个URL,但是它的类属性却被所有的方法共享,这也就无法用注解或其他方式标识其所属的方法了。
2、SpringMVC提供强大的注解
SpringMVC引入了注解的功能,通过在类、方法上标记相应的注解,可以实现实体的映射、配置的加载等,使用起来非常便利,可以大大简化配置和代码量,比如说同样是接收请求,Servlet作为控制器需要在doPost或者doGet中做一些处理后才能调用业务代码,而SpringMVC通过几个注解就可以实现,例如@requestMapping可以帮助定义当前类为一个Spring管理的bean,同时指定该类是一个控制器,可以用来接受请求,标识当前类是控制层的一个具体的实现;@Controller放在方法上面用来指定某个方法的路径,当它放在类上的时候相当于命名空间需要组合方法上的requestMapping来访问。
3、清晰的角色划分
控制器(Controller)、验证器(Validator)、命令对象(Command-obect)、表单对象(form-object)、模型对象(model-object)、Servlet分发器(DispatcherServlet)、处理器映射(handler-mapping)、视图解析器(view-resolver)等等。每一个角色都可以由一个专门的对象来实现。
04 SpringMVC流程步骤
SpringMVC的具体执行流程步骤如下:
1.首先用户在前台页面向某一个后台指定的URL发起了请求,SpringMVC收到这个请求后会首先交给中央控制器(DispatcherServlet)
2.中央控制器请求HandlerMapping查找 Handler处理器 (可以根据xml配置、注解进行查找)
3.处理器映射器HandlerMapping向中央控制器返回Handler,HandlerMapping会把请求映射为HandlerExecutionChain对象(包含一个Handler处理器(页面控制器)对象,多个HandlerInterceptor拦截器对象),通过这种策略模式,很容易添加新的映射策略
4.中央控制器调用处理器适配器去执行Handler
5.处理器适配器HandlerAdapter将会根据适配的结果去执行Handler
6.Handler执行完成给适配器返回ModelAndView
7.处理器适配器向中央控制器返回ModelAndView (ModelAndView其实是SpringMVC框架的一个底层对象,包括模型Model和视图View)
8.中央控制器请求视图解析器去进行视图解析 (根据逻辑视图名解析成真正的视图(jsp),通过这种策略很容易更换其他视图技术,只需要更改视图解析器即可
9.视图解析器向中央控制器返回View
10.中央控制器进行视图渲染 (视图渲染将模型数据(在ModelAndView对象中)填充到request域)
11.前端控制器向用户响应结果
整合SSM框架必备基础—SpringMVC(上)的更多相关文章
- 整合SSM框架必备基础—SpringMVC(下)
在上一篇文章<整合SSM框架必备基础-SpringMVC(上)>中,胖达介绍了关于SpringMVC的诞生.优势以及执行流程等理论知识点,这篇文章打算在实操中加深一下对SpringMVC的 ...
- shiro权限控制(一):shiro介绍以及整合SSM框架
shiro安全框架是目前为止作为登录注册最常用的框架,因为它十分的强大简单,提供了认证.授权.加密和会话管理等功能 . shiro能做什么? 认证:验证用户的身份 授权:对用户执行访问控制:判断用户是 ...
- IDEA+Maven 整合SSM框架实现简单的增删改查(新手入门,傻瓜操作)
原博客地址:https://blog.csdn.net/khxu666/article/details/79851070 选用SSM框架的原因在目前的企业级Java应用中,Spring框架是必须的.S ...
- 用Maven整合SSM框架
前述 Maven 是专门用于构建和管理Java相关项目的工具,利用 Maven 的主要目的是统一维护 jar 包.关于 Maven 的安装在这篇里面就不说了. SSM(Spring+SpringMVC ...
- shiro框架整合ssm框架
下面我通过一个web的maven项目来讲解如何将shiro整合ssm框架,具体结构如下图 一.引入依赖的jar包 <?xml version="1.0" encoding=& ...
- Maven整合SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
使用SSM(Spring.SpringMVC和Mybatis)已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方.之前没有记录SSM整合 ...
- ssm框架(Spring Springmvc Mybatis框架)整合及案例增删改查
三大框架介绍 ssm框架是由Spring springmvc和Mybatis共同组成的框架.Spring和Springmvc都是spring公司开发的,因此他们之间不需要整合.也可以说是无缝整合.my ...
- 使用IDEA整合SSM框架
一.安装环境和开发工具 在整合Spring,SpringMVC 和 MyBatis 的过程中,很容易遇到一些小问题,因此记录下整合过程. 首先是安装环境和开发工具,如下: Window 7 Jdk 1 ...
- 一步步教你整合SSM框架(Spring MVC+Spring+MyBatis)详细教程重要
前言 SSM(Spring+SpringMVC+Mybatis)是目前较为主流的企业级架构方案,不知道大家有没有留意,在我们看招聘信息的时候,经常会看到这一点,需要具备SSH框架的技能:而且在大部分教 ...
随机推荐
- element-ui 的 日历 datetimerange 日期格适化 , 适合1版本
这家伙把我坑坏了 , 本来吧数据准备好了 , 一掉接口居然不好使 ,日期总是有偏差 , 结果一看是提交的数据有问题 , 后台直接接受的字符串 new 的Date , 2017-12-24T16:00: ...
- 5 wcf双工
1 创建两个项目 Wcf_WsDual_Service Wcf_WsDual_Client 2 Wcf_WsDual_Service 项目中创建 LoginService.cs 的wcf文件 ...
- C# WPF 左侧菜单右侧内容布局效果实现
原文:C# WPF 左侧菜单右侧内容布局效果实现 我们要做的效果是这样的,左侧是可折叠的菜单栏,右侧是内容区域,点击左侧的菜单项右侧内容区域则相应地切换. wpf实现的话,我的办法是用一个tabcon ...
- 自定义Behavior 实现Listbox自动滚动到选中项
原文:自定义Behavior 实现Listbox自动滚动到选中项 blend为我们提供方便的behavior来扩展我们的控件,写好之后就可以在blend中方便的使用了. 下面是自定义的behavior ...
- 新浪微博Python3客户端接口OAuth2
Keyword: Python3 Oauth2 新浪微博 本接口基于廖雪峰的weibo python SDK修改完成,其sdk为新浪官方所推荐,原作者是用python2写的 经过一些修改,这里提供基于 ...
- crossplatform---Nodejs in Visual Studio Code 03.学习Express
1.开始 下载源码:https://github.com/sayar/NodeMVA Express组件:npm install express -g(全局安装) 2.ExpressRest 打开目录 ...
- 终于,期待已久的 Java 9 正式发布了!
经过4次跳票,历经曲折的 Java 9 正式版终于发布了! 你可以通过这里下载 Java 9 正式版.JDK9 提供超过 150 项新功能特性,包括备受期待的模块化系统.可交互的 REPL 工具 js ...
- abp框架(aspnetboilerplate)设置前端报错显示
abp在后端抛出异常 throw new UserFriendlyException($"抛出一个错误"); 在发布之前,需要设置是否把报错发送给前端 如果将此设置为true,则会 ...
- 发现意外之美 - SwiftyJSON 源码学习 | 咖啡时间
SwiftyJSON 是一个很优秀 Swift 语言第三方库.我们在之前的文章中对它有过介绍.相信大家对它也有了一些了解.提升开发功力最好的方式就是学习优秀的源代码了,记得大神 TJ Holowayc ...
- PySide——Python图形化界面入门教程(三)
PySide——Python图形化界面入门教程(三) ——使用内建新号和槽 ——Using Built-In Signals and Slots 上一个教程中,我们学习了如何创建和建立交互widget ...