4.2.1 什么是JavaBean
组件是独立的模块,在外界不了解其内部实现的情况下,可以通过其提供的接口对组件进行访问。组件可以重用,目前有代表性的组件技术有COM、COM+、JavaBeans、EJB等。ASP通过COM或COM+组件来扩充复杂的功能,如文件上载,发送email,以及将业务处理或复杂计算分离出来独立使用的模块。JSP通过JavaBean组建实现同样的功能扩充,JavaBean可以用来执行负责的计算任务、封装事务逻辑以及封装数据等。
JavaBean是Java的可重用组件技术,实质是一种符合某些命名和设计规范的Java类。 应用JavaBean的主要目的是实现代码重用,便于维护和管理。在JSP的Web应用中集成JavaBean组建,由JavaBean处理业务逻辑,然后在JSP中调用,而JSP页面着重网页界面的设计,可以实现业务逻辑和前台显示的部分分离。
使用JavaBean的好处可以总结如下:
1)可以使得JSP页面变得清晰(业务逻辑和前台显示分离);
2)节省软件开发时间(可以直接使用已经测试和可信的已有组件,避免了重复开发);
3)降低系统维护的难度
4)为JSP应用带来了更多的可伸缩性,使系统变得健壮和灵活。
JavaBean的类型
1)一类是可视的JavaBean,即传统的JavaBean应用于可视化界面(如java图形界面中使用的按钮、文本框或列表框等等);
2)另一类是非可视化的JavaBean,封装逻辑、封装数据,与JSP搭配使用。
【案例】通过非可视化的JavaBean,封装邮箱地址对象,通过JSP页面调用该对象来验证邮箱地址是否合法。
(1)创建名称为Email的JavaBean对象,用于封装邮箱地址,代码如下:
package experiment;
import java.io.Serializable;
public class Email implements Serializable {
// serialVersionUID ֵ
private static final long serialVersionUID = 1L;
// Email地址ַ
private String mailAdd;
// 是否是一个标准的Email地址ַ
private boolean eamil;
/**
* 默认无参的构造方法
*/
public Email() {
}
/**
* 构造方法
* @param mailAdd Email地址ַ
*/
public Email(String mailAdd) {
this.mailAdd = mailAdd;
}
/**
* 是否是一个标准的Email地址ַ
* @return 布尔值ֵ
*/
public boolean isEamil() {
// 正则表达式,定义邮箱格式
String regex = "\\w+([-+.']\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*";
// matches()方法可判断字符串是否与正则表达式匹配
if (mailAdd.matches(regex)) {
// eamil为真
eamil = true;
}
// 返回email
return eamil;
}
public String getMailAdd() {
return mailAdd;
}
public void setMailAdd(String mailAdd) {
this.mailAdd = mailAdd;
}
}
(2)创建名称为index.jsp的页面,它是程序中的首页,用于放置验证邮箱的表单,该表单的提交地址为result.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>Insert title here</title>
</head>
<body>
<form action="result.jsp" method="post">
<table align="center" width="300" border="1" height="150">
<tr>
<td colspan="2" align="center">
<b>邮箱认证系统</b>
</td>
</tr>
<tr>
<td align="right">邮箱地址:</td>
<td><input type="text" name="mailAdd"/></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" />
</td>
</tr>
</table>
</form>
</body>
</html>
(3)创建名称为result.jsp的页面,对index.jsp页面中的表单进行处理,在此页面中实例化Email对象,对邮箱地址进行验证,并将验证结果输出到页面中,代码如下:
<%@ 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">
<%@page import="experiment.Email"%><html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<div align="center">
<%
// 获取邮箱地址
String mailAdd = request.getParameter("mailAdd");
// 实例化Email,并对mailAdd赋值
Email email = new Email(mailAdd);
// 判断是否是标准的邮箱地址
if(email.isEamil()){
out.print(mailAdd + " <br>是一个标准的邮箱地址!<br>");
}else{
out.print(mailAdd + " <br>不是一个标准的邮箱地址!<br>");
}
%>
<a href="index.jsp">返回</a>
</div>
</body>
</html>
实例运行结果如下:



4.2.2 JavaBean规范
该类是一个公有类,并用package语句声明属于某个包;
该类实现了java.io.Serializable接口;
该类如果有构造方法,那么这个构造方法是公有(用public修饰)并且无参数的;
该类的属性一般是私有(用private修饰)的;
私有属性有公有(用public修饰)的访问器方法;例如:私有属性xxx的读取方法为getXxx(),设置方法为setXxx(),如果属性类型为boolean,它的读取方法为isXxx()。
该类的方法一般是共有的。
(说明:如果在JSP中使用JavaBean组件,创建的JavaBean不必实现java.io.Serializable接口仍然可以运行)
案例4-1 JavaBean示例。
package ch4;
import java.io.Serializable;
public class Person implements Serializable{
private String name;
private String sex;
private int age;
public Person(){
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}

