《Servlet和JSP学习指南》一3.4 指令

3.4 指令

指令(Directive)是第一种JSP句法元素,其指示JSP转换器应该如何将某个JSP页面转换成Servlet的命令。JSP 2.2中定义了几个指令,但最重要的是这两个:page和include,这些在本章中都会讨论到。其他章节中还会讲到的其他指令有:taglib、tag、attribute及variable。

3.4.1 page指令

利用page指令可以就当前JSP页面的某些方面对JSP转换器提出指示。例如,可以告诉JSP转换器隐式对象out应该使用多大容量的缓存区,要使用哪种内容类型,要导入哪些Java类型等。
page指令的语法如下:

@和page之间的空格是可选的,attribute1、attribute2等都是page指令的属性。下面是page指令的属性列表:
import。指定要导入的一种或多种Java类型,供本页的Java代码所用。例如,import="java.util.List"导入List接口。利用通配符还可以导入整个包,如import= "java.util."。导入多种类型时,两种类型之间要用一个逗号隔开,如import="java.util.ArrayList,java.util.Calendar,java.io.PrintWriter"。下面这些包中的所有类型都是隐式导入的:java.lang、javax.servlet、javax.servlet.http、javax.servlet.jsp。
session。值为true时,表示这个页面参与Session管理;值为false时,表示不参与Session管理。默认值为true,意味着如果之前还没有javax.servlet.http.HttpSession实例,那么调用JSP页面将始终会创建一个。
buffer。指定隐式对象out的缓冲区大小,以千字节为单位。强制以kb作为后缀。缓冲区的默认容量大于或等于8 KB,具体取决于JSP容器。这个属性值还可以为none,表示不使用缓存,但这样会导致输出的内容直接被写入相应的PrintWriter。
autoFlush。默认值为true,表示当缓冲区满时,被缓存的输出应该自动刷新。值为false时,表示只有在调用隐式对象response的flush方法时,才进行刷新缓冲区。因此,当缓冲区溢出时会抛出一个异常。
isThreadSafe。表示页面中实现的线程安全级别。建议JSP的作者不要使用这个属性,因为它会产生一个包含不建议使用的代码的Servlet。
info。指定所生成Servlet的getServletInfo方法返回值。
errorPage。表示负责处理该页面可能出现的错误的页面。
isErrorPage。表明这个页面是否负责处理错误。
contentType。指定该页面隐式对象response的内容类型,其默认值为text/html。
pageEncoding。指定该页面的字符编码,其默认值为ISO-8859-1。
isELIgnored。表明是否忽略EL表达式。EL是Expression Language的缩写,将在第4章中讨论。
language。指定该页面使用的脚本语言,其默认值为java,这是JSP 2.2中唯一有效的值。
extends。指定这个JSP页面的实现类必须扩展的超类。该属性很少使用,使用时应该特别小心。
deferredSyntaxAllowedAsLiteral。指明是否允许用字符序列#{作为该页面和编译单元的String字面值,其默认值为false。#{很重要,因为它在Expression Language中是一个特殊的字符序列(详情查看第4章的相关内容)。
trimDirectiveWhitespaces。表明是否从输出内容中删除只包含空格的模板文本,其默认值为false,也就是说,不删除空格。
page指令可以出现在页面中的任何位置。只是当它包含contentType或者pageEncoding属性时,它就必须放在所有的模板数据之前,并且是在利用Java代码发送任何内容之前。这是因为,必须在发送任何内容之前设置内容类型和字符编码。
page指令也可以多次出现。但是,在多个page指令中多次出现的同一个属性,它的值必须一致,只有import属性例外。放在多个page指令中的import属性,其效果可以累积。例如,下面的page指令将会同时导入java.util.ArrayList和java.io.File。

其结果与下面这行代码的相同:

下面再举个例子。这个page指令将session属性值设为false,并将页面的缓冲区容量设为16 KB:

3.4.2 include指令

利用include指令可以将另一个文件的内容放到当前的JSP页面中。在一个JSP页面中可以使用多个include指令。如果某部分特殊的内容需要被其他页面所用,或者被处于不同位置的某个页面所用,那么将这部分内容做成一个include文件是很有帮助的。
include指令的语法如下:

此处@和include之间的空格是可选的,并且url是表示一个include文件的相对路径。如果url以一个正斜线(/)开头,那么其在服务器中就会被解读成是一条绝对路径。如果不是以正斜线开头,则被解读为是相对于当前JSP页面的路径。
JSP转换器转换include指令时,用include文件的内容替换指令。换句话说,如果已经写好如代码清单3-4所示copyright.jspf文件。
f

同时,又有如代码清单3-5所示的main.jsp页面。

那么,在main.jsp页面中使用include指令时,其结果与编写以下JSP页面将是一样的。

为了让上述include指令生效,copyright.jspf文件必须与所包含的页面放在同一个目录下。
按照规范,include文件的扩展名应为jspf,表示为JSP fragment。如今,JSP fragment也称作JSP segment,只是为了保持一致,仍然用jspf作为扩展名。
注意,也可以包含静态的HTML文件。
本章稍后将讲到的include action,与include指令类似。这两者之间的细微差别将在3.6节中解释,要理解这两者之间的差别,这一点很重要。

时间: 2024-08-23 16:18:33

《Servlet和JSP学习指南》一3.4 指令的相关文章

