五.请求转发和重定向
1.直接上代码
package com.why.Controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
/**
* @program: SpringMvcByannotation
* @description:
* @author: @why
* @create: 2020-09-02 13:01
**/
@Controller
public class ModelTestOne {
//转发:直接添加forward即可
@GetMapping("/f1")
public String forwardTest(Model model) {
model.addAttribute("msg", "歪比歪比???");
return "forward:WEB-INF/jsp/hello.jsp";
}
@GetMapping("/f2")
public String forwardTest2(Model model) {
System.out.println("爷ye来了");
//在我们return这加上 redirect 就是 重定向,别忘了接收不到数据嗷,重定向不处理数据的
model.addAttribute("msg", "歪比巴卜???");
return "redirect:index.jsp";
}
}
2.关于请求转发
-
WEB-INF下面的内容都是只能由服务器级别才能访问,客户端并不能访问。
-
转发:就是服务器级别,浏览器的地址不会变,因为,客户端发送一个请求,服务器受理之后,发现要请求内容还要再去别的请求,那么转发就是服务器自己去处理完成。不麻烦客户端(浏览器)了,所以客户端上面的地址栏不会改变。
-
重定向:客户端级别的。服务器收到请求后,发现还要去请求别的内容,但是服务器自己不想处理,那么就告诉客户端,你自己去处理吧,那么客户端就去请求那个别的内容了。所以客户端(浏览器)地址栏就会改变。
-
HttpServletResponse.sendRedirect方法对浏览器的请求直接作出响应,响应的结果就是告诉浏览器去重新发出对另外一个URL的 访问请求,这个过程好比有个绰号叫“浏览器”的人写信找张三借钱,张三回信说没有钱,让“浏览器”去找李四借,并将李四现在的通信地址告诉给了“浏览器”。于是,“浏览器”又按张三提供通信地址给李四写信借钱,李四收到信后就把钱汇给了“浏览器”。可见,“浏览器”一共发出了两封信和收到了两次回复, “浏览器”也知道他借到的钱出自李四之手。RequestDispatcher.forward方法在服务器端内部将请求转发给另外一个资源,浏览器只知道发出了请求并得到了响应结果,并不知道在服务器程序内部发生了转发行为。这个过程好比绰号叫“浏览器”的人写信找张三借钱,张三没有钱,于是张三找李四借了一些钱,甚至还可以加上自己的一些钱,然后再将这些钱汇给了“浏览器”。可见,“浏览器”只发 出了一封信和收到了一次回复,他只知道从张三那里借到了钱,并不知道有一部分钱出自李四之手。 //这段内容来自:https://www.cnblogs.com/summary-2017/p/10661738.html