下图上部分的流程即请求转发,下部的即为重定向。
请求转发
当A想获取C的数据,先找到B,B去C找,C返回数据给B,B再传递给A。地址栏不会发生变化。
(整个过程属于一次请求)
重定向
一个web资源收到客户端请求后,他会通知客户端去访问另外一个web资源,这个过程叫做重定向。地址栏会发生变化。(整个过程属于两次请求)
重定向和请求转发的区别
相同点
都会实现页面的跳转 。
不同点
请求转发的时候url不会发生变化。
重定向的时候url会发生变化,变化到他跳转页面的url。
编辑
请求转发实现代码
public class ServletDemo2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext context = this.getServletContext();
System.out.println("进入了请求转发");
// 请求转发
// request 请求 Dispatcher
// 转发的请求路径
// 我们请求的可能是RD 但是实际上走的是GP 即根据下面的uml进行实际显示
// ****路径没有发生改变 与后面重定向进行区分***
RequestDispatcher requestDispatcher = context.getRequestDispatcher("/GP");
// 调用forward方法 将传进来的req即请求 resp即响应 进行转发
requestDispatcher.forward(req,resp);
}
上述代码请求的ur路径为/GP,经过运行得出如下图所示结果,验证了请求转发的正常运行。
编辑
编辑
编辑
重定向的代码
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// resp.setHeader("location","/1/d");
// resp.setStatus(HttpServletResponse.SC_FOUND); 或者括号内直接写302
resp.sendRedirect("/1/test"); //重定向
}
重定向运用了resp.sendRedirect("转发的路径名")方法,等价于代码中的注解部分,先获取响应头,再设置http响应码。
跳转后可以查看网页的状态码
如图所示,跳转后的url改变了,变成了再后端设置好的重定向页面的url。
如图可视,可以看出状态码为302,location为跳转的地址,我们可以到源码中找一下302
刚开始写博客,如果有什么不对的地方还劳烦各位大佬指出,感激不尽!!