什么是MVC
Model 数据模型
View视图
Controller 控制器
MVC是一种Web应用架构,是一种代码设计思想
思想:将所有客户端请求全部交由控制器,由控制器将其分发并将结果响应给客户端
2.常见MVC框架
使用原生Servlet实现MVC:
1.配置比较复杂
2.数据处理麻烦
实际开发中一般会使用MVC框架,如Struts,Structs2, SpringMVC等
对比:
效率方面:Structs>SpirngMVC>Structs2
Struct2是多例的,效率低
Struct1和SpringMVC是单例的,两者效率基本差不多
配置方面:SpringMVC>Structs2>Structs1
3.为什么要使用SpringMVC
使用注解配置替代xml配置,更简单
效率高,单例的
扩展好,用户自定义
SpringMVC和Spring无缝衔接
4.SpringMVC原理
1.流程图
2.执行过程
分为六步:
1.DispatcherServlet
SpringMVC核心控制器,前端控制器,主要作用是用来分发
2.HandlerMapping
映射处理器,根据请求url映射到具体的处理Handler
Handler就是Controller层实现类,也称为Action或Controller
3.HandlerAdapter
适配器:用来适配不同的处理器Handler
处理器有两种实现方式:实现接口,基于注解,所以执行之前需要先适配
4.Handler
处理器:执行处理具体业务,并产生数据模型Model和视图名View
Handler会将数据模型Model和视图名View封装成ModelANDView对象并返回
5.ViewResolver
视图解析器:根据视图名解析为具体的视图,一般多为jsp页面,然后封装为View对象
6.View
视图:使用具体的视图技术进行渲染,结合Model展示数据
视图有很多种形式:jsp,freemarker,velocity,excel,pdf等
配置 SpringMVC
1.添加jar包
2.配置核心控制器(web.xml)
3.核心配置文件
两种定义方式:
使用默认位置,默认在WEB-INF/目录
建立springMVC.xml
4.静态资源处理
当配置DispatherServlet为
两种处理方式:
使用tomcat提供的,默认Servlet
tomcat提供了默认的Servlet来处理静态资源
1.方式1
缺点:1.如果使用的不是tomcat,则可能不生效,与tomcat耦合
2.只能读取webapp下的资源,无法读取/WEB-INF/下的资源
2.方式2
使用SpringMVC提供的处理方式
5.直接访问jsp页面
默认不能直接访问WEB-INF目录下的jsp页面,一般都是在Controller中做转发映射
6.Controller详解
1.方法的返回值
有四种类型:
ModelAndView表示返回的为数据模型和视图
String表示返回的是视图
三种写法(形式)
普通字符串---->表示视图名称
"forword"+url--->转发
"redirect"+url --->重定向
void将请求的url作为视图名称,很少使用
Object 表示返回的是数据模型,(一般返回的是json数据)
SpringMVC注解
@COntroller 将类映射为Controller,添加到IoC容器中
@RequestMapping 配置请求映射路径,即URL
@ReuestParam 表示参数来源于请求参数
@PathVariable 表示参数来源于URL
@RequestHeader 表示参数来源于请求头
@CookieValue 表示参数来源于Cookie
@RequestBody 表示参数来源于请求体
@ModelAttribute 将请求数据转换为对象
@Valid 后台校验
@InitBinder 类型转换,注册属性编辑器
@ControllerAdvice 统一异常处理,处理全局异常
@ExceptionHander 异常处理器,处理特定异常的方法
@RespongseBody 结合返回值为Object的方法使用,用来返回JSON数据
@RestController 将映射为Controller层,默认为所有方法添加@ResponseBody注解
@RequestMapping
基本用法
该注解可以定义在方法上,可以定义在类上,表示层级关系
配置URL时以/开头和不以/开头的区别:
添加时表示从项目根目录下查找
不添加的时表示从当前方法所在层级开始查找
URL的多种写法
请求映射路径有三种写法:
Ant风格(较少使用)
*表示单层目录,匹配任意字符,可以q
Rest风格
{变量}表示URL中的占位符
根据请求方式访问
限定请求方式:GET,POST,PUT,DELETE等
//@RequestMapping(path = "/user/{id}",method = RequestMethod.GET)
@GetMapping("/user/{id}")
public String deleteUser(@PathVariable Integer id){
System.out.println("PathController.deleteUser,id:"+id);
return "hello";
}
//@RequestMapping(path = "/user/{id}",method = RequestMethod.POST)
@PostMapping("/user/{id}")
public String selectUser(@PathVariable Integer id){
System.out.println("PathController.selectUser,id:"+id);
return "hello";
}
其他属性
params
限定请求参数,必须符合指定条件
其他属性
*/
//请求参数中必须包含id,且username等于admin,password不等于123
一.方法的参数
1.JavaEE组件
HttpServletReQuest
HttpSerlvtResponse
HttpSession
2.IO流
InputStream/OutputStream
Reader/Writer
3.向界面传递数据
MOdel,Map,ModelMap
将数据存储到Request作用域中
4.String和基本类型
@RequestParam表示参数来源于请求参数,默认所有的参数都加这个注解,参数来源于同名的参数
@PathVariable表示参数来源于URL
@RequestHeader表示参数来源于请求头
@CookieValue 表示参数来源于Cookie
@RequestBody 表示参数来源于请求体(只有post请求才会有请求体)
5自定义的类型
@ModelAttribute 将请求数据转换为对象
条件:对象的属性名必须与表单元素的名称相同
@ModelAttribute 有两种用法:
1.在方法参数的前面添加注解
作用:将请求参数转换为对象
2.在方法的上面添加该注解
作用:在调用所有的目标方法前会调用添加@ModelAttribute注解的方法,并向模型中添加数据,
6.错误参数
Errors,BindingResult
用来接收错误信息,实现服务端的数据校验
实际开发中,既要做客户端表单校验,也要服务端数据校验
服务端校验的错误消息一般只在后台处理
二,服务器校验框架
1.简介
1.1 JSR303校验
JSR303是一个数据验证的标准规范,用于对Java Bean中的属性进行校验,称为Bean Validation
提供了常用的校验注解
1.2 Hibernate Validator
是JSR303的一个参考实现,并提供了扩展
三,类型转换
1.简介
数据绑定流程: 获取值---->查找转换器---->转换---->后台校验----->数据绑定
两种解决方式:
方式1:使用PropertyEditor
方式2:使用Converter(推荐)
2.使用PropertyEditor
步骤:
1.定义属性编辑器
2.注册属性编辑器
@InitBinder
缺点:
。代码嵌入在Controller层中的
。只能从字符串转换
3.使用Converter
步骤
1.定义转换器,实现Converter接口
2.管理自定义转换器
3.加载应用自定义管理器
四。@SessionAttributes
五,处理AJAX
1.@ResponseBody
为方法添加注解后,将返回值写到响应体中
2.返回JSON
三种方式:
jackson,SpringMVC默认支持
gson,SpringMVC默认支持,google开发
fastjson,SpringMVC默认不支持,alibaba开发
2.返回JSON
1.添加jar包
2.配置消息转换器 --可选择配置 (省略)
-->
使用fastjson
步骤:添加jar包
2.配置消息转换器
三.文件上传和下载
1.文件上传
1.简介
SpringMVC对于上传提供了支持,基于commons-fileupload
1.2用法
步骤:
1.添加jar包
2.编写上传的页面
3.配置文件解析器
4.通过CommonsMultipartFile接收文件
2.文件下载
两种方式:
使用OutputStream
使用@ResponseEntity
2.1使用OutputStream
传递文件名的两种方式:
。使用请求参数传递文件名
。使用rest风格传递文件名