1. 返回ModelAndView对象

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

实例

@RequestMapping("/itemList.action")
    public ModelAndView itemList () {
        //获取数据
        List<Items> itemList = new ArrayList<Items>();
        itemList .add(new Items(1, "T460", 9000f, "联想高端机", "图片1", new Date()));
        itemList .add(new Items(2, "T450", 7000f, "联想高端机", "图片2", new Date()));
        itemList .add(new Items(3, "T410", 5000f, "联想高端机", "图片3", new Date()));
        //创建modelandview对象
        ModelAndView modelAndView = new ModelAndView();
        //将数据存放到model中, 即保存在request域中
        modelAndView.addObject("itemList", itemList);
        //页面转发
        modelAndView.setViewName("itemList");
        //返回结果
        return modelAndView;
    }

2. 返回void

在controller方法形参上可以定义request和response,使用request或response指定响应结果:

1)、使用request转向页面,如下:

request.getRequestDispatcher("页面路径").forward(request, response);

2)、也可以通过response页面重定向:

response.sendRedirect("url")

3)、也可以通过response指定响应结果,例如响应json数据如下:

response.setCharacterEncoding("utf-8");

response.setContentType("application/json;charset=utf-8");

response.getWriter().write("json串");

实例

@RequestMapping("/itemEdit.action")
    public void itemEdit (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取请求id信息
        String idStr = request.getParameter("id");
        int id = Integer.parseInt(idStr);
        //跟局id调用业务层查询对应数据
        Items items = itemService.findById(id);
        request.setAttribute("item", items);
        //请求转发, 此时配置的试图解析器的prefix不起作用了    
        request.getRequestDispatcher("/WEB-INF/jsp/editItem.jsp").forward(request, response);
    }

3. 返回字符串

1)  逻辑视图名

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

//指定逻辑视图名,经过视图解析器解析为jsp物理路径:/WEB-INF/jsp/item/editItem.jsp

return "item/editItem";

实例

@RequestMapping("/itemList.action")
    public String itemList (Model model) throws CustomerException {
        //调用业务层查询订单数据
        List<Items> itemList = itemService.findAll();
        //将查询结果保存在model中
        model.addAttribute("itemList", itemList);
        //页面转发
        return "itemList";
    }

2)  Redirect重定向

Contrller方法返回结果重定向到一个url地址,如下商品修改提交后重定向到商品查询方法,参数无法带到商品查询方法中。

//重定向到queryItem.action地址,request无法带过去

return "redirect:queryItem.action";

redirect方式相当于“response.sendRedirect()”,转发后浏览器的地址栏变为转发后的地址,因为转发即执行了一个新的request和response。

由于新发起一个request原来的参数在转发时就不能传递到下一个url,如果要传参数可以/item/queryItem.action后边加参数,如下:

/item/queryItem?...&…..

实例

@RequestMapping("loginSubmit.action")
    public String loginSubmit (HttpSession session, String username, String password) {
        //将用户名保存在session中
        session.setAttribute("username", username);
        
        return "redirect:/item/itemList.action";
    }

3)  forward转发

controller方法执行后继续执行另一个controller方法,如下商品修改提交后转向到商品修改页面,修改商品的id参数可以带到商品修改方法中。

//结果转发到editItem.action,request可以带过去

return "forward:editItem.action";

forward方式相当于“request.getRequestDispatcher().forward(request,response)”,转发后浏览器地址栏还是原来的地址。转发并没有执行新的request和response,而是和转发前的请求共用一个request和response。所以转发前请求的参数在转发后仍然可以读取到。

实例

@RequestMapping(value="/updateitem.action",method={RequestMethod.POST, RequestMethod.GET})
    public String updateItem (Items item, MultipartFile picture) throws IllegalStateException, IOException {
        //图片保存
        //为每个图片生成一个独一无二的名称
        String picName = UUID.randomUUID().toString();
        //获取图片的后缀名
        String originalFilename = picture.getOriginalFilename();
        String extName = originalFilename.substring(originalFilename.lastIndexOf("."));
        //拼接图片名称
        String pictureName = picName.concat(extName);
        //将图片保存在制定路径下
        picture.transferTo(new File("E:\\temp\\" + pictureName));
        //将图片名称保存到数据库中
        item.setPic(pictureName);
        
        //调用业务层修改数据
        itemService.update(item);
        return "forward:/item/itemEdit.action";
    }

