JSP教程
JSP 教程
JSP 环境设置
JSP 体系结构
JSP 生命周期
JSP 语法
JSP 指令
JSP page 指令
JSP include 指令
JSP taglib 指令
JSP 动作(action)
JSP 隐式对象
JSP 客户端请求
JSP 服务器响应
JSP Http状态代码
JSP 表单处理
JSP 过滤器
JSP Cookie 处理
JSP session(会话)跟踪
JSP 文件上传
JSP 处理日期
JSP 页面重定向
JSP 点击计数器
JSP 自动刷新
JSP 发送电子邮件
JSP 高级
JSP 标准标记库(JSTL)
JSP 数据库访问
JSP XML数据
JSP Java Beans
JSP 自定义标签
JSP 表达语言(EL)
JSP 异常处理
JSP 调试
JSP 安全
JSP 国际化
上一节: JSP taglib 指令
上一节
下一节: JSP 隐式对象
下一节
JSP 动作(action)
动作
在本章中,我们将讨论JSP中的Actions。这些动作使用XML语法中的构造来控制servlet引擎的行为。您可以动态插入文件,重用JavaBeans组件,将用户转发到另一个页面或为Java插件生成HTML。Action元素只有一种语法,因为它符合XML标准-
动作元素基本上是预定义的功能。下表列出了可用的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元素的主体。
jsp:text
用于在JSP页面和文档中编写模板文本。
共同属性
所有Action元素共有两个属性:id属性和scope属性。
id 属性
id属性唯一地标识Action元素,并允许在JSP页面内引用该操作。如果Action创建对象的实例,则可以使用ID值通过隐式对象PageContext引用它。
scope 属性
scope 属性标识Action元素的生命周期。id属性和scope属性直接相关,因为scope属性决定了与id关联的对象的寿命。scope属性具有四个可能的值:(a)page,(b)request,(c)session和(d)application。
通过此操作,您可以将文件插入到正在生成的页面中。语法看起来像这样-
与include指令不同,include指令在将JSP页面转换为servlet时插入文件,而该动作则在请求页面时插入文件。下表列出了与include动作相关联的属性-
page - 要包含的页面的相对URL。
flush - 布尔属性确定是否在包含资源之前清除了包含的缓冲区。
让我们定义以下两个文件(a)date.jsp和(b)main.jsp如下:
以下是date.jsp文件的内容-
Today's date: <%= (new java.util.Date()).toLocaleString()%>
以下是main.jsp文件的内容-
The include action Example
现在让我们将所有这些文件保留在根目录中,然后尝试访问main.jsp。您将收到以下输出-
useBean动作是相当多的功能。它首先使用id和scope变量搜索现有对象。如果找不到对象,则它将尝试创建指定的对象。加载bean的最简单方法如下-
加载Bean类后,可以使用jsp:setProperty和jsp:getProperty操作来修改和检索Bean属性。下表列出了与useBean操作关联的属性-
class - 指定Bean的完整软件包名称。
type - 指定将引用该对象的变量的类型。
beanName - 给出由java.beans.Beans类的实例化方法指定的bean名称。
现在,在给出与这些动作相关的有效示例之前,让我们讨论一下jsp:setProperty和jsp:getProperty动作。
setProperty 动作设置一个bean的属性。在执行此操作之前,必须预先定义Bean。有两种使用setProperty操作的基本方法:您可以在jsp:useBean元素之后但在jsp:useBean元素之外使用jsp:setProperty,如下所示-
...
在这种情况下,无论是否实例化了一个新bean或找到了一个现有bean ,都将执行jsp:setProperty。可以在其中出现jsp:setProperty的第二个上下文位于jsp:useBean元素的主体内部,如下所示-
...
在这里,仅当实例化一个新对象时才执行jsp:setProperty,而不是在找到现有对象时执行。下表列出了与setProperty操作关联的属性-
name - 指定将设置其属性的bean。 Bean必须已经预先定义。
property - 指示要设置的属性。 值“ *”表示名称与bean属性名称匹配的所有请求参数都将传递给适当的setter方法。
value - 要分配给给定属性的值。 参数的值为null,或者参数不存在,将忽略setProperty操作。
param - param属性是请求参数的名称,该属性的值将接收。 您不能同时使用value和param,但允许两者都不使用。
getProperty 动作用于检索一个给定的属性,并将其转换的值的字符串,并最终将其插入到输出中。getProperty操作只有两个属性,这两个属性都是必需的。getProperty操作的语法如下:
...
下表列出了与getProperty操作关联的必需属性-
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-9.0.37\webapps\WEB-INF\classes\action文件夹中,并且CLASSPATH变量也应为设置为此文件夹-
现在在main.jsp文件中使用以下代码。这将加载bean并设置/获取一个简单的String参数-
Using JavaBeans in JSP
value = "Hello JSP..." /> Got message....
现在让我们尝试访问main.jsp,它将显示以下结果-
forward 动作终止当前页面的动作和将请求转发到其他资源,如静态页面,另一个JSP页面或Java Servlet中。以下是forward动作的语法-
下表列出了与forward操作相关的必需属性-
page - 应该由另一个资源的相对URL组成,例如静态页面,另一个JSP页面或Java Servlet。
让我们再次使用以下两个文件(a)date.jsp和(b)main.jsp中如下-
以下是date.jsp文件的内容-
Today's date: <%= (new java.util.Date()).toLocaleString()%>
以下是main.jsp文件的内容-
The include action Example
现在让我们将所有这些文件保留在根目录中,然后尝试访问main.jsp。这将显示如下结果。在这里,它丢弃了main页面上的内容,仅显示了转发页面上的内容。
plugin作用是用来Java组件插入到一个JSP页面。它确定浏览器的类型,并根据需要插入
以下是使用plugin动作的典型语法-
width = "60" height = "80"> Unable to initialize Java Plugin
如果您有兴趣,可以使用一些applet尝试此操作。新的元素
以下是一个简单的示例,用于动态定义XML元素-
<%@page language = "java" contentType = "text/html"%>
xmlns:jsp = "http://java.sun.com/JSP/Page">
Value for the attribute
Body for XML element
这将在运行时产生以下HTML代码-
Body for XML element
text动作可以用来写JSP页面和文档模板文本。以下是此操作的简单语法-
模板的主体不能包含其他元素。它只能包含文本和EL表达式(注意-EL表达式在下一章中进行了说明)。请注意,在XML文件中,不能使用${whatever > 0}之类的表达式,因为大于号是非法的。而是使用gt形式,例如${whatever gt 0}或另一种方法是将值嵌入CDATA节中。
如果您需要包含DOCTYPE声明(例如XHTML),则还必须使用
"DTD/xhtml1-strict.dtd">]]>
Welcome to JSP Programming