在本章中,我们将讨论jsp中的动作。这些操作使用xml语法中的结构来控制servlet引擎的行为。我们可以动态插入文件,重新使用javabeans组件,将用户转发到另一个页面或为java插件生成html。
为了方便示例中的代码运行的结果,我们使用eclipse创建一个动态web项目:jspactions 。这个项目的结构如下所示 -
动作元素只有一种语法,因为它符合xml标准 -
<jsp:action_name attribute = "value" />
动作元素基本上是预定义的功能。下表列出了可用的jsp动作 -
编号 动作 描述| 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页面和文档中编写模板文本。 |
所有动作元素共有两个属性:id属性和scope属性。
id属性
id属性唯一标识动作元素,并允许在jsp页面内引用该操作。 如果动作创建了一个对象的实例,则id值可以用于通过隐式对象pagecontext引用它。
scope属性
scope属性标识动作元素的生命周期。id属性和scope属性是直接相关的,因为scope属性决定了与id关联的对象的使用寿命。scope属性有四个可能的值:
- page
- request
- session
- application
1. jsp:include动作
此动作允许将文件插入到正在生成的页面中。语法如下所示 -
<jsp:include page = "relative url" flush = "true" />
与在将jsp页面转换为servlet时将文件插入的include指令不同,此动作在请求页面时插入该文件。
下表列出了与include动作相关联的属性 -
编号 属性 描述| 1 | page | 要包括的页面的相对url。 |
| 2 | flush | 布尔属性确定包含的资源是否在包含其缓冲区之前被刷新。 |
示例
下面定义两个文件date.jsp和index.jsp,以下是date.jsp文件的内容 -
<%@ page language="java" contenttype="text/html; charset=utf-8"
pageencoding="utf-8"%>
<p>今天是: <%= (new java.util.date()).tolocalestring()%></p> 以下是index.jsp文件的内容 -
<%@ page language="java" contenttype="text/html; charset=utf-8"
pageencoding="utf-8"%>
<!doctype html public "-//w3c//dtd html 4.01 transitional//en" "http://www.w3.org/tr/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>include动作示例</title>
</head>
<body>
<h2>include动作示例</h2>
<jsp:include page="date.jsp" flush="true" />
</body>
</html> 现在将这些文件保存在根目录下,并尝试访问index.jsp。将会看到以下输出 -
2. jsp:usebean 动作
usebean动作是非常通用的。它首先使用id和scope变量搜索现有对象。如果未找到对象,则会尝试创建指定的对象。
加载bean的最简单的方法如下 -
<jsp:usebean id = "name" class = "package.class" />
当加载了一个bean类,可以使用jsp:setproperty和jsp:getproperty操作来修改和检索bean属性。
下表列出了与usebean动作关联的属性 -
编号 属性 描述| 1 | class | 指定bean的完整包名称。 |
| 2 | type | 指定将引用对象的变量的类型。 |
| 3 | beanname | 给出由java.beans.beans类instantiate()方法指定的bean的名称。 |
现在来看看jsp:setproperty和jsp:getproperty动作,然后再给出与这些操作相关的有效示例。
3. jsp:setproperty 动作
setproperty操作设置bean的属性。 在此操作之前,bean先前已定义。 有两种使用setproperty操作的基本方法 -
可以使用jsp:setproperty在之后,但是在jsp:usebean元素之外,如下所示:
<jsp:usebean id = "myname" ... /> ... <jsp:setproperty name = "myname" property = "someproperty" .../>
在这种情况下,执行jsp:setproperty,无论是实例化新bean还是找到现有的bean。
jsp:setproperty可以在jsp:usebean元素的正文内的上下文内出现,如下所示:
<jsp:usebean id = "myname" ... > ... <jsp:setproperty name = "myname" property = "someproperty" .../> </jsp:usebean>
这里,只有当一个新对象被实例化时,才执行jsp:setproperty,如果找到了一个现有的对象,则不执行。
下表列出了与setproperty动作相关联的属性 -
编号 属性 描述| 1 | name | 指定将设置其属性的bean。 bean在先前就已经定义了。 |
| 2 | property | 表示要设置的属性。值“*”表示名称与bean属性名称匹配的所有请求参数将被传递给对应的setter方法。 |
| 3 | value | 要分配给给定属性的值。参数的值为null,或者参数不存在,则setproperty操作被忽略。 |
| 4 | param | param属性是属性要接收的值的请求参数的名称。不能同时使用值和参数,但是不允许使用。 |
4. jsp:getproperty动作
getproperty操作用于检索给定属性的值并将其转换为字符串,最后将其插入输出。getproperty动作只有两个属性,这两个属性都是必需的。getproperty操作的语法如下:
<jsp:usebean id = "myname" ... /> ... <jsp:getproperty name = "myname" property = "someproperty" .../>
下表列出了与getproperty动作相关联的必需属性 -
编号 动作 描述| 1 | name | 要检索的属性的bean名称。 前提是bean在先前已经定义了。 |
| 2 | property | property属性是要检索的bean属性的名称。 |
示例
下面定义一个bean类:message ,其代码如下-
/* file: message.java */
package com.51frw;
public class message {
private string message = "no message specified";
public string getmessage() {
return(message);
}
public void setmessage(string message) {
this.message = message;
}
} 在main.jsp文件中编写以下代码。这将加载bean并设置/获取一个简单的string参数 -
<%@ page language="java" contenttype="text/html; charset=utf-8"
pageencoding="utf-8"%>
<html>
<head>
<title>在jsp使用javabeans示例</title>
</head>
<body>
<div style="margin:auto;text-align:center;">
<h2>在jsp使用javabeans示例</h2>
<hr/>
<jsp:usebean id="msg" class="com.51frw.message" />
<p>获取默认设置的信息是:<jsp:getproperty name="msg" property="message" /></p>
<jsp:setproperty name="msg" property="message" value="hello jsp..." />
<p>获取设置的信息是:<jsp:getproperty name="msg" property="message" /></p>
</div>
</body>
</html> 现在尝试访问main.jsp,它将显示以下结果 -
5. jsp:forward动作
<jsp:forward>动作终止当前页面的操作,并将请求转发到另一个资源,例如静态页面,另一个jsp页面或java servlet。
以下是<jsp:forward>动作的语法 -
<jsp:forward page = "relative url" />
下表列出了与<jsp:forward>动作相关联的必需属性 -
编号 动作 描述| 1 | page | 应该包含另一个资源的相对url,例如静态页面,另一个jsp页面或java servlet。 |
示例
创建以下两个文件:date.jsp和main.jsp,分别如下 -
以下是date.jsp文件的内容 -
<p>today's date: <%= (new java.util.date()).tolocalestring()%></p>
以下是main.jsp文件的内容 -
现在将这些文件保存在根目录下,并尝试访问main.jsp。这将显示如下所示的结果。
在这里,它从main.jsp丢弃了内容,并显示了来自转发目标页面的内容。
6. jsp:plugin 动作
<jsp:plugin>动作用于将java组件插入到jsp页面中。它确定浏览器的类型,并根据需要插入<object>或<embed>标签。
如果所需的插件不存在,它会下载插件,然后执行java组件。java组件可以是applet或javabean。
<jsp:plugin>动作有几个属性对应于用于格式化java组件的常用html标记。 <param>元素也可用于向applet或bean发送参数。
以下是使用<jsp:plugin>动作的典型语法 -
<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>元素可用于指定要发送给用户的错误字符串,以防组件发生故障。
<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> 7. jsp:text动作
可以使用<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>操作。
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!