关于 sendRedirect() 和 forward() 的一点点小发现,求高人解答原理!

在写验证用户的时候,我敲入了如下一段代码:

 

while (rs.next()) {

if (rs.getString(1).equals(password)) {

// 验证成功,转向欢迎界面

request.setAttribute("pass", "true");

// response.sendRedirect("Welcome");

request.getRequestDispatcher("Welcome").forward(request,

response);

}

}

response.sendRedirect("Login");

 

 

忽然想起老师说过一句话,Servlet在跳转过后,仍会执行后面的代码!

按这种说法,浏览器在第一次请求且验证成功后,被转发到 Welcome Servlet,之后代码继续执行,应该会被重定向到 Login 页面!!

可是,这段代码实现了验证功能,且浏览器并没有报错。感到很是奇怪!

于是我分别在重定向语句的前后加入一个语句进行验证,如下:

 

while (rs.next()) {

if (rs.getString(1).equals(password)) {

// 验证成功,转向欢迎界面

request.setAttribute("pass", "true");

// response.sendRedirect("Welcome");

request.getRequestDispatcher("Welcome").forward(request,

response);

}

}

System.out.println("111");

response.sendRedirect("Login");

System.out.println("222");

 

 

再次访问,当验证失败时,页面被重定向到 Login 页面,且后台打印:111和222,说明,老师的话是正确的!

当验证成功时,页面转发到 Welcome Servlet,且后台打印:111,到 sendRedirect() 就停止了!!

 

为了看看是否进入 sendRedirect 我加入这样一句:response.sendRedirect("Login?back=true");并在Login页面接收参数后台打印。访问验证,后台没有打印出 true!也就是说在服务器转发过后,碰到重定向则停止运行!

 

那么问题又出来,finally 中的操作呢??那整个try之外呢,能否会被访问?

我在finally 中加入System.out.println("333"); 在try 语句外加入 System.out.println("444");

访问,当验证成功时,后台:111 和 333 (注意没有 444)

当验证失败时,后台:111和222和333和444和true

 

写到这里,我又用 HttpFox 测试了一下。当验证通过时,只发出过一个 Post 请求,当验证失败时 发出过一个 Post 和 Get 请求。

 

于时,结果就是,当在一个 Servlet 中被请求被转发过后,该 Servlet 还会继续执行,如果碰到重定向请求则不接受,之后的代码也不会被执行。

 

----- 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值