博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
5.SpringMVC
阅读量:7096 次
发布时间:2019-06-28

本文共 2892 字,大约阅读时间需要 9 分钟。

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}

矩阵变量:

开启矩阵变量的支持:    

矩阵变量实例:

 

 

@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类:

 

转载于:https://www.cnblogs.com/Firesun/p/9921111.html

你可能感兴趣的文章
【BZOJ】4753: [Jsoi2016]最佳团体 01分数规划+树上背包
查看>>
iOS 获取设备信息之UIDevice的使用,Swift 基于 API
查看>>
IntelliJ cannot log in to GitHub上传github报错解决
查看>>
MySQL强制性操作
查看>>
timestamp与timedelta,管理信息系统概念与基础
查看>>
重写对象ToString方法
查看>>
备忘: C++中的 vector 容器
查看>>
smt中查看图片与视频缩略图中,如何获得小视频的长度。
查看>>
图片(img标签)的onerror事件
查看>>
2013应届毕业生“百度”校招应聘总结
查看>>
CentOS系统启动流程
查看>>
myEclipse的Aptana studio插件安装时出现Error opening the editor.
查看>>
Mysql 知识(1)
查看>>
根据不同选择显示不同单价的逻辑
查看>>
“整个场面我Hold住!”软件测试计划
查看>>
利用SmtpClient发送邮件
查看>>
线性表练习题1
查看>>
C# 面试题大全
查看>>
「THUPC2018」赛艇 / Citing
查看>>
linux shell 命令学习(4) cut - remove sections from each line of files
查看>>