SpringMVC中Controller的方法返回值的更多相关文章

  1. springMVC对于controller处理方法返回值的可选类型

    http://www.360doc.com/content/14/0309/19/834950_359081989.shtml

  2. 详解SpringMVC中Controller的方法中参数的工作原理[附带源码分析]

    目录 前言 现象 源码分析 HandlerMethodArgumentResolver与HandlerMethodReturnValueHandler接口介绍 HandlerMethodArgumen ...

  3. 详解SpringMVC中Controller的方法中参数的工作原理——基于maven

    转自:http://www.tuicool.com/articles/F7byQn 前言 SpringMVC是目前主流的Web MVC框架之一. 如果有同学对它不熟悉,那么请参考它的入门blog:ht ...

  4. 【MVC - 参数原理】详解SpringMVC中Controller的方法中参数的工作原理[附带源码分析]

    前言 SpringMVC是目前主流的Web MVC框架之一. 如果有同学对它不熟悉,那么请参考它的入门blog:http://www.cnblogs.com/fangjian0423/p/spring ...

  5. 详解SpringMVC中Controller的方法中参数的工作原理

    Spring MVC中Controller的处理方法的参数可以是Integer,String,自定义对象,ServletRequest,ServletResponse,ModelAndView等等,非 ...

  6. springmvc中controller内方法跳转forward?redirect?

    使用springmvc的controller的时候,碰到controller内方法的跳转的问题,记录下问题以及自己测试的过程. 场景: 业务执行更新操作之后返回列表页面,列表页面需默认展示查询的列表数 ...

  7. Spring MVC controller的方法返回值

    ModeAndView 可以在构造时确定需要跳转的页面也可以通过setViewName方法来确定需要跳转的页面 String 指定返回页面的视图名称,页面跳转,如果加了@ResponseBody注解, ...

  8. springMVC中controller层方法中使用private和public问题

    楼主一直习惯使用public,偶尔手误也可能使用private,但是发觉也没啥区别,都能调用service层,注入bean. 后来做一个新项目时,发觉自己以前的写的部分功能报错,当时有点懵逼,,找了半 ...

  9. SpringMVC中Controller

    详解SpringMVC中Controller的方法中参数的工作原理[附带源码分析] 目录 前言 现象 源码分析 HandlerMethodArgumentResolver与HandlerMethodR ...

随机推荐

  1. Win8 HTML5与JS编程学习笔记(二)

    近期一直受到win8应用的Grid布局困扰,经过了半下午加半个晚上的奋斗,终于是弄明白了Grid布局方法的规则.之前我是阅读的微软官方的开发教程,书中没有详细说明CSS3的布局规则,自己鼓捣了半天也是 ...

  2. Android不同系统版本依然能调用到正确的API方法Demo——Service调用startForeground举例

    private static final Class<?>[] mSetForegroundSignature = new Class[] { boolean.class}; privat ...

  3. SpriteBuilder中的loadAsScene:方法的返回值

    见如下代码: CCScene *scene = [CCBReader loadAsScene:@"GameScene"]; GameScene *gameScene = (Game ...

  4. Jmeter(二十五)_Xpath关联

    在Jmeter中,除了正则表达式可以用作关联,还有一种方式也可以做关联,那就是 XPath Extractor.它是利用xpath提取出关键信息,传递变量. 具体用法 添加一个后置处理器-XPath ...

  5. IIS服务器如何抗住高并发的客户端访问

    今天被问到一个问题,如果你在阿里云上部署了一个IIS服务器,此时如果有成千上万的客户端来访问,你将如何设计?我东扯扯西谈谈,说加个线程池来处理,在加个请求队列.当时觉得说的没有问题,现在想想,服务器自 ...

  6. wait和notify的理解与使用

    1.对于wait()和notify()的理解 对于wait()和notify()的理解,还是要从jdk官方文档中开始,在Object类方法中有: void notify() Wakes up a si ...

  7. Demo1

    <!DOCTYPE html> <html lang="zh"> <header> <meta charset="utf-8&q ...

  8. VueJs(9)---组件(父子通讯)

    组件(父子通讯) 一.概括 在一个组件内定义另一个组件,称之为父子组件. 但是要注意的是:1.子组件只能在父组件内部使用(写在父组件tempalte中); 2.默认情况下,子组件无法访问父组件上的数据 ...

  9. 8.1 Socket编程

    8.1 Socket编程 在很多底层网络应用开发者的眼里一切编程都是Socket,话虽然有点夸张,但却也几乎如此了,现在的网络编程几乎都是用Socket来编程.你想过这些情景么?我们每天打开浏览器浏览 ...

  10. Mysql系列-数据库

    一 .数据库管理软件的由来 基于我们之前所学,数据要想永久保存,都是保存于文件中,毫无疑问,一个文件仅仅只能存在于某一台机器上. 如果我们暂且忽略直接基于文件来存取数据的效率问题,并且假设程序所有的组 ...