JSP笔记:forward和include方法的区别:
request.getRequestDispatcher("jsp2.jsp").forward(request, response);
request.getRequestDispatcher("jsp2.jsp").include(request, response);
这两种写法有什么区别呢?首先,getRequestDispatcher后面的参数可以是一个servlet, jsp或者html页面
对于forward方法,本意是让第一个页面处理request,第二个页面处理response。如果第一个页面中已经使用response进行输出了,那么只要没有flush(),forward依然可以成功,并会自动清除刚才的输出内容,但是如果第一个页面调用了flush()方法,则会报错。值得注意的是执行了forward方法调用了第二个页面之后,程序还会返回第一个页面继续执行,但是此时再使用response输出已经没有作用了。建议可以在forward语句后面加上 if  (true) return;避免无必要的执行后面的程序。include方法则不同,它是服务器端的动态加载,执行完第二个页面的程序后可以回到第一个页面继续输出,只需要注意第二个页面不应当更改response的头部信息(改了也没用)。
---------------------------------------
粗浅认识,请大家莫见笑,不吝指正.

解决方案 »

  1.   

    对于forward方法,本意是让第一个页面处理request,第二个页面处理response。
    =======================================================================
    我觉得是Servlet把由于Web用户的请求而产生的ServletResponse ServletRequest对象转发给下一个目标组件;让目标组件处理用户的请求,用户的请求包含在ServletRequest对象中,处理完后把响应,包含在ServletResponse对象中,通过Servlet容器发送给用户
      

  2.   

    也就是说源组件和目标组件共享request作用范围内的共享数据 共享数据存放在ServletRequest ServletResponse对象中
      

  3.   

    include方法则不同,它是服务器端的动态加载,执行完第二个页面的程序后可以回到第一个页面继续输出,只需要注意第二个页面不应当更改response的头部信息(改了也没用)。
    ===================================================================================
    是这样的;但是这个地方应该更多的关注源组件(当前)和目标组件(被include进来的)是共同使用一个HttpServletRequest对象的;呵呵
      

  4.   

    我感觉Forward没什么用.或许是在特定条件下有用.
      

  5.   

    我觉得是Servlet把由于Web用户的请求而产生的ServletResponse ServletRequest对象转发给下一个目标组件;让目标组件处理用户的请求,用户的请求包含在ServletRequest对象中,处理完后把响应,包含在ServletResponse对象中,通过Servlet容器发送给用户
    ----------------------------------------------------------------
    这确实也有道理,我以前就是这么想的,不过看了看javadoc,里面推荐让源组件(当前)来处理Request,而目标组件处理response,都可以吧,呵呵。至于用的是不是同一个request对象,要看调用者传递的参数了,一般来讲,都应该传递同一个request和response。
      

  6.   

    forward是转发的另一个页面.
    include是把另一个页面加载到当前页面.