资源描述
单击此处编辑母版文本样式,第二级,第三级,第四级,单击此处编辑母版标题样式,第,9,章,JSP与JavaBeans编程,重点内容:,为什么要使用JavaBeans,实现简单的JavaBeans,在页面中使用JavaBeans,通过JavaBeans实现数据库的访问,JSP与JavaBeans编程实例,一、,为什么要使用JavaBeans,JavaBean,是一个软件组件,被设计成可以在不同的环境里重复使用。,Bean,的功能没有限制,例如:,检查一个文件的拼写,预测一只股票的业绩。,图形用户界面上的一个按钮。,实时多媒体解码软件。,一个,Bean,可以被设计成在用户工作站上独立工作,,可以与其他一组分布式组件协调工作。,1,、,什么是JavaBeans,JavaBeans,就是一个独立的控件,即具有独立的功能,可以重复使用,并且可以与其他控件通讯。,将,JavaBeans,按功能分类,可分为,“,可视化的,JavaBeans,”,和,“,非可视化的,JavaBeans,”,两类。,可视化的,JavaBeans,就是在画面上可以显示出来的,JavaBeans,。通过属性接口接收数据并根据接收的信息将数据显示在画面上,这就是可视化,JavaBeans,的功能。一般用到的组件大部分都是可视化的。,非可视化的,JavaBeans,,就是没有,GUI,图形用户界面的,JavaBeans,。在,JSP,程序中常用来封装事务逻辑、数据库操作等等,可以很好地实现业务逻辑和前台程序(如,jsp,文件)的分离,使得系统具有更好的健壮性和灵活性。,2,、,JavaBeans的种类,二、,实现简单的JavaBeans,如何用,Eclipse,创建一个,JavaBeans,:,(,1,)首先打开,Eclipse,程序,然后执行,“,文件,”,|,“,新建,”,|,“,类,”,命令,打开,Object Gallery,对话框,如图所示。,(,2,)在源代码中定义变量,hello,,代码为:,String hello=,”,;,然后,选择,“,源代码,”,|,“,生成,Getter,和,Setter,”,选项,如图所示。,设置完成后,生成代码如下:,1package com.jsp.chap09;,2public class Hello,3 String hello=;,4 public String,getHello,(),5 return hello;,6 ,7 public void,setHello(String,hello),8,this.hello,=hello;,9 ,10,下面的代码是,index.jsp,,这段,JSP,程序将调用前面创建好的,Hello World,组件。,1,2,3,4,5,8,9 JSP Page,10 ,11 ,12 ,13,14 ,15,三、,在页面中使用JavaBeans,1Simple属性,一个简单属性表示一个伴随有一对get/set方法的变量。属性名与和该属性相关的get/set方法名对应。例如,如果有setX和getX方法,则暗指有一个名为,“,X,”,的属性。如果有一个方法名为isX,则通常暗指,“,X,”,是一个布尔属性(即X的值为true或false)。,例,:,1public class example1 extends Canvas,2 /属性名为ourString,类型为字符串,3 string ourString=Hello;,4/example1()是example1的构造函数,5 public example1(),6 setBackground(Color.red);,7 setForeground(Color.blue);,8 ,9 public void setString(String newString),10 ourString=newString;,11 ,12 public String getString(),13 return ourString;,14 ,15,1,、,JavaBeans的属性,2Indexed属性,一个Indexed属性表示一个数组值。使用与该属性对应的set/get方法可取得数组中的数值。该属性也可一次设置或取得整个数组的值。,例:,1import java.awt.Canvas;,2import java.awt.Color;,3public class example2 extends Canvas,4/dataset是一个indexed属性,5 int dataSet=1,2,3,4,5,6;,6 public example2()/*设置整个数组*/,7 setBackground(Color.red);,8 setForeground(Color.blue);,9 ,10 public void,setDataSet(int,x)/*,设置数组中的单个元素值*,/,11,dataSet,=x;,12 ,13 public void,setDataSet(int,index,int,x)/*,设置整个数组值*,/,14,dataSetindex,=x;,15 ,16 public,int,getDataSet,(),17 return,dataSet,;,18 ,19 public,int,getDataSet(int,x),20 return,dataSetx,;,21 ,22,3,Constrained,属性,一个,JavaBeans,的,constrained,属性,是指当这个属性的值要发生变化时,与这个属性已建立了某种连接的其它,Java,对象可否决属性值的改变。,Constrained,属性的监听者通过抛出,PropertyVetoException,来阻止该属性值的改变。例:,1public class,JellyBean,extends Canvas,2 private,PropertyChangeSupport,changes=new,PropertyChangeSupport(this,);,3 private,VetoableChangeSupport,Vetos,=new,VetoableChangeSupport(this,);,4 .,5 public void,setPriceInCents(int,newPriceInCents)throws,PropertyVetoException,6,int,oldPriceInCents,=,ourPriceInCents,;,7,vetos.fireVetoableChange(priceInCents,new,Integer(OldPriceInCents),new,Integer(newPriceInCents,);,8,ourPriceInCents,=,newPriceInCents,;,9,changes.firePropertyChange(priceInCents,new,Integer(oldPriceInCents),new,Integer(newPriceInCents,);,10 ,11 public void,addVetoableChangeListener(VetoableChangeListener,l),12,vetos.addVetoableChangeListener(l,);,13 ,14 public void,removeVetoableChangeListener(VetoableChangeListener,l),15,vetos.removeVetoableChangeListener(l,);,16 ,17 .,18,4,Bound,属性,一个,Bound,属性是指当该种属性的值发生变化时,要通知其它的对象。每次属性值改变时,这种属性就点火一个,PropertyChange,事件。事件中封装了属性名、属性的原值、属性变化后的新值。这种事件是传递到其它的,Bean,,至于接收事件的,Bean,应做什么动作由其自己定义,例:,1import,java.awt.Canvas,;,2import,java.beans.PropertyChangeListener,;,3import,java.beans.PropertyChangeSupport,;,4,5public class example3 extends Canvas,6,7 String,ourString,=Hello;,8 private,PropertyChangeSupport,changes=new,PropertyChangeSupport(this,);,9,10 public void,setString(string,newString,),11 String,oldString,=,ourString,;,12,ourString,=,newString,;,13,changes.firePropertyChange(ourString,oldString,newString,);,14 ,15,16 public String,getString,(),17 return,ourString,;,18 ,19,20 public void,addPropertyChangeListener(PropertyChangeLisener,l),21,changes.addPropertyChangeListener(l,);,22 ,23,24 public void,removePropertyChangeListener(PropertyChangeListener,l),25,changes.removePropertyChangeListener(l,);,26 ,27,1,的作用是定义生成和使用Bean的环境。即如果使用,就可以定义Bean的名称、类型、以及使用期限等内容,。,格式如下:,范例,2,、,在JSP中使用JavaBeans,2,是设定通过定义的Bean对象属性的标记。的语法格式有以下4种:,字符串常量:,或,请求参数:,或,匹配Bean中指定的属性:,或,表达式:,name属性,:,name属性用来指定JavaBeans的名称,这个JavaBeans必须首先使用操作指令来实例化。,property属性,:,property属性被用来指定JavaBeans需要定制的属性的名称。,如下图所示,Param,属性,:,使用,request,中的一个参数值来指定,Bean,中的一个属性值。,Value,属性,:,使用指定的值来设定,Bean,属性。,3,动作用于从一个JavaBeans中获取某个属性的值,无论原先这个属性是什么类型的,都将被转换为一个String类型的值。语法格式为:,Name,属性,这个属性用来指定,JavaBeans,的名称,这个,JavaBeans,组件对象必须已经使用,操作指令实例化了。,Property,属性,Property,属性用来指定要读取的,JavaBeans,组件对象的属性的名称。,4JavaBeans的作用域,JavaBeans组件,设定,的Scope属性,使得JavaBeans组件对于不同的任务具有不同的作用域。Scope属性具有4个可能的值分别是page、request、session和application,分别代表JavaBeans的4种不同的作用域。,Page,的作用域,Page Scope,类型的,JavaBeans,组件的作用域为,JSP,程序的运行周期,当,JSP,程序运行结束那么该,JavaBeans,组件的生命周期也就结束了。,PageScope,类型的,JavaBeans,组件程序的作用范围只限于当前的,JSP,程序中,它无法在别的,JSP,程序中起作用,对应于不同的客户端请求,服务器都会创建新的,JavaBeans,组件对象,而且,一旦客户端的请求执行完
展开阅读全文