首页 > 代码库 > 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选择结构来控制,这样的话会保证程序流程清晰合理。大家可以参考一下