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作用:
2.@RequestBody作用:@ResponseBody注解用于将Controller的方法返回的对象,通过springmvc提供的HttpMessageConverter接口转换为指定格式的数据如:json,xml等,通过Response响应给客户端,如下
/** * 测试json的交互 * @param item * @return */ @RequestMapping("testJson") public @ResponseBody Item testJson(@RequestBody Item item) { return item; }
@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,用于对处理器进行预处理和后处理。