SpringMVC快速入门记录(二)
一、数组参数绑定和List参数绑定
1.数组参数绑定
提交多个相同name的参数,保持name的名字和Controller方法参数的数组名称相同即可。
2.List参数绑定
List中存放对象,并将定义的List放在包装类QueryVo中
通常在需要批量提交数据时,将提交的数据绑定到list<pojo>
中,比如:成绩录入(录入多门课成绩,批量提交)
使用List接收页面提交的批量数据,通过包装pojo接收,在包装pojo中定义list<pojo>
属性
public class ItemsQueryVo {
//商品信息
private Items items;
//为了系统 可扩展性,对原始生成的po进行扩展
private ItemsCustom itemsCustom;
//批量商品信息
private List<ItemsCustom> itemsList;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
// 批量修改商品提交
// 通过ItemsQueryVo接收批量提交的商品信息,将商品信息存储到itemsQueryVo中itemsList属性中。
@RequestMapping("/editItemsAllSubmit")
public String editItemsAllSubmit(ItemsQueryVo itemsQueryVo) throws Exception {
return "success";
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 页面定义:
<c:forEach items="${itemsList }" var="item" varStatus="status">
<tr>
<td><input name="itemsList[${status.index }].name" value="${item.name }"/></td>
<td><input name="itemsList[${status.index }].price" value="${item.price }"/></td>
<td><input name="itemsList[${status.index }].createtime" value="<fmt:formatDate value="${item.createtime}" pattern="yyyy-MM-dd HH:mm:ss"/>"/></td>
<td><input name="itemsList[${status.index }].detail" value="${item.detail }"/></td>
</tr>
</c:forEach>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
name的格式:
对应包装pojo中的list类型属性名
[下标(从0开始)
].包装pojo中List类型的属性中pojo的属性名
例子:
"name="itemsList[${status.index }].price"
可以和包装类型的参数绑定归纳对比一下,其实就是在包装类的pojo基础上多了个下标。只不过包装类参数绑定时,要和包装pojo中的pojo类性的属性名一致,而list参数绑定时,要和包装pojo中的list类型的属性名一致。
二、@RequestMapping
1.URL路径映射
用@RequestMapping(value="/item")或@RequestMapping(value="item")添加到方法上面
表示用当前路径 + 这里的value值("item")可以 访问这个方法,
其中value可以是数组 意思可以多条URL都可以访问到这个方法
2.添加在类上面
在class上添加@RequestMapping(url)指定通用请求前缀,限制此类下的所有方法请求url必须以请求前缀开头
比如下图访问路径应为:
http://localhost:8080/springmvc-web2/item/itemList
或者
http://localhost:8080/springmvc-web2/item/itemListAll
3.请求方法限定
除了可以对url进行设置,还可以限定请求进来的类型
***限定GET方法
@RequestMapping(value = "itemList",method
=RequestMethod.GET)如果通过POST访问则报错:
HTTP Status 405 -Request method 'POST' not supported
应该是:
@RequestMapping(value =
"itemList",method = RequestMethod.POST)*** 限定POST方法
@RequestMapping(method =RequestMethod.POST)
如果通过GET访问则报错:
HTTP Status 405 -Request method 'GET' not supported
**GET和POST都可以
@RequestMapping(method = {RequestMethod.GET,RequestMethod.POST})
三、Controller方法的返回值
1.返回ModelAndView类
controller方法中定义ModelAndView对象并返回,对象中可添加model数据、指定view(jsp)。
2.返回void
在Controller方法形参上可以定义request和response,使用request或response指定响应结果
**使用request转发页面,如下:
request.getRequestDispatcher("页面路径").forward(request, response);
request.getRequestDispatcher("/WEB-INF/jsp/success.jsp").forward(request, response);
***可以通过response页面重定向:
response.sendRedirect("url")
response.sendRedirect("/springmvc-web2/itemEdit.action");
***可以通过response指定响应结果,例如响应json数据如下:
response.getWriter().print("{\"abc\":123}");
3.返回字符串
controller方法返回字符串可以指定逻辑视图名,通过视图解析器解析为物理视图地址。
//指定逻辑视图名,经过视图解析器解析为jsp物理路径:/WEB-INF/jsp/itemList.jsp
return "itemList";在jsp名字前加redirect:/ 或者 forward: /可以实现重定向或转发
如return "forward: /itemEdit";和return "redirect:/itemEdit";
四、异常处理器(略)
springmvc在处理请求过程中出现异常信息交由异常处理器进行处理,自定义异常处理器可以实现一个系统的异常处理逻辑。
异常处理思路:
系统中异常包括两类:预期异常和运行时异常RuntimeException,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发、测试通过手段减少运行时异常的发生。
系统的dao、service、controller出现都通过throws Exception向上抛出,最后由springmvc前端控制器交由异常处理器进行异常处理,如下图:
五、上传图片(略)
六、json数据交互
1.@ResponseBody作用:
@ResponseBody注解用于将Controller的方法返回的对象,通过springmvc提供的HttpMessageConverter接口转换为指定格式的数据如:json,xml等,通过Response响应给客户端,如下
/**
* 测试json的交互
* @param item
* @return
*/
@RequestMapping("testJson")
public @ResponseBody Item testJson(@RequestBody Item item) {
return item;
}
2.@RequestBody作用:
@RequestBody注解用于读取http请求的内容(json字符串),通过springmvc提供的HttpMessageConverter接口将读到的内容(json数据)转换为java对象并绑定到Controller方法的参数上。如下:
//请求json串(商品信息),输出json(商品信息)
//@RequestBody将请求的商品信息的json串转成itemsCustom对象
//@ResponseBody将itemsCustom转成json输出
@RequestMapping("/requestJson")
public @ResponseBody ItemsCustom requestJson(@RequestBody ItemsCustom itemsCustom){ //@ResponseBody将itemsCustom转成json输出
return itemsCustom;
}
七、RESTful支持(略)
Restful就是一个资源定位及资源操作的风格URL。不是标准也不是协议,只是一种风格。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。
八、拦截器(略)
Spring Web MVC 的处理器拦截器类似于Servlet 开发中的过滤器Filter,用于对处理器进行预处理和后处理。
SpringMVC快速入门记录(二)的更多相关文章
- SpringMVC快速入门记录(一)
1.SpringMVC入门:表现层框架,spring的一部分 2.Spring处理流程: 3.要在web.xml里写好相关配置 <!--配置DispatcherServlet--> < ...
- springmvc快速入门(注解版本)
1)springmvc快速入门(传统版) 步一:创建springmvc-day02这么一个web应用 步二:导入springioc,springweb和springmvc相关的jar包 ------- ...
- springmvc快速入门(XML版本)
1)springmvc快速入门(传统版) 步一:创建springmvc-day01这么一个web应用 步二:导入springioc,springweb , springmvc相关的jar包 步三:在/ ...
- JS快速入门(二)
目录 JS快速入门(二) 结构图 BOM window对象 open() window子对象 location对象 history对象(了解) navigator 对象 screen对象 BOM 定时 ...
- MySQL快速入门(二)
目录 MySQL快速入门(二) 约束条件 自增 自增的特性 主键 外键 级联更新/删除 表与表之间的关系 外键约束 操作表方法 查询关键字 练习数据 select··from where 筛选 gro ...
- SpringMVC 快速入门
SpringMVC 快速入门 SpringMVC 简介 SpringMVC是 Spring为展示层提供的基于Web MVC设计模式的请求驱动类型的轻量级Web框架,它的功能和Struts2一样.但比S ...
- Vue.js+vue-element搭建属于自己的后台管理模板:Vue.js快速入门(二)
Vue.js+vue-element搭建属于自己的后台管理模板:Vue.js快速入门(二) 前言 上篇文章对Vue.js有了初步理解,接下来我们把Vue.js基础语法快速的过一遍,先混个脸熟留个印象就 ...
- springMVC快速入门 共分为五步
springMVC快速入门 共分为5步分别为: 1 导入依赖 2 spring-mvc.xml 配置 3 web.xml配置 4 自定义一个核心控制类 5 页面配置 详细步骤以及代码 ...
- Hive数仓之快速入门(二)
上次已经讲了<Hive数据仓库之快速入门一>不记得的小伙伴可以点击回顾一下,接下来我们再讲Hive数据仓库之快速入门二 DQL hive中的order by.distribute by.s ...
随机推荐
- 【LeetCode】Two Sum II - Input array is sorted
[Description] Given an array of integers that is already sorted in ascending order, find two numbers ...
- .netcore 使用阿里云短信
准备工作 阿里云上申请短信服务 创建短信应用.签名.短信模板并申请审核,如果审核不通过,接口是调不通的. 配置专门用来发短信的accessKeyId和 accessKeySecret 开始开发 下载安 ...
- Android 使用URLConnection下载音频文件
本文链接: Android 使用URLConnection下载音频文件 使用MediaPlayer播放在线音频,请参考Android MediaPlayer 播放音频 有时候我们会需要下载音频文件.这 ...
- Apache Thrift 的基本使用
Apache Thrift 的基本使用 可以先看看官网是如何介绍的 The Apache Thrift software framework, for scalable cross-language ...
- FTP无法登录问题-内有网盘福利
http://dinghuqiang.blog.51cto.com/19871/701185/ 一顿操作猛如虎,还是没解决. 然后我想想,会不会是浏览器缓存问题? 换个火狐登录看看! 哇擦!看到报错了 ...
- (6)autotools工具的使用
autotools是专门用来生成Makefile的一系列工具,包括autoscan.aclocal.autoheader.autoconf.automake等. (1)autotools ...
- 【Python】机器学习之单变量线性回归练习(计算Cost Function)
注:练习来自于吴恩达机器学习 翻译后的题目: 你是一个餐厅的老板,你想在其他城市开分店,所以你得到了一些数据(数据在本文最下方),数据中包括不同的城市人口数和该城市带来的利润.第一列是城市的人口数,第 ...
- 链表常见的题型(java实现)
链表是面试中最常见的一种题型,因为他的每个题的代码短,短短的几行代码就可以体现出应聘者的编码能力,所以它也就成为了面试的重点. 链表常见的操作有1.打印链表的公共部分,2.删除链表的倒数第K个节点,3 ...
- NAT网络下tcp_tw_recycle参数引起的故障
记录一次阿里云服务器故障排查思路 公司网络是nat 环境 问题: 同一个服务有两台服务器 172.19.19.252 172.19.19.187 两台服务器 要连node5 发现172.19.19.2 ...
- 防DOS攻击-网络连接法
#!/bin/bash netstat -antup | grep SYN_RECV | awk '{print $5}' |awk -F: '{print $1}'|sort|uniq -c > ...