《第9章 JSP与JavaBeans编程.ppt》由会员分享,可在线阅读,更多相关《第9章 JSP与JavaBeans编程.ppt(35页珍藏版)》请在课桌文档上搜索。
1、第9章 JSP与JavaBeans编程,重点内容:为什么要使用JavaBeans 实现简单的JavaBeans在页面中使用JavaBeans通过JavaBeans实现数据库的访问JSP与JavaBeans编程实例,一、为什么要使用JavaBeans,JavaBean是一个软件组件,被设计成可以在不同的环境里重复使用。Bean的功能没有限制,例如:检查一个文件的拼写预测一只股票的业绩。图形用户界面上的一个按钮。实时多媒体解码软件。一个Bean可以被设计成在用户工作站上独立工作,可以与其他一组分布式组件协调工作。,1、什么是JavaBeans,JavaBeans就是一个独立的控件,即具有独立的功能
2、,可以重复使用,并且可以与其他控件通讯。将JavaBeans按功能分类,可分为“可视化的JavaBeans”和“非可视化的JavaBeans”两类。可视化的JavaBeans就是在画面上可以显示出来的JavaBeans。通过属性接口接收数据并根据接收的信息将数据显示在画面上,这就是可视化JavaBeans的功能。一般用到的组件大部分都是可视化的。非可视化的JavaBeans,就是没有GUI图形用户界面的JavaBeans。在JSP程序中常用来封装事务逻辑、数据库操作等等,可以很好地实现业务逻辑和前台程序(如jsp文件)的分离,使得系统具有更好的健壮性和灵活性。,2、JavaBeans的种类,二
3、、实现简单的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 publi
4、c void setHello(String hello)8 this.hello=hello;9 10,下面的代码是index.jsp,这段JSP程序将调用前面创建好的Hello World组件。1234589 JSP Page10 11 12 13 14 15,三、在页面中使用JavaBeans,1Simple属性一个简单属性表示一个伴随有一对get/set方法的变量。属性名与和该属性相关的get/set方法名对应。例如,如果有setX和getX方法,则暗指有一个名为“X”的属性。如果有一个方法名为isX,则通常暗指“X”是一个布尔属性(即X的值为true或false)。例:1public
5、 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
6、,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(Co
7、lor.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,3Constrained属性一个JavaBeans的constrained属性,是指当这个属性的
8、值要发生变化时,与这个属性已建立了某种连接的其它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 setPric
9、eInCents(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),
10、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,4Bound属性一个Bound属性是指当该种属性的值发生变化时,要通知其它的对象。每
11、次属性值改变时,这种属性就点火一个PropertyChange事件。事件中封装了属性名、属性的原值、属性变化后的新值。这种事件是传递到其它的Bean,至于接收事件的Bean应做什么动作由其自己定义,例:,1import java.awt.Canvas;2import java.beans.PropertyChangeListener;3import java.beans.PropertyChangeSupport;45public class example3 extends Canvas 67 String ourString=Hello;8 private PropertyChangeSu
12、pport changes=new PropertyChangeSupport(this);910 public void setString(string newString)11 String oldString=ourString;12 ourString=newString;13 changes.firePropertyChange(ourString,oldString,newString);14,1516 public String getString()17 return ourString;18 1920 public void addPropertyChangeListene
13、r(PropertyChangeLisener l)21 changes.addPropertyChangeListener(l);22 2324 public void removePropertyChangeListener(PropertyChangeListener l)25 changes.removePropertyChangeListener(l);26 27,1的作用是定义生成和使用Bean的环境。即如果使用,就可以定义Bean的名称、类型、以及使用期限等内容。格式如下:范例,2、在JSP中使用JavaBeans,2是设定通过定义的Bean对象属性的标记。的语法格式有以下4种:
14、字符串常量:或请求参数:或匹配Bean中指定的属性:或表达式:”/,name属性:name属性用来指定JavaBeans的名称,这个JavaBeans必须首先使用操作指令来实例化。property属性:property属性被用来指定JavaBeans需要定制的属性的名称。如下图所示Param属性:使用request中的一个参数值来指定Bean中的一个属性值。Value属性:使用指定的值来设定Bean属性。,3动作用于从一个JavaBeans中获取某个属性的值,无论原先这个属性是什么类型的,都将被转换为一个String类型的值。语法格式为:Name属性这个属性用来指定JavaBeans的名称,这
15、个JavaBeans组件对象必须已经使用操作指令实例化了。Property属性Property属性用来指定要读取的JavaBeans组件对象的属性的名称。,4JavaBeans的作用域JavaBeans组件设定的Scope属性,使得JavaBeans组件对于不同的任务具有不同的作用域。Scope属性具有4个可能的值分别是page、request、session和application,分别代表JavaBeans的4种不同的作用域。Page的作用域Page Scope类型的JavaBeans组件的作用域为JSP 程序的运行周期,当JSP程序运行结束那么该JavaBeans组件的生命周期也就结束了
16、。PageScope类型的JavaBeans组件程序的作用范围只限于当前的JSP程序中,它无法在别的JSP程序中起作用,对应于不同的客户端请求,服务器都会创建新的JavaBeans组件对象,而且,一旦客户端的请求执行完毕,那么该JavaBeans对象会马上注销,无法为别的客户端请求所使用。,167 8 9 10 11 Day of month:is12 Year:is13 Month:is14 Time:is15 16 DST Offset:is17 Zone Offset:is18 19 20 21,Request的作用域当JavaBeans的Scope属性值被设为request时,和都会把
17、JavaBeans带到下一页面。例:调用beanPage.jsp页,Session的作用域如果一个JavaBeans组件的Scope 属性值为session,这一类型的JavaBeans组件的作用域就是某个会话过程所经历的时间,例如:,178第二页910你已经访问了11个页面,Application的作用域如果JavaBeans的Scope属性被指定为application,那么它的作用域和Application对象一样。使用这种类型的JavaBeans组件,可以在多个用户之间共享全局信息。1678您是第9位访客,几个不同属性的作用域的区别例。1package test;2import jav
18、a.util.Date;3import java.text.*;4public class Common 5 Date d=new Date();6 public String now(String s)7 SimpleDateFormat formatter=new SimpleDateFormat(s);8 return formatter.format(d);9 10date.jsp清单如下:12,通过JavaBeans来访问数据库步骤为:(1)建立一个JavaBeans组件,将它设置为JavaBeans的类文件(2)使用JavaBeans来完成与数据库的连接实例介绍在JSP中利用Jav
19、aBeans通过JDBC-ODBC Bridge来访问数据库。(1)创建一个JavaBeans,命名为DBCon.java,并保存在支持JSP的Web服务器的JavaBeans包下,DBCon.java文件主要是封装与数据库的连接操作。下面是DBCon.java的代码,在JSP程序中将调用它。,四、通过JavaBeans实现数据库的访问,1package com.jsp.chap09;2import java.io.*;3import javax.servlet.http.*;4import java.sql.*;5public class DBCon implements HttpSessi
20、onBindingListener 6/当变量加入Session时自动执行此函数7 public void valueBound(HttpSessionBindingEvent event)8 9/Session变量关闭时执行此函数10 public void valueUnbound(HttpSessionBindingEvent event)11 12 private Connection con=null;13 public DBCon()14/建立数据库链接15 BulidConnection();16 17/建立数据库链接的方法18 private void BulidConnect
21、ion()19 try 20/加载数据库驱动程序21 Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);22/与数据库连接,23 con=DriverManager.getConnection(jdbc:odbc:user);24 catch(Exception ex)25 System.out.println(ex.toString();26 27 28 public Connection getConnection()29/如果con为null,则重新建立连接30 if(con=null)31 BulidConnection();32 33 retur
22、n con;34 35 public void close()36 try 37/关闭con38 con.close();39 con=null;40 catch(SQLException ex)41 42 43,当执行查询操作时,将打开index.jsp页面,并显示出数据库中的相应的信息,下面是index.jsp文件的代码,代码中调用了前面编译好的JavaBeans。123456 通过Javabeans访问数据库7 8 9 10 通过Javabeans访问数据库11 12 13 14 15 16,24 25 26 编号27 姓名28 年龄29 性别30 31 35 36 37 38 39 4
23、0 41 48 49 50 51,例:实现了简单的购物车功能,用户对商品进行选择购买,在主页面中选择商品后,如果不满意,可以在商品确认页面中将该商品删除掉,具有一定的互动性。效果如图所示。,数据库的表结构如表9-1所示,五、JSP与JavaBeans编程实例,CuCart.java文件定义了购物车的基本模型。另外,CuCart.java文件和编译好的类文件都必须放置在test文件夹中,下面是CuCart.java文件的代码:1package com.jsp.chap09;2import javax.servlet.http.*;3import java.util.Vector;4import
24、java.util.Enumeration;5public class CuCart 6 Vector v=new Vector();7 String submit=null;8 String item=null;9 private void addItem(String name)10 v.addElement(name);11,12 private void removeItem(String name)13 v.removeElement(name);14 15 public void setItem(String name)16 item=name;17 18 public void
25、setSubmit(String s)19 submit=s;20 21 public String getItems()22 String s=new Stringv.size();23 v.copyInto(s);24 return s;25 26 public void processRequest(HttpServletRequest request)27 if(submit=null)28 addItem(item);29 30 if(submit.equals(添加)31 addItem(item);32 else if(submit.equals(删除)33 removeItem
26、(item);34 35 reset();36 37 private void reset()38 submit=null;39 item=null;40 41;,下面是index.jsp文件的代码,代码中定制了程序中的商品信息:123 4 购物车5 6 7 8 9 10 请添加或删除商品:11 12 添加商品:13 14 桑塔纳2000豪华型15 奥拓-都市贝贝16 红旗V617 爱国者MP3-F15818 联想V48数码相机19 联想G828手机20 JSP高级应用21 6500帧的“帝国战车”鼠标 22 23 24 25 26 27 28 29 30,carts.jsp文件会接收从index.jsp文件传送过来的商品信息,并在浏览器中显示出来,然后再调用index.jsp文件,增强了互动性,使客户可以对商品进行选择,下面是代码:123 商品选择4 5 6 7 10 11 您已选购的商品:12 13 17 18 21 22 23 24 25/在carts.jsp文件中包含index.jsp文件,使carts.jsp中显示出index.jsp的内容26 27 28 29,感谢,