- 内容提要
- 作者简介
- 译者简介
- 前言
- HTTP
- Servlet 和 JSP
- 下载 Spring 或使用 STS 与 Maven/Gradle
- 手动下载 Spring
- 使用 STS 和 Maven/Gradle
- 下载 Spring 源码
- 本书内容简介
- 下载示例应用
- 第 1 章Spring 框架
- 第 2 章模型 2 和 MVC 模式
- 第 3 章Spring MVC 介绍
- 第 4 章基于注解的控制器
- 第 5 章数据绑定和表单标签库
- 第 6 章转换器和格式化
- 第 7 章验证器
- 第 8 章表达式语言
- 第 9 章JSTL
- 第 10 章国际化
- 第 11 章上传文件
- 第 12 章下载文件
- 第 13 章应用测试
- 附录 A Tomcat
- 附录 B Spring Tool Suite 和 Maven
- 附录 C Servlet
- 附录 D JavaServer Pages
- 附录 E 部署描述符
D.6 动作
动作是第三种类型的语法元素,它们被转换成 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>
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论