zoukankan      html  css  js  c++  java
  • 理解客户端重定向(Redirect)和服务端重定向(Dispatch)

    这是两个常常被放在一起进行比较的概念,今天对这两个概念再重新回顾一下,前者发生在客户端(浏览器),后者发生在服务器端?,因此也有人把前者称为客户端重定向,把后者称为服务器端重定向,虽然对于后者这种称谓并不算贴切。本文原文链接:http://blog.csdn.net/bluishglc/article/details/7953614 转载请注明出处!
     
    Redirect(客户端重定向)
     
    标准意义上的“重定向”指的是HTTP重定向,它是HTTP协议规定的一种机制。这种机制是这样工作的:(没有涉及request,只有response)
    1. 当client向server发送一个请求、要求获取一个资源时,
    2. 在server接收到这个请求后发现请求的这个资源实际存放在另一个位置
    3. 于是server在返回的response中写入那个请求资源的正确的URL,并设置reponse的状态码为301(表示这是一个要求浏览器重定向的response)
    4. 当client接受到这个response后就会根据新的URL重新发起请求
     
    重定向有一个典型的特症,即,当一个请求被重定向以后,最终浏览器上显示的URL往往不再是开始时请求的那个URL了。这就是重定向的由来。
     
     (解决了为什么需要重定向这个功能?)
    http重定向的一种典型应用是防止表单重复提交,其原理是:假如当前是一个用户信息编辑页面,表单通过Post提交给saveUser.action, 当该请求提交后,可返回一个重定向的response,地址可以是viewUser.action,即定向到用户详情页面(不能修改和提交)。当然这种防止页面重复提交的方法作用是有限的, 如果用户返回表单页面,重新提交表单,或是用户在服务器端响应到达之前,多次点击提交按钮(可通过JavaScript控制提交按钮点击次数)等等。
     
    Servlet里,实现客户端重定向的方法是:response.sendRedirect()
     
     
     
    Dispatch(服务器端重定向)
     
    Dispatch(Forward)指的是服务器在处理request的过程中将request先后委托多个servlet或jsp接替进行处理的过程。
    最为常见的是先由一个Servlet处理(比如实现业务逻辑的计算),然后forward给一个JSP进行视图的渲染。
      在Servlet里,实现dispatch是通过RequestDispatchers来实现的,而这个类有两个方法
      一个是forward,另一个是include,相应的在JSP里实现dispatch的标签也有两个:<jsp:forward/>和<jsp:include/>.  
    不管是forward还是include,我们可以清楚的看到,从一个servlet或jsp向别一个servlet或jsp跳转,request和reponse始终在期间传递???,这是服务器端能实现dispatch模式的关键。换句话说,我们可以把request和reponse看作是一种资源,一系列的servlet和jsp都是在基于同一份资源(同一组request和response对象)完成它们职责范围之内的计算。

     

    注:此图原图引自《Head First Servlets and JSP》

    三十六般武艺,七十二般变化,修练出个人品牌并发出光芒
  • 相关阅读:
    Go jaegerde 应用【logger+gorm+grpc+http】
    Go gRPC 调试工具
    iris和xxl-job整合
    Go Grpc部署到 k8s【端口共享】
    rocketmq事务 go 采用rocketmq-client-go的实现
    Go Grpc部署到 k8s【负载均衡】
    ubuntu18安装Kubernetes 1.20.5
    k8s Python API
    go nacos服务发现
    k8s集群日志收集ELK和graylog
  • 原文地址:https://www.cnblogs.com/deeptester-vv/p/14005269.html
Copyright © 2011-2022 走看看