我用表单提交的方法 从 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.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 我就是不明白 哪个大哥分析下给我听 好么 。。
必须用 转发 ....forword(req,res);
这样你9取得到 name了
但是重定向后url是存在你要传递的参数的,所以,get到的值不会为空。
rd.forward(request, response);
a.forward跳转到的页面能够接受到request设置的属性,而sendRedirect不能
(所它得使用比request范围更广的session设置属性)
b.forward跳转到的页面不必写全路径名,而sendRedirect必须写全路径名
c.forward不能跳转到此web项目以外的连接,而sendRedirect可以跳转到此web项目以外的连接
d.forward跳转后地址栏显示不变,而sendRedirect跳转后显示的是目标的地址信息
e.forward跳转的速度相对而言比sendRedirect跳转的速度要快 希望对lz有点帮助~
第二次的时候,本来你是把钱都封装好了,准备给我(放在request作用域中),可是你没有给我,而是直接来问我有没有钱(重定向),这个时候我当然没钱了。
你这个重定向是在你的1.jsp这个请求过程没有完全结束的情况下放弃了请求,重新直接去访问2.jsp.这个时候2.jsp没有得到你提交给他的钱当然返回null给你了。希望能帮助你理解
重定向:response.sendRedirect(“display.jsp”);
转发:request.getRequestDispatcher(“display.jsp”).forward(request,response);
重定向会改变浏览器地址栏,转发则不能改变
A 与B 页面之间发生重定向或转发,重定向时,A 与B 使用不同的请求对象,转发时,A 与B使用同一个请求对象
重定向可跳转到任何页面,包括外部应用程序,转发只限于本应用程序之内。
一般共享数据而且生命周期不长的,推荐存入到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 发送的了
客户端(request1)--->页面1(返回)--->客户端(request2)--->页面2(返回)--->客户端
两个request不同
如果想传递信息可以用session来实现
forward页面跳转是:
客户端(request)--->页面1(forward)--->页面2(返回)--->客户端
forward的页面跳转是服务端来处理的所以是同一个request
希望有助于你理解...
请问 表单提交到底是属于重定向 还是转发 如果是属于转发 那么 URL 应该不会变 啊 但是他变了 ,如果是属于重定向的话, 那么 他的 request.getParameter()方法 怎么能区的上个页面(requets)里面的数据, 我就是这点分不清楚
必须用 通过转发 ....forword(req,res); 这样你就取得到 request里面的对象
所以你到 2 所用的request.getParamster(); 已经是重新创建的了
你必须用forward();
图例流程为:
请求 重定向 请求重定向地址
浏览器----->服务器------->浏览器-------------->服务器-->浏览器而转发是服务器端取得转发资源直接返回给客服端,是服务器端行为,是同一个请求,所以request数据不会丢失。
请求 转发 查找转发资源
浏览器----->服务器------>服务器-------------->浏览器
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中的数据会丢失。
第一次是直接请求2.jsp,而第二次是发出了第二次请求。