我用表单提交的方法 从 1.jsp把(name) 提交到 2.jsp  用request.getParameter() 提取数据 能提取的到 "jie1",
但是我如果在 1.jsp上 用request.setAttribute("name", "jie1"), 然后在response.sendRi...重定向到 2.jsp
在用  request.getAttribute("name") 那出来的是null ,我知道你们说  重定向后不是同一个 request但是 表单提交到
2.jsp后他的 url也边成了 2.jsp啊 应该也不是同一个request 为什么 表单提交后 用request.getParameter() 能取到 而 response.sendRi...重定向到 2.jsp区的是NULL 我就是不明白 哪个大哥分析下给我听 好么 。。

解决方案 »

  1.   

     重定向是不会 传送1.jsp 页面的request 对象到 2.jsp 的 
     必须用 转发 ....forword(req,res);
    这样你9取得到 name了
      

  2.   

    重定向后页面不处在同一个request,所以得到的是null,可以用forward。
    但是重定向后url是存在你要传递的参数的,所以,get到的值不会为空。
      

  3.   

    response.sendRedirect 重定向  会创建新的request   所以你取得的是 null或者 response.sendRedirect("2.jsp?xxx=yyy"); 然后用request.getParameter()要想保留 request 对象,可以用 RequestDispatcher rd = request.getRequestDispatcher("/2.jsp");
    rd.forward(request, response);
      

  4.   

    说一下重定向(redirect)与请求(forward)转发的区别:
    a.forward跳转到的页面能够接受到request设置的属性,而sendRedirect不能
      (所它得使用比request范围更广的session设置属性)
    b.forward跳转到的页面不必写全路径名,而sendRedirect必须写全路径名
    c.forward不能跳转到此web项目以外的连接,而sendRedirect可以跳转到此web项目以外的连接
    d.forward跳转后地址栏显示不变,而sendRedirect跳转后显示的是目标的地址信息
    e.forward跳转的速度相对而言比sendRedirect跳转的速度要快 希望对lz有点帮助~  
      

  5.   

    sendR... 是重定向,是二次请求。
      

  6.   

    同上,重定向,相当于重新请求服务器,是服务器只能仍会response,故request为null!!
      

  7.   

    第一次表单提交,好比说你(1.jsp)通过表单提交把钱交给我(2.jsp),这个时候我(2.jsp)就有钱了。
    第二次的时候,本来你是把钱都封装好了,准备给我(放在request作用域中),可是你没有给我,而是直接来问我有没有钱(重定向),这个时候我当然没钱了。
    你这个重定向是在你的1.jsp这个请求过程没有完全结束的情况下放弃了请求,重新直接去访问2.jsp.这个时候2.jsp没有得到你提交给他的钱当然返回null给你了。希望能帮助你理解
      

  8.   

    rd.forward(request, response);要通过它才能保证是多个页面存在同一个request.response对象。值就能取出
      

  9.   

    转发于重定向的区别
    重定向:response.sendRedirect(“display.jsp”); 
    转发:request.getRequestDispatcher(“display.jsp”).forward(request,response); 
    重定向会改变浏览器地址栏,转发则不能改变
    A 与B 页面之间发生重定向或转发,重定向时,A 与B 使用不同的请求对象,转发时,A 与B使用同一个请求对象
    重定向可跳转到任何页面,包括外部应用程序,转发只限于本应用程序之内。
      

  10.   

    支持楼主的,就是这样!
    一般共享数据而且生命周期不长的,推荐存入到request对象中
      

  11.   

    1.jsp提交到2.jsp,在后者中直接取的是1.jsp中封装的request,
    request.getRequestDispatcher(“2.jsp”).forward(request,response); 
    是在同一请求内,将1.jsp 的请求(request)转发给2.jsp
    response.sendRedirect(“2.jsp”); 
    不在同一请求内,重新创建一个request,向服务器发出请求,重定向到2.jsp,所以你再取 request中的name就为空了,因为你取到的request已经不是1.jsp 发送的了
      

  12.   

    response.sendRedirect页面跳转过程是这样的:
    客户端(request1)--->页面1(返回)--->客户端(request2)--->页面2(返回)--->客户端
    两个request不同
    如果想传递信息可以用session来实现
    forward页面跳转是:
    客户端(request)--->页面1(forward)--->页面2(返回)--->客户端
    forward的页面跳转是服务端来处理的所以是同一个request
    希望有助于你理解...
      

  13.   

    楼主补充:
       请问 表单提交到底是属于重定向 还是转发  如果是属于转发 那么 URL 应该不会变 啊 但是他变了 ,如果是属于重定向的话, 那么 他的 request.getParameter()方法 怎么能区的上个页面(requets)里面的数据, 我就是这点分不清楚
      

  14.   

    request的生命周期就是一个http请求,如你点击超链接(get)或使用post提交请求1.jsp,则在1.jsp运行的整个生命周期内1.jsp的request对象存在(包括使用了请求转发),但当1.jsp中执行重定向(如重定向到2.jsp),web服务器会告知web客户端(如浏览器)重新发出get请求,这时1.jsp的request对象的生命周期结束了,web客户端重新请求了2.jsp,所以在2.jsp中是一个新的request对象,这个request对象已经不是1.jsp的request对象了。
      

  15.   

    redirect重定向是不会传送1.jsp 页面的request.setAtribute() 对象到2.jsp 的 
    必须用 通过转发 ....forword(req,res); 这样你就取得到 request里面的对象
      

  16.   

    重定向 会把上一个request 丢失  
    所以你到 2 所用的request.getParamster(); 已经是重新创建的了  
     你必须用forward();
      

  17.   

    因为重定向是服务器端发送一个命令通知客服端变更请求地址,是客服端行为,是一个新的请求,所以不会保存request数据。
    图例流程为:
           请求         重定向         请求重定向地址
    浏览器----->服务器------->浏览器-------------->服务器-->浏览器而转发是服务器端取得转发资源直接返回给客服端,是服务器端行为,是同一个请求,所以request数据不会丢失。
           请求         转发           查找转发资源       
    浏览器----->服务器------>服务器-------------->浏览器
      

  18.   

    response.sendRedirect(url) -- 重定向到指定URL
    request.getRequestDispatcher(url).forward(request,response) -- 请求转发到指定URL二者区别:
    response.sendRedirect(url)跳转到指定的URL地址,产生一个新的request,所以要传递参数只有在url后加参数,如:
    url?id=1.
    request.getRequestDispatcher (url).forward(request,response)是直接将请求转发到指定URL,所以该请求能够直接获得上
    一个请求的数据,也就是说采用请求转发,request对象始终存在,不会重新创建。而sendRedirect()会新建request对象,
    所以上一个request中的数据会丢失。
      

  19.   

    reqeust.sendRedirect 是重定向。request已经不是同一个。参数不会保存。
      

  20.   

    11楼说得很对。
    第一次是直接请求2.jsp,而第二次是发出了第二次请求。