JSP中response.sendRedirect()后的代码为什么还能执行?

来源:互联网 发布:知其不可为而为之者 编辑:程序博客网 时间:2024/05/21 09:22

test.jsp页面中
1.     System.out.println( "before   response.sendRedirect ");
2.     response.sendRedirect( "/target.jsp ");
3.     System.out.println( "after   response.sendRedirect ");
为什么无论如何第三行都会执行呢?
我以为sendRedirect执行了,请求就跳转了,后面的代码应该不执行的,但是现在来看是要继续执行的,明白的帮忙解释一下,谢谢。

//===================================================================================================

哪里   说一个方法的结束就是return?
那么按照您的意思,只要我不加上return,那么sendRedirect后面的全部代码都要执行喽?那什么时候页面才跳转啊?
如你所说的话,这样的代码会如何走?
response.sendRedirect( "/a.jsp ");
response.sendRedirect( "/b.jsp ");
response.sendRedirect( "/c.jsp ");
response.sendRedirect( "/d.jsp ");

//===================================================================================================

我同意csdn_pistachio,sendRedirect()也无非只是一个普通的方法调用,
个人认为response.sendRedirect( "/a.jsp ");
response.sendRedirect( "/b.jsp ");
response.sendRedirect( "/c.jsp ");
response.sendRedirect( "/d.jsp ");最后转到了d.jsp,只不过是让客户端浏览器发送了三个重定向的命令而已.对服务器端没有什么影响.所以在后面可以进行数据库存储处理都可以.

//===================================================================================================

回wts(天胜)&xchn(xchn)  

虽然在调用了sendRedirect()之后就不能再对reponse做任何输出(包括再次sendRedirect,所以楼上的写法也是错的),但此时浏览器还没有真正接收到该指令,重定向指令是在sendRedirect之后的代码执行完以后才真正发送到客户端的,然后客户端浏览器去请求新的url。这就是重定向的执行过程。

//===================================================================================================

“我以为sendRedirect执行了,请求就跳转了,后面的代码应该不执行的,但是现在来看是要继续执行的,明白的帮忙解释一下,谢谢。”

不要用传统java应用程序的行为特征来看待B/S下的web   Application的行为特征。

其实验证很简单,在你的代码第二次System.out前加入一空循环延时一下,看看重定向页面先出来还是控制台的 "after   response.sendRedirect "现出来就可以判断了。
加入代码:
                response.sendRedirect( "date.jsp ");
                response.flushBuffer();//可以证明即使已经提交,但也并没有立即发送到客户端
                for   (int   i=0;   i <9999;   i++)//数字大小视你的机器性能而定
                for   (int   j=0;   j <99999;   j++);
                System.out.println( "after   redirect ");

原创粉丝点击