springmvc从零开始(四)- 返回值

请求到达指定控制器后,经过一系列业务处理,最后需要返回指定的页面或者数据,本篇整理所有类型的返回方式

一、返回值为字符串

1.最简单的类型,返回一个字符串文件名相对路径,经过视图解析器,拼接前后缀找到指定文件,响应给前台:

    /**
     * 返回的字符串经过视图解析器,拼接前缀后缀,找到对应文件后,进行相应
     * @return 文件名
     */
    @RequestMapping("/testReturnString/page")
    public String page(Model model){
        model.addAttribute("test","test");
        return "success";//返回值经视图解析器,拼接前后缀,找到指定文件名
    }

2.返回一个字符串,但该字符串的以“forward:“开头(不经过视图解析器):

    /**
     * 用关键字做转发
     * 注:过程不会经过视图解析器,所以不会拼接配置好的前缀和后缀,因而要写完整的路径名
     * @return "forward:"+跳转地址完整路径名;
     */
    @RequestMapping("/testReturnString/dispatcher")
    public String dispatcher(){
        return "forward:/WEB-INF/pages/success.jsp";
    }

3.返回一个字符串,该字符串的以“redirect:“开头(不经过视图解析器,但会在url前部自动拼接请求路径):

    /**
     * 用关键字做重定向
     * 注:
     *  1.过程不会经过视图解析器,所以不会拼接配置好的前缀和后缀,
     *  2.重定向是前台重新发起请求,如果直接返回WEB-INF中的页面,会被拦截,所以要么请求controller,要么返回webapp下的文件
     *  3.通过此种方式返回的页面不需要在资源前拼接请求ip端口等信息,相当于spring自动添加HttpServletRequest.getContextPath()
     * @return "redirect:"+跳转地址完整路径名;
     */
    @RequestMapping("/testReturnString/redirect")
    public String redirect(){
        return "redirect:/success.jsp";
    }

二、返回值空(void)

1.所请求的方法未做任何处理,会将请求的url,即映射路径,直接返回给视图解析器,拼接前后缀,去找该页面

    /**
     * 方法内没有任何内容,结果相当于返回了字符串:"/testReturnVoid/getVoid"(也就是请求的映射),经过视图解析器拼接前后缀后的这个文件
     */
    @RequestMapping("/testReturnVoid/getVoid")
    public void getVoid(){
    }

2.通过HttpServletRequest实现请求转发(这种方式不经过视图解析器,所以要写文件的完整路径):

    /**
     * 通过最原始的方式进行请求转发
     */
    @RequestMapping("/testReturnVoid/dispatcher")
    public void dispatcher(HttpServletRequest request, HttpServletResponse response) throws Exception {
        request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request,response);
        return;
    }

3.通过HttpServletResponse进行请求重定向(需注意,重定向为再次请求,需写控制器的映射路径或可直接访问的文件名)

    /**
     * 通过最原始的方式进行重定向
     */
    @RequestMapping("/testReturnVoid/redirect")
    public void redirect(HttpServletRequest request, HttpServletResponse response) throws Exception {
        response.sendRedirect(request.getContextPath()+"/success.jsp");
        return;
    }

三、返回ModelAndView对象

该对象由spring提供,通过给该对象数据、页面,该对象通过视图解析器进行页面查找和数据渲染。

实际一、1中返回字符串最后也是经过ModelAndView处理的:

model.addAttribute("test","test"); 等同于  modelAndView.addObject("test","test");

return "success" 等同于 modelAndView.setViewName("success");

    /**
     * 通过返回ModelAndView对象,经过视图解析器,获得该对象中的model(数据),以及viewName(页面),经过视图解析器进行跳转
     * @return
     */
    @RequestMapping("/testReturnVoid/modelAndView")
    public ModelAndView modelAndView(){
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("user",new Studet("张三","123"));//给数据
        modelAndView.setViewName("success");//给页面
        return modelAndView;
    }

四、返回数据对象

前台通过ajax向后台传输json格式的数据、后台以json格式的数据响应给前台,都要通过格式转换工具,实现json与javabean之间的互相转化:

1.首先要导入对json数据进行转化的依赖,实现json与javabean之间的转化

    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.9.0</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.9.0</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>2.9.0</version>
    </dependency>

2.接收ajax请求的参数使用@RequestBody修饰,就可通过jackson的jar进行格式转换,即ajax提交的json字符串,会根据键值对,匹配到对象对应的属性中。

3.ajax接受返回值类型为json,通过@ResponseBody修饰方法或者修饰方法的返回值,即可将方法的返回值由对象转化为json字符串,返回给对应的ajax请求,ajax的success回调函数可对json对象进行解析。

js中的ajax请求:

                $.ajax({
                    url : "user/testReturnVoid/getData",
                    contentType : "application/json;charset=UTF-8",
                    data : '{"username":"123"}',
                    dataType : "json",
                    type : "post",
                    success:function (data) {
                        alert(data.username);
                        alert(data.passworld);
                        alert(data.date);
                    }
                })
controller:
    @ResponseBody
    @RequestMapping("/testReturnVoid/getData")
    public Studet getData(@RequestBody Studet student){//接收的json字符串经过@RequestBody转化为对象
        Studet studet = new Studet();
        studet.setUsername("张三");
        studet.setPassworld("123");
        studet.setDate(new Date());
        return studet;//返回的对象经过@ResponseBody转化为json
    }

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值