[b][size=small;]1. JavaBean的基本概念[/size][/b]
JSP最强有力的一个方面就是能够使用JavaBean组件体系。JavaBean往往封装了程序的页面逻辑,它是可重用的组件。通过使用JavaBean,可以减少在JSP中脚本代码的使用,这样使得JSP易于维护,易于被非编程人员接受。

JavaBean体系结构是第一个全面地基于组件的标准模型之一。JavaBean是描述Java的软件组件模型,有点类似于Microsoft的COM组件概念。JavaBean组件是Java类,这些类遵循一个接口格式,以便于使方法命名、底层行为及继承或实现的行为能够把类看做标准的JavaBeans组件进行构造。

JavaBean具有以下特性:


[list]
[*]可以实现代码的重复利用。

[*]易维护,易使用,易编写

[*]可以在支持Java的任何平台上工作,而不需要重新编译

[*]可以在内部网内或者网络之间进行传输

[*]可以以其他部件的模式进行工作。


[/list]


JavaBean传统的应用在于可视化领域。如AWT(窗口抽象工具集)下的应用。现在,JavaBean更多的应用在于不可视化领域,它在服务器端应用方面表现了越来越强的生命力。不可视化的JavaBean和可视化JavaBean同样使用属性和事件。不可视化的JavaBean在JSP程序中常用来封装事务逻辑、数据库操作等,可以很好地实现业务逻辑和前台程序的分离,使得系统具有更好的健壮性和灵活性。

注意:JavaBean组件和企业级JavaBean(Enterprise JavaBean,EJB)组件的概念是完全不同的。EJB是J2EE的核心技术,它为开发服务器端应用程序组件提供了一个模型,利用这个模型来创建可移植与分布式企业应用程序服务器或组件。Enterprise JavaBean是一个用来创建分布式、服务器端及基于Java的企业应用程序组件的功能强大的组件模型。


[b]JavaBean的属性[/b]

属性是Bean组件内部状态的抽象表示。JavaBean的属性可以分为以下4类:


[list]
[*]Simple(简单的)

[*]Indexed(索引的)

[*]Bound(绑定的)

[*]Constrained(约束的)


[/list]


[b]1.Simple(简单的)[/b]

一个简单属性表示一个伴随有get/set方法的变量,它依赖于标准命名约定来定义getter方法和setter方法

它的使用语法如下:

public void set(value);

public get();

public boolean is();

对于Boolean类型的属性,除了可以使用getter方法外,还可以使用isXXX方法来获得这个属性

例如,对于“userName”属性,假如这个属性的类型是String,我们可以采用下面的方法:

public void setUserName(String value);

public String getuserName();

可以设置的属性是读写、只读或者只写。getter方法和setter方法可以使之具有读写属性;

getter方法将允许你指具有读属性;setter方法将允许你只具有写属性。


例如:

public class SimpleBean{ 
    private String type; 
    private Boolean debug=false; 

    public String getType(){ 
       return this.type; 
        } 
    public void setType(String type){ 
        this.type=type; 
       } 
    public boolean isDebug(){ 
        return this.debug; 
       } 
     public void setDebug(boolean debug){ 
         this.debug=debug; 
         } 
   }

在上面的代码中,由于debug的类型是Boolean,那么可以使用isDebug方法来获得这个属性。在这里isDebug和getDebug是一样的。它们之间可以进行内部转换。


[b]2.Indexed(索引的)[/b]



一个indexed索引属性表示一个数组值,同上所述的Simple简单属性一样,可以使用get/set方法取得数组中的值。



它的使用语法如下:


public void set(int index,value); 
  public void set(value); 
  public get(); 
  public get(); 
  publicget(int index);



例如:



public class IndexBean{ 
   private String[] type=new String[]{"jsp","ejb","servlet","javamail","jca";,"jdbc"}; 

public String getType(){ 
   return this.type; 
   } 

public void setType(String[] type){ 
  this.type=type; 
   } 

public void setType(int index,String value){ 
  type[index]=value; 
} 
  public String getType(int index){ 
  return type[index] 
  } 
   }

有了以上的Bean,我们就可以这样使用它了:



setType(4,"JavaBean"); 
String type=getType(5); 
String[]s=getType();


3. Bound(绑定的)


绑定属性提供一种机制,即通知监听器一个JavaBean组件的属性发生了改变。监听器实现了PropertyChangeListener接口并接收由JavaBean组件产生的PropertyChangeEvent对象。PropertyChangeEvent对象包括一个属性名字、旧的属性值,以及每一个监听器可能要访问的新属性值。


JavaBean实现了addPropertyChangeListener()和removePropertyChangeListener()方法,以便加入和删除属性变化监听器。PropertyChangeSupport.firePropertyChange()方法可以被使用,并传递属性姓名、旧值及新值等信息。


这些属性在JavaBean图形编程中大量使用,而我们的目的是怎么在JSP中使用JavaBean。


4. Constrained(约束的)


约束属性和绑定属性类似,但是属性值的变化首先要被所有的监听器验证之后,值的变化才能由JavaBean组件发生作用。一个JavaBean的约束属性是指当这个属性的值要发生变化时,与这个属性已经建立了某种连接的其他Java对象可否决属性值的改变。任何一个监听器都可以否决属性变化,JavaBean组件同意不使属性变化才能生效。


监听器实现了VetoableChangeListener接口,并接收由JavaBean组件产生的PropertyChangeEvent对象。JavaBean组件可以使用VetoableChangeSupport辅助程序类激活由监听器接收的实际事件。


使用一个JavaBean组件实例的引用构造VetoableChangeSupport对象,JavaBean实现了用addVetoableChangeLister()方法和removeVetoableChangeLister()方法加入或者删除可否决属性变化监听器。VetoableChangeSupport.fireVetoableChange()方法可以用来传递属性的名字、旧属性值和新的属性值等信息。


和绑定的属性一样,这里只介绍它的概念,在JSP开发中很少使用这种属性。