在本章中,我们将讨论JSP中的Actions.这些操作使用XML语法中的构造来控制servlet引擎的行为.您可以动态插入文件,重用JavaBeans组件,将用户转发到另一个页面,或者为Java插件生成HTML.
Action元素只有一种语法,因为它符合到XML标准 :
<jsp:action_name attribute ="value"/>
动作元素基本上是预定义的函数.下表列出了可用的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 属性和范围属性.
id属性唯一标识Action元素,并允许在JSP页面内引用该操作.如果Action创建对象的实例,则可以使用id值通过隐式对象PageContext引用它.
这attribute标识Action元素的生命周期. id属性和scope属性直接相关,因为scope属性确定与id关联的对象的生命周期. scope属性有四个可能的值:(a)page,(b)request,(c)session 和(d)application .
此操作允许您将文件插入到正在生成的页面中.语法类似于此 :
<jsp:include page ="relative URL"flush ="true"/>
与 include 指令不同,后者在JSP页面转换为servlet时插入文件,此操作将插入请求页面时的文件.
下表列出了与include操作相关的属性 :
S.No. | 属性&安培;描述 |
---|---|
1 | page 要包含的页面的相对网址. |
2 | flush 布尔属性确定包含的资源是否在其包含之前刷新了缓冲区. |
让我们定义以下两个文件(a)日期. jsp 和(b)main.jsp 如下 :
以下是 date.jsp 的内容file :
<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 ExampleToday's date: 12-Sep-2010 14:54:22
useBean 操作非常通用.它首先使用id和scope变量搜索现有对象.如果找不到对象,则会尝试创建指定的对象.
加载bean的最简单方法如下:<
<jsp:useBean id ="name"class ="package.class"/>
加载bean类后,可以使用 jsp:setProperty 和 jsp:getProperty 操作修改和检索bean属性.
下表列出了与useBean操作相关的属性 :
S.No. | 属性和放大器;描述 |
---|---|
1 | 类 指定bean的完整包名. |
2 | 类型 指定将引用该对象的变量的类型. |
3 | beanName 给出java.beans.Beans类的instantiate()方法指定的bean名称. |
现在让我们讨论 jsp:setProperty 和 jsp:getProperty 在给出与这些操作相关的有效示例之前的操作.
setProperty 操作设置Bean的属性.必须先在此操作之前定义Bean.使用setProperty动作有两种基本方法 :
您可以在 jsp:useBean之后使用 jsp:setProperty
b>元素,如下面给出 :
<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 | 名称 指定将设置其属性的bean. Bean必须先前已定义. |
2 | 属性 表示要设置的属性.值"*"表示名称与bean属性名称匹配的所有请求参数将传递给相应的setter方法. |
3 | 值 要分配给给定属性的值.参数的值为null,或者参数不存在,将忽略setProperty操作. |
4 | param param属性是请求参数的名称,该属性将接收其值.你不能同时使用value和param,但是允许两者都不使用. |
getProperty 操作用于检索给定属性的值并将其转换为字符串,最后将其插入到输出中.
getProperty操作只有两个属性,这两个属性都是必需的. getProperty操作的语法如下 :
<jsp:useBean id = "myName" ... /> ... <jsp:getProperty name = "myName" property = "someProperty" .../>
下表列出了与 getProperty 操作相关的必需属性 :
S.No. | 属性&描述 |
---|---|
1 | 名称 具有要检索的属性的Bean的名称. Bean必须先前已定义. |
2 | 属性 属性属性是要检索的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 文件,并确保您在 C:\ apache-tomcat-7.0.2 \webapps \WEB-INF \classes \action 文件夹和 CLASSPATH 中复制了TestBean.class变量也应设置为此文件夹 :
现在在 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 ,它会显示以下结果 :
Using JavaBeans in JSPGot message.... Hello JSP...
转发操作终止当前页面的操作,并将请求转发到另一个资源,例如静态页面,另一个JSP页面或Java Servlet .
以下是转发操作的语法 :
<jsp:forward page = "Relative URL" />
下表列出了与正向操作相关的必需属性 :
S.No. | 属性和放大器;描述 |
---|---|
1 | 页面 应该包含另一个资源的相对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
插件操作用于将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> 元素可用于指定在组件发生故障时发送给用户的错误字符串.
The <jsp:element> ActionThe <jsp:attribute> ActionThe <jsp:body> Action
< 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 = "https://img01.yuandaxia.cn/Content/img/tutorials/jsp/index.html <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 = "https://img01.yuandaxia.cn/Content/img/tutorials/jsp/index.html <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> 操作尝试上述示例.