关于springMVC的响应数据

一、返回值分类:

1、响应返回值是string类型

(1)给出一个实体类User

public class User implements Serializable{

    private String username;
    private String password;
    private Integer age;

	//getset方法
	//ToString方法
}

(2)给出配置文件(web.xml 和 springmvc.xml)
(3)给出前台代码

	<a href="user/testString">点击跳转</a>

(4)给出控制器

@Controller
@RequestMapping("/user")
public class UserController {
	@RequestMapping("/testString")
	public String testString(Model model) {
		
		System.out.print("testString  is  coming");
		//模拟从数据库中查数据
		User user = new User();
		user.setUsername("lin");
		user.setPassword("123");
		user.setAge(21);
		
		model.addAttribute("user", user);
		return "success";
		
	}

}

(5)给出success页面

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

    <h3>SpringMVC is coming!</h3>
	
	${user.username}
		${user.password}
			${user.age}
</body>
</html>

分析:response,jsp一发请求,后台(Controller控制器)查数据,把数据存到model对象,它帮我们存到request域里,转发到页面,在success页面里面,从request域里面把数据取出来。

2、响应返回值是void类型

当返回值是void类型时,我们就不能直接 return "success";,那又该怎样做呢??
(1)方法1 —— 请求转发

	@RequestMapping("/testVoid")
	public void testVoid(HttpServletRequest request , HttpServletResponse response) throws ServletException, IOException {
		request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request, response);
		return;
	}

注意!!!!请求路径一定要写正确!!!
如果使用了请求转发的方式跳转到success.jsp页面,那springmvc.xml中的视图解析器就不需要配置了。

(2)方法2 —— 重定向
重定向等于又重新发了个新的请求,直接发请求是不能请求/WEB-INF/pages/目录的。WEB-INF里面不能直接(通过重定向)去请求,但是转发可以。

所以此时不能继续跳转到success页面了,新建一个新的页面hello.jsp
在这里插入图片描述
UserController.java这么写:

	@RequestMapping("/testVoid")
	public void testVoid(HttpServletRequest request , HttpServletResponse response) throws ServletException, IOException {
		response.sendRedirect(request.getContextPath() + "/hello.jsp");
		return;
	}

(3)方法3 —— 直接响应

	@RequestMapping("/testVoid")
	public void testVoid(HttpServletRequest request , HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=UTF-8");
		response.getWriter().write("嘻嘻");
		return;
	}

使用关键字的方式进行转发或者重定向

    @RequestMapping("/testForwardOrRedirect")
    public String testForwardOrRedirect(){
        System.out.println("testForwardOrRedirect方法执行了...");

        // 请求的转发
        // return "forward:/WEB-INF/pages/success.jsp";

        // 重定向
        return "redirect:/hello.jsp";
    }
3、响应返回值是ModelAndView类型

ModelAndView 是 SpringMVC 为我们提供的一个对象,该对象也可以用作控制器方法的返回值。

    @RequestMapping("/testModelAndView")
    public ModelAndView testModelAndView(){
        // 创建ModelAndView对象
        ModelAndView mv = new ModelAndView();
        System.out.println("testModelAndView方法执行了...");
        // 模拟从数据库中查询出User对象
        User user = new User();
        user.setUsername("lin");
        user.setPassword("456");
        user.setAge(21);

        // 把user对象存储到mv对象中,也会把user对象存入到request对象
        mv.addObject("user",user);

        // 跳转到哪个页面
        mv.setViewName("success");

        return mv;
    }

二、异步的请求方式

1、初步实现 前后端 的交互,拿到前台json数据,并打印到控制台

当页面发送异步请求(比如ajax请求),此时后台需要把对象转换成json字符串响应回去。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>主页</title>
    
    <script src="js/jquery.min.js"></script>

    <script>
        // 页面加载,绑定单击事件
        $(function(){
            $("#btn").click(function(){
               // alert("hello btn");
                // 发送ajax请求
                $.ajax({
                    // 编写json格式,设置属性和值
                    url:"user/testAjax",
                    contentType:"application/json;charset=UTF-8",
                    data:'{"username":"hehe","password":"123","age":30}',
                    dataType:"json",
                    type:"post",
                    success:function(data){
                        // data服务器端响应的json的数据,进行解析
                    }
                });

            });
        });

    </script>
    
</head>
<body>
	    <button id="btn">发送ajax的请求</button>
</body>
</html>

控制器里面:

    @RequestMapping("/testAjax")
    public void testAjax(@RequestBody String body){
        System.out.println("testAjax方法执行了...");
       
        System.out.println(body);

    }

我们之前在web.xml中已经配置了拦截器,所以需要在springmvc.xml中配置,过滤静态资源

    <!--前端控制器,哪些静态资源不拦截-->
    <mvc:resources location="/js/" mapping="/js/**"/>

在这里插入图片描述

可以看到,此时后台能拿到前台发过来的json数据

2、把发过来的数据,封装到一个javaBen里面。

首先需要额外的导包:
在这里插入图片描述
1)改写后台代码

    @RequestMapping("/testAjax")
    public @ResponseBody User testAjax(@RequestBody User user){
        System.out.println("testAjax方法执行了...");
        // 客户端发送ajax的请求,传的是json字符串,后端把json字符串封装到user对象中
        System.out.println(user);
        // 做响应,模拟查询数据库
        user.setUsername("haha");
        user.setAge(40);
        // 做响应
        return user;
    }

改写前台代码
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值