getServletContext().getRequestDispatcher("","").forward() 与
response.sendRedirect()的区别是什么啊?请详细说明,最好再说下这两个语句的含义

解决方案 »

  1.   

    request.getRequestDispatcher(url).forward(request,response)是直接将请求转发到指定URL,所以该请求能够直接获得上一个请求的数据,也就是说采用请求转发,request对象始终存在,不会重新创建。而sendRedirect()会新建request对象,所以上一个request中的数据会丢失。 
      redirect 会首先发一个response给浏览器, 然后浏览器收到这个response后再发一个requeset给服务器, 然后服务器发新的response给浏览器. 这时页面收到的request是一个新从浏览器发来的.forward 发生在服务器内部, 在浏览器完全不知情的情况下发给了浏览器另外一个页面的response. 这时页面收到的request不是从浏览器直接发来了,可能己经放了数据.
      

  2.   

    Sendredirect                        Forward
    是不同的request                        虽然是不同的对象,但是,可以取到上一个页面的内容
    send后的语句会继续执行,除非return        forward后的语句不会继续发送给客户端
    速度慢                                     速度快
      

  3.   

       request是请求,即客服端发来的请求、
        response是响应,是服务器做出的响应,
    request.getRequestDispatcher(url).forward(request,response)是在地址栏不改变的情况下做出的跳转,地址栏只显示
    servlet的地址,不显示跳转的地址。
    最主要的区别是:
    request.getRequestDispatcher("/a.jsp").forward(request,response)它跳转的是http://localhost:8080/xiangmuming/a.jsp
    而response.sendRedirect("/a.jsp")跳转的是http://localhost:8080/a.jsp
      

  4.   

    顶!
    request.getRequestDispatcher(url).forward(request,response)目标url仍然可以取到当前request里表单的值,response.sendRedirect()就取不到了!
      

  5.   

    简单来说是将 request转发,request不能在两个页面之间进行数据共享,一般用session等方法在页面之间进行数据共享,但若用
    getServletContext().getRequestDispatcher("","").forward() 的话就可以讲request转发,即可达到request在页面之间共享
    response.sendRedirect() 说白了就是个跳转页面的命令
      

  6.   

    response.sendRedirect()使用这个客户端会再次发送请求,
    request.getRequestDispatcher().forward(request, response);则是在服务端内跳转,不会重新发送请求
      

  7.   


    正确
    简单的说:request.getRequestDispatcher(url).forward(request,response)这个方法不会改变浏览器的地址栏的网页地址
    而redirect 会改地址栏的地址,会把地址栏的值改为url
      

  8.   

    request.getRequestDispatcher(url).forward(request,response)是直接将请求转发到指定URL,所以该请求能够直接获得上一个请求的数据,也就是说采用请求转发,request对象始终存在,不会重新创建。而sendRedirect()会新建request对象,所以上一个request中的数据会丢失。 
      redirect 会首先发一个response给浏览器, 然后浏览器收到这个response后再发一个requeset给服务器, 然后服务器发新的response给浏览器. 这时页面收到的request是一个新从浏览器发来的. forward 发生在服务器内部, 在浏览器完全不知情的情况下发给了浏览器另外一个页面的response. 这时页面收到的request不是从浏览器直接发来了,可能己经放了数据.