JSP与JavaBean

时间:2017-10-20 09:00

1

  综述:JavaBean体系结构是第一个全面的基于组件的标准模型之一,为Java类提供了定义方法、事件、属性的方法,以便在设计时允许外部的操作和定制。JavaBean组件是Java类,这些类遵循一个统一的接口格式,以便该类的方法命名,底层行为以及具体实现能够符合标准的JavaBean组件构造方式。这些组件的容器能以标准方式与JavaBean进行交互,使得JavaBean可以部署在多种设计工具和运行环境中。

  如何定制JavaBean属性?

  一个标准的JavaBean组件应该满足以下几点特性:

  (1)持续性
  持续性允许一个构件保存它的状态,因此它还能被重新创建。利用持续性机制,表单构件可存为一个文件,并在其它时间被打开,使以前的数据、公式和设置完好无损。JavaBeans持续性使用Java1.1环境对象序列化机制产生I/O流并在以后恢复。构件创建者只需实现可序列化的接口以使构件保持持续。持续的流可能为一个Java文件、一网络连接或更有趣一些,一个由其它构件模型提供的流。若JavaBean构件嵌入一个ActiveX或OpenDoc构件中,Bean通过相关的"桥"提供持续的流。
  (2)制定性
  制定是JavaBean构件的新特性之一。简而言之,Bean的创建者不仅创建运行状态的构件,而且还通过扩展Java.awt.Component类创建了UI工具箱的类。这个UI工具箱可被用来制定Bean的一个实例。利用其它的构件模型,开发环境、可视化开发工具或任何其它的都必须提供所有对该构件的制定逻辑。JavaBean构件可随同自己的UI工具箱类发布,智能的制定该构件。开发环境可制定任何在别人创建的构件。开发工具只是寻找相关的制定器类并在其窗口中创建一个它的实例,而不必需要其它的。
  (3)自查性
  对于能在开发环境中复用的Java构件,需要有查询一个Bean能做些什么和产生和监听事件的类型。在JavaBeans规范中,这被称为规范并且是Java1.1提供的基本的反映机制的扩展。反映机制允许运行状态进行查询以得到对象的类并由此得到其公开的方法和变量。Bean的自查机制进行了扩展,查找指定的设计方式的使用。通过BeanInfo类,Bean作者可以暴露要暴露的公共方法和变量。当作为构件复用现存Java代码时,BeanInfo类也是很有用的。编程人员可用创建一个BeanInfo类,具体指定要用到的得到和设置属性的方法名,由此覆盖缺省的自查。
  (4)封装性
  JavaBean构件常被打包为JAR文件。JAR的格式允许构件作为一个单独的实体,随同其支持类(如制定编辑器、BeanInfo和其它资源文件)被打包。开发环境必须了解JAR的格式并使用其manifest文件一个JAR中所包括的Bean。包含一个JavaBean构件的JAR还可能包括该构件的序列化版本。若这个持续的实例存在,便使用它。这样,提供商就可以发布该构件的可用的或制定好的版本。
  JavaBean的属性与一般Java程序中所指的属性,或者说与所有面向对象的程序设计语言中对象的属性是一个概念,在程序中的具体体现就是类中的变量。在JavaBean设计中,按照属性的不同作用又细分为四类:Simple,Index,Bound与Constrained属性。

  1. Simple属性
  一个简单属性表示一个伴随有一对get/set方法(C语言的过程或函数在Java程序中称为"方法")的变量。属性名与和该属性相关的get/set方法名对应。例如:如果有setX和getX方法,则暗指有一个名为"X"的属性。如果有一个方法名为isX,则通常暗指"X"是一个布尔属性(即X的值为true或false)。例如在下面这个程序中:

public class alden1 extends Canvas {
string ourString= "Hello"; //属性名为ourString,类型为字符串
public alden1(){// alden1的构造函数,与C++中构构造函数的义相同
setBackground(Color.red);
setForeground(Color.blue);
}
/* "set"属性*/
public void setString(String newString) {
ourString=newString;
}
/* "get"属性 */
public String getString() {
return ourString;
}
}
 

  2. Indexed属性
  一个Indexed属性表示一个数组值。使用与该属性对应的set/get方法可取得数组中的数值。该属性也可一次设置或取得整个数组的值。例:

public class alden2 extends Canvas {
int[] dataSet={1,2,3,4,5,6}; // dataSet是一个indexed属性
public alden2() {
setBackground(Color.red);
setForeground(Color.blue);
}
/*
 

  设置整个数组

 */
public void setDataSet(int[] x){
dataSet=x;
}
/*
 

  设置数组中的单个元素值

*/
public void setDataSet(int index, int x){
dataSet[index]=x;
}
/*
 

  取得整个数组值

*/
public int[] getDataSet(){
return dataSet;
}
/*
 

  取得数组中的指定元素值

*/
public int getDataSet(int x){
return dataSet[x];
}
}