• 沒有找到結果。

4-6 Action Elements

在文檔中 JSP 2.0技术手册 (頁 72-83)

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" />

在文檔中 JSP 2.0技术手册 (頁 72-83)