c:import 标签详解

来源:互联网 发布:js追加div 编辑:程序博客网 时间:2024/06/06 04:30

<c:import>

 :Core(核心库) 

URI:http://java.sun.com/jsp/jstl/core 

前缀 :c 

描述 :标签允许包含另一个 JSP 页 面到本页面来。jsp有两种内置机制可以将来自不同 URL 的内容合并到一个 JSP 页面:include 伪指令 和 <jsp:include> 操作。不过,不管是哪种机制,要包含的内容都必须属于与页面本身相同的 Web 应用程序 (或 servlet 上下文)。两个标记之间的主要区别在于: include 伪指令在页面编译期间合并被包含的内容, 而 <jsp:include> 操作却在请求处理 JSP 页面时进行。 

core 库 的 <c:import>和 <jsp:include> 一样, <c:import> 也是一种请求时操作,它 的基本任务就是将其它一些 Web 资源的内容插入 JSP 页面中。 通过 url 属性指定将要导入内容的 URL,这个属性 是 <c:import> 的唯一一个必选属性。这里允许使用相对 URL,并且根据当前页面的 URL 来解析这个相对 URL。但是,如 果 url 属性的值以斜杠开始,那么它就被解释成本地 JSP 容器内的绝对 URL。如果没有为 context 属性指定值,那么就认为这样的绝 对 URL 引用当前 servlet 上下文内的资源。如果通过 context 属性显式地指定了上下文,那么就根据指定的 servlet 上下文 解析绝对(本地)URL。 但 <c:import> 操作并不仅仅限于访问本地内容。也可以将包含协议和主机名的完整 URI 指定 为 url 属性的值。实际上,协议甚至不仅局限于 HTTP。 <c:import> 的 url 属性值可以使 用 java.net.URL 类所支持的任何协议。

语法 :

语法1:资源的内容使用String对象向外暴露  

<c:import url="url" [context="context"] 

[var="varName"] [scope="{page|request|session|application}"] [charEncoding="charEncoding"]> 

内容  

</c:import> 

语法2:资源的内容使用Reader对象向外暴露。  

<c:import url="url" [context="context"] 

varReader="varReaderName" [charEncoding="charEncoding"]> 

内容  

</c:import> 

属性 :

属性名 

描述 

类型 

是否接受动态值 

是否支持 EL

是否 

必须 

默认值 

说明 

url

统一资源定位器 

String

true

Y

 

 

待导入资源的URL,可以是相对路径和绝对路径,并且可以导入其他主机资源  

context 

上下文 

String

true

Y

 

 

当使用相对路径访问外部context资源时,context指定了这个资源的名字。 

var  

变量 

String

false

N

 

 

参数的名字。 

scope 

范围 

String

false

N

 

page

var参数的作用范围。 

cahrEncoding

字符编码 

String

true

 

 

输入资源的字符编码。 

varReader

资源 阅读器 

String

false

N

 

 

 这个参数的类型是Reader,用于读取资源。 

说明  

<c:import>中必须要有 url 属性,它是用来设定被包含网页的地址。它可以为绝对地址或是相对地址.  

<c:import>也支持FTP协议,假设现在有一个 FTP站台,地址为 ftp.javaworld.com.tw,它里面有一个文件data.txt,那么可以写成如下方式将其内容显示出来:  

<c:import url="ftp://ftp.cse.yzu.edu.tw/data.txt" /> 

另外,可以在<c:import>的本体内容中使用<c:param>,它的功用主要是:可以将参数传递给被包含的文件,它有两个属性name和value.如:  

<c:import url="http://java.sun.com" > 

<c:param name="test" value="1234" /> 

</c:import> 

这样的做法等于是包含一个文件,并且所指定的网址会变成如下:  

http://java.sun.com?test=1234 

实例 :

----------------------------------------------------------------------------------------------------------------------------------------

Example1

<c:catch var="exception">

  <c:import url="ftp://ftp.example.com/package/README"/>

</c:catch>

<c:if test="${not empty exception}">

  Sorry, the remote content is not currently available.

</c:if>

<c:import> 操 作用来包含通过 FTP 协议访问的文档内容。此外,还使用了 <c:catch> 操作,以便在本地处理 FTP 文件传送期间可能发生的 任何错误。错误处理是这样实现的:使用 <c:catch> 的 var 属性为异常指定一个限定了作用域的变量,然后使 用 <c:if> 检查其值。如果产生了异常,那么就会对那个限定了作用域的变量进行赋值:如清单 18 中的 EL 表达式所显示的那样, 该变量的值将 不会为空。由于 FTP 文档的检索将会失败,因此会显示有关这种情况的错误消息。<c:import> 操作的最后两个(可 选的)属性是 var 和 scope 。 var 属性会导致从指定 URL 获取的内容(作为 String 值)被存储在一个限定了作用域的变量 中,而不是包含在当前 JSP 页面中。 scope 属性控制该变量的作用域,缺省情况下是页面作用域。如同我们在今后的文章中将要看到的那 样,JSTL xml 库中的标记利用了 <c:import> 这种能力,即将整个文档存储在一个限定了作用域的变量中。  

还要注意的是,可以使用(可选的)嵌套的 <c:param> 标记来为正在导入的 URL 指定请求参数。与在 <c:url> 中嵌套 <c:param> 标记一样,必要时也要对参数名称和参数值进行 URL 编码。 

----------------------------------------------------------------------------------------------------------------------------------------

Example2

<c:import url="/MyHtml.html" var="thisPage" /> 

<c:import url="/MyHtml.html" context=”/sample2” var="thisPage"/> 

<c:import url="www.sample.com/MyHtml.html" var="thisPage"/> 

该示例演示了三种不同的导入方法,第一种是在同一 Context 下的导入,第二种是在不同的 Context 下导入,第三种是导入任意一个 URL 。