<%@page include%>、<%@include%>、 三者之間的本質區別


<%@page include%>、<%@include%>、<jsp:include>三者之間的本質區別

先從它的幾個內置對象說起。

application和session比較簡單,這里主要說明request和page的作用范圍。

application:全局作用范圍,整個應用程序共享,就是在部署文件中的同一個webApp共享,生命周期為:應用程序啟動到停止。

session:會話作用域,當用戶首次訪問時,產生一個新的會話,以后服務器就可以記住這個會話狀態。生命周期:會話超時,或者服務器端強制使會話失效。

request:請求作用域,就是客戶端的一次請求。

page:一個JSP頁面。

以上作用范圍使越來越小, request和page的生命周期都是短暫的,他們之間的區別就是:一個request可以包含多個page頁(include,forward以及filter)。舉個簡單的例子:

jsp1.jsp

<jsp:useBean id="beanID" class="xxx .xxx.BeanClass" scope="request" />

<jsp:include page="jsp2.jsp" />

jsp2.jsp

<jsp:getProperty name="beanID" property="sample" />

運行jsp1.jsp可以正常顯示數據,因為作用范圍是request,相當於調用了request.setAttribute()方法,

jsp2頁通過request.getAttribute來獲得這個bean.如果把request改為page,就會拋出NullPointerExceptioin.

一個請求可以跨好幾個JSP(include和forword)和Servlet(如filter).不過這里有一個需要注意的就是區別

<jsp:include> 和<%@ include %>.如果上面的<jsp:include page="jsp2.jsp" />改為<%@ include file="jsp2.jsp" %>,即使scope為page也是正確的,<%@ include %>是編譯時包含,<jsp:include>是運行時包含.前者就相當於宏,編譯時替代,后者相當於函數,運行時返回.

<% @ page %> 只能包含靜態內容。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM