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,用于对处理器进行预处理和后处理。


原文地址:https://www.cnblogs.com/chz-blogs/p/9381007.html