SpringMVC(续)

SpringMVC参数传递 

同名参数提交

页面说明

复选框: name=“hobby” 口 篮球 口 排球 口 乒乓球
问题: 参数如何提交? hobby=篮球,排球,乒乓球
前端URL模式: http://localhost:8080/user/saveHobby?hobby=篮球,排球,乒乓球

解决代码:

 /**
     * URL地址: http://localhost:8080/user/saveHobby?hobby=篮球,排球,乒乓球
     * 返回值: 参数获取之后返回
     * SpringMVC功能:
     *      如果url中的参数使用,号的方式连接,则可以自动的转化为数组结构
     */
    @GetMapping("/saveHobby")
    public String[] saveHobby(String[] hobby){
        //String[] arrays = hobby.split(",");
        //将字符串转化为数组,可以方便后续业务的调用
        //return arrays;
        return hobby;
    }

运行结果:

Ajax

概念

用Ajax技术网页应用能够快速地将增量更新呈现在用户界面上,而不需要重载(刷新)整个页面,这使得程序能够更快地回应用户的操作。

特点

局部刷新,异步访问

  1. 同步请求
    浏览器发起请求到服务器时,如果服务器没有响应,用户则无法获取页面数据,处于等待状态.不可以做其它的操作.

  2. 异步请求
    异步请求时,浏览器可以进行其它的操作.当ajax数据获取之后,信息在页面的局部刷新. (可以理解为多线程操作方式)

原理

Ajax为什么可以异步: 中间有Ajax引擎.

回调函数: 服务器返回数据,通过回调函数通知用户.

在这里插入图片描述

前后端异步调用入门案例

1.导入三阶段的js包

2.前端js代码

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<h1>入门案例</h1>
		<script src="../js/axios.js"></script>
		<script type="text/javascript">
			let url1="http://localhost:8080/axios/findstr"
			axios.get(url1).then(function(result){
				console.log(result.data)
			})
		</script>
	</body>
</html>

3.编辑AxiosController

package com.jt.controller;

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

@RestController
@RequestMapping("/axios")
@CrossOrigin
//http://localhost:8080/axios/findstr
public class AxiosController {
    @GetMapping("/findstr")
    public String findstr(){
        return "牛逼";
    }
}

运行结果:

前后端调用-带简单参数

js代码

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<h1>入门案例</h1>
		<script src="../js/axios.js"></script>
		
			let url2="http://localhost:8080/axios/getUserById?id=100";
			axios.get(url2).then(function(result){
				console.log(result.data)
			})
			
		</script>
	</body>
</html>

 编辑AxiosController

@GetMapping("/getUserById")
    public String findUserById(Integer id){

        return "获取数据:"+id;
    }

前后端调用-对象传参

 js代码

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<h1>入门案例</h1>
		<script src="../js/axios.js"></script>
		<script type="text/javascript">
			axios.defaults.baseURL="http://localhost:8080"
			let user={id:100,name:"tomcat"}
			axios.get("/axios/finduser",{params:user}).then(function(promise){
				console.log(promise.data)
			})
		</script>
	</body>
</html>

 编辑AxiosController

@GetMapping("/finduser")
    public User finduser(User user){
        return user;
    }

运行结果

 

前后端调用-ResultFul结构

js代码

//4.RestFul结构实现数据传递  第一种:简单操作
			let rest1 = {id: 100,name: "tomcat"}
			axios.get("/axios/result/"+rest1.id+"/"+rest1.name)
				 .then(function(promise){
					 console.log(promise.data)
				 })
			
			/**
			 * 5.RestFul结构实现数据传递  ]
			 *  第二种:模板字符串写法
			 * 语法: 	反引号  ` `
			 * 字符取值: ${rest2.id}
			 * 作用: 1.常见字符串拼接
			 * 		 2.可以保证代码的数据结构
			 */
			let rest2 = {id: 100,name: "tomcat"}
			axios.get(`/axios/result/${rest2.id}/${rest2.name}`)
			
			
			//模板字符串 保证代码格式
			let div = `<div>
							<p>天青色等烟雨</p>
							<p>而我在等你</p>
							<p>炊烟袅袅升起</p>
							<p>隔江千万里</p>
					   </div>`

编辑AxiosController

 /**
     * 4.接收restFul的数据
     * URL: http://localhost:8080/axios/result/100/tomcat
     * 返回值: User对象
     */
    @GetMapping("/result/{id}/{name}}")
    public User result(User user){

        return user;
    }

前端POST提交方式

js代码

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<h1>axios-post案例</h1>
		<script src="../js/axios.js"></script>
		<script type="text/javascript">
			axios.defaults.baseURL="http://localhost:8080"
			/**
			 * 2.axios的post请求说明
			 * 2.1 什么时候使用post请求 新增操作
			 * 知识点:
			 * 		let user js对象  json串  java对象
			 *  说明: 
			 * 		前端代码传递的JS对象,而后端使用的是java对象,
			 * 		2种对象没有办法直接转化,需要转化JSON进行传递.
			 * 	axios使用post请求时,自动将JS对象解析为JSON串
			 */

			let user={id:100,name:"毛"}
			axios.post("/axios/saveUser",user)
				.then(function(promise){
					console.log(promise.data)
				})
			
		</script>
	</body>
</html>

 编辑AxiosController

/**
     * 编辑后端Controller
     * URL: /axios/saveUser
     * 参数: json串
     *      {"id":100,"name":"tomcat猫","age":20}
     * 返回值: User
     * 难点:
     *      1.将JSON串转化为Java对象  @RequestBody
     *      2.将Java对象转化为JSON串! @ResponseBody
     */
    @PostMapping("/saveUser")
    public User saveUser(@RequestBody User user){

        return user;
    }

 参数类型规范

  1. GET/DELETE 参数提交的方式一致
  2. POST/PUT 参数提交的方式一致
  3. restFul结构适用于所有的请求类型

同源策略

浏览器的网址与Ajax请求的网址必须满足如下的要求: 协议://域名:端口号必须相同.

如果满足要求则是同域访问,如果不满足要求 则是跨域访问

同源策略练习题
练习1:
1. http://localhost:8080/xxx/xxx 浏览器地址
2. http://localhost:8080/yyy/yyy ajax请求地址 同域请求

练习2:
1. http://127.0.0.1:8080/xxx/xxx 浏览器地址
2. http://localhost:8080/yyy/yyy ajax请求地址 跨域请求 域名不同

练习3: 域名与IP映射
1. http://www.jt.com:8080/xxx/xxx 浏览器地址
2. http://10.8.8.9:8080/yyy/yyy ajax请求地址 跨域请求! 域名不同

练习4:
1. http://www.jt.com:80/xxx/xxx 浏览器地址
2. http://www.jt.com/yyy/yyy ajax请求地址 同域请求!!!

http协议默认80端口

练习5:
1. https://www.jt.com/xxx/xxx 浏览器地址
2. https://www.jt.com:443/yyy/yyy ajax请求地址 同域请求!!!
https协议默认端口443

练习6:
1. http://www.jt.com/xxx/xxx 浏览器地址
2. https://www.jt.com:443/yyy/yyy ajax请求地址 跨域请求

注解:

@CrossOrigin:解决跨域问题,前后端连接

@RequestBody:将json串转化为java对象

单词:

defalults:默认

base:根基,底部

origin:起源

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值