3.2 JSP指令

JSP指令是从JSP页面发送到容器上的一种信息,它用于指导容器的执行动作,设置其全局变量、声明类、要实现的方法等。它的主要作用就是用来控制JSP页面的相关属性,并不直接产生任何可见的输出信息,而只是告知引擎如何处理其余JSP页面。定义JSP指令的语法格式如下。

<%@ 指令名  属性=”属性值”%>

从上述的语法格式中可以看出,JSP指令的定义是从“<%@”开始,以“%>”结束的,中间还包含指令名及若干个属性值。常用的JSP指令有三种,它们分别是:page指令、include指令和taglib指令。

3.2.1 page指令

学习过Java语言的读者都知道,在Java文件中,我们可以通过使用关键字“import”或使用完全限定的类名引入其他包中的类。而在JSP文件中,同样可以使用像Java语言中的关键字“import”引入Java类文件,即使用page指令。page指令是用来描述JSP文件的全局属性的,通过设置内部的多个属性来定义整个页面的属性。定义page指令的语法格式如下。

<%@ page 属性1="属性值" 属性2="属性值1,属性值2"… 属性n="属性值n"%>

如果为一个属性指定几个值,这些值之间要用逗号分隔,如page指令可以给import属性指定几个值,而给其他属性只能指定一个值。表3.1给出了page指令相应的属性及其说明。

表3.1 page指令的属性及其说明

理论上,<%@ page %> 指令可以插入JSP文件的任何地方,但是为了增强JSP程序的可读性以及养成良好的编程习惯,最好把page指令放在JSP文件的顶部。对上述描述的属性,可以写在一个page指令当中,也可以写在多个page指令当中,而属性的书写格式须遵守page指令的语法格式。下面通过一个具体的实例来说明如何在JSP页面中使用page指令及page指令的作用(请查看源码目录/Page项目)。

●首先,打开MyEclispe,新建一个Web项目,项目名为:Page(如何新建项目,请查看第1章1.6.2常用操作小节中的相关知识)。

●然后,单击文件,在index.jsp文件中写入如下代码,其index.jsp文件的完整代码如下。

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page session="false" buffer="20kb" autoFlush="true" %>
<%@ page isThreadSafe="false"
isErrorPage="false"
%>
<%@ page info="page指令示例" %>
<html>
 <head>
  <title>page指令</title>
 </head>
 <body>
<%
    String str = getServletInfo();
    out.println(str);  //输出java语句
%>
 <br>
 </body>
</html>

●最后,把Page项目进行部署发布(如何部署发布请查看第1章的相关内容),其显示效果如图3.3所示。

在这段代码中,我们使用了page指令的多个属性去定义JSP页面的全局属性,其中定义了使用的脚本语言为Java语言、导入了java.util.*包、设置JSP的编码方式为“UTF-8”等信息。

图3.3 page指令示例显示效果

3.2.2 include指令

include指令用于在当前JSP页面中包含另外一个静态文件的内容,被称为文件加载指令。该指令在JSP页面被编译成Java程序之前被挂靠,可以将其他静态文件的内容在编译之前插入到当前的JSP页面中,被插入的文件可以是JSP文件、HTML文件、Java程序或其他静态文本文件,但是必须要保证插入后形成的新文件符合JSP的语法规则。include指令的语法格式如下。

<%@ include file="filename"%>

其中,filename为包含文件的相对路径。由于这种插入操作是在编译前进行的,所以filename的值不能使用表达式或在相对路径之后添加参数。通过使用include指令,可以把一个复杂的JSP页面分成若干个简单的部分,这为我们简化JSP页面设计提供了一种良好的机制,增强了JSP页面的管理性。下面通过一个具体的实例来说明如何在JSP页面中使用include指令及include指令的作用(请查看源码目录/Include项目)。

●首先,打开MyEclispe,新建一个Web项目,项目名为:Include(如何新建项目,请查看第1章1.6.2常用操作小节中的相关知识)。

●然后,单击文件,在index.jsp文件中的“<body>”和“</body>”之间写入如下代码。

<center>
    现在的日期和时间是:<hr>
  <%@ include file="currentTime.html" %>
    </center>

●在项目的WebRoot目录下新建一个currentTime.html文件并写入如下代码。

<%= (new java.util.Date()).toLocaleString() %>

●最后,把Include项目进行部署发布(如何部署发布请查看第1章的相关内容),其显示效果如图3.4所示。

图3.4 include指令示例显示效果

在这段代码中,我们使用的include指令包含了currentTime.html页面,在index.jsp页面进行编译前,把currentTime.html页面插入到index.jsp页面中,产生一个新的JSP页面,然后再将新的JSP页面编译成Java程序来执行,就看到如图3.4所示的结果了。

3.2.3 taglib指令

有时为了某种特定的目的或用途,我们会为项目创建一些非常特定化的自定义标记库存,要使用自定义的标记库存,就可以通过taglib指令声明此JSP文件中使用了自定义的标记,同时引入该标记库及其自定义的标记前缀。Taglib指令在JSP中的语法格式如下。

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

其中,uri是指标记库存的路径,此路径必须是独一无二的,用来告诉JSP容器怎么找到标记描述文件和标记库;prefix是标签的前缀,用于区别于其他的标签库。下面通过一个具体的实例来说明如何在JSP页面中使用taglib指令及taglib指令的作用(请查看源码目录/Taglib项目)。

●首先,打开MyEclispe,新建一个Web项目,项目名为:Taglib(如何新建项目,请查看第1章1.6.2常用操作小节中的相关知识)。

●然后,单击文件,在index.jsp文件中写入如下代码。

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%--声明页面中将要引用的标签库--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
 <head>
  <title>taglib指令示例</title>
 </head>
 <body>
<%--使用JSTL标签输出字符串--%>
<c:out value="taglib指令示例!" />
 </body>
</html>

●最后,把Taglib项目进行部署发布(如何部署发布请查看第1章的相关内容),其显示效果如图3.5所示。

图3.5 taglib指令示例显示效果

在这段代码中,我们使用了Sun公司的JSTL标记库,通过使用c:out输出字符串,就可以看到如图3.5所示的结果了。