《Servlet和JSP学习指南》一导读

前 言 欢迎你阅读本书,其内容涵盖了Servlet 3.0和JSP 2.2方面的技术. Java Servlet技术,或简称Servlet,是Java中用于开发Web应用程序的基本技术.Sun公司于1996年发布了Java Servlet技术,与CGI(Common Gateway Interface,公共网关接口)形成竞争.之后,它成为在Web中生成动态内容的标准.CGI的主要问题在于,它为每一个HTTP请求都创建一个新的进程.因为创建进程需要花费大量的CPU周期,这使得编写可扩展的CGI程序

《Servlet和JSP学习指南》一3.6 动作

3.6 动作 第三种句法元素是动作(Action),它们被编译成执行某个操作的Java代码,例如访问某个Java对象,或者调用某个方法.本节讨论必须能被所有JSP容器支持的标准动作.除标准动作之外,还可以创建定制的标签,用来执行某些操作.定制标签将在第6章中讨论. 下面列举部分标准动作.doBody和invoke这两个标准动作将在第7章中讨论. 3.6.1 useBean 这个动作将创建一个与某个Java对象相关的脚本变量.它是将表现逻辑与业务逻辑分隔开来的最容易的方法之一.但是有了像定制标签和

《Servlet和JSP学习指南》一第3章 JSP 3.0

第3章 JSP 在第1章中我们已经知道,Servlet有两个缺陷无法克服.第一,在Servlet中编写的所有HTML标签都必须包在Java字符串中,这使得发送HTTP响应变成一项十分烦琐的工作.第二,所有文本和HTML标签都必须进行硬编码:因此,即使只对表示层做极其微小的修改,例如,修改背景颜色,也需要重新编译.JavaServer Pages(JSP)解决了Servlet中的这两个问题.但是,JSP并没有取代Servlet,而是对它进行了补充.现代的Java Web应用程序都使用Servlet

《Servlet和JSP学习指南》一1.3 编写基础的Servlet应用程序

1.3 编写基础的Servlet应用程序 Servlet应用程序编写起来非常简单,只需要创建一个目录结构,并将Servlet类放在某一个目录下即可.在本节中,将学习如何编写一个简单的Servlet应用程序,将它命名为app01a.最初它只包含一个Servlet:MyServlet,其会给用户发送一条问候信息. 需要用一个Servlet容器来运行Servlet.Tomcat是一个开源的Servlet容器,可以免费获得,它也可以在能够使用Java的任何操作系统平台上运行.如果你还没有安装Tomcat

《Servlet和JSP学习指南》一1.9 HTTP Servlet

1.9 HTTP Servlet 我们所编写的Servlet应用程序,尽管不能说全部,但其中大多数要用到HTTP.这意味着,可以利用HTTP提供的特性.javax.servlet.http包是Servlet API中的第二个包,其包含了编写Servlet应用程序的类和接口.javax.servlet.http中的许多类型覆盖了javax.servlet中的类型. 图1-5展示了javax.servlet.http中的主要类型. 1.9.1 HttpServlet HttpServlet类覆盖ja

《Servlet和JSP学习指南》一3.1 JSP概述

3.1 JSP概述 JSP页面其实是一个Servlet.但是,使用JSP页面则比Servlet要容易得多,这有两个原因:第一,不需要编译JSP页面:第二,JSP页面一般是扩展名为jsp的文本文件,可以利用任何文本编辑器来编写. JSP页面是在JSP容器中运行的.Servlet容器一般也是JSP容器.例如,Tomcat就是一个Servlet/JSP容器. 第一次请求一个JSP页面时,Servlet/JSP容器要做两件事情: 1. 将JSP页面转换成一个JSP页面实现类,这是一个实现javax.se

《Servlet和JSP学习指南》一3.5 脚本元素

3.5 脚本元素 第二种JSP句法元素是脚本元素,它将Java代码合并成一个JSP页面.脚本元素有3种类型:Scriptlet.声明及表达式,这些都将在接下来的小节中讨论. 3.5.1 Scriptlet Scriptlet是一个Java代码块,它以<%开头,以%>结束.例如,代码清单3-6中的scriptletTest.jsp页面就是使用了Scriptlet. 上述JSP页面中有两个Scriptlet.注意,在一个Scriptlet中定义的变量,对于它后面的其他Scriptlet是可见的.

《Servlet和JSP学习指南》一3.3 隐式对象

3.3 隐式对象 Servlet容器将几个对象传给它所运行的Servlet.例如,在Servlet的service方法中获得HttpServletRequest和HttpServletResponse,并在init方法中获得ServletConfig.此外,还可以通过在HttpServletRequest对象中调用getSession获得一个HttpSession. 在JSP中,可以通过使用隐式对象来获取那些对象.表3-1列出了隐式对象. 例如,隐式对象request表示由Servlet/JSP

《Servlet和JSP学习指南》一2.4 HttpSession对象

2.4 HttpSession对象 在所有的Session追踪技术中,HttpSession对象是最强大的,也是功能最多的.用户可以没有或者有一个HttpSession,并且只能访问他/她自己的HttpSession. HttpSession是当一个用户第一次访问某个网站时自动创建的.通过在HttpServlet-Request中调用getSession方法,可以获取用户的HttpSession.getSession有两个重载方法: 无参的getSession方法返回当前的HttpSession