JSP 2.0 规范中定义一些标准 action 的类型,JSP Container 在实现时,也完全遵照这个规范 而 制 定 。 Action 元 素 的 语 法 以 XML 为 基 础 , 所 以 , 在 使 用 时 大 小 写 是 有 差 别 的 , 例 如 :
<jsp:getproperty>和<jsp:getProperty>是有所差别的,因此在撰写程序时,必须要特别注意。
目前 JSP 2.0 规范中,主要有 20 项 Action 元素:
<jsp:useBean>
<jsp:setProperty>
<jsp:getProperty>
<jsp:include>
<jsp:forward>
<jsp:param>
<jsp:plugin>
<jsp:params>
<jsp:fallback>
<jsp:root>
<jsp:declaration>
<jsp:scriptlet>
<jsp:expression>
<jsp:text>
<jsp:output>
<jsp:attribute>
<jsp:body>
<jsp:element>
<jsp:invoke>
<jsp:doBody>
笔者将这 20 个 action 元素分为五类:
第一类有 3 个 action 元素,它们都用来存取 JavaBean,因此这部分将在“第八章:JSP 与 JavaBean”
详细地介绍。
第二类有 6 个 action 元素,这部分是 JSP 1.2 原有的 action 元素,接下来将会介绍它们。
第三类有 6 个 action 元素,它们主要用在 JSP Document 之中。其中<jsp:output>是 JSP 2.0 新增的元素。
第四类有 3 个 action 元素,它们主要用来动态产生 XML 元素标签的值,这 3 个都是在 JSP 2.0 中加入进来的元素。
第五类有 2 个 action 元素,它们主要用在 Tag File 中,这部分将在“第十六章:Simple Tag 与 Tag File”再来介绍。
补充
JSP Document:使用 XML 语法所写成的 JSP 网页。例如:
<jsp:scriptlet>
String name="Mike";
</jsp:scriptlet>
Hi !<jsp:expression>name</jsp:expression>
4-6-1 <jsp:include>
<jsp:include>元素允许你包含动态和静态文件,这两种产生的结果是不尽相同的。如果包含进
么这个被包含的文件也会被 JSP Container 编译执行。
一般而言,你不能直接从文件名称上来判断一个文件是动态的还是静态的,例如:Hello.jsp 就 有可能只是单纯包含一些信息而已,而不须要执行。但是<jsp:include>能够自行判断此文件是动态 的还是静态的,于是能同时处理这两种文件。
<jsp:include>的语法:
<jsp:include page="{urlSpec | <%= expression %>}" flush="true | false " />
或
<jsp:include page="{urlSpec | <%= expression %>}" flush="true | false" >
<jsp:param name="PN" value="{PV | <%= expression %>}" /> *
</jsp:include>
说明:
<jsp:include>有两个属性:page 和 flush。
page:可以代表一个相对路径,即你所要包含进来的文件位置或是经过表达式所运算出的相对路径。
flush:接受的值为 boolean,假若为 true,缓冲区满时,将会被清空。flush 的默认值为 false。
在此需要补充一点:在 JSP 1.2 之前,flush 必须设为 true。
你还可以用<jsp:param>传递一个或多个参数给 JSP 网页。
范例:
<jsp:include page="scripts/Hello.jsp" />
<jsp:include page="Hello.html" />
<jsp:include page="scripts/login.jsp">
<jsp:param name="username" value="browser" />
<jsp:param name="password" value="1234" />
</jsp:include>
4-6-2 <jsp:forward>
<jsp:forward>这个标签的定义:将客户端所发出来的请求,从一个 JSP 网页转交给另一个 JSP 网页。不过有一点要特别注意,<jsp:forward>标签之后的程序将不能执行。笔者用例子来说明:
<%
out.println("会被执行 !!! ");
%>
<jsp:forward page="Quoting2.jsp">
<jsp:param name="username" value="Mike" />
</jsp:forward>
<%
out.println("不会执行 !!!");
%>
上面这个范例在执行时,会打印出“会被执行 !!!”,不过随后马上会转入到 SayHello.jsp 的 网页中,至于 out.println("不会执行 !!! ") 将不会被执行。
<jsp:forward>的语法:
<jsp:forward page={"relativeURL" | "<%= expression %>"} />
或
<jsp:forward page={"relativeURL" | "<%= expression %>"} >
<jsp:param name="PN" value="{PV | <%= expression %>}" /> *
</jsp:forward>
说明:
如果你加上<jsp:param>标签,你就能够向目标文件传送参数和值,不过这些目标文件必须也是 一个能够取得这些请求参数的动态文件,例如:.cgi、.php、.asp 等等。
<jsp:forward>只有一个属性 page。page 的值,可以是一个相对路径,即你所要重新导向的网页 位置,亦可以是经过表达式运算出的相对路径。
范例:
<jsp:forward page="/SayHello.jsp" />
或者
<jsp:forward page="/SayHello.jsp">
<jsp:param name="username" value="Mike" />
</jsp:forward>
4-6-3 <jsp:param>
<jsp:param> 用 来 提 供 key/value 的 信 息 , 它 也可 以 与 <jsp:include> 、 <jsp:forward> 和
<jsp:plugin> 一起搭配使用。
当在用<jsp:include>或者<jsp:forward>时,被包含的网页或转向后的网页会先看看 request 对象里除了原本的参数值之外,有没有再增加新的参数值,如果有增加新的参数值时,则新的参数 值在执行时,有较高的优先权。例如:
一个 request 对象有一个参数 A = foo;另一个参数 A = bar 是在转向时所传递的参数,则网 页中的 request 应该会为 A = bar,foo。注意:新的参数值有较高的优先权。
<jsp:param>的语法:
<jsp:param name="ParameterName" value="ParameterValue" />
<jsp:param>有两个属性:name 和 value。name 的值就是 parameter 的名称;而 value 的值就 是 parameter 的值。
范例:
<jsp:param name="username" value="Mike" />
<jsp:param name="password" value="Mike007" />
4-6-4 <jsp:plugin>、<jsp:params>和<jsp:fallback>
<jsp:plugin>用于在浏览器中播放或显示一个对象(通常为 Applet 或 Bean)。
当 JSP 网页被编译后送往浏览器执行时,<jsp:plugin>将会根据浏览器的版本替换成<object>
标签或者<embed>标签。一般来说,<jsp:plugin>会指定对象 Applet 或 Bean,同样也会指定类的名 字和位置,另外还会指定将从哪里下载这个 Java 组件。
注意
<object>用于 HTML 4.0,<embed>用于 HTML 3.2。
<jsp:plugin>的语法:
<jsp:plugin type="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="PN" value="{PV | <%= expression %>}" /> ] +
</jsp:params> ]
[ <jsp:fallback> text message for user </jsp:fallback> ]
</jsp:plugin>
说明:
● type="bean | applet":
对将被执行的对象类型,你必须指定是 Bean 还是 Applet,因为这个属性没有默认值。
● code="objectCode":
将被 Java Plugin 执行的 Java 类名称,必须以.class 结尾,并且 .class 类文件必须存在于 codebase 属性所指定的目录中。
● codebase="objectCodebase":
如果你没有设定将被执行的 Java 类的目录(或者是路径)的属性,默认值为使用<jsp:plugin>
的 JSP 网页所在目录。
● align="alignment" :
图形、对象、Applet 的位置。align 的值可以为:
bottom、top、middle、left、right
● archive=" archiveList":
一些由逗号分开的路径名用于预先加载一些将要使用的类,此做法可以提高 Applet 的性能。
● name=" ComponentName":
表示这个 Bean 或 Applet 的名字。
● height="height" width="width":
显示 Applet 或 Bean 的长、宽的值,单位为像素 ( pixel )。
● hspace="hspace" vspace="vspace":
表示 Applet 或 Bean 显示时在屏幕左右、上下所需留下的空间,单位为像素 ( pixel )。
● jreversion="jreversion":
表示 Applet 或 Bean 执行时所需的 Java Runtime Environment (JRE)版本,默认值是 1.1。
● nspluginurl="URL":
表示 Netscape Navigator 用户能够使用的 JRE 的下载地址,此值为一个标准的 URL。
● iepluginurl="URL":
表示 IE 用户能够使用的 JRE 的下载地址,此值为一个标准的 URL。
● <jsp:params>
[ <jsp:param name="PN" value="{PV | <%= expression %>}" /> ] +
</jsp:params>
你可以传送参数给 Applet 或 Bean。
● <jsp:fallback> unable to start plugin </jsp:fallback>
一段文字用于:当不能启动 Applet 或 Bean 时,那么浏览器会有一段错误信息。
范例:
<jsp:plugin type="applet" code="Molecule.class" codebase="/html">
<jsp:params>
<jsp:param name="molecule" value="molecules/benzene.mol" />
</jsp:params>
<jsp:fallback>
<p>Unable to start plugin</p>
</jsp:fallback>
</jsp:plugin>
4-6-5 <jsp:element>、<jsp:attribute>和<jsp:body>
<jsp:element>元素用来动态定义 XML 元素标签的值。
<jsp:element name="name">
本体内容
</jsp:element>
或
<jsp:element name="name">
<jsp:attribute>
…
</jsp:attribute>
…
<jsp:body>
…
</jsp:body>
</jsp:element>
<jsp:element>只有一个属性 name。name 的值就是 XML 元素标签的名称。
范例 1:
<jsp:element name="firstname"></jsp:element>
执行的结果如下:
<firstname></firstname>
范例 2:
<jsp:element name="firstname">
<jsp:attribute name="name">Mike</jsp:attribute>
<jsp:body>Hello</jsp:body>
</jsp:element>
执行的结果如下:
<firstname name="Mike">Hello</firstname>
4-6-6 <jsp:attribute>
<jsp:attribute>元素主要有两个用途:
(1) 当使用在<jsp:element>之中时,它可以定义 XML 元素的属性,如上述的范例 2。
(2) 它可以用来设定标准或自定义标签的属性值。如下范例 1:
<jsp:attribute>的语法:
<jsp:attribute name="name" trim="true | false">
本体内容
</jsp:attribute >
<jsp:attribute>有两个属性:name 和 trim。其中 name 的值就是标签的属性名称。trim 可为 true 或 false。假若为 true 时,<jsp:attribute>本体内容的前后空白,将被忽略;反之,若为 false,
前后空白将不被忽略。trim 的默认值为 true。
范例:
<jsp:useBean id="foo" class="jsp2.examples.FooBean">
Bean created! Setting foo.bar...<br>
<jsp:setProperty name="foo" property="bar">
<jsp:attribute name="value">
Hello World </jsp:attribute>
</jsp:setProperty>
</jsp:useBean>
<br>
Result: <jsp:getProperty name="foo" property="bar">
执行的结果如下:
Bean created! Setting foo.bar...
Result: Hello World
其实上述的范例和下面的例子一样:
<jsp:useBean id="foo" class="jsp2.examples.FooBean">
Bean created! Setting foo.bar...<br>
<jsp:setProperty name="foo" property="bar" value="Hello World" >
</jsp:setProperty>
</jsp:useBean>
<br>
Result: <jsp:getProperty name="foo" property="bar">
有关<jsp:useBean>、<jsp:setProperty>和<jsp:getProperty>在“第八章:JSP 与 JavaBean”
会有更详细的说明。
4-6-7 <jsp:body>
<jsp:body>用来定义 XML 元素标签的本体内容。
<jsp:body >的语法:
<jsp:body>
本体内容
</jsp:body>
<jsp:body>没有任何的属性。
范例 1:
<jsp:element name="firstname">
<jsp:attribute name="name">Mike</jsp:attribute>
<jsp:body>Hello</jsp:body>
</jsp:element>
执行的结果如下:
<firstname name="Mike">Hello</firstname>
范例 2:
<jsp:element name="firstname">
<jsp:attribute name="name">Mike</jsp:attribute>
</jsp:element>
执行的结果如下:
<firstname name="Mike" />