【04】SpringMVC--响应类型

【04】SpringMVC笔记–响应类型

一、响应类型:

1. 返回 String 类型

例如:比如响应了一个字符串“success”。那么MVC框架就会根据配置的视图解析器寻找到对应的jsp文件,跳转到了WEB-INF/pages/目录下的"success.jsp"

springmvc.xml配置的视图解析器

<!-- 视图解析器对象 -->
<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/pages/"/>
        <property name="suffix" value=".jsp"/>
</bean>

Controller类

@Controller
@RequestMapping("/user")
public class UserController {

    //测试返回值为String类型
    @RequestMapping("testReturnString")
    public String testReturnString(Model model){
    
        return "success";
    }
}

2. 无返回值 void
  • 默认会跳转到以该方法名为名的.jsp文件。例如 访问方法testVoid 则跳转到testVoid.jsp
  • 或使用原生Servlet api进行
    – 转发
    – 重定向
    – 直接输出响应流
@Controller
@RequestMapping("/user")
public class UserController {
    /**
     * 测试无返回值:void
     *      默认:会跳转到以该方法名为名的.jsp文件。例如   访问方法testVoid ===>默认响应跳转到testVoid.jsp
     *      其他:
     *          手动:1. 转发
     *               2. 重定向
     *               3. 直接响应输出流
     */
    @RequestMapping("testReturnVoid")
    public void testReturnVoid(HttpServletRequest request, HttpServletResponse response) throws Exception{
    
        //转发
        //request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request,response);

        //重定向  ---不可访问WEB-INF目录
        response.sendRedirect(request.getContextPath()+"/index.jsp");

        //输出流
        //response.getWriter().write("helloWorld!!!");
    }
}

3. 返回 ModelAndView 类型

ModelAndView对象。是SpringMVC提供的一个对象。里面可以封装需要返回的对象与视图名称

  • addObject():,底层是存到了request域中
  • setViewName():,设置跳转视图名称(上面直接返回字符串进行跳转的,底层就是在使用这个方法
@Controller
@RequestMapping("/user")
public class UserController {

    /**
     * 测试返回ModelAndView
     */
    @RequestMapping("testModelAndView")
    public ModelAndView testModelAndView(){

        //创建ModelAndView对象
        ModelAndView mv = new ModelAndView();   
        
		User user = new User();
        //存到request域中,使用ModelAndView的方法
        mv.addObject("user",user);
        //设置跳转页面
        mv.setViewName("success");

        //注:手动返回"success",底层也是使用ModelAndView对象 ,也是使用视图解析器
        return mv;
    }
}
4. 响应json数据
  1. 前台表单异步提交一个json数据
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>

    <script src="js/jquery.min.js" type="text/javascript"></script>

   <script>
        $(function () {
          	
            //异步提交表单
            $("#login_form").submit(function () {
            
             	//把表单数据转为json
                var formObject = {};
                var formArray =$(this).serializeArray();
                $.each(formArray,function(i,item){
                    formObject[item.name] = item.value;
                });

                $.ajax({
                    url: '${pageContext.request.contextPath}/fore/userLogin',
                    type: 'POST',
                    contentType: 'application/json; charset=UTF-8',
                    async: false,
                    dataType: 'json',
                    data: JSON.stringify(formObject),
                    success: function (info) {
                        if (!info.flag) {
                            $("#check_error").html(info.info);
                        } else {
                            // alert("登录成功");
                            location.href = "${pageContext.request.contextPath}/fore/home";
                        }
                    }
                });

                return false;
            });
        });
    </script>

</head>
<body>

<form action="#" method="post" id="login_form">
         <!-- 表单字段...-->       
</form>

</body>
</html>

  1. 如果提交的键值对的键和某个JavaBean的属性名相同。可以在控制器方法参数提供该Bean对象接收json数据
  2. 如果需要返回的数据也是json,需要在添加相关jar包。(使用的maven工程,所以添加如下依赖
<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>
  1. Controller

返回json数据,需要在控制器方法的返回值前使用@ResponseBody注解,、会自动将返回的对象转为json格式并放到响应体中

/**
     * 模拟异步请求响应
     * 接受的Json数据会被直接封装到User对象中,由于我们引入了json的jar包。
     * mvc框架会自动将对象转换为json返回。
     * 我们只需返回User对象即可。
     */
    @RequestMapping("/testAjax")
    @ResponseBody
    public User testAjax(@RequestBody User user){
        // 客户端发送ajax的请求,传的是json字符串,后端把json字符串封装到user对象中
        System.out.println(user);
        // 做响应,模拟查询数据库
        user.setName("Yangx");
        user.setAge(21);
        // 做响应,spirngMVC框架会自动将其转换为json数据,然后返回给浏览器
        return user;
    }

二、转发与重定向

SpringMVC提供的方式:根据返回的字符串关键字进行转发,或重定向

  • 转发:"forward:"+跳转页面路径
  • 重定向:"redirect:"+跳转页面路径
@Controller
@RequestMapping("/user")
public class UserController {

    @RequestMapping("testForwardOrRedirect")
    public String testForwardOrRedirect(Model model){
        //转发
        //return "forward:/WEB-INF/pages/success.jsp";

        //重定向
        return "redirect:/index.jsp";
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值