SprimgMVC学习笔记(五)—— Controller方法返回值

一、返回ModelAndView

  controller方法中定义ModelAndView对象并返回,对象中可添加model数据、指定view。

/**
     * 查询商品列表
     * @return
     */
    @RequestMapping(value={"itemList","itemListAll"})
    public ModelAndView queryItemList(){
        // 获取商品数据
        List<Item> list = itemService.queryItemList();
        ModelAndView modelAndView = new ModelAndView();
        // 把商品数据放到模型中
        modelAndView.addObject("itemList", list);
        // 设置逻辑视图
        modelAndView.setViewName("itemList");
        
        return modelAndView;
    }

  不建议使用(不解耦)

二、返回void

       在Controller方法形参上可以定义request和response,使用request或response指定响应结果。适用Ajax

  • 使用request转发页面:request.getRequestDispatcher("页面路径").forward(request, response);
    request.getRequestDispatcher("/WEB-INF/jsp/success.jsp").forward(request, response);
  • 通过response页面重定向:response.sendRedirect("url")
    response.sendRedirect("/springmvc-web/itemEdit.action");
  • 通过response指定响应结果,例如响应json数据
    response.getWriter().print("{"abc":123}");

  代码演示:  

/**
 * 返回void测试
 * 
 * @param request
 * @param response
 * @throws Exception
 */
@RequestMapping("queryItem")
public void queryItem(HttpServletRequest request, HttpServletResponse response) throws Exception {
    // 1 使用request进行转发
    // request.getRequestDispatcher("/WEB-INF/jsp/success.jsp").forward(request,
    // response);

    // 2 使用response进行重定向到编辑页面
    // response.sendRedirect("/springmvc-web2/itemEdit.action");

    // 3 使用response直接显示
    response.getWriter().print("{"abc":123}");
}

三、返回字符串(推荐)

3.1 逻辑视图名

  controller方法返回字符串可以指定逻辑视图名,通过视图解析器解析为物理视图地址。

  @RequestMapping("/itemEdit")
    public String queryItemById(int id,Model model){
        // 根据id查询商品信息
        Item item = itemService.queryItemById(id);
        // 把结果传递给页面
        //ModelAndView modelAndView = new ModelAndView();
        //modelAndView.addObject("item", item);
        // 设置逻辑视图
        //modelAndView.setViewName("itemEdit");
        
        // 把商品数据放到模型中
        model.addAttribute("item", item);
        
        //指定逻辑视图名,经过视图解析器解析为jsp物理路径:/WEB-INF/jsp/itemList.jsp
        return "itemEdit";
    }

3.2 Redirect重定向

  Contrller方法返回字符串可以重定向到一个url地址。

  如下商品修改提交后重定向到商品编辑页面。

/**
 * 更新商品
 * 
 * @param item
 * @return
 */
@RequestMapping("updateItem")
public String updateItemById(Item item) {
    // 更新商品
    this.itemService.updateItemById(item);

    // 修改商品成功后,重定向到商品编辑页面
    // 重定向后浏览器地址栏变更为重定向的地址,
    // 重定向相当于执行了新的request和response,所以之前的请求参数都会丢失
    // 如果要指定请求参数,需要在重定向的url后面添加 ?itemId=1 这样的请求参数
    return "redirect:/itemEdit.action?itemId=" + item.getId();
}

3.3 forward转发

  Controller方法执行后继续执行另一个Controller方法

  如下商品修改提交后转向到商品修改页面,修改商品的id参数可以带到商品修改方法中。

/**
 * 更新商品
 * 
 * @param item
 * @return
 */
@RequestMapping("updateItem")
public String updateItemById(Item item) {
    // 更新商品
    this.itemService.updateItemById(item);

    // 修改商品成功后,继续执行另一个方法
    // 使用转发的方式实现。转发后浏览器地址栏还是原来的请求地址,
    // 转发并没有执行新的request和response,所以之前的请求参数都存在
    return "forward:/itemEdit.action";

}
原文地址:https://www.cnblogs.com/yft-javaNotes/p/10213494.html