全部章节 >>>>
本章目录
4.1 JavaBean
4.1.1 JavaBean 概述
JavaBean 是使用 Java 编写的组件,每一个 JavaBean 均实现一个特定的功能。
JavaBean 通过对属性和方法的封装,成为具有独立功能、可重复使用并且可与其他控件通信的组件对象,具有以下优点
- 重用性强
- 模块化
- 可维护性、扩展性强
4.1.2 JavaBean的重要性
在一个复杂的Web应用中把特定的功能封装成JavaBean能有效提高代码重用性和后期维护性
JavaBean 通过封装一些具体的动作来实现一个特定的功能,即对外提供最小限度的属性接口,供用户操作和控制,但用户不知道它内部的具体运行机制,从而提高了安全性
4.1.3 JavaBean的特点
通常JavaBean都具有如下几个特点:
提供一个public无参构造方法,以方便创建对象和赋予初值
public class People {
private String name; // 定义姓名
private String sex; // 定义性别
public People(){
name="jack"; // 为特性的属性设置默认值
sex="M";
}
// 此处省略 getter() 方法和 setter() 方法
}
通常情况JavaBean组件需要实现 java.io.Serializable 序列化接口,这样在将对象存储为文件或网络中传递时将非常便利
import java.io.Serializable;
// 实现接口
public class People implements Serializable { //该接口中未定义任何内容,所以仅仅起标识作用
......
}
在 JavaBean 组件中要为所有标识特性的属性提供对应的 get() 方法和 set() 方法,以便为组件用户提供操作和控制组件的接口
public class People implements Serializable {
private String name; // 定义姓名 属性声明private私有 提供public公共get、set访问接口
public People(){
}
//get() 方法与 set() 方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
4.1.4 JavaBean的属性
JavaBean 的属性可以是任意类型,并且一个 JavaBean 可以有多个属性。每个属性通常都需要具有相应的setter()修改器方法、getter()访问读取器方法
getter、setter方法命名规则如下:
- 属性名:name getter
- 读取:getName()
- setter修改:setName()
4.1.5 快速生成JavaBean
通过 Eclipse 快速生成JavaBean中的构造方法:
有参构造方法虽然不是 JavaBean 必须的,但为了使实例化 JavaBean 组件更加方便,建议提供有参构造方法,但是无参构造方法需要显示提供
4.1.6 实践练习
4.2 JavaBean 的分类
4.2.1 封装数据的 JavaBean
封装数据的 JavaBean 通常就是表达一个完整的实体信息,适用于以下两种情况:
在方法中对一个完整实体VO(值对象)信息进行传递(可以提高方法的可维护性与可扩展性)
public boolean addPeople(People people){}
作为某些集合数据中的单个元素实体(集合中存储的实体VO对象信息,代表集合中的单个数据项)
List<People> peopleList=new ArrayList<People>();
People people=new People();
peopleList.add(people);
4.2.2 封装业务的 JavaBean
封装业务方法的 JavaBean 通常不需要 get()、set() 方法,只要根据业务需求定义相应的业务方法即可,比如针对数据操作的增删改查可以定义对应方法
public class PeopleService{
// 增加 People
public boolean add(People people) { }
// 通过 id 更新一个 People
public boolean update(People newPeople){ }
// 通过 id 删除一个 People
public boolean del(int id) { }
// 根据 id 得到一个 People
public People get(int id){ }
// 得到所有的 People
public List<People> getAll(){ }
}
每个方法中可以针对数据库表编写操作代码,实现功能
4.2.3 实践练习
4.3 JSP 标准动作简介(一)
4.3.1 标准动作概述
JSP中有两种方法可以创建并使用JavaBean。一种是使用Java脚本代码实现,另一种是通过JSP标准动作实现
JSP标准动作更好的配合Html规范,以标签的方式来操作和使用JavaBean,有效的避免了JSP中出现大量的Java脚本代码,保持了界面风格统一
常用的标准动作如下
4.3.2 < jsp:useBean >
<jsp:useBean>用于在JSP页面中创建一个JavaBean对象,并且通过属性的设置将该实例存储到 JSP 指定的范围内。如果在指定的范围内已经存在指定的 Bean 实例,则直接使用此实例,而不再创建新的 Bean 实例
语法:
<jsp:useBean id="BeanName" class="package.className"
scope="page|session|application|request"/>
- id 属性:指定一个变量名
- class 属性:指定一个完整的类名,其中 package 表示包名,className 表示类名
- scope 属性:指定所创建的 Bean 实例的存储范围,默认为“page”范围
scope代表创建的对象所处的作用域,有如下几种:
名称 |
作用域 |
page |
当前Jsp页面范围 |
request |
request请求范围,如转发的下一个界面 |
session |
session会话范围有效 |
application |
application整个应用程序范围 |
示例:创建DateFormat类
package com.exam;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateFormat {
// 定义 convert() 方法
public String convert(Date date, String format) {
SimpleDateFormat sdf = new SimpleDateFormat(format);
return sdf.format(date);
}
}
创建DateFormat类使用<jsp:useBean> 在JSP界面创建对象
<%@ page import="java.util.*"%>
<body>
<jsp:useBean id="dateFormate" class="com.exam.DateFormat" />
<%
//在 scriptlet 中直接使用
String msg=dateFormate.convert(new Date(),"yyyy 年 MM 月 dd 日 HH:mm:ss");
out.print("<h3> 现在是:"+msg+"<h3>");
%>
</body>
4.3.3 < jsp:setProperty >
<jsp:setProperty> 动作用于设置 useBean 中指定 Bean 的属性值
语法:
<jsp:setProperty name="BeanAlias“ property="propertyName"
value=“value“ param=“请求参数名”/>
- name 属性:指定 <jsp:useBean> 中使用的 Bean 的 ID。
- property 属性:指定要设置的 Bean 的属性名称。
- value 属性:指定要为属性设置的显示值。
- param 属性:自动从请求中获取对应参数值放入对象中
param属性不能和value同时使用
4.3.3 < jsp:getProperty >
<jsp:getProperty> 动作用于获取 <jsp:useBean> 中指定 Bean 的属性值
注意: <jsp:getProperty>会调用JavaBean中的getXXX对应方法,而不是访问属性,即使没有属性,如果有getter方法仍可以调用成功
语法:
<jsp:getProperty name="BeanAlias" property="propertyName" />
- name 属性:指定 <jsp:useBean> 中使用的 Bean 的 ID。
- property 属性:指定从 Bean 中检索指定的名称。
示例:使用JSP标准动作创建JavaBean对象,设置属性以及计算获取信息
<jsp:useBean id="subjectInfo" class="com.exam.SubjectInfo" />
<!-- 为该 bean 设置属性 -->
<jsp:setProperty name="subjectInfo" property="chinese" param="chinese" />
<!-- 通过 param 得到输入的语文分数的值 -->
<jsp:setProperty name="subjectInfo" property="mathematics" param="mathematics" />
<!-- 通过 param 得到输入的数学分数的值 -->
<jsp:setProperty name="subjectInfo" property="english" param="english" />
语文分数:<jsp:getProperty name="subjectInfo" property="chinese" /><br />
数学分数:<jsp:getProperty name="subjectInfo" property="mathematics" /><br />
英语分数:<jsp:getProperty name="subjectInfo" property="english" /><br />
总分:<jsp:getProperty name="subjectInfo" property="sumScore" /><br />
平均分:<jsp:getProperty name="subjectInfo" property="averageScore" /><br />
4.3.4 实践练习
4.4 JSP 标准动作简介(二)
4.4.1 < jsp:forward >
forward 动作用于将用户的请求转发到一个 HTML 文件、JSP 页面或 Servlet 中。
语法:
<jsp:forward page=“跳转的目标url"/>
注意:forward 标准动作相当于转发而不是重定向。
示例:使用<jsp:forward>跳转界面,同时传递参数数据
<body>
<jsp:forward page="target.jsp">
<jsp:param value="1234" name="userName" />
<jsp:param value="123456" name="password" />
</jsp:forward>
</body>
target.jsp 是转发后的界面
4.4.2 < jsp:include >
<jsp:include>可以将另外一个页面嵌入到当前页面中
<jsp:include page="url" flush="true"/>
url 属性:指定目标资源。
flush 属性:这里必须使用 flush="true",不能使用 false 值,默认值为 false。
示例: 使用<jsp:include>嵌入另外一个页面
- 创建一个 JSP 页面,命名为“date.jsp”,使用脚本判断当前日期和星期并输出
- 创建一个 JSP 页面,命名为“test.jsp”,使用include动作将date.jsp嵌入:
<body>
<jsp:include page="date.jsp" flush="true" />
</body>
4.4.3 实践练习
总结:
- JavaBean 是使用 Java 编写的组件,每一个 JavaBean 实现一个特定的功能,具有重用性强,易维护扩展等特点
- JavaBean一般需要实现序列化接口,提供无参构造方法,对功能进行getter、setter封装访问
- JSP标准动作是一种以标签的形式替代scriptlet脚本方式操作JavaBean
- JSP标准动作包括:<jsp:useBean> <jsp:setProperty> <jsp:getProperty> <jsp:forward> <jsp:include>等