5 回答
TA贡献16条经验 获得超8个赞
回来填坑。先说答案:前一题选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。
TA贡献223条经验 获得超56个赞
请求转发:request.getRequestDispatcher(“/xx.jsp”).forward(request,response);可以实现request域对象数据共享(这一点很重要,日后学springmvc或者其他视图框架会用到),地址栏不会反生变化(也就是一个请求)。
重定向:地址栏发生变化,request不能共享,两次请求
TA贡献98条经验 获得超73个赞
转发:request.getRequestDispatcher(“/xx.jsp”).forward(request,response); 其特点是:地址栏无变化,始终是一个请求,转发的对象可以是本工程内的任何页面。
重定向:就相当于客户端向服务器请求时,服务器响应给客户端一个新的URL浏览器就把请求传递个一个新的页面 。特点是:地址发生了变化,重定向的范围没有限制。
添加回答
举报