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所示的结果了。