drp—包含

一、靜態包含、動態包含

上篇博客:Web組件的交互,涉及到了包含。這篇博客對靜態包含、動態包含進行區分

1.靜態包含

include指令用於靜態包

<%@ include file="被包含組件的URL"%>

2.動態包含

include標籤用於動態包含

<jsp:include page="被包含組件的URL"/>

3.共同點

無論是靜態包含還是動態包含,組件和被包含的目標組件都共享請求範圍內的共享數據。

 

二、實例分析

1.靜態包含

//sin.jsp
<html>
	<head></head>
	<body>
		sin jsp is including content.jsp.
		<% 
			//定義一個變量count
			int count = 1;
			//將username設置到request中
			request.setAttribute("username","Tom");
		%>
		<!--包含content.jsp-->
		<%@ include file="content.jsp" %>
		sin.jsp is doing something else.
	</body>
</html>

//content.jsp
<html>
	<head></head>
	<body>
		</p>
		Output from content.jsp</br>
		<!--獲取count變量-->
		count = <%=count %> </br>
		<!--獲取request中的username並顯示-->
		username = <%=request.getAttribute("username") %>
		</p>
		
	</body>
</html>

在瀏覽器中輸入,http://localhost:8080/testapp/sin.jsp?username="Tom".輸出結果:

sin.jsp is including content.jsp. 

Output from content.jsp
count = 1 
username = Tom 

sin.jsp is doing something else.

分析:靜態包含發生在解析JSP源組件階段。被包含的目標文件中的內容被添加到JSP源組件中,Servlet容器對JSP源組件進行翻譯和編譯。JSP源組件和JSP目標組件對應同一個Servlet靜態包含的目標組件可以爲HTML文件或者JSP文件,但不允許爲Servlet

2.動態包含

//din.jsp
<html>
	<head></head>
	<body>
		din.jsp is including content.jsp.
		<% int count = 1;
			request.setAttribute("username","Tom");
		%>
		<jsp:include page="content.jsp" %>
		din.jsp is doing something else.
	</body>
</html>

運行時,提示content.jsp無法識別局部變量count

 

分析:動態包含發生在運行JSP源組件階段。對於動態包含,目標組件和源組件分別對應不同的Servlet。兩個不同的Servlet之間,無法訪問對方的服務方法中的局部變量。如果目標組件爲JSPServlet容器會在運行JSP源組件的過程中,運行於JSP目標組件對應的Servlet的服務方法。JSP目標組件生成的響應結果被包含到JSP源組件的響應結果中。動態包含的目標組件可以爲HTML文件、jsp文件或者Servlet


三、生活舉例

靜態包含:

主人請客人在家裏吃飯。想給客人做燉雞。家裏有隻雞,但是主人不會做。主人打電話到餐廳,把廚師請到家裏,做了這隻雞。

 

動態包含:

同樣上面一個例子,主人不是把廚師請到家裏,而是給餐廳下了一份訂單——燉雞。廚師不能用主人家的雞,(餐廳沒有雞)廚師只能說:“沒有雞,做不了。”

 

主人家的雞對應於源組件的變量。餐廳對應於被包含的目標組件。對於靜態包含,廚師使用的是主人家的廚房。對於動態包含,一個是主人家的廚房,一個是餐廳的廚房,餐廳的廚房裏是拿不到主人家廚房裏的東西的。所以,廚師只能說做不了。這對應於動態包含中的錯誤信息。

發佈了106 篇原創文章 · 獲贊 78 · 訪問量 29萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章