第4章JSP的语法和语义
本章将详细介绍J S P的语法和语义( J S P 1 . 1)。如果读者接触过A S P或P H P,将会发现J S P的
语法稍显复杂;另一方面,如果读者有J a v a语言程序设计的经验,就会觉得J S P相当简单,其实,
作为J 2 E E的成员,J S P本来就已经成为J a v a的一部分了。
在J S P中,主要包含以下内容:
指令。指令提供该页的全局信息,例如,重要的状态,错误处理,是否是s e s s i o n的一部分等。
声明。页面范围的变量和方法的声明。
脚本。嵌入页面内j a v a代码。
表达式。把表达式变成s t r i n g型以便于包含在页面的输出中。
下面将一一介绍。
4.1 通用的语法规则
J S P的页面是由许多的“元素”组成的,本节描述的语法规则对于这些“元素”都是成立的,
所以称之为“通用”的语法规则,也就是这些元素共有的特性。
4.1.1 元素的语法规则
大部分的J S P元素都基于“ X M L”的语法,这些基于“ X M L”语法的J S P元素一般来说都有
一个包含有元素名称的起始标志,可能还包含有属性设置,一些可选项,和一个结束标志。当
然,J S P页面的起始标记和结束标记一定要在同一个页面中,有的元素也仅仅有一个包含属性设
置的标志,举例如下:
<mytag attr1="attribute value" ...>
body
</mytag>
<mytab attr1="attribute value" .../>
读者会发现,前面讲述的To m c a t的配置文件s e r v e r. x m l和w e b . x m l中已经使用了这种语法形
式。
脚本元素则使用的是如A S P般的语法:
<%............%>
实际上,每一个J S P页面都应该可以转换为等价的X M L页面,在下一章中将详细介绍作为
X M L的J S P。
J S P元素的属性也和X M L中定义的属性遵从同样的原则, J S P页面的属性值一定要使用引号
括起来,双引号(”)和单引号(’)都可以使用。另外,作为替代,也可以使用& a p o s ;
和& q u t o ;来表示双引号和单引号。
4.1.2 JSP中的相对路径
在J S P中,可以使用相对路径来代替绝对路径,在J S P的语法规范中称之为“ U R I”,感兴趣
的读者可以在R F C 2 3 9 6中找到比较完整的描述,这里举几个例子来说明相对路径的概念:
"jspRelativeTest.jsp"
"/ jspRelativeTest.jsp"
"../ jspRelativeTest.jsp"
在这三行代码中,都假设是在c : \ t o m c a t \ J a k a r t a - t o m c a t \ w e b a p p s \ e x a m p l e s \ j s p \ t e s t . j s p中使用
上述相对路径。
对于第一行代码来说,显然文件j s p R e l a t i v e Te s t . j s p的位置应当为: c : \ t o m c a t \ J a k a r t a -
t o m c a t \ w e b a p p s \ e x a m p l e s \ j s p \ j s p R e l a t i v e Te s t . j s p,这是比较容易理解的。但是对于第二行代码就
要注意了,在J S P中,当相对路径以“ /”开头的时候,不是相对于网站的根目录,而是相对于包
含这个J S P文件的We b应用程序的根目录,也就应当是: c : \ t o m c a t \ J a k a r t a - t o m c a t \ w e b a p p s e x a m p l e s \ j s p R e l a t i v e Te s t . j s p。如果读者对We b应用程序的概念还不清楚,请参见前几章中的相关
章节。第三行代码对于熟悉U N I X或D O S命令行方式的读者应该不陌生,这种情况下,文件
j s p R e l a t i v e Te s t . j s p 的位置应当为: c : \ t o m c a t \ J a k a r t a - t o m c a t \ w e b a p p s \ e x a m p l e s j s p \ j s p R e l a t i v e Te s t . j s p。
4.2 注释
一般来说,可以认为在J S P页面中包含有两种不同类型的注释:一种是J S P本身的,用于描述
J S P程序代码,另一种是J S P生成的页面的,也就是H T M L(或W M L . . .)的注释,用于描述J S P页面
执行后的结果页面的功能。H T M L页面的注释这里就不说了,下面是J S P本身的注释语法的例子:
<%-- 这是一个JSP的注释--%>
实际上,由于在J S P的“脚本代码”部分中,也就是后面会提到的“ S c r i p t l e t”直接使用
“<% ...... %>”包含起来的部分中可以使用J a v a的语法,所以下面形式的注释也就理所当然的可
以使用了:
<% /*这是一个Scriptlet中的注释*/ %>
<% /**这也是一个Scriptlet中的注释,可以用javadoc从生成的Java文件中提取出注释来*/ %>
4.3 指令
前面已经讲过指令在J S P中的地位,指令一般来说有如下的形式:
<%@ directive {attr="value"} %>
指令的这种语法形式尽管简单明了,但并不是符合X M L的,第5章将讲述指令的X M L语法。
4.3.1 “p a g e”指令
p a g e指令描述了和页面相关的指示信息。在一个J S P页面中, p a g e指令可以出现多次,但是
第4章J S P的语法和语义91
每一种属性却只能出现一次,重复的属性设置将覆盖掉先前的设置。
p a g e指令的基本语法格式如下:
<%@ page page_directive_attr_list %>
page_directive_attr_list ::= {language=" scriptingLanguage"}
{ extends=" className"}
{ import=" importList"}
{ session="true|false" }
{ buffer="none| sizekb" }
{ autoFlush="true| false" }
{ isThreadSafe="true|false" }
{ info=" info_text" }
{ errorPage=" error_url" }
{ isErrorPage="true|false" }
{ contentType="ctinfo" }
下表4 - 1是对这些属性的解释:
表4 - 1
属性名和可选值说明
language = “j a v a” 说language 变量告诉s e r v e r在文件中将采用哪种语言,在J S P当前的规
范(J S P 1 . 1)中,j a v a是J S P唯一支持的语法
extends = “p a c k a g e . c l a s s” 说extends 变量定义了由J S P页面产生的s e r v l e t的父类,一般来说,这
个属性不会用到,但是当需要实现一些特殊功能时,也是比较方便的
说import 变量和任何一个j a v a程序的第一部分一样。同样,它总是被
放在J S P文件的顶部。i m p o r t变量的值是一系列用逗号分开的列表,表
明想要引入的包和类
说注意:
说java.lang.*
说j a v a x . s e r v l e t . *
说javax.servlet.jsp.* javax.servlet.http.*
说已经缺省地被J S P引擎引入了
session = “t r u e | f a l s e” 说session 变量的缺省值是t r u e,表示当前页面中将有一个缺省的名为
“s e s s i o n”的对象来表示当前会话。“s e s s i o n”对象的类型是:
说javax.servlet.http.HttpSession
b u ffer = “n o n e | 8 k b | s i z e k b” 说决定输出流( o u t对象)是否需要缓冲,缺省值是8 k b。与a u t o F l u s h
一起使用
autoFlush = “t r u e | f a l s e” 说确定是否自动刷新输出缓冲,如果设成t r u e,则当输出缓冲区满的
时候,刷新缓冲区而不是抛出一个异常
isThreadSafe = “t r u e | f a l s e” 说缺省值是t r u e,如果多个客户请求发向J S P引擎时,可以一次被处理。
J S P程序员要处理同步时共享的状态,以保证同步时确实是安全的。
说如果i s T h r e a d S a f e被设成f a l s e,则采用单线程模式控制客户端访问该
页
说这没有使你脱离异常分枝,然而,在s e r v e r可能的情况下,通过它
的判断,创建该页的多个实例运行以处理多个装入的客户请求。而且,
这无法保证同一个客户端的连续请求定位到同一个J S P页面的实例上,
在多个页面请求之间的共享资源和状态必须同步
92第一部分JSP 入门
import = “p a c k a g e . * , p a c k a g e . c l a s s”
例如:
<%@ page import=”j a v a . u t i l . *” % >
(续)
属性名和可选值说明
info = “t e x t” 说页面信息通过页面的S e r v l e t . g e t S e r v l e t I n f o ( )来获得页面可以被访问
的内容的类型
ErrorPage = “p a t h To E r r o r p a g e” 说给出一个J S P文件的相对路径,这个J S P文件用于处理没被处理的例
外。这个J S P文件要把i s E r r o r P a g e设成t r u e。
说需要注意的是: J S P是通过使用S e r v l e t R e q u e s t对象的s e t A t t r i b u t e ( )方
法将名为j a v a x . s e r v l e t . j s p . j s p E x c e p t i o n的对象存储起来实现的。
说另外,当A u t o F l u s h设为t r u e的时候,在J s p Wr i t e r中的数据刷新到
S e r v l e t R e s p o n s e中以后,任何从J S P文件到错误处理文件的未捕获异常
将无法被正常发送
isErrorPage = “t r u e | f a l s e” 说标志一个页面为错误处理页面。设置为t r u e时,在这个J S P页面中的
缺省对象e x c e p t i o n将被定义,其值将被设定为呼叫此页面的J S P页面
的错误对象。缺省为f a l s e
说设置J S P文件和最终文件的m i m e类型和字符集的类型。这一项必须
在文件的前部,任何一个其他字符在文件中出现之前。缺省为:
C o n t e n t Type = “t e x t / h t m l ;
charset = ISO - 8859 -1”
4.3.2 Include指令
i n c l u d e指令的作用是包含另一个文件,其语法相当简单:
<%@ include file="......" %>
在这个指令中应该使用前面讲述的J S P的相对路径表示法。需要说明的是, J S P还有另外一
种包含其他文件的方法:
<jsp:include page="" />
表4 - 2比较了两者的异同:
表4 - 2
语法状态对象描述
<%@ include file=”. . . . . .” % > 编译时包含静态擎J S P引擎将对所包含的文件进行
语法分析
<jsp:include page=”” / > 运行时包含静态和动态擎J S P引擎将不对所包含的文件进
行语法分析
4.3.3 taglib指令
t a g l i b指令用于指示这个J S P页面所使用的标签库,标签库的具体用法属于J S P比较高级的内
容,这里就先不讨论了,先讲述一下基础语法:
<%@ taglib uri=" tagLibraryURI" prefix=" tagPrefix" %>
表4 - 3是对各个属性的解释。
第4章J S P的语法和语义93
C o n t e n t Type = “t e x t / h t m l ;
charset = ISO - 8859 -1”
表4 - 3
属性说明
u r i 描描述这个标签库位置的U R I,可以是相对路径或绝对路径
t a g P r e f i x 描定义了一个指示使用此标签库的前缀,例如将t a g P r e f i x设为m y P r e f i x时,可以使用
下面的语句来使用此标签库中的m y Ta g标签:
< m y P r e f i x : m y Ta g >
描下面这些前缀已经保留:
描jsp:, jspx:, java:, javax:, servlet:, sun:, 和s u n w :
描目前,空的t a g P r e f i x将被忽视
4.4 内置对象
为开发的方便,J S P中内置了一些对象,不需要预先声明就可以在脚本代码和表达式中随意使
用,前面已经接触到的s e s s i o n和e x c e p t i o n就是两个内置对象,表4 - 4详细讲述J S P中的这些内置对象:
表4 - 4
对象类型描述作用域
r e q u e s t j a v a x . s e r v l e t . S e r v l e t R e q u e s t的子类作r e q u e s t(用户请
求期)
response j a v a x . s e r v l e t . S e r v l e t R e s p o n s e的子类作p a g e(页面执行
期)
p a g e C o n t e x t j a v a x . s e r v l e t . j s p . P a g e C o n t e x t 作p a g e(页面执行
期)
s e s s i o n j a v a x . s e r v l e t . h t t p . H t t p S e s s i o n 作s e s s i o n (会话
期)
a p p l i c a t i o n j a v a x . s e r v l e t . S e r v l e t C o n t e x t 作a p p l i c a t i o n(整
个We b应用程序运
行期)
out j a v a x . s e r v l e t . j s p . J s p Wr i t e r 作p a g e(页面执行
期)
c o n f i g j a v a x . s e r v l e t . S e r v l e t C o n f i g 作p a g e(页面执行
期)
p a g e j a v a . l a n g . O b j e c t 作P a g e(页面执行
期)
e x c e p t i o n j a v a . l a n g . T h r o w a b l e 作p a g e(页面执行
期)
94第一部分JSP 入门
客客户端的请求,通常是H t t p S e r v l e t -
R e q u e s t的子类,如果客户的请求中有参
数,则该对象就有一个参数列表
客JSP 页面的响应,是H t t p S e r v l e t R e s -
ponse 的子类
客页面的属性和需要通过标准A P I来访
问的相关对象(本质上是构成服务器环
境来让J S P运行的一些对象),以便J S P
引擎来编译页面。但是,不同s e r v e r对
这些属性和对象的实现方式不同
客解决方案是J S P引擎编译用factory 类返
回的服务器的PageContext 类的实现方
法。P a g e C o n t e x t类和r e q u e s t、response 对
象以及p a g e指令的一些属性( e r r o r p a g e
, s e s s i o n , b u ff e r, a u t o f l u s h)同时被初始化,
同时提供r e q u e s t请求的相关的对象
客HTTP session 是与r e q u e s t联合的对象
客s e r v l e t的环境通过调用g e t S e r v l e t C o n f i g
(). g e t C o n t e x t()方法获得
客代表输出流的对象
客页面的S e r v l e t C o n f i g对象
客指向页面自身的方式(在j a v a代码中
多以t h i s替代)
客没有被T h r o w a b l e捕获的错误。传向
了e r r o r p a g e的U R I
4.5 脚本元素
在J S P中,主要的程序部分就是脚本元素,其中包括三个部分:声明( De c l a r a t i o n)、表达式
(Ex p r e s s i o n)和代码(Sc r i p t l e t)。从功能上讲,声明用于声明一个或多个变量,表达式将是一
个完整的语言表达式,而代码部分将是一些程序片断。
三个脚本元素的基本语法都是以一个“ < %”开头,而以一个“ % >”结尾的。
声明的例子:
<%! this is a declaration %>
代码的例子:
<% this is a scriptlet %>
表达式的例子:
<%= this is an expression %>
脚本元素也具有相应的X M L兼容语法,将在第6章介绍。
4.5.1 声明
J S P中的声明用于声明一个或多个变量和方法,并不输出任何的文本到o u t输出流去。在声明
元素中声明的变量和方法将在J S P页面初始化时初始化。
语法为:
<%! declaration(s) %>
举例如下:
<%! int i = 0; %>
<%! public String f(int i) { if (i<3) return("..."); ... } %>
实际上,声明变量和方法的语句完全可以放在S c r i p t l e t中,两者有什么不一样呢?放在
< % ! . . . . . . % >中的声明语句在编译为S e r v l e t的时候将作为类的属性而存在,而放在S c r i p t l e t中的声
明将在类的方法内部被声明。
4.5.2 表达式
J S P中的表达式可以被看作一种简单的输出形式,需要注意的是,表达式一定要有一个可以
输出的值才行。
语法为:
<%= expression %>
举例如下:
<%= (new java.util.Date()).toLocaleString() %>
4.5.3 脚本代码
所谓脚本代码,就是S c r i p t l e t,也就是J S P中的代码部分,在这个部分中可以使用几乎任何
第4章J S P的语法和语义95
J a v a的语法。
语法为:
<% scriptlet %>
举例如下:
<%
if (Calendar.getInstance().get(Calendar.AM_PM) == Calendar.AM) {
%>
Good Morning
<%
} else {
%>
Good Afternoon
<%
}
%>
4.6 动作
动作可以影响输出的文本流,使用、编辑、建立对象。在J S P中,有一些基本的动作,用户
也可以添加自己的动作,这需要使用标签库的知识。J S P中的动作是完全基于X M L的,下面就来
看看J S P由哪些标准的动作以及具有哪些属性。
4.6.1 id和s c o p e属性
i d属性和s c o p e属性是每一个J S P动作都具有的属性,其中i d表示一个动作的名称,而s c o p e则
表示一个动作的作用域。
s c o p e作用域的取值如表4 - 5所示。
表4 - 5
作用域取值有效范围
p a g e 由j a v a x . s e r v l e t . j s p . P a g e C o n t e x t得到在用户请求此页面的过程中有效
r e q u e s t 由S e r v l e t R e q u e s t . g e t A t t r i b u t e ( n a m e )得到在用户的整个请求过程中有效
s e s s i o n 由H t t p S e s s i o n . g e t Value( name)得到在用户的整个会话期内有效
a p p l i c a t i o n 由ServletContext. getAttribute(name)得到在We b应用程序执行期间有效
4.6.2 标准动作
J S P规范书中规定了一些标准的动作,凡是符合J S P规范的J S P引擎都应当实现这些标准的动
作,下面将一一介绍J S P 1 . 1中规定的标准动作。
1. <jsp:useBean>
< j s p : u s e B e a n >大概是J S P中最重要的一个动作,使用这个动作, J S P可以动态使用J a v a B e a n s
组件来扩充J S P的功能,由于J a v a B e a n s在开发上及< j s p : u s e B e a n >在使用上的简单明了,使得J S P
96第一部分JSP 入门
的开发过程和以往其他动态网页开发工具有了本质上的区别。尽管A S P等动态网页技术也可以使
用组件技术,但是由于A c t i v e X控件编写上的复杂和使用上的不方便,实际的开发工作中组件技
术使用得并不多。
< j s p : u s e B e a n >的语法如下:
<jsp:useBean id=" name" scope="page|request|session|application"
typeSpec />
typeSpec ::= class=" className" |
class=" className" type=" typeName" |
type=" typeName" class=" className" |
beanName=" beanName" type=" typeName" |
type=" typeName" beanName=" beanName" |
type=" typeName"
如果在< j s p : u s e B e a n >中需要加入其他的元素,那么使用下面的语法:
<jsp:useBean id=" name" scope="page|request|session|application"
typeSpec >
body
</jsp:useBean>
这里有几个语法的例子:
<jsp:useBean id="connection" class="com.myco.myapp.Connection" />
<jsp:useBean id="connection" class="com.myco.myapp.Connection">
<jsp:setProperty name="connection" property="timeout" value="33">
/jsp:useBean>
在下面的这个例子中,这个JavaBeans对象具有会话期作用域,并且在当前会话中已经存在了。
<jsp:useBean id="wombat" type="my.WombatType" scope="session"/>
如果这个对象不存在的话,将抛出一个C l a s s C a s t E x c e p t i o n异常。
2. <jsp:setProperty>
< j s p : s e t P r o p e r t y >动作用于向一个J a v a B e a n的属性赋值,需要注意的是,在这个动作中将会
使用到的n a m e属性的值将是一个前面已经使用< j s p : u s e B e a n >动作引入的J a v a B e a n的名字。
表4 - 6说明了在使用< j s p : s e t P r o p e r t y >时的类型转换,不过在客户端请求时使用< j s p : s e t P r o p e r t y >
设定J a v a B e a n的属性可以使用任何类型,J S P文件的执行中也不会自动地进行类型转换。
表4 - 6
属性类型由S t r i n g类型转换所使用的方法
b o o l e a n j a v a . l a n g . B o o l e a n . v a l u e O f ( S t r i n g )
B o o l e a n
b y t e j a v a . l a n g . B y t e . v a l u e O f ( S t r i n g )
B y t e
i n t j a v a . l a n g . I n t e g e r. v a l u e O f ( S t r i n g )
I n t e g e r
c h a r j a v a . l a n g . C h a r a c t e r. v a l u e O f ( S t r i n g )
C h a r a c t e r
第4章J S P的语法和语义97
(续)
属性类型由S t r i n g类型转换所使用的方法
d o u b l e j a v a . l a n g . D o u b l e . v a l u e O f ( S t r i n g )
D o u b l e
f l o a t j a v a . l a n g . F l o a t . v a l u e O f ( S t r i n g )
F l o a t
l o n g j a v a . l a n g . L o n g . v a l u e O f ( S t r i n g )
L o n g
< j s p : s e t P r o p e t y >的语法如下:
<jsp:setProperty name=" beanName" prop_expr />
prop_expr ::= property="*" |
property=" propertyName"|
property=" propertyName" param=" parameterName"|
property=" propertyName" value=" propertyValue"
propertyValue ::= string
表4 - 7是属性及其解释
表4 - 7
属性名描述
p r o p e r t y 此此属性表明了需要设定值的J a v a B r e a n属性的名称。
此这里有一个很有意思的特殊的p r o p e r t y设定:当一个p r o p e r t y设定为“ *”时, J S P解释器将
把系统S e r v l e t R e q u e s t对象中的参数一个一个的列举出来,检查这个J a v a B e a n的属性是否和
S e r v k e t R e q u e s t对象中的参数有相同的名称。如果有,就自动将S e r v l e t R e q u e s t对象中参数值传
递给相应的J a v a B e a n属性
p a r a m 此这个属性表明了在由系统的R e q u e s t向J a v a B e a n传递参数时具体采用哪一个R e q u e s t。具体到
We b页面,也就是哪一个F o r m
v a l u e 此这个属性表明了需要设定给J a v a B e a n属性的值,可以是直接赋值,也可以是S e r v l e t R e q u e s t
对象的一个参数名
下面就< j s p : s e t P r o p e r t y >动作举几个例子:
将S e r v l e t R e q u e s t对象r e q u e s t中的参数全部输入到名为r e q u e s t的J a v a B e a n中:
<jsp:setProperty name="request" property="*" />
将S e r v l e t R e q u e s t对象u s e r中的参数u s e r n m e输入到名为u s e r的J a v a B e a n中:
<jsp:setProperty name="user" property="user" param="username" />
将值“i + 1”计算出来后输入到名为r e s u l t s的J a v a B e a n的属性r o w中:
<jsp:setProperty name="results" property="row" value="<%= i+1 %>" />
3. <jsp:getProperty>
< j s p : g e t P r o p e r t y >动作用于从一个J a v a B e a n中得到某个属性的值,无论原先这个属性是什么
类型的,都将被转换为一个S t r i n g类型的值。
语法如下:
<jsp:getProperty name=" name" property=" propertyName" />
98第一部分JSP 入门
例如:
<jsp:getProperty name="user" property="name" />
4. <jsp:include>
< j s p : i n c l u d e >用于引入一个静态或动态的页面到一个J S P文件中,这动作仅仅和J s p Wr i t e对象
发生关系。
< j s p : i n c l u d e >动作可以包含一个或几个< j s p : p a r a m >子动作用于向要引入的页面传递参数。
语法如下:
<jsp:include page=" urlSpec" flush="true"/>
或
<jsp:include page=" urlSpec" flush="true">
{ <jsp:param .... /> }
</jsp:include>
属性f l u s h设定是否自动刷新缓冲区,实际上,在当前的J S P版本( 1 . 1)中, f l u s h设为f a l s e
是没有任何意义的。
下面是实例:
<jsp:include page="/templates/copyright.html"/>
5. <jsp:forward>
< j s p : f o r w a r d >用于引导客户端的请求到另一个页面或者是另一个S e r v l e t去。
< j s p : f o r w a r d >动作可以包含一个或几个< j s p : p a r a m >子动作,用于向要引导进入的页面传递
参数。
需要注意,当< j s p : f o r w a r d >动作发生的时候,如果已经有文本被写入输出流而且页面没有设
置缓冲,那么将抛出一个I l l e g a l S t a t e E x c e p t i o n的异常。
下面是< j s p : f o r w a r d >的语法:
<jsp:forward page=" relativeURLspec" />
或
<jsp:forward page=" urlSpec">
{ <jsp:param .... /> }*
</jsp:forward>
举例如下:
<%
String whereTo = "/templates/"+someValue;
%>
<jsp:forward page=’<%= whereTo %>’ />
6. <jsp:param>
< j s p : p a r a m >实际上提供了名称与值的一种一一对应关系,在< j s p : i n c l u d e >、< j s p : f o r w a r d >和
< j s p : p l u g i n >中常常作为子动作使用。
语法为:
<jsp:param name=" name" value=" value" />
第4章J S P的语法和语义99
7. <jsp:plugin>
< j s p : p l u g i n >动作为We b开发人员提供了一种在J S P文件中嵌入客户端运行的J a v a程序(如:
A p p l e t、J a v a B e a n)的方法。在J S P处理这个动作的时候,将根据客户端浏览器的不同, J S P在执
行以后将分别输出为O B J E C T或E M B E D这两个不同的H T M L之素。
下面是< j s p : p l u g i n >的语法:
<jsp:plugintype="bean|applet"
code=" objectCode"
codebase=" objectCodebase"
{ align=" alignment" }
{ archive=" archiveList" }
{ height=" height" }
{ hspace=" hspace" }
{ jreversion=" jreversion" }
{ name=" componentName" }
{ vspace=" vspace" }
{ width=" width" }
{ nspluginurl=" url" }
{ iepluginurl=" url" } >
{ <jsp:params>
{ <jsp:param name=" paramName" value=" paramValue" /> }+
</jsp:params> }
{ <jsp:fallback> arbitrary_text </jsp:fallback> }
</jsp:plugin>
表4 - 8是对< j s p : p l u g i n >动作的子动作和属性的详细说明:
表4 - 8
子动作或属性说明
< j s p : p a r a m > 设定Java Applet或J a v a B e a n执行所需要的参数
< j s p : f a l l b a c k > 设定当浏览器不支持此项P l u g I n时候应当显示的内容
t y p e 指示这个对象是一个Java Applet还是一个J a v a B e a n
j r e v e r s i o n 指示这个插件对象执行所需要的J R E版本,缺省情况为“ 1 . 1"
n s p l u g i n u r l 指示对于Netscape Navigator的J R E插件的地址(U R L)
i e p l u g i n u r l 指示对于Internet Explorer的J R E插件的地址( U R L)
c o d e、c o d e b a s e、a l i g n、a r c h i v e、和H T M L中的意义一致
h e i g h t、h s p a c e、n a m e、v s p a c e、
t i t l e、w i d t h
100第一部分JSP 入门