精华内容
下载资源
问答
  • 请求转发与重定向的区别
    2022-03-05 09:38:48

    1、请求转发是服务器行为、重定向是客户端浏览器行为
    2、请求转发是request对象调用方法、重定向是response对象调用方法
    3、请求转发只有一次请求所以可以实现request域对象中的数据共享,而重定向是多次请求、多次响应
    4、请求转发的效率要高于重定向
    5、请求转发url地址栏不变,而重定向会发生变化
    6、既然请求转发是服务器内部的行为,所以只能访问服务器内部资源!而重定向既然是浏览器行为,地址栏会变,所以可以访问服务器外部资源!

    如果既想要实现路径跳转,又需要实现数据共享,使用请求转发!
    如果只是纯粹的想要实现路径跳转,我们可以使用重定向!

    更多相关内容
  • 请求转发与重定向

    2022-01-25 19:43:09
    请求转发与重定向的意义,请求转发与重定向的区别,请求转发与重定向分别需要服器的哪个内置对象、请求转发重定向的作用,干什么,怎样实现,这里都一一详解

    一 请求转发与重定向的作用以及怎样用(通过举例子)
    我们再实际开发程序时,一个可用的程序,必须考虑方方面面。当用户从客户端发来请求,我们必须要有对应的服务器servlet来处理客户端发来的请求,有人说那用一个servlet来处理不就行了;但是如果这种想法是不可取的。古人说的好:“闻道有先后,术业有专攻。”就好比医院就是一个服务器,每一个科室对应一个web程序,每个科室里面的大夫都对应一个servlet。所以我们去看病的时候就会发生以下的事情
    1 请求转发(在一个web程序里执行):比如张三去医院看病,他去内科1室(A servlet)看病,但是对看的结果不是很满意,或者有出入;于是挂号去了内科2室(B servlet)去看病,但是要点来了,必须先把再内科1室看的诊断详情、诊断大夫的信息带上请求下一个大夫(内科2室)来给他做新一轮的诊断。在这个新一轮的诊断过程,大夫可根据病人的实际情况,来对第一个大夫的诊断作以修改,并且添加自己的看法。
    代码展示:

    // 1请求(挂号)
     RequestDispatcher rd = request.getRequestDispatcher("/需要跳转的url-pattern");
    //2 挂号成功,并且带着刚才的request和response 
    //参数request就是携带客户端的请求信息(内科一室的诊断证明)
    // 参数response为了为了给客户端响应
    rd.forward(request, response);
    

    请求转发的特点
    (1) 请求转发需要 RequestDispatcher 的支持,通过request.getRequestDispatcher 方法得到 RequestDispatcher 对象。并且调用RequestDispatcher 的 forward 方法传递 request 与 response。
    (2)请求转发。request 数据从第一个 servlet 到第二个 servlet 不会丢失,因为是通过forward方法把request ,response通过传参传进去。
    (3)请求转发只能在一个 webApp 内部转发。
    (4)如果请求的第一个 servlet 方法是 doGet,那么转发给其它 Servlet 的方法
    也是 doGet,也就是说,所有的请求方法类别一致。
    (5)请求转发地址栏显示的依然是第一个请求资源路径(从始至终无论你请求转发了n次,url不变)
    2 重定向(跨web程序):比如李四去看病,他就是感觉自己不舒服,但是不知道自己到底是得了什么病,然后就去外科挂号检查,但是外科大夫告诉李四,他身体的不舒服不是由外科这些病引起的,可能是心内科有关疾病,所以李四又去挂了个心内科科室,没想到就是因为整天熬夜工作,导致心脏上的疾病,随后谨听医师意见与相关治疗。
    代码展示:

    //外部重定向
    response.sendRedirect("/webName" + "/servletName");
    // webName(另一个科室的名字)   servletName(那个科室对应的大夫)
    
    //内部重定向(了解就行,我认为用处不是很大)
    response.sendRedirect(request.getContextPath() + "/servletName");
    

    重定向的特点
    (1)使用 response.sendRedirect()方法。
    (2)request 数据从第一个 servlet 到第二个 servlet 会丢失,因为没有forward方法如约而至的把request传进去。
    (3)重定向可以定向到其它应用程序。
    (4)不管第一个请求是 get 还是 post,定向后全部变为默认的 get。
    (5)url地址会随重定向改变而改变,最后的url就是最后一个页面相对应的地址(需要和请求转发比较看)。所以可以防止form表单的重复提交(可以自己实践一下,一下子就明白了)。
    二 请求转发与重定向的区别与注意事项(特点里面都提过了,再对比一遍)
    1 请求转发可以传递数据(数据不会丢失),重定向不能传递数据(数据会丢失)。
    2 请求转发只能在一个 web 应用程序内部转发,重定向可以到其他应用程序。
    3 请求转发处理完,地址栏 url 路径为第一个(servlet)资源路径。重定向为最后一个资源路径(利用重定向防止表单重复提交)。
    4 请求转发不需要加 webApp 名称。重定向需要添加 webApp 名称,但如果是定向到一个程序内部,添加有些繁琐,这时可以不添加,但资源路径不能再写“/”,但是如果大家是新手的话,就规规矩矩写"/",比如再重定向是没有写“/”,url会有问题的(报404)。

    以上就是我对请求转发与重定向的理解,如有不对,请您斧正!如果你有任何疑难问题,可以私聊我,我们一起讨论,一起加油!如果看的正合您心意,给小编一个赞吧!谢谢!!!

    展开全文
  • 请求转发与重定向的区别,并介绍请求转发与重定向 ** 一.请求转发与重定向的区别 1) 重定向对浏览器的请求直接作出响应,响应的结果就是告诉浏览器去重新发出对另外一个URL的访问请求,这个过程好比有个叫“浏览器”...

    请求转发与重定向的区别,并介绍请求转发与重定向

    请求转发与重定向的区别

    一.请求转发与重定向的区别
    1)

    重定向对浏览器的请求直接作出响应,响应的结果就是告诉浏览器去重新发出对另外一个URL的访问请求,这个过程好比有个叫“浏览器”的人写信找张三借钱,张三回信说没有钱,让“浏览器”去找李四借,并将李四现在的通信地址告诉给了“浏览器”。于是,“浏览器”又按张三提供通信地址给李四写信借钱,李四收到信后就把钱汇给了“浏览器”。

    由此可见,重定向的时候,“浏览器”一共发出了两封信和收到了两次回复,“浏览器”也知道他借到的钱出自李四之手。

    而请求转发方法在服务器端内部将请求转发给另外一个资源,浏览器只知道发出了请求并得到了响应结果,并不知道在服务器程序内部发生了转发行为。这个过程好比绰号叫“浏览器”的人写信找张三借钱,张三没有钱,于是张三找李四借了一些钱,甚至还可以加上自己的一些钱,然后再将这些钱汇给了“浏览器”。

    由此可见,转发的时候,“浏览器”只发 出了一封信和收到了一次回复,他只知道从张三那里借到了钱,并不知道有一部分钱出自李四之手。

    2)重定向
    两次请求,两次响应
    重定向不携带数据
    重定向地址栏发生改变
    3)转发
    一次请求,一次响应
    转发需要携带数据
    转发地址栏不会发生变化
    4) 使用
    如果要保留请求域中的数据,使用转发,否则使用重定向。
    以后访问数据库,增删改使用重定向,查询使用转发。
    5)小结
    1、转发使用的是getRequestDispatcher()方法;重定向使用的是sendRedirect();
    2、转发:浏览器URL的地址栏不变。重定向:浏览器URL的地址栏改变;
    3、转发是服务器行为,重定向是客户端行为;
    4、转发是浏览器只做了一次访问请求。重定向是浏览器做了至少两次的访问请求;
    5、转发2次跳转之间传输的信息不会丢失,重定向2次跳转之间传输的信息会丢失(request范围)。

    在这里插入图片描述

    请求转发

    二.请求转发
    1)什么是请求转发
    浏览器访问Servlet1,Servlet1将参数处理得到结果,没有直接返回给浏览器,而是将结果带给Servlet2,由Servlet2再处理之后返回给浏览器
    在这里插入图片描述
    2 )代码实现

    request.getRequestDispatcher("/demo07").forward(request, response);
    

    在这里插入图片描述
    3)特点
    1.地址栏不发生变化,显示的是上一个页面的地址
    2.请求次数:只有1次请求
    3.请求域中数据不会丢失

    4).例子
    Servlet01

    @WebServlet("/demo01")
    public class Demo06Servlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //将"游戏本"添加到请求中,携带到下一个servlet
            //1 存数据
            request.setAttribute("name","电脑");
            //2 携带到下一个servlet,只能使用转发
      request.getRequestDispatcher("/demo07").forward(request, response);
        }
    }
    (这就是第一个Servlet01,通过请求转发发给下一个Servlet02)
    

    Serlvet02

    @WebServlet("/demo02")
    public class Demo07Servlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //1 取数据
            String name = (String) request.getAttribute("name");
            //2 组装标签后,响应给浏览器
            response.setContentType("text/html;charset=utf-8");
    response.getWriter().println("<font color='red'>"+name+"</font>");
        }
    }
    

    重定向

    三.重定向
    1)什么是请求转发
    浏览器访问Servlet1,Servlet1不知道结果,但是Servlet1知道Servlet2知道结果,将Servlet2的地址返回给浏览器,浏览器根据Servlet1给的地址访问Servlet2,Servlet2将参数处理得到结果返回给浏览器

    在这里插入图片描述

    2 )代码实现

    response.sendRedirect(request.getContextPath()+"要跳转的页面")
    

    3 )特点
    两次请求,两次响应
    重定向不携带数据
    重定向地址栏发生改变

    4)例子
    Servlet01

    @WebServlet("/demo01")
    public class Demo06Servlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //1 存数据
            request.setAttribute("name","电脑");
    response.sendRedirect(request.getContextPath()+"demo02")
        }
    }
    
    

    Servlet02

    @WebServlet("/demo02")
    public class Demo07Servlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
    response.getWriter().println(request.getAttribute("name"));
        }
    }
    
    展开全文
  • 一、请求转发与重定向区别 重定向: 1.可以理解为是客户端行为,客户端发起一次请求,服务器端给出一次响应,但这个响应包含下一次客户端需要访问的服务器端处理程序的地址,客户端再次发起请求,将会得到处理结果...

    一、请求转发与重定向区别

    重定向:

    1.可以理解为是客户端行为,客户端发起一次请求,服务器端给出一次响应,但这个响应包含下一次客户端需要访问的服务器端处理程序的地址,客户端再次发起请求,将会得到处理结果,也就意味着重定向客户端至少发起两次请求

    2.当使用了重定向跳转页面后,在其客户端路径栏显示的应该是其重定向的路径,客户端是可以观察到页面地址变化的,重定向是客户端至少做了两次访问请求的

    3.简单的图例

     

    请求转发:

    1.可以理解是服务器端行为,客户端发起一次请求,这个请求在整个服务器端可以被多次传递,但都是由服务器端的处理程序传递给另一个处理程序,客户端不需要发起二次请求,无论这个请求经历过多少个处理程序,始终都是同一个请求,也就意味着,这个请求中的数据经历过的每一个处理程序都可以使用

    2.中间传递的是自己容器的request,客户端的路径栏显示的还是第一次访问的路径,客户端是感觉不到服务器做了转发的,请求转发客户端是只做了一次请求。

    3.简单的图例

     

    二、使用

    当前后两个页面有数据传递时,例如查询了数据需要在页面显示时,用请求转发

    当没有数据传递,例如做了更新等操作跳转到其他页面,就用重定向。

    区别总结:

    1、请求次数

    重定向是浏览器向服务器发送一个请求并收到响应后再次向一个新地址发出请求,转发是服务器收到请求后为了完成响应跳转到一个新的地址;重定向至少请求两次,转发请求一次;

    2、地址栏不同

    重定向地址栏会发生变化,转发地址栏不会发生变化;

    3、是否共享数据

    重定向两次请求不共享数据,转发一次请求共享数据(在request级别使用信息共享,使用重定向必然出错);

    4、跳转限制

    重定向可以跳转到任意URL,转发只能跳转本站点资源;

    5、发生行为不同

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

    展开全文
  • 请求转发与重定向区别

    千次阅读 2020-07-24 11:48:46
    重定向(Redirect): 客户端浏览器向Web应用服务器端发送一个请求,Web服务器端使用HttpServletResponse的sendRedirect()方法将结果(结果中头信息内HTTP状态码为302,Location响应报头域中保存响应回来的地址)...
  • 请求转发与重定向详解

    千次阅读 2018-06-08 00:07:03
    https://blog.csdn.net/Goskalrie/article/details/51217630(转载)转发和包含Servlet对象由Servlet容器创建,并且Servlet对象的service()方法也由容器调用。一个Servlet对象可否直接调用另一个Servlet对象的...
  • 请求转发 request.getRequestDispatcher(url).forward(request, response); 重定向 response.sendRedirect(url); 异同 请求转发 重定向 页面 跳转 跳转 URL 不改变 改变(302重定向) 请求次数 一...
  • 主要介绍了详解spring mvc 请求转发重定向,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 【Servlet】请求转发与重定向

    千次阅读 2021-02-14 19:51:29
    辨析请求转发与重定向
  • (1 ) 请求转发 A、浏览器只发出一次请求,收到一次响应 B、请求所转发到的资源中可以直接获取到请求中所携带的数据 C、浏览器地址栏显示的为用户所提交的请求路径 D、只能跳转到当前应用的资源中 (2 ) 重定向 ...
  • 调用HttpServletRequest对象的getRequestDispatcher()方法获取到RequsetDispatcher对象,通过RequestDispatcher对象的forward()方法可以完成请求转发功能。 request.getRequestDispatcher().forward(); 通过...
  • 请求转发 request.getRequestDispatcher().forward(); 是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,因为这...
  • 1.请求转发与重定向 1.概念 2.重定向与数据传输: resp.sendRedirect("other?pname=aa&page=11");//再次访问的servlet对应的url和要传的参数(pname,page)
  • 请求转发(1次跳转)与重定向(2次跳转)的区别: a.重定向无法保留传输过来的数据,请求转发可以保留传输过来的数据。 b.重定向会令地址栏发生改变(由check.jsp页面–>success.jsp页面), 请求转发则不会令...
  • 请求转发与重定向详解代码,解读工作流程,详细内容在我的博客中有!
  • 请求转发重定向

    2022-03-17 15:24:53
    请求转发一定要和HttpServletResponse.sendRedirect所表示的请求重定向区别开来! 什么意思?简单点来说,你是一名银行客户,现在你正在银行办理业务,你已经在窗口一挂上号了,你提出了要求,该窗口的银行工作人员...
  • 转发 ①创建Servlet1 和Servlet2的Java文件 package zhuan; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet....
  • 请求转发重定向是Servlet中的两种路径跳转的方法,我们一定要区分开它们。 请求转发 请求转发,见名知义,就是把Servlet接收到的请求转发到其他地方。 请求转发就相当于你找我,我帮你找他,比如下面,客户端请求...
  • 关于请求转发与重定向区别及应用场景 做web项目的安全退出后跳转到登录页面功能 突然想到 请求转发与重定向之间的区别 还有应用场景的问题 感觉自己混淆概念了、特此记一下; 定义 请求转发 浏览器向服务器发起仅...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 96,100
精华内容 38,440
关键字:

请求转发与重定向

友情链接: final.rar