zoukankan      html  css  js  c++  java
  • servlet中请求转发(forword)与重定向(sendredirect)的区别

    servlet请求转发与重定向的区别:

    转发:以前的request中存放的变量不会失效,就像把两个页面拼到了一起。

    重定向:以前的request中存放的变量全部失效,并进入一个新的request作用域。

     

    request.setAttribute("test","hello");
    request.getRequestDispacther("/test.jsp").forword(request,response); 
    response.sendRedirect("test.jsp");
     
    一、显示结果:
    1、当用request.getRequestDispacther("/test.jsp").forword(request,response); 请求转发后,结果页面输出:hello
     
    2、当用response.sendRedirect("test.jsp");重定向后,结果页面输出:null
     
     
    二、底层分析:
     
    1、请求转发(RequestDispatcher)的过程:
     
     
             客户首先发送一个请求到服务器端,服务器端发现匹配的servlet,并指定它去执行,当这个servlet执行完之后,它要调用getRequestDispacther()方法,把请求转发给指定的test.jsp,整个流程都是在服务器端完成的,而且是在同一个请求里面完成的,因此servlet和jsp共享的是同一个request,在servlet里面放的所有东西,在jsp中都能取出来,因此,jsp能把结果getAttribute()出来,getAttribute()出来后执行完把结果返回给客户端。整个过程是一个请求,一个响应。
     
    2、重定向(sendRedirect)的工作原理:
     
     
             客户发送一个请求到服务器,服务器匹配servlet,这都和请求转发一样,servlet处理完之后调用了sendRedirect()这个方法,这个方法是response的方法,所以,当这个servlet处理完之后,看到response.senRedirect()方法,立即向客户端返回这个响应,响应行告诉客户端你必须要再发送一个请求,去访问test.jsp,紧接着客户端受到这个请求后,立刻发出一个新的请求,去请求test.jsp,这里两个请求互不干扰,相互独立,在前面request里面setAttribute()的任何东西,在后面的request里面都获得不了。可见,在sendRedirect()里面是两个请求,两个响应。
     
     
    三、表面分析:
     
    1、当用RequestDispatcher请求转发后,地址栏为http://localhost:8080/test/TestServlet。这真好应正了上面的分析,我们起初请求的就一个servlet,至于你服务器端怎么转,流程怎么样的,我客户端根本就不知道,我发了请求后我就等着响应,那你服务器那边愿意怎么转就怎么转,我客户端不关心也没法知道,所以当服务器端转发到jsp后,它把结果返回给客户端,客户端根本就不知道你这个结果是我真正访问的servlet产生的,还是由servlet转发后下一个组件产生的。
     
    2、当用sendRedirect重定向后,地址栏为http://localhost:8080/test/test.jsp
    因为这个时候,客户端已经知道了他第二次请求的是test.jsp,服务器已经告诉客户端要去访问test.jsp了,所以地址栏里会显示想要访问的结果。
  • 相关阅读:
    121.买卖股票 求最大收益1 Best Time to Buy and Sell Stock
    409.求最长回文串的长度 LongestPalindrome
    202.快乐数 Happy Number
    459.(KMP)求字符串是否由模式重复构成 Repeated Substring Pattern
    326.是否为3的平方根 IsPowerOfThree
    231.是否为2的平方根 IsPowerOfTwo
    461.求两个数字转成二进制后的“汉明距离” Hamming Distance
    206.反转单链表 Reverse Linked List
    448. 数组中缺少的元素 Find All Numbers Disappeared in an Array
    常见表单元素处理
  • 原文地址:https://www.cnblogs.com/Nickzerui/p/4871913.html
Copyright © 2011-2022 走看看