一、Spring MVC入门
名称中含有mvc字样,即spring框架下mvc开发模型
M,Model,模型
V,View,视图
C,Controller,控制器(处理业务逻辑最核心的部分,也是服务端编码的重点)
spring从3.0开始,全面超越struts,开始和spring合并为一个框架
特点:
基于springmvc注解,极大的简化了开发
po类自动封装,数据类型自动转换
支持REST风格的URL请求
支持插件结构,扩展性强
1、hello
创建Project/Module,添加web的框架支持
添加jar包引用和tomcat服务器
配置web.xml
创建控制器
创建访问成功页面
springmvc.xml
结果
注意目录结构
分析流程
springmvc的DispatcherServlet核心类,接收到了请求【hello】
读取springmvc.xml配置文件【扫描包中的控制器和映射路径“/hello”】
执行匹配的控制其中的方法【public String hello()】
方法的返回值是字符串,会经过视图解析器组合前缀后缀,进行跳转【WEB-INF/views/success.jsp】
2、传递参数测试
请求
控制器
测试
二、深入学习
1、@RequestMapping
定义URL
映射URL
标记在类上
相当于该控制器的所有请求,都加上该前缀
标记在方法上
方法级URL
案例
控制器
访问
测试
定义请求信息
定义请求的参数
value url
method 请求方式
params 携带参数
heads 请求头信息
还支持简单表达式(了解)
支持“非,!”,“等,不等”等运算符
浏览器F12打开调试面板
案例--指定请求方式
控制器
请求
结果
案例--限定头信息
控制器
访问
Ant风格请求格式
Ant风格支持3中匹配符
?:匹配文件中任意一个字符
*:匹配文件中任意字符
**:匹配多层路径
如:
/user/*/createUser
匹配user/aaa/createUser,user/bbb/createUser等
/user/**/createUser
匹配user/createUser,user/aaa/bbb/createUser等
/user/createUser??
匹配user/createUseraa,user/createUserbb等
案例--ant风格请求
控制器
访问
测试
2、@PathVariable
映射URL绑定的占位符
这是spring3.0新增功能,通过这个设定可以实现REST风格请求
案例--绑定占位符
控制器
访问
测试
3、REST风格请求
REST
Representactional State Transfer,表现层(资源)状态转化
是一种简明扼要的URL请求写法
其实就是把HTTP请求的类型由2个扩展为4个
GET
如:/order/1,查询id=1的订单
POST
如:/order/1,新增id=1的订单
PUT
如:/order/1,修改id=1的订单
DELETE
如:/order/1,删除id=1的订单
注意
浏览器的form表单,只支持GET与POST请求,DELETE和PUT请求method属性并不支持,需要使用spring 的过滤器来转换实现支持
案例--REST风格请求
配置web.xml
控制器
访问
测试
查询
添加
更新
原因是jsp默认不支持PUT和DELETE形式的请求,需设定jsp页面,在success.jsp页面中添加
删除
4、使用po类作为参数
SpringMVC会按照请求,将相应的参数名,对应PO类的属性名,直接填充值,支持级联
po类,同时自动生成get、set和toString方法
控制器
请求
测试
5、使用ServletAPI作为参数
控制器
访问
测试
6、处理数据模型
SpringMVC提供了以下几种途径进行数据输出(其实就是控制其中的方法返回值)
ModelAndView
可以添加Model的数据,以及需要跳转的View数据
Map以及Model
方法的输入参数是,Map就是单纯的映射数据,Model单纯的模型数据
@SessionAttributes
模型中的某个属性加上该注解,即为将某个数据存放至session作用域
@ModelAttribute
方法输入参数加入该注解,参数会直接放置数据模型中
案例--ModelAndView的使用
控制器
请求
页面
测试
案例--Map作为传入参数
控制器
访问
测试
案例--使用@SessionAttributes
SpringMVC默认会把数据存放至request作用域,只用该注解,可以将数据暂存至session作用域
控制器
访问
测试
案例--出现问题
控制器
访问
结果
解决问题,使用@ModelAttribute注解,在控制器中添加一个方法
结果
@SessionAttributes引发的异常
情况
不报错
结果
解决方案
7、JstlView
JSTL在JSP开发中使用比较频繁,SpringMVC会自动把InternalResourcesView转为JstlView,若使用jstl中fmt国际化标签,则需要在SpringMVC配置中加入相关配置和资源文件
springmvc.xml中的配置
控制器
index.jsp
success.jsp
问题
其实这种情况,有必要经过控制器吗?
没必要,但是不经过控制器会报错
如果出现不想经过控制器的的请求,需要添加配置
问题又来了
访问之前的控制器,又报错
需要添加配置
8、重定向
控制器的跳转方式,默认都是转发,如果需要重定向,采用如下写法
控制器
访问
三、处理ajax和json
1、处理静态资源
添加css文件
访问测试
无法访问,原因:
因为所有的请求都被SpringMVC的核心servlet拦截,即使静态资源文件也不行
解决方案1:
配置一些特定结尾的请求,如:.action,.do等
解决方案2:推荐
SpringMVC可以直接配置
再次访问测试,一切正常
注意
如果想要将css,js等静态资源文件也放在WEB-INF下,那就需要添加新的配置
2、处理ajax
项目结构
控制器
访问页面
ajax.jsp页面
3、处理json
需要
控制器
测试
四、文件上传
需要jar
项目结构
配置
index.jsp
控制器
success.jsp
配置
结果
写在最后: 这里目前就是Spring MVC的基本使用,学习内容基本告一段落。
网盘链接:链接:pan.baidu.com/s/1Thr6dxw4… 提取码:1234