5.SpringMVC
1.SpringMVC概述
概述:
SpringMVC是基于请求驱动,围绕一个核心Servlet 转发请求到对应的Controller而设计的
优点:
是一个典型的教科书式的MVC构架,易学易用
提供了清晰的角色划分,比如Controller、validator、handler mapping、view resolver等
可重用的业务代码
可定制的数据绑定和验证,可定制的视图解决方案
提供了一套强大又使用简单的标签库
支持Restful风格
体系结构:
1、客户端发出请求,交给DispatcherServlet处理
2、DispatcherServlet根据请求信息及HandlerMapping的配置找到处理请求的处理器(Handler)
3、DispatcherServlet通过HandlerAdapter对Handler进行封装,再以统一的适配器接口调用Handler
4、处理器完成业务逻辑,返回一个ModelAndVIew给DispatcherServlet,ModelAndView包含视图逻辑名和模型数据信息
5、DispatcherServlet借由ViewResolver完成逻辑视图名到真实视图的解析工作
6、得到View真实视图后,DispatcherServlet就使用这个View对象对ModelAndView中的模型数据进行渲染
7、最终客户得到响应
2.控制器
DispatcherServlet:
DispatcherServlet继承自HttpServlet,是整个SpringMVC中的前端控制器,主要负责流程控制
DispatcherServlet使用了专有的Bean来处理请求和渲染视图,可以在WebApplicationContext中进行配置,这些Bean包括:
|
Bean类型 |
解释 |
|
HandlerMapping |
将传入请求映射到处理器 |
|
HandlerAdapter |
将处理器包装为适配器,从而支持多种类型的处理器 |
|
ViewResolver |
将逻辑视图名解析为具体的View |
|
LocaleResolver & LocaleContextResolver |
解释客户端所在地区和其时区(本地化),以便提供国际化的视图 |
|
ThemeResolver |
解释Web程序可用主题,比如提供个性化布局 |
|
MultipartResolver |
解释multi-part请求,比如表单里支持文件上传 |
当一个请求传进来后,DispatcherServlet会按以下顺序处理:
寻找 WebApplicationContext,并将 WebApplicationContext作为一个属性绑定到请求里,以便控制器或其他原件在后续中使用。默认会以DispatcherServlet.WEB_APPLICATION_CONTEXT_ATTRIBUTE 键绑定到请求里
将本地化解析器绑定到请求里,以便在处理这个请求时,原件可以解析到客户端的地区(为了渲染视图,准备日期等)
将主题解析其绑定到请求里,让原件(如视图)决定去使用哪一种主题
若指定一个multipart file解析器,会检查这个请求包含multiparts请求
寻找合适的 handler。如何找到这个 handler,执行与这个 handler 关联的执行链
如果返回一个 model,渲染相对应的视图

Controller:
客户请求经由前端控制器DispatcherServlet后,分发给后续子控制器Controller
SpringMVC的Controller会获取用户的输入,访问由服务接口定义的业务逻辑功能,并通过视图将模型数据再响应给用户
从Spring2.5以后,提供了一组注解用于SpringMVC的编程,比如:@Controller、@RequestMapping、@RequestParam
@RequestMapping中,还可以使用method来限制请求的类型,比如以下例子中映射login的URL,并且是Get方式的请求

URI模板模式
URI模版是一个类似于URI的字符串,其中包含了一个或多个变量。当你将这些变量替换掉市,就变回了URI
例如:路径为http://www.example.com/owners/fred,则方法中ownerId的值即为“fred”

