JavaBean是一种可重复使用的且跨平台的软件组件。JavaBean可分为两种:一种是有用户界面(User Interface,UI)的JavaBean,还有一种是没有用户界面,主要负责表示业务数据或者处理事务(如数据运算、操纵数据库)的JavaBean。JSP通常访问的是后一种JavaBean。
JSP与JavaBean搭配使用,有3个好处:
使得HTML与Java程序分离,这样便于维护代码。如果把所有的程序代码都写到JSP网页中,会使得代码繁杂,难以维护。
可以降低对开发JSP网页的人员的Java编程能力的要求。
JSP侧重于生成动态网页,事务处理由JavaBean来完成,这样可以充分利用JavaBean组件的可重用性特点,提高开发网站的效率。
一个标准的JavaBean有以下几个特性。
JavaBean是一个公共的(public)类。
JavaBean有一个不带参数的构造方法。
JavaBean通过set方法设置属性,通过get方法获取属性。
属性名和get方法名之间存在固定的对应关系:如果属性名为"xyz",那么get方法名为"getXyz",属性名中的第一个字母在方法名中改为大写。
属性名和set方法名之间存在固定的对应关系:如果属性名为"xyz",那么set方法名为"setXyz",属性名中的第一个字母在方法名中改为大写。
如果希望JavaBean能被持久化,那么可以使它实现java.io.Serializable接口。本书第9章的9.4节的例程9-6的ShoppingCart类属于JavaBean,它实现了Serializable接口,因此当Servlet容器持久化一个会话时,也会对存放在其中的ShoppingCart对象进行持久化。
在JavaBean中除了可以定义get方法和set方法,也可以像普通Java类那样定义其他完成特定功能的方法。
以下是一个JavaBean的例子,类名为CounterBean。在CounterBean类中定义了一个属性count,还定义了访问这个属性的两个方法:getCount()和setCount()。
package mypack; public class CounterBean{ private int count=0; public CounterBean(){} public int getCount(){ return count; } public void setCount(int count){ this.count=count; } } 假定把CounterBean类发布到helloapp应用中,它的存放位置是:
helloapp/WEB-INF/classes/mypack/CounterBean.class