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


三、生活举例

静态包含:

主人请客人在家里吃饭。想给客人做炖鸡。家里有只鸡,但是主人不会做。主人打电话到餐厅,把厨师请到家里,做了这只鸡。

 

动态包含:

同样上面一个例子,主人不是把厨师请到家里,而是给餐厅下了一份订单——炖鸡。厨师不能用主人家的鸡,(餐厅没有鸡)厨师只能说:“没有鸡,做不了。”

 

主人家的鸡对应于源组件的变量。餐厅对应于被包含的目标组件。对于静态包含,厨师使用的是主人家的厨房。对于动态包含,一个是主人家的厨房,一个是餐厅的厨房,餐厅的厨房里是拿不到主人家厨房里的东西的。所以,厨师只能说做不了。这对应于动态包含中的错误信息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 16
    评论
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值