返回介绍

D.6 动作

发布于 2025-04-22 20:10:07 字数 3164 浏览 0 评论 0 收藏

动作是第三种类型的语法元素,它们被转换成 Java 代码来执行操作,如访问一个 Java 对象或调用方法。本节仅讨论所有 JSP 容器支持的标准动作。除了标准之外,还可以创建自定义标签来执行某些操作。

下面是一些标准的动作。

D.6.1 useBean

useBean 将创建一个关联 Java 对象的脚本变量。这是早期分离表示层和业务逻辑的努力之一。随着其他技术的发展,如自定义标签和表达语言,现在很少使用 useBean 方式。

清单 D.9 的 useBeanTest.jsp 页面是一个示例,它创建一个 java.util.Date 实例,并赋值给名为 today 的脚本变量,然后在表达式中使用它。

清单 D.9 useBeanTest.jsp 页面

<!DOCTYPE html>
<html>
<head>
  <title>useBean</title>
</head>
<body>
<jsp:useBean id="today" class="java.util.Date"/>
<%=today%>
</body>
</html>

在 Tomcat 中,上述代码会被转换为如下代码:

java.util.Date today = null;
today = (java.util.Date) _jspx_page_context.getAttribute("today",
    javax.servlet.jsp.PageContext.REQUEST_SCOPE);
if (today == null) {
  today = new java.util.Date();
  _jspx_page_context.setAttribute("today", today,
      javax.servlet.jsp.PageContext.REQUEST_SCOPE);
}

访问这个页面,会输出当前的日期和时间。

D.6.2 setProperty 和 getProperty

setProperty 动作可对一个 Java 对象设置属性,而 getProperty 则会输出 Java 对象的一个属性。清单 D.11 中的 getSetPropertyTest.jsp 页面展示了如何设置和输出在清单 D.10 中定义的 Employee 类实例的 firstName 属性。

清单 D.10 Employee 类

package jspdemo;
public class Employee {
  private String id;
  private String firstName;
  private String lastName;

  public String getId() {
    return id;
  }
  public void setId(String id) {
    this.id = id;
  }
  public String getFirstName() {
    return firstName;
  }
  public void setFirstName(String firstName) {
    this.firstName = firstName;
  }
  public String getLastName() {
    return lastName;
  }
  public void setLastName(String lastName) {
    this.lastName = lastName;
  }
}

清单 D.11 getSetPropertyTest.jsp 页面

<!DOCTYPE html>
<html>
<head>
<title>getProperty and setProperty</title>
</head>
<body>
<jsp:useBean id="employee" class="jspdemo.Employee"/>
<jsp:setProperty name="employee" property="firstName" value="Abigail"/>
First Name: <jsp:getProperty name="employee" property="firstName"/>
</body>
</html>

D.6.3 include

include 动作用来动态地引入另一个资源。可以引入另一个 JSP 页面,也可以引入一个 Servlet 或一个静态的 HTML 页面。例如,清单 D.12 的 jspIncludeTest.jsp 页面使用 include 动作来引入 menu.jsp 页面。

清单 D.12 jspIncludeTest.jsp 页面

<!DOCTYPE html>
<html>
<head>
<title>Include action</title>
</head>
<body>
<jsp:include page="jspf/menu.jsp">
  <jsp:param name="text" value="How are you?"/>
</jsp:include>
</body>
</html>

这里,理解 include 指令和 include 动作非常重要。对于 include 指令,资源引入发生在页面转换时,即当 JSP 容器把页面转换为生成的 Servlet 时。而 include 动作,资源引入发生在请求页面时。因此,使用 include 动作是可以传递参数的,而 include 指令不支持。

第二个不同是,include 指令对引入的文件扩展名不做特殊要求。但 include 动作,若引入的文件需以 JSP 页面处理,则其文件扩展名必须是 JSP。若使用 jspf 为扩展名,则该页面被当作静态文件。

D.6.4 forward

forward 动作把当前页面转向到其他资源。下面的代码将从当前页转向到 login.jsp 页面。

<jsp:forward page="jspf/login.jsp">
  <jsp:param name="text" value="Please login"/>
</jsp:forward>

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。