9.3.12 <c:import>标签

优质
小牛编辑
124浏览
2023-12-01

<c:import>标签用于在JSP页面中导入一个由URL指定的Web资源的内容。该标签和<jsp:include>标签(详见6.5.1节的内容)的功能类似,但要比<jsp:include>标签的功能更强大。<c:import>标签有如下两种语法格式:

1 语法1:将URL指向的Web资源的内容以字符串形式输出

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

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

[charEncoding="charEncoding"]>

    0个或多个<c:param>标签

</c:import>

2 语法2:将URL指向的Web资源的内容保存在一个Reader对象中

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

[charEncoding="charEncoding"]>

    只能在标签体内使用Reader对象

</c:import>

<c:import>标签的属性说明如表9.12所示。

表9.12 <c:import>标签的属性

属性名

是否支持动态属性值

属性类型

属性描述

url

true

String

指定要导入的Web资源的URL。

context

true

String

当要导入同一服务器的其他Web应用程序中的资源的URL时,该属性指定了其他Web应用程序的名称。

var

false

String

指定要导入资源保存到Web域中的属性名称。

scope

false

String

指定要导入资源保存的Web域。

charEncoding

true

String

指定要导入资源内容转换成字符串时所使用的字符集编码。

varReader

false

String

如果将导入的资源内容保存在Web域中的java.io.Reader对象中,该属性指定保存在Web域中的java.io.Reader对象的属性名称。

在使用<c:import>标签时应注意如下几点:

1 url属性指定的要导入资源的URL可以是相对路径(如abc.jsp),也可以是绝对路径(如http://nokiaguy.blogjava.net)。当被导入的资源文件是相对路径时,相对路径的首字符可以是“/”,也可以不是“/”。如果是“/”,表示相对于当前JSP页面所在的Web应用程序的根路径;如果相对路径的首字符不是“/”,表示相对于当前JSP页面的路径。

2 在使用<c:import>标签导入Web资源时相当于在浏览器中直接访问该Web资源。也就是说,<c:import>标签导入的资源内容是Web资源在服务端执行后输出到客户端的内容。例如,如果导入的是JSP页面,导入后的结果是JSP页面输出到客户端的内容。如果要想将导入的资源按原样进行导入,需要将资源文件的扩展名修改成非服务端程序的扩展名,如.txt。

3 如果使用语法1,在未指定var属性的情况下,<c:import>标签将导入的资源内容以字符串形式直接输出;如果指定了var属性,<c:import>标签将导入的资源内容保存在scope属性指定的Web域中,var属性指定了将导入的资源内容保存在Web域中的属性名。

4 如果导入的资源中包含有非西欧字符(如GBK、UTF-8),必须使用charEncoding属性指定相应的字符集编码,否则在导入资源内容后会出现乱码。

5 如果使用语法2,<c:import>标签导入的资源内容保存在page域中的java.io.Reader对象中,varReader属性指定了该Reader对象在page域中的属性名。

6 由于在<c:import>标签结束时就会自动将java.io.Reader对象关闭,并从page域中删除。因此,在使用语法2时,必须在<c:import>的标签体内使用Reader对象。而且在<c:import>的标签体内不能有<c:param>标签,否则<c:import>标签会抛出异常。如果要给URL传参数,必须直接在url属性中设置好这些参数,这时可以使用<c:url>标签来生成带参数的URL。

7 如果url属性值是null、空串或指定的URL无效,<c:import>标签会抛出异常。

8 如果指定了charEncoding属性,但charEncoding属性值是null或空串,<c:import>标签会忽略charEncoding属性。

下面的例子演示了如何使用<c:import>标签来导入Web资源。在实现这个例子之前,先将在9.2节建立的myjstl.jsp文件复制一份,并改名为myjstl.txt。

import.jsp是一个使用<c:import>标签导入Web资源的例子,代码如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
使用语法1导入JSP页面,并直接输出导入的内容<p/>
<c:import url="myjstl.jsp" />
<hr>
使用语法1导入txt文件,并将导入的内容保存在request域中<p/>
<c:import var="myjstl" url="myjstl.txt" charEncoding="UTF-8" scope="request" />
<c:out value="${myjstl}" />
<hr>

使用语法2导入JSP页面,并将导入的内容保存在page域中<p/>
<c:url var="url" value="choose.jsp" >
    <c:param name="price" value="${param.price}"/>
</c:url>

<c:import varReader="reader" url="${url}">
    <c:out value="${reader}" />
</c:import>
<hr>

使用语法2导入txt文件,并将导入的内容保存在page域中<p />
<c:import varReader="reader" url="myjstl.txt" charEncoding="UTF-8">
    <c:out value="${reader}" />
</c:import>
<hr>

使用语法2导入跨域Web资源(使用绝对路径)<p/>
<c:import varReader="reader" url="http://www.csdn.net" charEncoding="UTF-8">
    <c:out value="${reader}" />
</c:import>

在浏览器地址栏中输入如下的URL:

http://localhost:8080/demo/chapter9/import.jsp?price=230

浏览器显示的结果如图9.19所示。

19

图9.19 使用<c:import>标签导入资源内容