目录
Controller方法返回值
一、返回ModelAndView
controller方法中定义ModelAndView对象并返回,对象中可添加model数据、指定view
@RequestMapping("itemList")
public ModelAndView itemList() {
ModelAndView mav = new ModelAndView();
List<Item> itemList = itemService.getItemList();
mav.addObject("itemList", itemList);
mav.setViewName("itemList");
return mav;
}
二、返回void
在controller方法形参上可以定义request和response,使用request或response指定响应结果:
1.使用request转发页面
request.getRequestDispatcher("页面路径").forward(request.response);
request.getRequestDispatcher("/WEB-INF/jsp/success.jsp").forward(request, response);
2.可以通过response页面重定向
response.sendRedirect("url")
response.sendRedirect("/spring-mvc/itemEdit.action");
3.可以通过response指定响应结果
例如响应json数据如下:
response.getWriter().print("{\"abc\":123}");
三、返回字符串
1.逻辑视图名
controller方法返回字符串可以指定逻辑视图名,通过视图解析器解析为物理视图地址
//WEB-INF/jsp/itemEdit.jsp
return "itemEdit";
2.Redirect重定向
Controller方法返回字符串可以重定向到一个url地址
如下商品修改提交后重定向到商品编辑页面
@RequestMapping("updateItem")
public String updateItemById(Item item){
//更新商品
this.itemService.updateItemById(item);
//修改商品成功后,重定向到商品编辑页面
//重定向后浏览器地址栏变为重定向的地址
//重定向相当于执行了新的request和response,所以之前的请求参数会丢失
//如果要指定请求参数,需要在重定向的url后面添加 ?itemId=1
return "redirect:/itemEdit.action?itemId=" + item.getId();
}
3.forward转发
Controller方法执行后继续执行另一个Controller方法
如下商品修改提交后转向到商品修改页面,修改商品的id参数可以带到商品修改方法中。
@RequestMapping("updateItem")
public String updateItemById(Item item){
//更新商品
this.itemService.updateItemById(item);
//修改商品成功后,继续执行另一个方法
//使用转发的方式实现。转发后浏览器地址栏还是原来的请求地址
//转发并没有执行新的request和response,所以之前的请求参数都存在
return "forwaed:/itemEdit.action";
}