SpringMVC处理数据的响应方式详解

一、实现页面跳转的方式

如何实现页面跳转?

1. 直接返回逻辑视图名称

  • 方法返回的字符串,和视图解析器里的前缀、后缀拼接得到真实路径,再进行跳转

  • 是请求转发跳转

 

2. 返回带有前缀的物理视图

  • 请求转发:forward:/success.jsp

  • 重定向:redirect:/success.jsp

  • 注意:如果带有forward或者redirect,那么路径必须是真实路径

示例:

 @RequestMapping("/jump")
    public String resp1(){
        System.out.println("/jump.....");

        // return "success";

        // return "forward:/success.jsp";

        return "redirect:/success.jsp";
    }

二、请求转发并传递数据

ModelAndView说明

  • ModelAndView是SpringMVC提供的组件之一,其中

    • Model,模型,用于封装数据(相当于放到了request域中)

    • View,视图,用于展示数据

  • 如果我们设置了视图名称,并且封装了数据模型,SpringMVC会:

    • 把Model的数据放到request域对象中,然后请求转发到指定的视图

    • 我们可以视图页面中获取数据显示出来

使用示例:

/**
 * 页面请求转发跳转,并传递数据.
 * 方式一:方法返回String,是视图路径;如果要传递数据,可以使用Model
 *
 * 我们向Model对象里放的数据,最终是被SpringMVC给放到了request域对象里
 */
@RequestMapping("/data2")
public String data2(Model model){
    model.addAttribute("name", "大王");
    return "success";
}

/**
 * 请求转发跳转,并传递数据.
 * 方式二:方法直接返回ModelAndView
 */
@RequestMapping("/data3")
public ModelAndView data3(){
    ModelAndView mav = new ModelAndView();
    //设置视图名称:要跳转的路径
    mav.setViewName("success");

    //设置要传递的数据
    mav.addObject("name", "老王");

    return mav;
}

/**
 * 请求转发跳转,并传递数据
 * 方式二:方法直接返回ModelAndView。
 *      不用自己创建ModelAndView,让SpringMVC传递给我们一个
 */
@RequestMapping("/data4")
public ModelAndView data4(ModelAndView mav){
    //设置视图名称:要跳转的路径
    mav.setViewName("forward:/success.jsp");

    //设置要传递的数据
    mav.addObject("name", "王中王");

    return mav;
}

三、直接返回响应数据

示例:

/**
 * 给客户端直接返回数据:使用注解@ResponseBody
 *      加上这个注解之后,方法的返回值不再是视图路径,而是要返回给客户端的数据
 */
@ResponseBody
@RequestMapping("/ajaxData2")
public String ajaxData2(){
    return "success";
}

拓展

  • 如果使用@ResponseBody直接响应的中文字符串,即使配置了CharacterEncodingFilter,也会有乱码

  • 解决方法:在springmvc.xml里配置如下:

    • 配置SpringMVC的StringHttpMessageConverter进行字符串处理转换,设置采用utf-8字符集

<!--开启mvc的注解驱动-->
<mvc:annotation-driven>
    <mvc:message-converters>
        <bean class="org.springframework.http.converter.StringHttpMessageConverter">
            <property name="defaultCharset" value="utf-8"/>
            <property name="supportedMediaTypes">
                <set>
                    <value>text/plain;charset=utf-8</value>
                    <value>text/html;charset=utf-8</value>
                    <value>application/json;charset=utf-8</value>
                </set>
            </property>
        </bean>
    </mvc:message-converters>
</mvc:annotation-driven>

响应json格式的两种方式:

  • 可以由自己把JavaBean对象转换成json格式的字符串,然后再响应给客户端

  • 也可以在方法里直接返回JavaBean对象,使用@ResponseBody注解让框架帮我们转换成json格式

     因为spring使用的是jacksong,需要在pom.xml中导入依赖:jackson-databind

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

使用示例:

/**
 * 给客户端直接返回数据:使用注解@ResponseBody
 *      加上这个注解之后,方法的返回值如果是JavaBean对象,SpringMVC会帮我们转换成json,再返回给客户端
 *      注意:SpringMVC使用的是Jackson,所以在pom.xml里必须要导入jackson的依赖坐标
 */
@ResponseBody
@RequestMapping("/ajaxData3")
public User ajaxData3(){
    User user = new User();
    user.setUsername("张三");
    user.setAge(20);

    return user;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值