JSP - 操作
JSP 操作使用 XML 语法结构来控制 servlet 引擎的行为。你可以动态地插入一个文件,重组 JavaBean 组件,将用户转换到另一个页面,或为 Java 插件生成 HTML。
操作元素只有一个语法,因为它符合 XML 标准:
<jsp:action_name attribute="value" />
动作元素基本上是预定义的函数,有以下 JSP 操作:
语法 | 目的 |
---|---|
jsp:include | 当请求页面时,包含一个文件 |
jsp:useBean | 发现或实例化一个 JavaBean |
jsp:setProperty | JavaBean 的属性集 |
jsp:getProperty | 将 JavaBean 的属性嵌入到输出中 |
jsp:forward | 将请求转发给一个新页面 |
jsp:plugin | 生成浏览器-特定代码,为 Java 插件创建 OBJECT 或 EMBED 标签 |
jsp:element | 动态的定义 XML 元素 |
jsp:attribute | 定义了动态定义的 XML 元素的属性 |
jsp:body | 定义了动态定义 XML 元素的 body |
jsp:text | 用于在 JSP 页面和文档中编写模板 |
共同的属性
对于所有的操作元素来说,有两个属性是共同的:id 属性和 scope 属性。
-
Id 属性: Id 属性惟一地标识操作元素,并允许在 JSP 页面内引用操作。如果操作创建了一个对象的一个实例,那么 id 值可以通过隐式对象 PageContext 来引用该操作
- Scope属性: 这个属性标识了操作元素的生命周期。id 属性和 scope 属性是直接相关的,因为 scope 属性决定了 id 属性相关的对象的生命周期。scope 属性有四个可能值:(a)页面,(b)请求,(c)会话和(d)应用程序。
<jsp:include>
操作
此操作允许你将文件插入到将要生成的页面中。语法如下:
<jsp:include page="relative URL" flush="true" />
该操作与包含指令不同,包含指令在 JSP 页面转换成 servlet 时插入文件,该操作在请求页面时插入文件。
下面是与包含操作相关的属性列表:
属性 | 描述 |
---|---|
page | 要被包含的页面的相对 URL。 |
flush | 布尔属性决定了包含的资源在被包含之前其缓冲区是否刷新。 |
例子
让我们定义以下两个文件(a)date.jsp 和(b)main.jsp,如下:
以下是 date.jsp 文件的内容:
<p> Today's date: <%= (new java.util.Date()).toLocaleString()%> </p>
以下是 main.jsp 文件的内容:
<html> <head> <title>The include Action Example</title> </head> <body> <center> <h2>The include action Example</h2> <jsp:include page="date.jsp" flush="true" /> </center> </body> </html>
现在让我们把所有这些文件保存在在根目录中,并试图访问 main.jsp。这将显示如下所示结果:
The include action Example
Today's date: 12-Sep-2010 14:54:22
<jsp:useBean>
操作
useBean 操作具有多种用途。它首先利用 id 和 scope 变量搜索现有对象。如果没有找到一个对象,那么它会试图创建指定的对象。
加载 bean 的最简单的方式如下:
<jsp:useBean id="name" class="package.class" />
加载 bean 类完成后,你可以使用 jsp:setProperty 和 jsp:getProperty 操作来修改和检索 bean 属性。
下面是与 useBean 操作关联的属性列表:
属性 | 描述 |
---|---|
class | 指定 bean 的全部包名。 |
type | 指定将在对象中引用的变量的类型。 |
beanName | 通过 java.beans.Beans 类中的 instantiate()方法给定 bean 名称。 |
在给出与这些操作有关的有效的例子之前,让我们先讨论一下 jsp:setProperty 和 jsp:getProperty 操作。
<jsp:setProperty>
操作
setProperty 操作设置了 Bean 的属性。在定义该操作之前, Bean 一定已经预定义了。有两种使用 setProperty 操作的基本的方式:
你可以使用 jsp:setProperty 之后,但是在该操作外面,使用一个 jsp:useBean 元素,如下所示:
<jsp:useBean id="myName" ... />
...
<jsp:setProperty name="myName" property="someProperty" .../>
在这种情况下,无论新的 bean 是否实例化或现有的 bean 是否被发现,jsp:setProperty 都会被执行。
jsp:setProperty 可以出现的第二个背景是在 jsp:useBean 元素内部,如下所示:
<jsp:useBean id="myName" ... >
...
<jsp:setProperty name="myName" property="someProperty" .../>
</jsp:useBean>
这里,当且仅当实例化一个新对象时,jsp:setProperty 才会被执行,如果一个现有的对象被发现时,它不会被执行。
下面是与 setProperty 操作相关的属性列表:
属性 | 描述 |
---|---|
name | 指定了将被设置属性的 bean。该 Bean 一定是之前定义的。 |
property | 表明了你想设置的属性。值为“*”意味着所有请求的名字与 bean 属性名字匹配的参数将被传递给适当的 setter 方法。 |
value | 值分配给给定属性的值。参数的值为 null 或参数不存在时,setProperty 操作将被忽略。 |
param | param 属性是请求参数的名称,该属性会接收该请求参数的值。你不能同时使用值和参数,但是使用其中的一个是允许的。 |
<jsp:getProperty>
操作
getProperty 操作用于检索给定属性的值并将它转换成一个字符串,并最终将它插入到输出中。
getProperty 操作只有两个属性,两者都是必需的,其简单的语法如下所示:
<jsp:useBean id="myName" ... />
...
<jsp:getProperty name="myName" property="someProperty" .../>
以下是与 setProperty 操作相关的属性属性列表:
属性 | 描述 |
---|---|
name | 有检索属性的 Bean 的名称。Bean 一定是之前定义的。 |
property | property 属性是要被检索的 Bean 属性的名称。 |
例子
让我们定义一个测试的 bean,在例子中使用如下所示:
/* File: TestBean.java */
package action;
public class TestBean {
private String message = "No message specified";
public String getMessage() {
return(message);
}
public void setMessage(String message) {
this.message = message;
}
}
编译以上代码生成 TestBean.class 文件并确保将 TestBean.class 复制在 C:\ apache-tomcat-7.0.2 \ webapps \ web - inf \ classes \action 文件夹中,且类路径变量也应设置为该文件夹:
现在在 main.jsp 文件中使用以下代码,该文件加载 bean 并 set/get 了一个简单的字符串参数:
<html> <head> <title>Using JavaBeans in JSP</title> </head> <body> <center> <h2>Using JavaBeans in JSP</h2> <jsp:useBean id="test" class="action.TestBean" /> <jsp:setProperty name="test" property="message" value="Hello JSP..." /> <p>Got message....</p> <jsp:getProperty name="test" property="message" /> </center> </body> </html>
现在试着访问 main.jsp,将会出现如下所示的结果:
Using JavaBeans in JSP
Got message....
Hello JSP...
<jsp:forward>
操作
forward 操作终止当前页面的操作并将请求转发给另一个资源,如一个静态页面,另一个 JSP 页面,或 Java Servlet。
该操作的简单的语法如下所示:
<jsp:forward page="Relative URL" />
以下是与 forward 操作相关的属性列表:
属性 | 描述 |
---|---|
page | 应该包括另一个资源的相对 URL,比如静态页面,另一个 JSP 页面,或 Java Servlet。 |
例子
让我们重用以下两个文件(a)date.jsp (b)main.jsp,如下所示:
以下是 date.jsp 文件的内容:
<p> Today's date: <%= (new java.util.Date()).toLocaleString()%> </p>
以下是 main.jsp 文件的内容:
<html> <head> <title>The include Action Example</title> </head> <body> <center> <h2>The include action Example</h2> <jsp:forward page="date.jsp" /> </center> </body> </html>
现在让我们把所有这些文件保存在在根目录中并试图访问 main.jsp。这将显示类似如下所示的结果。这里丢弃主页的内容,只显示来自转发页面的内容。
Today's date: 12-Sep-2010 14:54:22
<jsp:plugin>
操作
插件用于将 Java 组件插入到 JSP 页面中。它决定了浏览器的类型以及需要插入的 < object > 或 < embed > 标签的类型。
如果所需的插件不存在,它将下载插件,然后执行 Java 组件。Java 组件可以是一个 Applet 或一个 JavaBean。
插件操作有几个属性,对应常用的生成 Java 组件的 HTML 标签。< param >元素也可以用来给 Applet 或 Bean 发送参数。
下面是使用插件操作的典型的语法:
<jsp:plugin type="applet" codebase="dirname" code="MyApplet.class"
width="60" height="80">
<jsp:param name="fontcolor" value="red" />
<jsp:param name="background" value="black" />
<jsp:fallback>
Unable to initialize Java Plugin
</jsp:fallback>
</jsp:plugin>
如果你感兴趣的话,你可以使用applet尝试该操作。一个新元素,< fallback >元素,当组件失败时,可以用来指定一个错误字符串发送给用户。
<jsp:element>
操作
<jsp:attribute>
操作
<jsp:body>
操作
,和操作是用于动态的定义 XML 元素的。动态这个词是很重要的,因为这意味着 XML 元素可以在请求时生成,而不是在编译时静态生成。 下面是一个简单的例子来动态定义 XML 元素: