JSP - Actions
在本章中,我们将讨论JSP中的Actions。 这些操作使用XML语法中的构造来控制servlet引擎的行为。 您可以动态插入文件,重用JavaBeans组件,将用户转发到另一个页面,或者为Java插件生成HTML。
Action元素只有一种语法,因为它符合XML标准 -
<jsp:action_name attribute = "value" />
Action元素基本上是预定义的函数。 下表列出了可用的JSP操作 -
S.No. | 语法和目的 |
---|---|
1 | jsp:include 在请求页面时包含文件。 |
2 | jsp:useBean 查找或实例化JavaBean。 |
3 | jsp:setProperty 设置JavaBean的属性。 |
4 | jsp:getProperty 将JavaBean的属性插入到输出中。 |
5 | jsp:forward 将请求者转发到新页面。 |
6 | jsp:plugin 生成特定于浏览器的代码,为Java插件生成OBJECT或EMBED标记。 |
7 | jsp:element 动态定义XML元素。 |
8 | jsp:attribute 定义动态定义的XML元素的属性。 |
9 | jsp:body 定义动态定义的XML元素的主体。 |
10 | jsp:text 用于在JSP页面和文档中编写模板文本。 |
共同属性
所有Action元素都有两个共同的属性: id属性和scope属性。
Id属性
id属性唯一标识Action元素,并允许在JSP页面内引用该操作。 如果Action创建对象的实例,则可以使用id值通过隐式对象PageContext引用它。
范围属性
此属性标识Action元素的生命周期。 id属性和scope属性直接相关,因为scope属性确定与id关联的对象的生命周期。 scope属性有四个可能的值: (a) page, (b)request, (c)session和(d) application 。
动作
此操作允许您将文件插入到正在生成的页面中。 语法如下所示 -
<jsp:include page = "relative URL" flush = "true" />
与include指令不同, include指令在JSP页面转换为servlet时插入文件,此操作在请求页面时插入文件。
下表列出了与include操作相关的属性 -
S.No. | 属性和描述 |
---|---|
1 | page 要包含的页面的相对URL。 |
2 | flush boolean属性确定包含的资源是否在其包含之前刷新其缓冲区。 |
例子 (Example)
让我们定义以下两个文件(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 。 您将收到以下输出 -
<center>
<h2>The include action Example</h2>
Today's date: 12-Sep-2010 14:54:22
</center>
Action
useBean动作非常通用。 它首先使用id和scope变量搜索现有对象。 如果找不到对象,则会尝试创建指定的对象。
加载bean的最简单方法如下 -
<jsp:useBean id = "name" class = "package.class" />
加载bean类后,可以使用jsp:setProperty和jsp:getProperty操作来修改和检索bean属性。
下表列出了与useBean操作相关的属性 -
S.No. | 属性和描述 |
---|---|
1 | class 指定bean的完整包名称。 |
2 | type 指定将引用该对象的变量的类型。 |
3 | beanName 给出java.beans.Beans类的instantiate()方法指定的bean的名称。 |
现在让我们在给出与这些操作相关的有效示例之前讨论jsp:setProperty和jsp:getProperty操作。
Action
setProperty操作设置Bean的属性。 必须先在此操作之前定义Bean。 使用setProperty操作有两种基本方法 -
您可以在jsp:useBean元素之后使用jsp:setProperty ,如下所示 -
<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操作关联的属性 -
S.No. | 属性和描述 |
---|---|
1 | name 指定将设置其属性的bean。 Bean必须先前已定义。 |
2 | property 表示要设置的属性。 值“*”表示名称与bean属性名称匹配的所有请求参数都将传递给相应的setter方法。 |
3 | value 要分配给给定属性的值。 参数的值为null,或者参数不存在,将忽略setProperty操作。 |
4 | param param属性是请求参数的名称,该属性将接收其值。 您不能同时使用值和参数,但允许不使用它们。 |
动作
getProperty操作用于检索给定属性的值并将其转换为字符串,最后将其插入到输出中。
getProperty操作只有两个属性,这两个属性都是必需的。 getProperty操作的语法如下 -
<jsp:useBean id = "myName" ... />
...
<jsp:getProperty name = "myName" property = "someProperty" .../>
下表列出了与getProperty操作关联的必需属性 -
S.No. | 属性和描述 |
---|---|
1 | name 具有要检索的属性的Bean的名称。 Bean必须先前已定义。 |
2 | property property属性是要检索的Bean属性的名称。 |
例子 (Example)
让我们定义一个将在我们的示例中进一步使用的测试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文件,并确保在C:\apache-tomcat-7.0.2\webapps\WEB-INF\classes\action文件夹中复制了TestBean.class,并且CLASSPATH变量也应该是设置为此文件夹 -
现在在main.jsp文件中使用以下代码。 这会加载bean并设置/获取一个简单的String参数 -
<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 ,它会显示以下结果 -
<center>
<h2>Using JavaBeans in JSP</h2>
Got message....
Hello JSP...
</center>
动作
forward操作终止当前页面的操作,并将请求转发到另一个资源,例如静态页面,另一个JSP页面或Java Servlet。
以下是forward动作的语法 -
<jsp:forward page = "Relative URL" />
下表列出了与前进行动相关的必要属性 -
S.No. | 属性和描述 |
---|---|
1 | page 应包含另一个资源的相对URL,例如静态页面,另一个JSP页面或Java Servlet。 |
例子 (Example)
让我们重用以下两个文件(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 。 这将显示如下结果。
这里它从主页面中丢弃了内容,仅显示转发页面中的内容。
<center>
Today's date: 12-Sep-2010 14:54:22
</center>
动作
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>
如果您有兴趣,可以使用一些小程序尝试此操作。 新元素《fallback》元素可用于指定在组件发生故障时要发送给用户的错误字符串。
<h2>The <jsp:element> Action</h2>
<h2>The <jsp:attribute> Action</h2>
<h2>The <jsp:body> Action</h2>
《jsp:element》, 《jsp:attribute》和《jsp:body》动作用于动态定义XML元素。 动态这个词非常重要,因为它意味着XML元素可以在请求时生成,而不是在编译时静态生成。
以下是动态定义XML元素的简单示例 -
<%@page language = "java" contentType = "text/html"%>
<html xmlns = "http://www.w3c.org/1999/xhtml"
xmlns:jsp = "http://java.sun.com/JSP/Page">
<head><title>Generate XML Element</title></head>
<body>
<jsp:element name = "xmlElement">
<jsp:attribute name = "xmlElementAttr">
Value for the attribute
</jsp:attribute>
<jsp:body>
Body for XML element
</jsp:body>
</jsp:element>
</body>
</html>
这将在运行时生成以下HTML代码 -
<html xmlns = "http://www.w3c.org/1999/xhtml" xmlns:jsp = "http://java.sun.com/JSP/Page">
<head><title>Generate XML Element</title></head>
<body>
<xmlElement xmlElementAttr = "Value for the attribute">
Body for XML element
</xmlElement>
</body>
</html>
动作
《jsp:text》操作可用于在JSP页面和文档中编写模板文本。 以下是此操作的简单语法 -
<jsp:text>Template data</jsp:text>
模板的主体不能包含其他元素; 它只能包含文本和EL表达式(注意 - EL表达式将在后续章节中介绍)。 请注意,在XML文件中,您不能使用${whatever 》 0}等表达式,因为大于号是非法的。 相反,使用gt表单,例如${whatever gt 0}或者替代方法是将值嵌入CDATA部分。
<jsp:text><![CDATA[<br>]]></jsp:text>
如果您需要包含DOCTYPE声明(例如XHTML ,则还必须使用《jsp:text》元素,如下所示 -
<jsp:text><![CDATA[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"DTD/xhtml1-strict.dtd">]]></jsp:text>
<head><title>jsp:text action</title></head>
<body>
<books><book><jsp:text>
Welcome to JSP Programming
</jsp:text></book></books>
</body>
</html>
使用和不使用《jsp:text》操作尝试上面的示例。