转发和重定向补充

            之前写过一篇页面跳转之Forward和Redirect的文章,简单介绍了转发和重定向之间的几点区别,这里做一些补充,主要是关于他们在request共享方面的一些区别和对其作用域的详细描述。

    首先,我们都知道转发和重定向的区别之一在于是否会改变地址栏,那么为什么呢?

    先说转发,它不会改变地址栏。转发是在服务器端进行的,用的是同一个request,在它转发到的地址页面中可以取出来。    

    示例图:

                          

                                           图1 服务端转发机制

     从上图可以看出,整个转发过程只有一个request,他从Web客户端到Jsp是一个共享的过程。而此时Jsp页面并不知道一个新的东西来了,所以也不会改变地址。

     code:   

/将学生列表集合设置到request中
request.setAttribute("student_list",studentList);
//转发到student_list.jsp
request.getRequestDispatcher("/student_list.jsp").forward(request,response);

//接收
<%
List<Student> studentList = (List)request.getAttribute("student_list");
for(Iterator<Student> iter=studentList.iterator();iter.hasNext();){
    Student student = iter.next();
}
%>
    

    再说说重定向,它改变了地址栏。

    重定向是客户端进行的活动,要用response。先来看图:

                          

                                           图2 客户端重定向机制

     从图中可以看出,Web客户端先把一个request请求传递给Jsp,而后Jsp 发送一个状态码回去;第二次Web客户端再请求request就不是之前的那个了,也就是这两个request不同,非共享的。这样就导致了地址的改变。

     code:  

response.sendRedirect(request.getContextPath() + "/student_list.jsp");//重定向到student_list.jsp

    小结:这篇文章主要是对转发和重定向的机制做了图和代码的补充描述,随着之后的学习,如果有新的观点或心得我们再深入讨论。

    

    

     

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值