Java学习笔记-Day70 SpringMVC 框架(二)



一、SpringMVC的数据交互


数据交互是 c(Controller 控制器)和 v(View 视图)之间的数据交互。

在这里插入图片描述

1、从Controller传递数据给View


(1)可以使用request.setAttribute()或者session.setAttribute()。

  • DataTransController.java
package com.etc.ws.controller;

import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class DataTransController {	
	@GetMapping("test01")
	public String test01(HttpServletRequest request) {
		request.setAttribute("name", "tom");
		request.getSession().setAttribute("age", "25");
		return "test01";
	}
}
  • test01.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>名字:${name}</h1>
	<h1>年龄:${age}</h1>
</body>
</html>

在这里插入图片描述

也可以使用优化后的方法ModelAndView。

  • DataTransController.java
package com.etc.ws.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller // 转发请求
public class DataTransController {

	@RequestMapping("test01")
	public ModelAndView sayHi() {
		ModelAndView mv = new ModelAndView("test01");
		mv.addObject("name", "tom");
		mv.addObject("age", "25");
		return mv;
	}
}
  • test01.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>名字:${name}</h1>
	<h1>年龄:${age}</h1>
</body>
</html>

在这里插入图片描述
(2)Ajax响应可以使用response.getWriter().print(),也可以直接使用注解返回响应体。

  1. 加入ajax支持jar包(jackson包)。
    在这里插入图片描述

  2. Controller类前添加@Controller注解,在方法前添加@ResponseBody注解。也可以直接在类前添加@RestController注解(@RestController=@Controller+@ResponseBody)。

  • AjaxDataTransController.java
package com.etc.ws.controller;

import java.util.Arrays;
import java.util.List;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import com.etc.ws.entity.User;

// @Controller
@RestController
public class AjaxDataTransController {

	@GetMapping("ajax01")	
	// @ResponseBody
	public List testajax() {
		User user1 = new User(1,"tom",10,100);
		User user2 = new User(2,"jack",1,10);
		User user3 = new User(3,"jerry",30,300);
		return Arrays.asList(user1,user2,user3);
	}
}
  • ajax01.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<input type="button" id="btn" value="获取ajax">
<div id="userlist"></div>
<script src="js/jquery.min.js"></script>
<script type="text/javascript">
	$(function(){
		$("#btn").click(function(){
			$.ajax({
				url:'ajax01',
				type:'get',
				success:function(res){
					$.each(res,function(index,u){
						$("#userlist").append(u.username+"<br/>");
					});
				}
			});
		});
	});
</script>
</body>
</html>

在这里插入图片描述

2、从View传递数据给Controller


Controller获取View传递的数据,可以使用request.getParameter获取,也可以使用参数列表直接获取。

1、url传值(参数列表直接获取)

  • ParameterController.java
package com.etc.ws.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ParameterController {
	@GetMapping("pc1")
	public String pc1(String name,int id) {
		System.out.println("name="+name+",id="+id);
		return "success";
	}
}

在这里插入图片描述

2、表单提交(参数列表直接获取)

  • ParameterController.java
package com.etc.ws.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import com.etc.ws.entity.User;

@RestController
public class ParameterController {
	@GetMapping("pc2")
	public String pc2(User user) {
		System.out.println("user="+user);
		return "success";
	}
}
  • User.java
package com.etc.ws.entity;

/**
 * User类
 */
public class User {
	// 用户编号
	private int userid;
	// 姓名
	private String username;
	// 创建网站数量
	private int create_website_num;
	// 累计访问次数
	private int website_access_num;
	
	/**
	 * 有参构造方法
	 * @param userid 用户编号
	 * @param username 姓名
	 * @param create_website_num 创建网站数量
	 * @param website_access_num 累计访问次数
	 */
	public User(int userid, String username, int create_website_num, int website_access_num) {
		super();
		this.userid = userid;
		this.username = username;
		this.create_website_num = create_website_num;
		this.website_access_num = website_access_num;
	}
	
	/**
	 * 无参构造方法
	 */
	public User() {
		super();
	}
	
	//属性的Setter和Getter方法
	public int getUserid() {
		return userid;
	}
	public void setUserid(int userid) {
		this.userid = userid;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}

	public int getWebsite_access_num() {
		return website_access_num;
	}
	public void setWebsite_access_num(int website_access_num) {
		this.website_access_num = website_access_num;
	}
	public int getCreate_website_num() {
		return create_website_num;
	}
	public void setCreate_website_num(int create_website_num) {
		this.create_website_num = create_website_num;
	}
	
	/**
	 * 重写的toString方法
	 */
	@Override
	public String toString() {
		return "User [userid=" + userid + ", username=" + username + ", create_website_num=" + create_website_num
				+ ", website_access_num=" + website_access_num + "]";
	}
}

  • form.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form method="get" action="pc2">
		<input type="text" id="userid" name="userid" value="12"/><br/>
		<input type="text" id="username" name="username" value="baidu"/><br/>
		<input type="text" id="create_website_num" name="create_website_num" value="2"/><br/>
		<input type="text" id="website_access_num" name="website_access_num" value="102"/><br/>
		<input type="submit"/>
	</form>
</body>
</html>

在这里插入图片描述

3、Ajax请求(参数列表直接获取)

  • ParameterController.java
package com.etc.ws.controller;

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;

import com.etc.ws.entity.User;

@RestController
public class ParameterController {
	@PostMapping("pc3")
	public String pc3(User user) {
		System.out.println("user="+user);
		return "success";
	}
}

  • ajaxform.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form>
		<input type="text" id="userid" name="userid" value="12"/><br/>
		<input type="text" id="username" name="username" value="baidu"/><br/>
		<input type="text" id="create_website_num" name="create_website_num" value="2"/><br/>
		<input type="text" id="website_access_num" name="website_access_num" value="102"/><br/>
		<input type="button" id="btn" value="提交"/>
	</form>
	<script src="js/jquery.min.js"></script>
	<script type="text/javascript">
		$(function(){		
			$("#btn").click(function(){
				console.log($("form").serialize());
				$.ajax({
					url:'pc3',
					type:'post',
					/* 	data:{
						'userid':$('#userid').val(),
						'username':$('#username').val(),
						'create_website_num':$('#create_website_num').val(),
						'website_access_num':$('#website_access_num').val()
					}, */
					data:$("form").serialize(), // 表单序列化
					success:function(res){
						console.log(res);
					}
				});
			});
			
		});
	
	</script>
</body>
</html>

在这里插入图片描述

二、其他知识点


(1)Handler是指自定义的Controller。
(2)ModelAndView中的view是逻辑视图名,而非真正的视图对象。
(3)SpringMVC默认加载 /WEB-INF/[servlet-name]-servlet.xml 路径下的配置文件。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值