response.sendRedirect()与request.getRequestDispatcher().forward()的区别

response.sendRedirect(url):重定向到指定url,是客户端跳转.原理是redirect发一个response给浏览器,浏览器接收后再发一个request给服务器,服务器拿到了再发一个response给浏览器,这样拿到的浏览器的request就是个全新的,设置的属性也都没有了,所以无法夹带参数,只能在链接后面带参.但是这可以随意跳转到任何地方,另外地址栏会发生改变.

request.getRequestDispatcher().forward(request,response):请求转发到指定url,是服务器端跳转.服务器直接把response发送给另一个页面了,所以另一个页面拿到的还是那个带参数的request,并没有新建.这样就可以在里面夹带参数,不过这也使得只能在同一个web下跳转(不能有frame的jsp)

response.sendRedirect("")和request.getRequestDispatcher("")

03-15

关于rnrequest.getRequestDispatcher("")rn和rnresponse.sendRedirect("")的迷惑!rnrn现有程序:rnServlet代码片段:rn[code=Java]rnrnpublic void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletExceptionrnrn response.setContentType("text/html");rn PrintWriter out = response.getWriter();rn System.out.println("Servlet-request " + request);rn request.setAttribute("styles", "ssssssss");//跳转1rn response.sendRedirect("form.jsp");rnrn[/code]rnrnform.jsp内容如下:rn[code=HTML]rnrn rn AAA Pagern rn Request : <%= request %> rn Attribute : <%= request.getAttribute("styles") %> rn rn rnrn[/code]rnrn运行后可以发现:rnServlet代码中request对象和jsp代码中所输出的request对象为同一个值,但是属性却取不出来,显示为null[b]。(为什么1?)[/b]rnrn而,如果我把“//跳转1”处的代码改为:rnRequestDispatcher view = request.getRequestDispatcher("form.jsp");rnview.forward(request, response);rn运行后可以发现:rnServlet代码中request对象和jsp代码中所输出的request对象为不同的两个值,但是属性却取出来了[b]。(为什么2?)[/b]rn这我就比较不懂了,rn以前曾经看过一个贴子说:rnresponse.sendRedirect(url)跳转到指定的URL地址,[b]产生一个新的request[/b],所以要传递参数只有在url后加参数,如:url?id=1. rnrequest.getRequestDispatcher(url).forward(request,response)是直接将请求转发到指定URL,所以该请求能够直接获得上一个请求的数据,rn也就是说采用请求转发,[b]request对象始终存在,不会重新创建[/b]。而sendRedirect()会新建request对象,所以上一个request中的数据会丢失。 rnrn不知道,是我的代码有问题,还是说“曾经的帖子”说的不够到位呢?rn望,有大虾出来指点一二。。。rn直迷糊~~rn

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试

关闭