路径模式
@RequestMapping注解处理支持URI模版,也支持使用Ant风格模式
/user/regist, 匹配/user/regist
/user/*/regist, 匹配/user/aaa/regist
/user/**/regist, 匹配/user/regist、/user/aaa/bbb/regist等
/user/regist?, 匹配/user/regista等
@RequestMapping还支持组合使用URI模版和Ant风格模式
如:/owners/*/pets/{petId}
矩阵变量:
开启矩阵变量的支持:
<mvc:annotation-driven enable-matrix-variables="true"/>
矩阵变量实例:


@RequestParam将请求参数绑定到方法参法:

@CookieValue注解允许将方法参数与HTTPcookie 值绑定

@RequestHeader 映射请求头字段属性

@ResponseBody此注解用在方法上,用来表示直接将返回数据写到HTTP响应体里
一般用于响应AJAX的请求,返回JSON格式的字符串
注意:不是将数据放到Model中,或解析为视图名称

3.拦截器
Spring的handler映射机制包含了handler拦截器
使用handler拦截器,可以在某些的请求中应用的特殊的功能,比如说检查权限、防止表单重复提交等等
handler映射的拦截器必须实现HandlerInterceptor接口,该接口有3个方法:
preHandle(..) 在handler执行前调用
postHandle(..) 在handler执行后调用
afterCompletion(..) 在整一个请求完成后调用
注意:不是将数据放到Model中,或解析为视图名称
拦截器在SpringMVC配置文件中如下配置:
4.文件上传
文件上传在Web项目中使用广泛,而SpringMVC提供了2种常用的方法来实现
基于Servlet3.0的文件上传
基于Commons FileUpload的文件上传
页面表单代码如下:

基于Servlet3.0的实现:
在web.xml中的DispatcherServlet增加“multipart-config”配置
在SpringMVC配置文件中增加

编写Controller类:

Commons Fileupload:
需要导入commons-fileupload.jar和commons-io.jar
在SpringMVC配置文件中增加:

编写Controller类:

5.SpringMVC的更多相关文章
- 【分享】标准springMVC+mybatis项目maven搭建最精简教程
文章由来:公司有个实习同学需要做毕业设计,不会搭建环境,我就代劳了,顺便分享给刚入门的小伙伴,我是自学的JAVA,所以我懂的.... (大图直接观看显示很模糊,请在图片上点击右键然后在新窗口打开看) ...
- Springmvc数据校验
步骤一:导入四个jar包 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=" ...
- 为什么做java的web开发我们会使用struts2,springMVC和spring这样的框架?
今年我一直在思考web开发里的前后端分离的问题,到了现在也颇有点心得了,随着这个问题的深入,再加以现在公司很多web项目的控制层的技术框架由struts2迁移到springMVC,我突然有了一个新的疑 ...
- 【SSM框架】Spring + Springmvc + Mybatis 基本框架搭建集成教程
本文将讲解SSM框架的基本搭建集成,并有一个简单demo案例 说明:1.本文暂未使用maven集成,jar包需要手动导入. 2.本文为基础教程,大神切勿见笑. 3.如果对您学习有帮助,欢迎各种转载,注 ...
- 快速搭建springmvc+spring data jpa工程
一.前言 这里简单讲述一下如何快速使用springmvc和spring data jpa搭建后台开发工程,并提供了一个简单的demo作为参考. 二.创建maven工程 http://www.cnblo ...
- redis集成到Springmvc中及使用实例
redis是现在主流的缓存工具了,因为使用简单.高效且对服务器要求较小,用于大数据量下的缓存 spring也提供了对redis的支持: org.springframework.data.redis.c ...
- 流程开发Activiti 与SpringMVC整合实例
流程(Activiti) 流程是完成一系列有序动作的概述.每一个节点动作的结果将对后面的具体操作步骤产生影响.信息化系统中流程的功能完全等同于纸上办公的层级审批,尤其在oa系统中各类电子流提现较为明显 ...
- springMVC学习笔记--知识点总结1
以下是学习springmvc框架时的笔记整理: 结果跳转方式 1.设置ModelAndView,根据view的名称,和视图渲染器跳转到指定的页面. 比如jsp的视图渲染器是如下配置的: <!-- ...
- springMVC初探--环境搭建和第一个HelloWorld简单项目
注:此篇为学习springMVC时,做的笔记整理. MVC框架要做哪些事情? a,将url映射到java类,或者java类的方法上 b,封装用户提交的数据 c,处理请求->调用相关的业务处理—& ...
- springmvc的拦截器
什么是拦截器 java里的拦截器是动态拦截action调用的对象.它提供了一种机制可以使 ...
随机推荐
- css知多少(6)——选择器的优先级(转)
css知多少(6)——选择器的优先级 1. 引言 上一节<css知多少(5)——选择器>最后提到,选择器类型过多将导致一些问题,是什么问题呢?咱们直接举例子说明. 上图中,css中的两 ...
- Codeforces #499 Div2 E (1010C) Border
一直第9个样例WA,发现事情没有这么简单的时候只剩20分钟了...... 看了一些大神提交的代码,发现还能这么玩..... 这个题目可以转化成这个问题:给一堆[0,m)之间的数,可以随意组合成新的数( ...
- condition实现通知部分线程
多个condition实现通知部分线程: import java.util.concurrent.locks.Condition; import java.util.concurrent.locks. ...
- iOS UITableView制作类似QQ好友列表视图
#import <UIKit/UIKit.h> @interface AppDelegate : UIResponder <UIApplicationDele ...
- vray学习笔记(2)vray工作流程
在bilibili上面搜索到了一个vray的教程,虽然是英语的,细节方面可能听不太懂,但可以了解整个工作流程,工作流程太重要了,先看下视频的目录: 第1节到第9节都是建模的内容. 第10节和第13节是 ...
- 校园客户端(DR)启动后提示我们缺失packet.dll,无法正常启动(7)
有的时候校园客户端(DR)启动后提示我们缺失packet.dll,无法正常启动,然而我们重装了客户端后任然不感冒,那么问题来了,问题解决不了往往源于我们对问题的本质不够了解,如果了解问题的本质,那么问 ...
- CF 1029E Tree with Small Distances
昨晚随便玩玩搞个div3结果浪翻了…… 强烈谴责D题hack数据卡常 考虑到本题中所要求的最短距离不会大于2,所以我们可以把所有结点到$1$的距离通过对$3$取模分类,考虑到直接自顶向下贪心不满足局部 ...
- python-ASCII与Unicode
# Auther: Aaron Fan'''ASCII:不支持中文,1个英文占1个字节Unicode(万国码,支持所有国家的文字显示):支持中文,但是每个英文和中文都占2个字节UTF-8(是一种针对U ...
- 数据结构 station
问题描述 一天,小 L 突然对列车的进出站问题产生了兴趣,如下图所示:列车只能从 A 进站,或从 B 出站.列车从 A 进站,进站顺序为 1, 2, 3, 4, 5列车从 B 出站,出站顺序为 5, ...
- Gremlin:图遍历语言
Gremlin简介 Gremlin是Apache TinkerPop 框架下的图遍历语言.Gremlin是一种函数式数据流语言,可以使得用户使用简洁的方式表述复杂的属性图(property graph ...