在jsp页面中使用JavaBean

1.JavaBean

Javabean是一个使用java编写的能够重复利用、跨平台的软件组件。能够将Javabean看作一个具有必定功能的黑盒子,它的主要特性就是实现细节都封装起来。实际上Javabean是描述java的组件模型,在该模型中,Javabean组件能够修改或与其余组件组合以生成新组件或完整的应用程序。Javabean一种java类,是能够经过封装成为具体某种功能或者处理某个业务的对象。
jsp对于在web应用中集成Javabean组件提供了完善的支持,这种支持不只能缩短开发时间(能够直接利用经测试的可信任的组件,避免重复开发),也是jsp应用带来了更多的可伸缩性。Javabean组件能够用来执行复杂的计算任务,或负责与数据库的交互,以及数据提取等。
Javabean类从形式上与通常的Java类差异不大,但须注意如下特征和要求:
(1)bean类必须有一个零参数(默认)构造函数。空构造函数在jsp元素建立bean时被调用。能够显式的定义一个零参数构造函数,也能够省略全部的构造函数,系统便会自动建立一个空的构造函数
(2)依照Javabean规范,在Javabean类中,为了令外界可访问字段xxx,并且不破坏封装的要求,不该当将其定义成public可见域,而是应当为其定义getXxx,setXxx方法,做为对应字段的存储方法,对于布尔字段,一般使用isXxx方法来查询字段值。这种封装到访问器中的字段称为属性,而getXxx、setXxx方法称为访问器
在jsp中使用一个Javabean以前,要先定义一个合法的Javabean类。该类必须具备一个默认构造函数,而且全部的字段只能经过访问器访问。若是人才管理系统的人才信息UserEntity实体类就具有了Javabean类特征,能够当作是一个一个Javabean使用:
//人才信息实体类
public class UserEntity {
private int id = 1;//职工编号
private String name="";//名称
private String sex="";//性别
private String birth ="";//生日
private String degree ="";//学位
private String in_date="";//入公司日期
private String trans_date="";//转正日期
private String dept="";//隶属部门
private String interest="";//兴趣爱好
private String specialty="";//特长
//setter和getter方法
.......

2.Javabean属性

Javabean属性用于描述Javabean的状态,如年龄,名称,电子邮件等。根据Javabean所处的环境,能够经过多种方式使用属性,能够在Javabean运行时经过getXxx和setXxx方法来改变其属性。
在Javabean设计中,按照属性的不一样做用分为如下几类,其中简单属性和索引属性比较经常使用。
(1)简单(Simple)属性。一个Simple类型的属性表示一个伴随有一对getXxx()、setXxx()方法的变量。属性的名称与该属性相关的getXxx()、setXxx()方法相对应。如如下代码定义一个名为id的属性:
private int id = 1;//职工编号
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}

(2)索引(Indexed)属性。一个Indexed类型的Javabean属性表示一个数组值,使用与该属性相对应的setXxx方法和getXxx方法能够存取数组只能怪某个元素的数值。同时也能够使用另外两个同名方法一次设置得到整个数组的值,即属性的值,例如:
private int[] ids = {1,2,3,4,5};//职工编号
public int[] getIds() {
return ids;
}
public void setIds(int[] ids) {
this.ids = ids;
}
public int[] getIds(int index) {
return ids[index];
}
public void setIds(int index,int id) {
this.ids[index] = id;
}
(3)绑定(Bound)属性。Javabean组件Bound类型的属性具备以下特性:当该属性的值发生变化时,必须经过其余的Javabean组件对象。每当Bound属性的值改变时,会激发有个PropertyChange事件,改时间封装了发生属性改变的事件的属性名、属性的原值,属性变化后的新值,这个时间将被传递到订阅了该事件的其余Javabean组件中,之余接收到该事件的Javabean组件对象会作出何种动做则由组件本身决定。
(4)约束属性(Constrained)。Javabean组件的Constrained类型的属性具备如下性质:当这个属性的值将要发生变化的时候,与这个属性已经创建了某种监听关系的其余java对象 都有权否决属性值的改变。

3.zaijsp中使用Javabean

在jsp页面中使用Javabean,主要涉及<jsp:useBean>,<jsp:setProperty>和<jsp:getProperty>3个jsp动做元素。
(1)实例化Javabean。jsp的动做元素<jsp:useBean>用于在jsp页面中实例化一个Javabean组件,这个实例化Javabean组件对象能够在这个jsp页面的其余地方被调用。
<jsp:useBean>的基本语法以下:
<jsp:useBean id="name" scope="page|request|session|application" class="className"/>
其中id属性是用来设定Javabean的名称,利用id能够识别同一个jsp页面中使用的不一样JavaBean组件实例,class属性指定jsp引擎查找Javabean字节码的路径,通常是这个Javabean所对应的Javabean类名。如:com.company.UserEntity;scope属性用于指定Javabean实例对象的生命周期,也是Javabean的有效做用范围,scope的值能够是page,request,session和application。
如:
<jsp:useBean id="user2" scope="page" class="com.communal.UserEntity"></jsp:useBean>

id="user2"是指定Javabean的名称或标识,用于类实例的名称,scope="page"表示该Javabean的做用范围,page表示只在本jsp页面范围内可用,class="com.communal.UserEntity"则说明了该Javabean的类名
(2)存取Javabean的属性。在jsp页面中使用<jsp:useBean>将Javabean组件对象实例化后,就能够对它的属性进行存取,分别使用动做元素<jsp:setProperty>和<jsp:getProperty>
<jsp:setProperty property="propertyName" name="name" value=“string”/>
其中name用来指定Javabean的名称,这个Javabean必须首先使用<jsp:useBean>来实例化,它的值应与<jsp:useBean>操做中的id属性的值同样。property属性被用来指定Javabean须要设置属性的名称。value属性是要赋给Javabean由property指定名称的属性值。

<jsp:useBean id="user2" scope="session" class="com.communal.UserEntity"></jsp:useBean>
<jsp:setProperty property="*" name="user2"/>

这是Javabean的一个强大功能:当<jsp:setProperty>动做元素property属性的值为“*”时,表示但愿jsp引擎将用户请求参数与Javabean进行自动匹配。当用户请求的参数名称与Javabean的属性名称相匹配时,自动完成属性赋值。若是request对象的参数值中有空值,那么对应的Javabean属性将不会设定任何值。一样,若是Javabean中有一个属性没有与之对应的request参数值,那么这个属性一样也不会设定。
<jsp:getProperty>操做搭配<jsp:useBean>操做一块儿使用,能够获取某个Javabean组件对象的属性值,并使用输出方法将这个值输出到页面。
<jsp:getProperty>动做的语法格式以下:
<jsp:getProperty property="propertyName" name="BeanName" />
其中,name指定Javabean的名称,须要注意name指定的Javabean组件对象必须已经使用<jsp:useBean>实例化;property:用来指定要读取的Javabean组件对象的属性的名称。
Javabean在服务器上存在的形式是某个类的实例对象,于是使用<jsp:getProperty>动做等效于直接使用该对象的getXxx方法取得属性值,如:
<%=beanName.getPropertyName()%>