Java Web从入门到精通(第3版)
上QQ阅读APP看书,第一时间看更新

5.2 指令标识

指令标识主要用于设定整个JSP页面范围内都有效的相关信息,它是被服务器解释并执行的,不会产生任何内容输出到网页中。也就是说,指令标识对于客户端浏览器是不可见的。JSP页面的指令标识与我们的身份证类似,虽然公民身份证可以标识公民的身份,但是它并没有对所有见到过我们的人公开。

JSP指令标识的语法格式如下:

     <%@ 指令名 属性1="属性值1" 属性2="属性值2"……%>

参数说明:

指令名:用于指定指令名称,在JSP中包含page、include和taglib 3条指令。

属性:用于指定属性名称,不同的指令包含不同的属性。在一个指令中,可以设置多个属性,各属性之间用逗号或空格分隔。

属性值:用于指定属性值。

例如,在应用Eclipse创建JSP文件时,在文件的最顶端会默认添加一条指令,用于指定JSP所使用的语言、编码方式等。这条指令的具体代码如下:

     <%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%>

注意

指令标识的<%@和%>是完整的标记,不能添加空格,但是标签中定义的属性与指令名之间是有空格的。

5.2.1 page指令

page是JSP页面最常用的指令,用于定义整个JSP页面的相关属性,这些属性在JSP被服务器解析成Servlet时会转换为相应的Java程序代码。page指令的语法格式如下:

     <%@ page attr1="value1" attr2="value2" ……%>

page指令包含的属性有15个,下面对一些常用的属性进行介绍。

1.language属性

该属性用于设置JSP页面使用的语言,目前只支持Java语言,以后可能会支持其他语言,如C++、C#等。该属性的默认值为Java。

【例5.2】 设置JSP页面语言属性,代码如下:

     <%@ page language="java" %>

2.extends属性

该属性用于设置JSP页面继承的Java类,所有JSP页面在执行之前都会被服务器解析成Servlet,而Servlet是由Java类定义的,所以JSP和Servlet都可以继承指定的父类。该属性并不常用,而且有可能影响服务器的性能优化。

3.import属性

该属性用于设置JSP导入的类包。JSP页面可以嵌入Java代码片段,这些Java代码在调用API时需要导入相应的类包。

【例5.3】 在JSP页面中导入类包,代码如下:

     <%@ page import="java.util.*" %>

4.pageEccoding属性

该属性用于定义JSP页面的编码格式,也就是指定文件编码。JSP页面中的所有代码都使用该属性指定的字符集,如果该属性值设置为ISO-8859-1,那么这个JSP页面就不支持中文字符。通常设置编码格式为GBK,因为它可以显示简体中文和繁体中文,而MyEclipse默认支持最新的GB18030编码格式,并未提供GBK编码选项。

【例5.4】 设置JSP页面编码格式,代码如下:

     <%@ page pageEncoding="GB18030"%>

5.contentType属性

该属性用于设置JSP页面的MIME类型和字符编码,浏览器会据此显示网页内容。

【例5.5】 设置JSP页面的MIME类型和字符编码,代码如下:

     <%@ page contentType="text/html; charset=UTF-8"%>

注意

JSP页面的默认编码格式为ISO-8859-1,该编码格式是不支持中文的,要想让页面支持中文需要将页面的编码格式设置成UTF-8或者是GBK的形式。

6.session属性

该属性指定JSP页面是否使用HTTP的session会话对象。其属性值是boolean类型,可选值为true和false。默认值为true,表示可以使用session会话对象;如果设置为false,则当前JSP页面将无法使用session会话对象。

【例5.6】 设置JSP页面是否使用HTTP的session会话对象,代码如下:

     <%@ page session="false"%>

上述代码设置JSP页面不使用session对象,任何对session对象的引用都会发生错误。

说明

session是JSP的内置对象之一,在后面的章节中将会介绍。

7.buffer属性

该属性用于设置JSP的out输出对象使用的缓冲区大小,默认大小为8KB,且单位只能使用KB。建议程序开发人员使用8的倍数16、32、64、128等作为该属性的属性值。

