首页 > 代码库 > RequestDispatcher的forward()方法跳转之后原本servlet其后的语句还是会执行的
RequestDispatcher的forward()方法跳转之后原本servlet其后的语句还是会执行的
发现好多介绍Servlet的书籍中都这样说道:
利用RequestDispatcher的forward()方法实现请求转发以后,请求将由转发后的servlet继续处理,而转发之前的servlet的执行将终止。其实这种说法是错误的,经过我的实验,转发前的servlet还是会继续执行,只不过由于请求被转发了,客户端的所有显示都是由转发后的servlet生成的,转发前的servlet产生的客户端输出也会被转发后的servlet的客户端输出覆盖,表面上看起来转发前的servlet执行终止了,其实没有,它还会继续执行下去,直到生命期结束。废话不多说,代码说话:
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException{
if("test".equals(name)){
RequestDispatcher rd = request.getRequestDispatcher("/welcome");
rd.forward(request,response);
}else{
RequestDispatcher rd = request.getRequestDispatcher("/login");
rd.include(request,response);
}
System.out.println("This is a test!");
}
假设本servlet对应映射路径是/portal,那么我们在浏览器地址栏这样输入:
http://localhost:8080/你的工程名/portal?name=test
很明显,这样的话程序流程直接就通过rd.forward()跳转走了,但是这个时候你会发现在后台This is a test还是会打印出来。对于这样的问题,我提供一种解决方法:
对于此种跳转,最后是通过if-else选择结构来控制,这样的话会保证程序流程清晰合理。大家可以参考一下
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。