请求的转发和重定向

请求 request 简写 req

响应 response 简写 res

客户端 -> 发出请求request -> 服务器做出一定处理之后 -> 返回响应response -> 客户端

转发和重定向

转发和重定向也是我们前端需要了解的一个能力,知道什么时候使用转发,什么时候使用重定向就可以了

在发出一个请求或者说跳转到某一个页面的时候,并不能直接达到这个页面,我们需要做出一些拦截,拦截之后我们一般都会进行转发或者重定向,鉴权也是和转发重定向配合使用,例如 -> 某些页面需要登录或者注册之后才允许被访问,那么在我们的页面要跳转到这个页面的时候,需要做一个路由守卫,如果他没有登录,那么就让他跳转到登录页面,如果登录了之后跳转到个人设置页面

请求的转发 & 请求的重定向

  • 请求的转发好比借钱,当A向B去借钱的时候,B发现自己也没有钱,那么B非常信任A,他就去找C借了一笔钱,然后把这个钱给了A,那么A就完成了借钱的步骤,从始至终A其实只是向B借了钱,他根本都不认识C,也就是说这个请求他只发送了一个,所以他请求的url都没发生改变
  • 请求的重定向也好比借钱,当A向B去借钱的时候,B没有钱,但是他又不想自己去借钱再借给A,他就告诉我A,你去找银行借钱,银行有钱!,那么A就去找了银行,A求了B,还去找了银行借钱,那么他就发送了两次请求,并且最后他的请求url发生了改变
  • 再举一个重定向的例子,大家浏览论坛的时候都会发现,当我们需要发帖的时候,他就会要求我们登陆之后才能发帖,然后我们一点击就跳转到了登陆页面,当我们成功登陆之后,我们就会自动的跳转到我们刚刚发帖的那个地方,也就是说,我们在跳转到登录页面的时候,会记录下我们停留在了哪个页面,一旦我们登陆成功就会跳转回去,下面附上一个小Demo
// 路由的守卫
router.beforeEach((to,from,next)=>{
  if(to.meta.auth){
    // 需要登录
    const token = localStorage.getItem('token')
    if( token ){
      next()
    }else{
      next({
        path: '/login',
        query: { redirect: to.path }
        // query是为了保证用户登录之后,可以跳转到指定页面,而不是/home页面
      })
    }
  }else{
    // 不需要登录验证
    next()
  }
})

那么login?后面的参数记录了我们从哪里跳转到的登录页面,如果我们登陆成功,会重定向到我们指定的页面上

总结

  • 重定向之后url会发生改变,而转发不会
  • 请求是在服务器内部实现的,他始终都是客户发出的那个请求,而重定向会产生新的请求
  • 请求转发只能服务器内部的资源,而重定向可以访问外部资源

原文地址:https://www.cnblogs.com/sunhang32/p/12202646.html

时间: 2024-11-05 23:28:43

请求的转发和重定向的相关文章

域对象的属性和请求的转发重定向

1 在HttpServlet中有操作属性的方法,在pageContext,request,session,application四个域对象中也有操作属性的方法. <%@ page language="java" import="java.util.*" pageEncoding="gb2312"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//E

学习笔记(三)GenericServlet HttpServlet 转发和重定向 JSP及隐含对象 域对象

7. MVC 设计模式. 6. 和属性相关的方法: 1). 方法 void setAttribute(String name, Object o): 设置属性  Object getAttribute(String name): 获取指定的属性 Enumeration getAttributeNames(): 获取所有的属性的名字组成的 Enumeration 对象removeAttribute(String name): 移除指定的属性 2). pageContext, request, se

jsp学习之——关于请求转发和重定向的形象理解

1.重定向:是属于客户端行为,实现方法:response.sendRedirect() 从本质上讲等同于两次请求,前一次的请求对象不会保留,在浏览器上的直观表现是--地址栏的URL地址会改变. 2.请求转发:是属于服务器行为,实现方法:request.getRequsetDispatcher().forward(requset,response) 是一次请求,转发后请求对象会保存,浏览器上的直观表现就是--地址栏的URL地址不会改变.(服务器内部转发,所以客户端看不到地址栏的改变) 下面举个生活

JavaWeb_请求转发与重定向

1.主题 RequestDispather 请求转发接口. sendRedirect()重定向方法. 核心代码1 RequestDispather requestDispather = request.getRequestDispather("/"+path); requestDispather.forward(request,response); 核心代码2 response.sendRedirect(path) 请求地址栏不变,重定向地址栏变化. 请求保留request,重定向不保

关于请求转发、重定向、url重写

1.先来记录一个web.xml中servlet的问题,java网站本质是servlet,在web.xml中配置servlet的映射规则. 发送url请求->服务器接受->servlet处理->返回处理结果 servlet的url-pattern要以/开头 2.在学习javaWeb时了解到了转发和重定向.

JSP的学习二(请求转发与 重定向)

一: 1.介绍知识点 1). 本质区别: 请求的转发只发出了一次请求, 而重定向则发出了两次请求. 具体: ①. 请求的转发: 地址栏是初次发出请求的地址.  请求的重定向: 地址栏不再是初次发出的请求地址. 地址栏为最后响应的那个地址 ②. 请求转发: 在最终的 Servlet 中, request 对象和中转的那个 request 是同一个对象.      请求的重定向: 在最终的 Servlet 中, request 对象和中转的那个 request 不是同一个对象. ③. 请求的转发:

HTTP中的重定向和请求的转发

一.调用方式 我们知道,在servlet中调用转发.重定向的语句如下: request.getRequestDispatcher("new.jsp").forward(request, response);   //转发到new.jsp response.sendRedirect("new.jsp");   //重定向到new.jsp 在jsp页面中你也会看到通过下面的方式实现转发: <jsp:forward page="apage.jsp"

Servlet中的请求转发和重定向

跳转和重定向 有的时候客户端请求到达服务端后需要对请求重新转发到其它Servlet甚至别的服务器,这就需要跳转和重定向. 区别 一般来说,跳转是服务器内部跳转,例如将请求从一个Servlet转发给另外一个Servlet处理,是内部之间的转发.而重定向是告诉客户端去别的地方请求资源.举个例子,某人需要去找人事部门打印收入证明,而收入证明需要去财务部盖章.跳转的处理方式是:人事部门的人告诉你,你等一下,我去把收入证明打印出来,然后我再去找财务部盖章,所有资料准备好后,我再全部交给你.重定向的处理方式

servlet请求转发与重定向的区别------用生活实例来形象说明两者的区别

1,请求重定向:客户端行为,response.sendRedirect(),从本质上讲等同于两次请求,前一次的请求对象不会保持,地址栏的URL地址会改变. 2,请求转发:服务器行为,request.getRequsetDispatcher().forward(requset,response);是一次请求,转发后请求对象会保存,地址栏的URL地址不会改变.(服务器内部转发,所有客户端看不到地址栏的改变) 下面举个生活中的实例来说明: 请求重定向:就好比我们找一个A广告公司给设计名片,A明确告诉我