6.3.4 include指令
include指令用于将其他文件的内容合并到当前的JSP程序中。这种合并是静态的,也就是说,将其他文件的内容合并到由当前JSP页面生成的Servlet类中。include指令的语法格式如下:
<%@ include file="relativeURL" %>
include指令只有一个file属性。这个属性的值是一个相对路径,如果以“/”开头,则相对于Web应用程序的根目录,否则,相对于当前JSP页面所在的目录。在使用include指令时应注意以下几点:
1. 被合并的文件可以是任何扩展名。但该文件的内容必须符合JSP页面的规范。因为JSP引擎会按着处理JSP页面的方式处理被引入的文件。
2. include指令是静态引入文件的,也就是说,被引入文件内容将成为由JSP所生成的Servlet类的一部分。
3. 由于JSP引擎将合并被引入的文件与当前JSP页面中的指令,因此,除了page指令的import和pageEncoding属性外,其他的属性不能在当前的JSP页面和被引入的JSP页面中有不同的值。否则JSP引擎在翻译JSP页面时会抛出JasperException异常。
4. 合并文件的过程是在JSP引擎翻译成Servlet的过程中进行的,因此,如果当前JSP页面和被引入的页面需要采用不同的字符集编码,必须在各自的页面单独设置。也就是说,当前页面设置的字符集编码并不代表被引入页面的字符集编码。
5. Tomcat会自动检测被引入页面是否被修改。如果被引入页面被修改,在访问当前页面时,JSP引擎会重新翻译当前页面。
下面的例子演示了include指令的用法。
例子 : include指令演示
1. 编写including.jsp页面
该页面引入了一个included.jsp页面。在including.jsp页面中使用了java.util.Random类,但该类并未在including.jsp中导入,而是在included.jsp页面中导入java.util包。including.jsp页面的代码如下:
<%@ page language="java" pageEncoding="UTF-8" %>
<%@include file="included.jsp" %>
小于1000的随机数:<%= new Random().nextInt(1000) %>
2. 编写included.jsp页面
<%@ page language="java" import = "java.util.*" pageEncoding="UTF-8"%>
included.jsp中的内容<br>
3. 测试引入文件的效果
在浏览器地址栏中输入如下的URL:
http://localhost:8080/demo/chapter6/including.jsp
浏览器显示的信息如图6.6所示。
图6.6 使用include指令引入文件
4. 配置JSP页面的访问路径
在这一步为including.jsp和included.jsp页面配置新的访问路径。在web.xml文件中加入如下的配置代码:
<!-- 配置including.jsp -->
<servlet>
<servlet-name>including</servlet-name>
<jsp-file>/chapter6/including.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>including</servlet-name>
<url-pattern>/xyz/including.jsp</url-pattern>
</servlet-mapping>
<!-- 配置included.jsp -->
<servlet>
<servlet-name>included</servlet-name>
<jsp-file>/chapter6/included.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>included</servlet-name>
<url-pattern>/jsp/included.jsp</url-pattern>
</servlet-mapping>
在浏览器地址栏输入如下的URL:
http://localhost:8080/demo/xyz/including.jsp
浏览器显示的信息和图6.6相似(除了随机数可能不同外,其他信息都相同)。
5. 程序总结
在including.jsp页面中使用了Random类,但该类所在的包(java.util)是在被引入的included.jsp页面中导入的,这说明JSP引擎在翻译这两个JSP页面的过程中将它们合并到了下起,读者可以查询由including.jsp页面生成的including_jsp.java文件,在该文件中仍然会使用import语句导入java.util包。
在第4步为including.jsp和included.jsp页面配置了新的访问路径,并通过新的路径访问了including.jsp页面,因此,可以断定在web.xml文件中配置的访问路径并不会对include指令有任何影响。file属性所指的路径实际上是按着本地路径来寻找相应的文件的。