轉發(forward)、包含(include)及轉向(redirect)的區別與聯系
Posted on 2006-10-11 13:41 Terry的Blog 閱讀(2294) 評論(0) 編輯 收藏 所屬分類: web開發 、轉載forward,include,redirect是jsp中web頁面(jsp或servelt)的三種不同的路由關系,三個貌似相同,其實還是有許多差別的,而了解這些細微的差別,在web開發中是很重要的。
說明:
一、forward、include由javax.servlet.RequestDispatcher來封裝,由包容器container提供RequestDispatcher接口的實現,其中聲明如下:
void forward(ServletRequest req,ServletResponse res)
void include(ServeltRequest req,ServletResponse res)
可以通過兩種方式得到RequestDispatcher:
1、ServletContext.getRequestDispatcher(String path);
其中這里的path必須開始為"/",即這里的path必須相對于context的root.
2、ServeltRequest.getRequestDispatcher(String path)
這里的path可以為相對路徑,如果path開始為"/",則也認為是從context的root開始的。
二、Redirect由HttpServletResponse.sendRedirect(String location)來支持
差別:
三個都可以對用戶的request進行轉發,但是還是有許多的不同,差別最主要集中在如下幾個方面:
1、forward與include共亨Request范圍內的對象,而redirect則不行,即:如果一個javabean被聲明為request范圍的話,則被forward到的資源也可以訪問這個javabean,而redriect則不行。
2、forward與include基本上都是轉發到context內部的資源,而redirect可以重定向到外部的資源,如: req.sendRedriect("
以上來源 http://www.cn-java.com/target/news.php?news_id=3176
充
struts-config.xml
<forward name="succ"? path="/pages/dynabean2.jsp" redirect="true"/>
設置redirect="true"后 轉向目標頁面時效果和redirect一致。
說明:
一、forward、include由javax.servlet.RequestDispatcher來封裝,由包容器container提供RequestDispatcher接口的實現,其中聲明如下:
void forward(ServletRequest req,ServletResponse res)
void include(ServeltRequest req,ServletResponse res)
可以通過兩種方式得到RequestDispatcher:
1、ServletContext.getRequestDispatcher(String path);
其中這里的path必須開始為"/",即這里的path必須相對于context的root.
2、ServeltRequest.getRequestDispatcher(String path)
這里的path可以為相對路徑,如果path開始為"/",則也認為是從context的root開始的。
二、Redirect由HttpServletResponse.sendRedirect(String location)來支持
差別:
三個都可以對用戶的request進行轉發,但是還是有許多的不同,差別最主要集中在如下幾個方面:
1、forward與include共亨Request范圍內的對象,而redirect則不行,即:如果一個javabean被聲明為request范圍的話,則被forward到的資源也可以訪問這個javabean,而redriect則不行。
2、forward與include基本上都是轉發到context內部的資源,而redirect可以重定向到外部的資源,如: req.sendRedriect("
以上來源 http://www.cn-java.com/target/news.php?news_id=3176
充
struts-config.xml
<forward name="succ"? path="/pages/dynabean2.jsp" redirect="true"/>
設置redirect="true"后 轉向目標頁面時效果和redirect一致。