Spring MVC重定向和转发

Spring MVC 请求方式分为转发forward 、重定 redirect向 2 种,分别使用 forward 和 redirect 关键字在 controller 层进行处理。

转发是服务器行为,重定向是客户端行为

转发过程:

客户浏览器发送 http 请求,Web 服务器接受此请求,调用内部的一个方法在容器内部完成请求处理和转发动作,将目标资源发送给客户;在这里转发的路径必须是同一个 Web 容器下的 URL,其不能转向到其他的 Web 路径上,中间传递的是自己的容器内的 request。

在客户浏览器的地址栏中显示的仍然是其第一次访问的路径,也就是说客户是感觉不到服务器做了转发的。转发行为是浏览器只做了一次访问请求。
特点:

        转发时,URL不会变;由原先的controller传入的参数,也会被后面所转发的controller所获取的

        浏览器对于转发的话,只发起一次请求

可以用于后续浏览器中,在用户输入完账号密码后,存放在容器request中,通过转发,就不需要一次次的再次输入账号密码

@GetMapping("/testForward")
	 public String testForward(HttpServletRequest request) {//这边可以传参数,也可以不传
		 request.setAttribute("name", "ccj");
		return "forward:/hello";
		 
	 }
@RequestMapping(value = {"/hello"})
	public String hello() {
		return "hello";

	}

重定向过程:

客户浏览器发送 http 请求,Web 服务器接受后发送 302 状态码响应及对应新的 location 给客户浏览器,客户浏览器发现是 302 响应,则自动再发送一个新的 http 请求,请求 URL 是新的 location 地址,服务器根据此请求寻找资源并发送给客户。

在这里 location 可以重定向到任意 URL,既然是浏览器重新发出了请求,那么就没有什么 request 传递的概念了。在客户浏览器的地址栏中显示的是其重定向的路径,客户可以观察到地址的变化。重定向行为是浏览器做了至少两次的访问请求。

 特点:

        重定向时,URL会发生改变,会变为后面所重定向的链接:由原先的controller传入的参数,无法被后面所重定向的controller所获取的

        浏览器对于重定向的话,只发起两次次请求

 @GetMapping("/testRedirect")
	 public String testRedirect(HttpServletRequest request) {
		 request.setAttribute("name", "ccj");
		return "redirect:/hello";
		 
	 }
	@RequestMapping(value = {"/hello"})
	public String hello() {
		return "hello";

	}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值