sendRedirect()之后的代码是否会继续执行
2017-03-29 01:26
197 查看
两个问题
Servlet中,重定向之后的代码是否会继续执行?重定向是在所有代码执行完毕后跳转,还是执行到重定向代码时立即跳转?
设计代码
在重定向之前和之后让程序各循环sleep五秒,在控制台打印输出,看页面在什么阶段跳转//重定向前循环sleep五秒 for (int i = 0; i < 5; i++) { System.out.println("before redirect:" + i); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } //重定向 response.sendRedirect("result.jsp"); //重定向后循环sleep五秒 for (int i = 0; i < 5; i++) { System.out.println("after redirect:" + i); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } }
结果
可以发现:控制台打印了5个before redirect和5个after redirect之后,页面刷新,浏览器地址改变,页面内容改变
1. 重定向之后的代码会继续执行
2. 当前程序所有代码执行完毕后,才会执行重定向跳转
引申
1.重定向之后,加上return,可让之后的代码不再执行boolean flag = true; if (flag) { response.sendRedirect("result.jsp"); return; }
控制台打印了5个before redirect之后,页面刷新,浏览器地址改变,页面内容改变
2.转发,request.getRequestDispatcher().forward(),与重定向一样,转发之后的代码也会执行,所有代码执行完毕才跳转
回车后,控制台输出完毕,页面刷新,浏览器地址没有改变,页面内容改变
3.jsp的本质就是Servlet,所以jsp页面执行转发或者重定向,以上结论同样适用
附:测试代码
TestRedirectServlet.javapackage com.redirect.test;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class TestRedirect
*/
@WebServlet("/TestRedirectServlet")
public class TestRedirectServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//重定向前循环sleep五秒 for (int i = 0; i < 5; i++) { System.out.println("before redirect:" + i); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } //重定向 response.sendRedirect("result.jsp"); //重定向后循环sleep五秒 for (int i = 0; i < 5; i++) { System.out.println("after redirect:" + i); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } }
}
}
TestDispatcherServlet.java
package com.redirect.test; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/TestDispatcherServlet") public class TestDispatcherServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //转发前循环sleep五秒 for (int i = 0; i < 5; i++) { System.out.println("before dispatcher:" + i); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } //转发 request.getRequestDispatcher("result.jsp").forward(request, response); //转发后循环sleep五秒 for (int i = 0; i < 5; i++) { System.out.println("after dispatcher:" + i); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } }
相关文章推荐
- sendRedirect()之后的代码是否会继续执行
- 关于android Activity界面Finish之后代码是否继续执行
- asp.net下模态对话框关闭之后继续执行服务器端代码的问题
- 关于在android程序执行过程中使用Intent启动另一个活动后,同个方法未执行的代码是否会继续执行。
- 如果想让应用程序进入后台之后继续执行代码,应该怎么办?
- 关于.net验证控件检错之后继续执行后台代码的错误分析 推荐
- ASP.NET在后台代码实现个功能,根据选择提示用户是否继续执行操作
- exit() 时或之后还能继续执行php代码的几种办法
- 浅谈java中异常抛出后代码是否会继续执行
- forward()和sendRedirect()执行后,后面的代码是否还继续执行?
- asp.net下模态对话框关闭之后继续执行服务器端代码的问题
- VBA调用doc命令,doc窗口关闭之后,继续执行代码
- finally之后的代码是否执行
- try catch 之后是否会继续执行
- 关于模态对话框关闭之后继续执行服务器端代码的问题
- C#中try catch捕捉到问题之后 后面的代码还继续执行吗
- 在ssh、telnet断开之后继续执行程序 [转]
- 父线程 在创建了子线程后,是不是继续执行自己的代码 ?(收集整理)
- main主函数执行完毕后,是否可能会再执行一段代码
- NET杂项(Cs里弹出对话框且继续执行cs代码,Oracle不能连接,本机虚拟目录指向另一台电脑的共享目录)