拓展:跳转
状态码介绍
200:服务器处理成功
404:你找的资源不存在
500:服务器处理失败
redirect 重定向
适用于原先的网页不继续提供服务了
案例:
介绍:比如说现在京东,发展到现在,有了很多网站京东金融 京东物流
www.jd.com有个登录页,后来有多个网站,需要统一登录。
jd.com 2003 jd.com/login.html
单点登录
https://passport.jd.com/new/login.aspx?sso=1&ReturnUrl=https://sso.jdl.cn/sso/redirect
设计思路:
@Controller
UserController{
@RequestMapping("/login"){
public String login() {
return "redirect:https//路径"
}
}
新建一个UserController.java类
package com.tedu.webDemo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class UserController {
//模拟有个以前的登录方法
@RequestMapping("/login")
public String login() {
return "redirect:http://www.jd.com";
}
}
http://localhost:8080/login
转发后浏览器的地址栏变为转发后的地址。
在chrome的调试窗口中network中查看status code
forward 转发
转发后浏览器地址栏还是原来的地址。所以转发前请求的参数在转发后仍然可以读取到。
如下例子:
package com.tedu.webDemo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class UserController {
@RequestMapping("/loginByNP")
@ResponseBody //方法返回字符串
//如果类加的是@RestController 不用加@ResponseBody
public String loginByNameAndPwd(String username,String pwd) {
//打上断点
return "loginByNameAndPwd";
}
@RequestMapping("/loginByC")
public String loginByCode(String username,String pwd,String code) {
//验证码通过
//调用loginByNameAndPwd
return "forward:/loginByNP";
}
//模拟有个以前的登录方法
@RequestMapping("/login")
public String login() {
return "redirect:http://localhost:8080/login";
}
}
DeBUG AS执行:
使用断点跟踪会发现username传到loginByNamePwd方法中了。
http://localhost:8080/loginByC?username=123&pwd=456
重定向redirect和转发forward的区别
重定向redirect和转发forward的区别
1,重定向浏览器地址栏显示新的地址,转发地址栏不变
2,重定向可以重定向别的网站,转发只能转发到本网站中的方法。
RESTFul架构支持
RESTFul要求通过url传输数据
https://blog.csdn.net/qq_34337272/article/details/108347545
https://www.zhihu.com/question/328810338/answer/720393487
普通传递参数的方法是 url?itemName=手机
传参数有两种方式
普通?username=a&pwd=1
restful /a/1
@restController
RegisterController{
@requestMapping("/reg/{username}/{name}")
register@pathVarible String username,@PathVariable String pwd
}
接收单个参数
@PathVariable用于将请求URL中的模板变量映射到功能处理方法的参数上
形成RUSTFul形式,这将是未来的发展趋势。它更加简洁,安全。强化URL GET访问方式。
controller中代码:
创建:RegisterController 类
package com.tedu.webDemo.controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class RegisterController {
@RequestMapping("/reg/{username}/{pwd}")
public String register(
@PathVariable String username,
@PathVariable String pwd
) {
return username+","+pwd;
}
}
http://localhost:8080/reg/abc/123