getRequestDispatcher 和sendRedirect到底有什么区别

sendRedirect重定向之后能不能收到 requset.getParameter(“值”)里面的值??请求转发能不能收到 requset.getParameter(“值”)里面的值??   请求重定向不带任何参数?(除了地址栏里用"?"传参)

请求转发呢,request和session的值都能在另一页面获取么????

请叫我百度
浏览 2797回答 5
5回答

sxian_wang

回来填坑。先说答案:前一题选D,后一题选A。我们来看下getRequestDispatche()和sendRedirect():       getRequestDispatcher()前面是什么?request!既然是request,它必然是属于服务器端的逻辑。而在这里,getRequestDispatcher()的作用就是转发请求。完整的来讲,一个请求包括request和response这两个参数,所以在getRequestDispatcher()后面接了一个forward(resquest,response);把这个请求转发到了另个页面。这里,一定要明白转发这两个字:对原有的对象不进行修改,从A拿到B,这叫转发,它是一个服务器的内部行为。所以在a.jsp收到转发的request后,该requset还是有key为name的这个对象。你用getParameter("name")自然能够获取到value,也就是sase;       再来看看sendRedircet()。类似的,sendRedirect()前面是response对象。什么是response?你可以简单的理解为是服务器想告诉客户端(在这里是浏览器)的一系列信息。那么,sendRedirect()这个动作服务器想告诉客户端什么信息呢?重定向!那什么是重定向又是什么呢?你可以理解为浏览器根据服务器的响应信息重新向某个URL发起一次新的请求,而这个URL也是服务器告诉浏览器的,在这里就是sendRedirect()中的参数。也就是说,重定向是一个客户端行为,对应的URL地址栏会发生变化。这和你自己在地址栏输入这个URL再回车,并没有什么卵的区别。       明白了重定向的概念,我们回到你的题目上:重定向是客户端行为,重新向某个URL发起请求,该请求的request和response信息都是新的,和上一次请求的request、response没有一毛钱的关系。所以,重定向以后,在a.jsp页面里面你收到request和response都是很干净的,啥都没携带,自认也没有name这个参数,所以你这时候用getParameter()找不到name,自然给你返回了一个null值。显示在页面上也是null。       所以前一题选D,后一题选A。

HansonQ

请求转发:request.getRequestDispatcher(“/xx.jsp”).forward(request,response);可以实现request域对象数据共享(这一点很重要,日后学springmvc或者其他视图框架会用到),地址栏不会反生变化(也就是一个请求)。重定向:地址栏发生变化,request不能共享,两次请求

慕男婶

转发:request.getRequestDispatcher(“/xx.jsp”).forward(request,response); 其特点是:地址栏无变化,始终是一个请求,转发的对象可以是本工程内的任何页面。 重定向:就相当于客户端向服务器请求时,服务器响应给客户端一个新的URL浏览器就把请求传递个一个新的页面 。特点是:地址发生了变化,重定向的范围没有限制。

sxian_wang

早上起来答。。。

请叫我百度

具体就是这两个问题  ,求帮忙解释一下为什么?
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java