【例5.7】 设置JSP的out输出对象使用的缓冲区大小,代码如下:

     <%@ page buffer="128kb"%>

说明

out对象是JSP的内置对象之一,在后面的章节中将会介绍。

8.autoFlush属性

该属性用于设置JSP页面缓存满时,是否自动刷新缓存。默认值为true;如果设置为false,则缓存被填满时将抛出异常。

【例5.8】 设置JSP页面不自动刷新缓存,代码如下:

     <%@ page autoFlush="false"%>

上述代码取消了页面缓存的自动刷新。

9.isErrorPage属性

通过该属性可以将当前JSP页面设置成错误处理页面来处理另一个JSP页面的错误,也就是异常处理。这意味着当前JSP页面业务的改变。

【例5.9】 将当前JSP页面设置成错误处理页面,代码如下:

     <%@ page isErrorPage = "true"%>

10.errorPage属性

该属性用于指定处理当前JSP页面异常错误的另一个JSP页面,指定的JSP错误处理页面必须设置isErrorPage属性为true。errorPage属性的属性值是一个url字符串。

【例5.10】 设置处理JSP页面异常错误的页面,代码如下:

     <%@ page errorPage="error/loginErrorPage.jsp"%>

注意

如果设置该属性,那么在web.xml文件中定义的任何错误页面都将被忽略,而优先使用该属性定义的错误处理页面。

5.2.2 include指令

文件包含指令include是JSP的另一条指令标识。通过该指令可以在一个JSP页面中包含另一个JSP页面。不过该指令是静态包含,也就是说被包含文件中所有内容会被原样包含到该JSP页面中,即使被包含文件中有JSP代码,在包含时也不会被编译执行。使用include指令,最终将生成一个文件,所以在被包含和包含的文件中,不能有相同名称的变量。include指令包含文件的过程如图5.3所示。

图5.3 include指令包含文件的过程

include指令的语法格式如下:

     <%@ include file="path"%>

该指令只有一个file属性,用于指定要包含文件的路径。该路径可以是相对路径,也可以是绝对路径。但是不可以是通过<%=%>表达式所代表的文件。

说明

使用include指令包含文件可以大大提高代码的重用性,而且也便于以后的维护和升级。

【例5.11】 应用include指令包含网站Banner和版权信息栏。(实例位置:资源包\TM\sl\5\2

(1)编写一个名称为top.jsp的文件,用于放置网站的Banner信息和导航条。这里将Banner信息和导航栏设计为一张图片。这样完成top.jsp文件,只需要在该页面通过<img>标记引入图片即可。top.jsp文件的代码如下:

     <%@ page pageEncoding="GB18030"%>
     <img src="images/banner.JPG">

(2)编写一个名称为copyright.jsp的文件,用于放置网站的版权信息。copyright.jsp文件的具体代码如下:

(3)创建一个名称为index.jsp的文件,在该页面中包括top.jsp和copyright.jsp文件,从而实现一个完整的页面。index.jsp文件的具体代码如下:

运行程序,将显示如图5.4所示的效果。

图5.4 包含版权信息页

技巧

在应用include指令进行文件包含时,为了使整个页面的层次结构不发生冲突,建议在被包含页面中将<html>、<body>等标记删除。因为在包含该页面的文件中已经指定这些标记。

5.2.3 taglib指令

在JSP文件中,可以通过taglib指令标识声明该页面中所使用的标签库,同时引用标签库,并指定标签的前缀。在页面中引用标签库后,就可以通过前缀来引用标签库中的标签。taglib指令的语法格式如下:

     <%@ taglib prefix="tagPrefix" uri="tagURI" %>

参数说明:

prefix:用于指定标签的前缀。该前缀不能命名为jsp、jspx、java、javax、sun、servlet和sunw。

uri:用于指定标签库文件的存放位置。

【例5.12】 在页面中引用JSTL中的核心标签库。示例代码如下:

     <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

说明

关于引用JSTL中的核心标签库,以及使用JSTL核心标签库中的标签的相关内容,请参见第12章,这里不进行详细介绍。