爱问 爱问共享资料 爱问分类
首页 > > > JSP高级编程(希望版).pdf

JSP高级编程(希望版).pdf

JSP高级编程(希望版).pdf

上传者: 筱筱
7次下载 0人收藏 暂无简介 简介 2011-06-27 举报

简介:当前资料暂无简介!

九五国家重点电子出版物规划项目希望计算机知识普及系列编程高手成长之路6AdvancedProgrammingwithJavaServerPagesJSP高级编程北京希望电子出版社总策划北京大学com工作室创作黄理洪亮曹林有张勇等编著特点z指导性和实用性强z范例丰富典型z附有丰富的实例源码重点内容zJSP技术与J2EE技术zJSP技术与XML技术zJDBC新技术及其在JSP/Servlet程序中的应用zJSP网络程序设计2001内容简介这是一本面向中高级编程人员的自学指导书其重点放在JSP和其他技术的综合使用方面全书可分为四大部分第一部分是JSP技术与J2EE技术第一章至第四章着重介绍J2EE技术的代表EJB技术的基本原理与开发EJB组件的方法第二部分是JSP技术和XML技术第五章至第八章主要介绍了XML技术与JSP技术联合的方式之一TagLibrary第二部分后面的两章是针对市场上最流行的两个TagLibrary的详细介绍读者可以把它当作参考手册来使用本作品的第三部分是JDBC新技术及其在JSP/Servlet程序中的应用第九章和第十章主要介绍最新的JDBC技术如JDBC2.0/JDBC3.0的新特性以及鲜为人知而又十分重要的JDBCOptionalPack本作品的第四部分是JSP网络程序设计着重介绍如何使用sun.net包JavaMailAPI开发访问各种网络服务的JSP程序本作品四个部分之间互为关联又相对独立读者可以选择阅读某一个部分或者是通读全文本版作品是由经验丰富的使用JSP组建网站的程序员编著内文附有丰富的实例源码供读者学习参考全书具有语言简明扼要内容丰富范例典型理论与实践相结合的特点不但是从事用JSP进行网站开发和设计的初中级读者的自学指导书同时也可作为社会网页设计或编程培训班的教材说明与本书配套的面向初中级用户的书JSP深入编程也已正式出版欢迎选购本版CD为配套书系列书名书名总策划文本著作者责任编辑CD制作者CD测试者出版发行者地址经销九五国家重点电子出版物规划项目希望计算机知识普及系列编程高手成长之路6JSP高级编程AdvancedProgrammingwithJavaServerPages北京希望电子出版社北京大学com工作室创作黄理洪亮曹林有张勇等编著马红华希望多媒体开发中心希望多媒体测试部北京希望电子出版社北京中关村大街26号100080网址:www.bhp.com.cnE-mail:lwm@hope.com.cn电话:010-62562329,62541992,62637101,62637102,62633308,62633309发行010-62613322-215门市010-62613322-308编辑部各地新华书店软件连锁店排版CD生产者文本印刷者开本/规格版次/印次印数本版号定价希望图书输出中心杜海燕北京中新联光盘有限责任公司北京双青印刷厂787毫米1092毫米1/16开本38.75印张900千字2001年10月第1版2001年10月第1次印刷00015000册ISBN7-980007-78-655.00元本版CD说明凡我社光盘配套图书若有缺页倒页脱页自然破损本社负责调换声声声声明明明明本电子版不包括第8章内容请参看配套图书相关章节前言JSPJavaServerPages是目前十分流行的一种技术主要运行于开发服务端的脚本程序和动态生成网站的内容它与目前同样流行的ASP技术PHP技术是同样性质的同一层次的它们在网站的建设中所起到的作用是一样的但是JSP技术与后面两种技术相比有着十分突出的优越性关于JSP技术与ASP技术PHP技术的比较我们在书中另有论述这里只想强调一点JSP技术有J2EE平台支持发展前途不可限量众所周知J2EE平台提供了Java企业应用编程接口JavaEnterpriseAPIs为企业计算以及电子商务应用系统提供了有关的技术和强大的类库支持J2EE平台包含十几种技术JSP技术正是其中的一种核心技术J2EE的发展势头十分迅猛在可以预见的将来Sun的J2EE平台可能是唯一可以与微软的.Net构架相互抗衡的平台在这个意义上说基于J2EE平台的JSP技术与基于.Net平台的ASPASP+技术之争不正好就是J2EE平台与.Net平台之争的折射吗因此JSP技术以及它的基础J2EE技术十分值得我们去关注在国外采用JSP+J2EE技术构架电子商务网站已经是大行其道了应用得十分普遍在国内这一项技术还是方兴未艾采用这一项技术架构的网站还不多不过大致的趋势已经出现了这真是一个令人兴奋的消息为了帮助广大读者了解JSP/J2EE技术并掌握JSP/J2EE技术我们编写了JSP深入编程和JSP高级编程这两本书前者侧重于JSP技术的基础知识与基本应用后者侧重于JSP技术和其他技术联合使用本书正是其中第二本书本书按顺序讲述了以下知识点zJavaBeans的基础知识zEJB的结构框架z会话EJB的开发部署测试应用zCMP模式BMP模式的实体EJB的开发部署测试应用zJ2EE体系结构zCORBA,RMI,JNDI技术入门zXML,XSL,CSS语法介绍zWML,XHTML简介zXML+JSP的开发模式zTagLibrary的开发应用运行原理zjavax.servlet.jsp.tagext包的详细说明zJRunTagLibrary的使用手册zJakartaTagLibrary的使用手册zJDBC2.0/3.0新特性介绍zJDBCOptionalPack介绍含RowSet包CachedRowSet包的介绍zJSP网络程序开发访问SMTP,FTP,News等服务Socket技术应用介绍zJavaMail技术完全指南总的来说本书可以分为四大部分第一部分是JSP技术与J2EE技术第一章至第四章着重介绍J2EE技术的代表EJB技术的基本原理与开发EJB组件的方法第二部分是JSP技术和XML技术第五章至第八章主要介绍了XML技术与JSP技术联合的方式之一TagLibrary第二部分后面的两章是针对市场上最流行的两个TagLibrary的详细介绍读者可以把它当作参考手册来使用本书的第三部分是JDBC新技术及其在JSP/Servlet程序中的应用第9章和第10章主要介绍最新的JDBC技术如JDBC2.0/JDBC3.0的新特性以及鲜为人知而又用处极大的JDBCOptionalPack本书的第四部分是JSP网络程序设计着重介绍如何使用sun.net包JavaMailAPI开发访问各种网络服务的JSP程序本书这四个部分之间互为关联又相互独立读者可以单独阅读某一个部分或者是通读全书顾名思义本书不是关于JSP技术的入门书籍本书要求读者必须有JSP,Java基础否则阅读起来可能会有很大的困难作者建议读者不妨参考《JSP深入编程》因为这两本书是配套编写的在知识体系结构上有一定的承接性本书虽然名为JSP高级编程但是真正涉及到JSP程序编写技巧方面的章节并不多这是因为JSP技术的核心内容很少很少除了基本语法编译指令操作指令和内部对象以外就没有别的东西了要发挥JSP技术的长处开发功能强大的JSP程序单单靠JSP技术本身是不可能的JSP技术必须和其他相关的Java技术结合起来例如JDBC,EJB,RMI,CORBA,JavaMail等技术才有可能开发出功能强大的程序本书重点介绍的就是上述技术的基本原理和开发方法至于如何把这些技术和JSP技术结合起来开发运行于服务端的应用程序与JSP程序书中讲的很少但是读者应该有这方面的经验况且只要明了这些技术的基本原理与开发的方法把它们和JSP技术结合起来是一件十分简单的事情不需要浪费过多的笔墨去介绍这方面的知识当你读完本书以后我们不能够保证你一定能够成为JSP高手因为本书提到的技术虽然很多但是由于篇幅的关系以及其他的原因这些技术讲的都很肤浅只是相当于入门的水平读者如果想有更大的进步最好是深入研究本书所提到的技术找几个项目来做当你能够游刃有余地应用这几种技术于JSP程序的开发中时那时你才是真正的精通JSP的高手本书给读者指出努力的方向以及提供入门的知识剩下的就靠读者自身的努力了这就是本书命名为JSP高级编程的原因本书由北京大学com工作室组织编写由于时间仓促笔者的水平有限书中的谬误一定很多不足之处请读者指正本书的成功出版首先归功于本书的主要作者北大黄理同学他深厚的计算机理论积累和丰富的实践经验才使得本书兼具理论指导及实务操作性其工作的严谨态度以及出色的语言驾驭功底相信读者在阅读本书时自有体会其次还有感谢北大洪亮同学其出色的工作为本书增色不少也感谢其他许许多多人辛勤的劳动与无私的帮助轻易便可以列出很多北大计算机系的李积善水木清华smth.org的javafancy北大未名站的javalover还有ROBBYlz.lansnowleaf以及可爱的Rainbow本书技术支持的联系方式com_pku@263.nethttp//162.105.106.1628080注访问前需要事先mail联系以便启动服务器目录第一部分JSP技术与J2EE技术第1章JavaBeans组件技术1.1什么是JavaBeans1.2JSP中如何使用JavaBeans1.3JavaBeans的Scope属性1.4JavaBeans应用实例1.5本章小结第2章EnterpriseJavaBeans2.1EJB技术简介2.2EJB体系结构(一)2.3EJB体系结构(二)2.4如何开发EJB(一)2.5如何开发EJB(二)2.6本章小结第3章EJB技术进阶3.1实体EJB的开发技术之一CMPEJB3.2实体EJB的开发技术之二——BMPEJB3.3EJB开发实例封装数据源3.4本章小结第4章JSP与J2EE分布式处理技术4.1J2EE和分布式处理技术4.2远程方法调用RMI技术4.3CORBA技术4.4JNDI技术4.5本章小结6第二部分JSP技术和XML技术第5章XML简介5.1XML简介及其语法规则5.2DTD的书写及实例目录5.3CSS与XSL及其实例5.4XHTML简介5.5WML简介5.6本章小结第6章JSP与XML联合开发技术6.1XML与JSP技术联合6.2在JSP中应用XML6.3javax.servlet.jsp.tagext包介绍6.4TagLibrary开发与应用实例6.5本章小结第7章典型TagLibrary介绍JRunTagLibrary7.1JRunTagLibrary简介7.2SQL标记7.3J2EE标记7.4Mail标记7.5XML标记7.6其它标记7.7本章小结第8章典型TagLibrary介绍JakartaTagLibrary8.1JakartaTagLibrarys简介8.2ApplicationTagLibrary8.3BSFTagLibrary8.4DateTimeTagLibrary8.5InputTagLibrary8.6JDBCTagLibrary8.7MailerTagLibrary8.8PageTagLibrary8.9RequestTagLibrary8.10ResponseTagLibrary8.11SessionTagLibrary8.12本章小结第三部分JDBC新技术及其在JSP/Servlet中的应用第9章JDBC2.0/3.0API的新特性9.1JDBCAPI2.0的新特性9.2JDBCAPI2.0简介9.3JDBCAPI3.0简介目录9.4附录JDBC数据类型和Java数据类型的映射关系9.5本章小结第10章JDBCOptionalPackage10.1JDBCOptionalPackage是什么10.2RowSet包10.3CachedRowSet包10.4数据库连接缓冲池10.5JNDI和RowSet10.6本章小结第四部分JSP网络程序设计第11章JSP网络程序开发11.1配置服务器11.2SMTP服务11.3FTP服务11.4News服务11.5JavaSocket11.6Telnet服务11.7本章小结第12章JavaMailAPI12.1JavaMailAPI简介12.2javax.mail包12.3javax.mail.internet包12.4SunProtocolPrividerAPI简介12.5使用JavaMailAPI访问Mail服务器12.6本章小结附录1支持EJB1.0技术规范的EJB平台开发工具一览表附录2JDBCDriver一览表附录3WebLogic服务器的配置方法附录4本书中所用数据库的数据库结构参考文献第一部分JSP技术与J2EE技术第1章JavaBeans组件技术本章将要向读者介绍JavaBeans组件技术在JSP程序开发中的应用在JSP深入编程中我们已经介绍了一点关于JavaBeans的知识但是由于体系结构的原因我们并没有深入讨论它也许有的读者对此还有些遗憾不过不要紧这一章就来弥补读者的这个遗憾本章中读者需要重点掌握的内容有zJavaBeans的属性zJavaBeans的事件模型zJSP中与JavaBeans相关的操作指令的语法与用法zJavaBeans的开发流程zJavaBeans的Scope属性zJavaBeans封装数据库操作1.1什么是JavaBeans1.1.1JavaBeans简介软件开发的真正目的之一是利用在程序编码方面的投资以便在同一公司或者不同公司的其他开发中重用程序编码近年来编程人员投入大量精力以便建立可重用的软件可重用的软件组件早期用在面向对象编程方面中的投资已经在JavaC#等编程语言的开发中充分实现很多软件可以不用做很大的改变就可以运行在各种平台上JavaBeans描述了Java的软件组件模型这个模型被设计成使第三方厂家可以生成和销售能够集成到其他开发厂家或者其他开发人员开发的软件产品的Java组件应用程序开发者可以从开发厂家购买现成的JavaBeans组件拖放到集成开发环境的工具箱中再将其应用于应用软件的开发对于JavaBeans组件的属性行为可以进行必要的修改测试和修订而不必重新编写和编译程序在JavaBeans模型中JavaBeans组件可以被修改或者与其他JavaBeans组件组合以生成新的JavaBeans组件或完整的Java应用程序Java应用程序在运行时最终用户也可以通过JavaBeans组件设计者或应用程序开发者所建立的属性存取方法setXXX方法和getXXX方法修改JavaBeans组件的属性这些属性可能是颜色和形状等简单属性也可能是影响JavaBeans组件总体行为的复杂属性JavaBeans组件模型使得软件可以设计成便于修改和便于升级每个JavaBeans组件都第一部分JSP技术与J2EE技术包含了一组属性操作和事件处理器将若干个JavaBeans组件组合起来就可以生成设计者开发者所需要的特定运行行为JavaBeans组件存放于容器或工具库中供开发者开发应用程序JavaBeans就是一个可以复用软件模型JavaBeans在某个容器中运行提供具体的操作性能JavaBeans是建立应用程序的建筑模块大多数常用的JavaBeans通常是中小型控制程序但我们也可以编写包装整个应用程序运行逻辑的JavaBeans组件并将其嵌入到复合文档中以便实现更为复杂的功能一般来说JavaBeans可以表示为简单的GUI组件可以是按钮组件游标菜单等等这些简单的JavaBeans组件提供了告诉用户什么是JavaBeans的直观方法但我们也可以编写一些不可见的JavaBeans用于接受事件和在幕后工作例如访问数据库执行查询操作的JavaBeans它们在运行时刻不需要任何可视的界面在JSP程序中所用的JavaBeans一般以不可见的组件为主可见的JavaBeans一般用于编写Applet程序或者Java应用程序1.1.2JavaBeans属性JavaBeans的属性与一般Java程序中所指的属性或者说与所有面向对象的程序设计语言中对象的属性是同一个概念在程序中的具体体现就是类中的变量在JavaBeans的设计中按照属性的不同作用又细分为4类Simple属性Index属性Bound属性与Constrained属性Simple属性一个Simple类型的属性表示一个伴随有一对getXXX()setXXX()方法的变量属性的名称与和该属性相关的getXXX()setXXX()方法相对应例如如果有setX()和getX()方法则暗指有一个名为"X"的属性如果有一个方法名为isX()则通常暗指"X"是一个布尔类型的属性请看下面的程序清单1.1(JavaBean1.java)程序清单1.1//FileName:JavaBean1.java//Author:fancy//Date:2001.3.29//Note:createasimplejavabeanpublicclassJavaBean1{StringourString="Hello";publicJavaBean1(){}publicvoidsetoutString(StringnewString)第1章JavaBeans组件技术{ourString=newString;}publicStringgetoutString(){returnourString;}}在程序清单1.1(JavaBean1.java)中我们定义了一个JavaBeanJavaBean1其实也就是定义了一个JavaBean1类JavaBean1有一个名为outString的字符串类型的属性与这个属性相对应的方法为setoutString()和getoutString()使用这两个方法可以存取outString属性的值Indexed属性一个Indexed类型的JavaBeans属性表示一个数组值使用与该属性相对应的setXXX()方法和getXXX()方法可以存取数组中某个元素的数值同时我们也可以使用另两个同名方法一次设置或取得整个数组的值(即属性的值)请看程序清单1.2程序清单1.2//FileName:JavaBean2.java//Author:fancy//Date:2001.3.29//Note:createaindexedjavabeanpublicclassJavaBean2{int[]dataSet={123456};publicvoidJavaBean2(){}publicvoidsetDataSet(int[]x){dataSet=x;}publicvoidsetDataSet(intindexintx){dataSet[index]=x;}publicint[]getDataSet()第一部分JSP技术与J2EE技术{returndataSet;}publicintgetDataSet(intx){returndataSet[x];}}在程序清单1.2(JavaBean2.java)中定义了JavaBeanJavaBean2JavaBean2具有属性dataSetdataSet属性是一个整型数组JavaBean2.java定义了4个方法以存取dataSet属性的值它们分别是setDataSet(int[]x)setDataSet(intindexintx)getDataSet(intx)getDataSet()其中setDataSet(int[]x)方法可以一次设定dataSet属性的值getDataSet()方法可以一次获取dataSet属性的值该方法的返回值是一个整型数组getDataSet(intx)方法可以获取dataSet属性中某个指定的元素的值该方法的返回值为整型数据与这个方法相对的方法是setDataSet(intindexintx)方法使用这个方法可以指定dataSet属性中某个特定元素的值Bound属性一个Bound类型的JavaBean组件的属性具有这样的特性当该种属性的值发生变化时必须通知其它的JavaBeans组件对象每次JavaBeans组件对象的属性值改变时这种属性就引发一个PropertyChange事件(属性改变事件在Java程序中事件也被看作是一个对象)这个事件中封装了发生属性改变事件的属性名属性的原值属性变化后的新值这个事件将被传递到其它的JavaBeans组件中至于接收事件的JavaBeans组件对象应该做什么动作由其自己定义请看程序清单1.3(JavaBean3.java)程序清单1.3//FileName:JavaBean3.java//Author:fancy//Date:2001.3.29//Note:createaboundjavabeanimportjava.beans.*;publicclassJavaBean3{StringourString="Hello";privatePropertyChangeSupportchanges=newPropertyChangeSupport(this);publicvoidsetString(StringnewString){StringoldString=ourString;ourString=newString;changes.firePropertyChange("ourString"oldStringnewString);第1章JavaBeans组件技术}publicStringgetString(){returnourString;}publicvoidaddPropertyChangeListener(PropertyChangeListenerl){changes.addPropertyChangeListener(l);}publicvoidremovePropertyChangeListener(PropertyChangeListenerl){changes.removePropertyChangeListener(l);}}读者对程序清单1.3(JavaBean3.java)的运行逻辑一定感到十分迷惑吧那好下面我们就来详细解释JavaBean3.java程序的含义程序首先创建了PropertyChangeSupport类型的对象changes这是最关键的一步操作changes对象主要用于向监听者对象发送信息当前的JavaBean对象已经发生了属性改变的事件在JavaBean3.java程序中除了普通的存取JavaBeans属性值的setXXX()getXXX()等方法以外还定义了如下的方法publicvoidaddPropertyChangeListener(PropertyChangeListenerl);publicvoidremovePropertyChangeListener(PropertyChangeListenerl);第一个方法(addPropertyChangeListener()方法)其实是调用changes对象的addPropertyChangeListener()方法使一个事件监听者对象和当前JavaBean对象绑定起来并把它添加到监听者队列中去充当当前JavaBean对象的事件监听者如果当前JavaBean对象发生了属性值改变的事件那么changes对象会依次通知监听者队列中的每一个对象当然也通知了这个事件监听者对象让它对这个事件做出反映第二个方法(removePropertyChangeListener()方法)和前者的作用相反该方法其实是调用changes对象的removePropertyChangeListener()方法从监听者队列中移除某个特定的事件监听者对象此事件监听者对象一旦从监听者队列中删除那么changes对象将不会把属性值改变的事件通知它它再也没有办法对属性值发生改变的事件作出响应了getString()方法可以返回属性值setString()方法用于设定属性值setString()方法的代码如下所示StringoldString=ourString;ourString=newString;changes.firePropertyChange("ourString"oldStringnewString);在上面的代码中首先新定义一个字符串oldString用于保存属性的原值然后把新值赋给属性值这样会产生JavaBeans组件属性值改变的事件最后调用changes对象的firePropertyChange()方法通知监听者队列里的所有事件监听者对象当前的JavaBean对第一部分JSP技术与J2EE技术象发生了属性值改变的事件属性的名称属性的新值属性的原值都被作为该方法的参数一并传给监听者对象由它们根据这些信息对此事件作出响应Bound类型的属性就是这样使用的Constrained属性JavaBeans组件的Constrained类型的属性具有这样的性质当这个属性的值将要发生变化但是还没有发生变化的时候与这个属性已经建立了某种监听关系的其它Java对象可以否决属性值的改变此Constrained类型的属性的事件监听者对象将会通过抛出PropertyVetoException异常事件来阻止该属性值的改变读者请看程序清单1.4(JavaBean4.java)程序清单1.4//FileName:JavaBean4.java//Author:fancy//Date:2001.3.29//Note:createaConstrainedjavabeanimportjava.beans.*;publicclassJavaBean4{privatePropertyChangeSupportchanges=newPropertyChangeSupport(this);privateVetoableChangeSupportvetos=newVetoableChangeSupport(this);intourPriceInCents;publicvoidsetPriceInCents(intnewPriceInCents)throwsPropertyVetoException{intoldPriceInCents=ourPriceInCents;vetos.fireVetoableChange("priceInCents"newInteger(oldPriceInCents)newInteger(newPriceInCents));ourPriceInCents=newPriceInCents;changes.firePropertyChange("priceInCents"newInteger(oldPriceInCents)newInteger(newPriceInCents));}publicvoidaddVetoableChangeListener(VetoableChangeListenerl){vetos.addVetoableChangeListener(l);}publicvoidremoveVetoableChangeListener(VetoableChangeListenerl)第1章JavaBeans组件技术{vetos.removeVetoableChangeListener(l);}publicvoidaddPropertyChangeListener(PropertyChangeListenerl){changes.addPropertyChangeListener(l);}publicvoidremovePropertyChangeListener(PropertyChangeListenerl){changes.removePropertyChangeListener(l);}}程序清单1.4(JavaBean4.java)比起程序清单1.3(JavaBean3.java)来说显得更为晦涩难解在程序清单1.4中定义了一个JavaBeanJavaBean4它有一个Constrained类型的属性是ourPriceInCents这是一个整型数据为什么说它是Constrained类型的属性呢?请读者注意在程序的开始部分我们分别定义了PropertyChangeSupport类型的对象changes和VetoableChangeSupport类型的对象vetoschanges对象的作用和程序清单1.3中changes对象的作用一样在这里我们就不讨论它的用法了在这里我们主要讨论vetos对象的用法vetos对象主要用于通知事件否决者对象某个JavaBean对象的属性值将要发生变化让它们投票表决是否允许这个事件的发生在JavaBean4.java中定义了这样的两个方法分别是publicvoidaddVetoableChangeListener(VetoableChangeListenerl);publicvoidremoveVetoableChangeListener(VetoableChangeListenerl);前者可以往事件否决者对象队列中添加新的事件否决者对象作为JavaBean4组件对象的事件否决者一旦成为JavaBean4对象的事件否决者就可以在事件发生之前否决事件的发生第二个方法与第一个方法的作用相反它可以将某个特定的事件否决者对象从事件否决者对象列表中删除被删除的事件否决者对象就再也没有权利否决事件的发生除非它们再次被添加到事件否决者队列中去在JavaBean4.java程序中读者需要特别注意setPriceInCents()方法的实现在setPriceInCents()方法中首先把ourPriceInCents属性的原值给保存下来然后调用vetos对象的fireVetoableChange()方法通知事件否决者对象队列中的每一个事件否决者对象告诉它们JavaBean4对象即将发生属性改变的事件发生此事件的属性是ourPriceInCents属性的新值为newPriceInCents属性的原值为oldPriceInCents(实际上还没有改变属性值)事件否决者对象会根据这些信息投票表决是否允许该事件的发生如果有任何一个事件否决者对象否决了这个事件发生的可能性那么setPriceInCents()方法将会抛出PropertyVetoException异常程序的运行将会中断下面的代码将不会执行也就是说属性值将会保持原来的值如果事件否决者不否决事件的发生那么程序将会继续往下执行第一部分JSP技术与J2EE技术给ourPriceInCents属性赋上新值然后changes对象调用firePropertyChange()方法通知事件监听者队列中的事件监听者对象让它们对这个事件作出响应总之某个JavaBean组件对象的Constrained类型的属性值可否改变取决于其它的事件否决者对象是否允许这种改变允许与否的条件由其它的事件否决者对象在自己的类中进行定义注意事件监听者和事件否决者的区别在于事件监听者不能够否决事件的发生但是可以响应事件的发生而事件否决者正好相反它可以否决事件的发生但是不能够响应事件的发生1.1.3JavaBeans的事件模型事件处理机制是JavaBeans体系结构的核心之一也是Java体系结构的核心之一通过事件处理机制我们可以指定一些组件作为事件源发出可以被系统运行环境或者是其它组件接收的事件这样不同的组件就可在某个应用程序内部真正结合在一起组件之间通过事件的发送传递接受进行通信构成一个完整的逻辑应用从概念上讲所谓事件机制是指一种在源对象和监听者对象之间某种状态发生变化时的消息传递机制事件有许多不同的用途例如在Windows系统中常要处理的鼠标事件窗口边界改变事件键盘事件等在Java和JavaBeans的事件模型中则是定义了一个一般的可扩充的事件机制这种机制能够z对事件类型和传递的模型的定义和扩充提供一个公共框架并适合于广泛的应用z与Java语言和环境有较高的集成度z事件能被系统运行环境捕获和引发z能使其它开发工具采取某种技术在设计时直接控制事件以及事件源和事件监听者事件否决者之间的联系z事件机制本身不依赖于复杂的开发工具特别地还应当z能够发现指定的对象类可以生成的事件z能够发现指定的对象类可以观察监听到的事件z提供一个常规的注册机制允许动态操纵事件源与事件监听者之间的关系z不需要其它的虚拟机和语言即可实现z事件源与监听者之间可进行高效快速的事件传递下面我们就来简单地介绍JavaBeans的事件机制是如何运作的事件模型概述事件从事件源到事件监听者的传递是通过对监听者对象的Java方法调用进行的对每个明确的事件的发生都必须相应地定义一个明确的Java方法这些方法都集中在事件监听者接口中定义而且这个接口必须要继承java.util.EventListener接口也就是说如果我们希望监听事件源发生的事件我们必须首先定义一个事件监听者接口定义各种各样的监听方法以便接收事件源传递来的事件具体实现了事件监听者接口中一些或全部方第1章JavaBeans组件技术法的类就是事件监听者伴随着事件的发生事件源通常把事件及其相应的状态都封装在事件状态对象中该对象必须继承自java.util.EventObject事件状态对象作为参数被传递给应该响应该事件的事件监听者的方法中产生某种特定事件的事件源的特征是遵从规定的编程格式为事件监听者定义注册方法以便把监听者对象加入当前事件源的事件监听者队列中并接受对指定事件监听者接口实例的引用有时事件监听者不能直接实现事件监听者接口或者还有其它的额外动作时就要在一个事件源与其它一个或多个事件监听者之间插入一个事件适配器类的实例对象来建立它们之间的联系实际上事件适配器类就相当于一个过滤器它可以把事件监听者对象不应该接收的事件或者是不能够接收的事件都过滤掉事件状态对象EventStateObject与事件有关的状态信息一般都封装在一个事件状态对象中这种对象必须是java.util.EventObject类的子类按设计习惯这种事件状态对象类的名应以Event结尾请看程序清单1.5(MouseMovedExamEvent.java)程序清单1.5//FileName:MouseMovedExamEvent//Author:fancy//Date:2001.3.31//Note:EventObject-----MouseMovedEventimportjava.awt.Point;publicclassMouseMovedExamEventextendsjava.util.EventObject{protectedintx;protectedinty;publicvoidMouseMovedExampleEvent(ComponentsourcePointlocation){super(source);x=location.x;y=location.y;}publicPointgetLocation(){returnnewPoint(xy);}}在程序清单1.5(MouseMovedExamEvent.java)中我们定义了一个事件状态对象MouseMovedExampleEvent它代表一个鼠标移动的事件getLocation()方法可以返回鼠标目前的位置第一部分JSP技术与J2EE技术事件监听者接口与事件监听者由于JavaBeans的事件模型是基于Java的方法调用因而需要一个定义并组织事件操纵方法的方式在JavaBeans事件模型中事件操纵方法都被定义在继承了java.util.EventListener接口的事件监听者接口中按照一般的规律事件监听者接口的命名要以Listener结尾任何一个类如果想使用在事件监听者接口中定义的方法都必须扩展这个接口并且实现其中定义的方法果真如此那么这个类也就是事件监听者请看程序清单1.6(ArbitraryObject.java)程序清单1.6//FileName:ArbitraryObject.java//Author:fancy//Date:2001.3.31//Note:showJavaBeaneventmodelimportjava.beans.*;//定义事件状态对象类publicclassMouseMovedExampleEventextendsjava.util.EventObject{//在此类中包含了与鼠标移动事件有关的状态信息}//定义了鼠标移动事件的事件监听者接口interfaceMouseMovedExampleListenerextendsjava.util.EventListener{//在这个接口中定义了鼠标移动事件监听者所应支持的方法voidmouseMoved(MouseMovedExampleEventmme);}//定义事件监听者classArbitraryObjectimplementsMouseMovedExampleListener{publicvoidmouseMoved(MouseMovedExampleEventmme){//代码省略}在程序清单1.6(ArbitraryObject.java)中首先定义了事件状态对象类MouseMovedExampleEvent在此类中包含了与鼠标移动事件有关的状态信息接着定义了事件监听者接口MouseMovedExampleListener在这个接口中定义了鼠标移动事件监听者所应支持的方法mouseMoved()该方法以MouseMovedExampleEvent类型的对象为参数ArbitraryObject类扩展了MouseMovedExampleListener接口实现了mouseMoved方法所第1章JavaBeans组件技术以它是事件监听者注意程序清单1.5/1.6只是简单的示例代码不完整编译不会通过也不能够运行读者务必要注意事件监听者的注册与注销为了把各种可能的事件监听者注册到合适的事件源的监听者队列中建立事件源与事件监听者间的事件流事件源必须为事件监听者提供注册和注销的方法在前面介绍bound类型的JavaBeans属性时我们已经提到了这两种方法在实际编程中事件监听者的注册和注销方法必须使用标准的设计格式publicvoidadd<ListenerType>(<ListenerType>listener)publicvoidremove<ListenerType>(<ListenerType>listener)前者用于注册事件监听者对象后者用于注销事件监听者对象ListenerType代表事件监听者对象的类型程序清单1.7//FileName:EventExam.java//Author:fancy//Date:2001.3.31//Note:showJavaBeaneventmodelimportjava.util.*;//首先定义了一个事件监听者接口publicinterfaceModelChangedListenerextendsjava.util.EventListener{

JSP高级编程(希望版).pdf

JSP高级编程(希望版).pdf

上传者: 筱筱
7次下载 0人收藏 暂无简介 简介 2011-06-27 举报

简介:当前资料暂无简介!

九五国家重点电子出版物规划项目希望计算机知识普及系列编程高手成长之路6AdvancedProgrammingwithJavaServerPagesJSP高级编程北京希望电子出版社总策划北京大学com工作室创作黄理洪亮曹林有张勇等编著特点z指导性和实用性强z范例丰富典型z附有丰富的实例源码重点内容zJSP技术与J2EE技术zJSP技术与XML技术zJDBC新技术及其在JSP/Servlet程序中的应用zJSP网络程序设计2001内容简介这是一本面向中高级编程人员的自学指导书其重点放在JSP和其他技术的综合使用方面全书可分为四大部分第一部分是JSP技术与J2EE技术第一章至第四章着重介绍J2EE技术的代表EJB技术的基本原理与开发EJB组件的方法第二部分是JSP技术和XML技术第五章至第八章主要介绍了XML技术与JSP技术联合的方式之一TagLibrary第二部分后面的两章是针对市场上最流行的两个TagLibrary的详细介绍读者可以把它当作参考手册来使用本作品的第三部分是JDBC新技术及其在JSP/Servlet程序中的应用第九章和第十章主要介绍最新的JDBC技术如JDBC2.0/JDBC3.0的新特性以及鲜为人知而又十分重要的JDBCOptionalPack本作品的第四部分是JSP网络程序设计着重介绍如何使用sun.net包JavaMailAPI开发访问各种网络服务的JSP程序本作品四个部分之间互为关联又相对独立读者可以选择阅读某一个部分或者是通读全文本版作品是由经验丰富的使用JSP组建网站的程序员编著内文附有丰富的实例源码供读者学习参考全书具有语言简明扼要内容丰富范例典型理论与实践相结合的特点不但是从事用JSP进行网站开发和设计的初中级读者的自学指导书同时也可作为社会网页设计或编程培训班的教材说明与本书配套的面向初中级用户的书JSP深入编程也已正式出版欢迎选购本版CD为配套书系列书名书名总策划文本著作者责任编辑CD制作者CD测试者出版发行者地址经销九五国家重点电子出版物规划项目希望计算机知识普及系列编程高手成长之路6JSP高级编程AdvancedProgrammingwithJavaServerPages北京希望电子出版社北京大学com工作室创作黄理洪亮曹林有张勇等编著马红华希望多媒体开发中心希望多媒体测试部北京希望电子出版社北京中关村大街26号100080网址:www.bhp.com.cnE-mail:lwm@hope.com.cn电话:010-62562329,62541992,62637101,62637102,62633308,62633309发行010-62613322-215门市010-62613322-308编辑部各地新华书店软件连锁店排版CD生产者文本印刷者开本/规格版次/印次印数本版号定价希望图书输出中心杜海燕北京中新联光盘有限责任公司北京双青印刷厂787毫米1092毫米1/16开本38.75印张900千字2001年10月第1版2001年10月第1次印刷00015000册ISBN7-980007-78-655.00元本版CD说明凡我社光盘配套图书若有缺页倒页脱页自然破损本社负责调换声声声声明明明明本电子版不包括第8章内容请参看配套图书相关章节前言JSPJavaServerPages是目前十分流行的一种技术主要运行于开发服务端的脚本程序和动态生成网站的内容它与目前同样流行的ASP技术PHP技术是同样性质的同一层次的它们在网站的建设中所起到的作用是一样的但是JSP技术与后面两种技术相比有着十分突出的优越性关于JSP技术与ASP技术PHP技术的比较我们在书中另有论述这里只想强调一点JSP技术有J2EE平台支持发展前途不可限量众所周知J2EE平台提供了Java企业应用编程接口JavaEnterpriseAPIs为企业计算以及电子商务应用系统提供了有关的技术和强大的类库支持J2EE平台包含十几种技术JSP技术正是其中的一种核心技术J2EE的发展势头十分迅猛在可以预见的将来Sun的J2EE平台可能是唯一可以与微软的.Net构架相互抗衡的平台在这个意义上说基于J2EE平台的JSP技术与基于.Net平台的ASPASP+技术之争不正好就是J2EE平台与.Net平台之争的折射吗因此JSP技术以及它的基础J2EE技术十分值得我们去关注在国外采用JSP+J2EE技术构架电子商务网站已经是大行其道了应用得十分普遍在国内这一项技术还是方兴未艾采用这一项技术架构的网站还不多不过大致的趋势已经出现了这真是一个令人兴奋的消息为了帮助广大读者了解JSP/J2EE技术并掌握JSP/J2EE技术我们编写了JSP深入编程和JSP高级编程这两本书前者侧重于JSP技术的基础知识与基本应用后者侧重于JSP技术和其他技术联合使用本书正是其中第二本书本书按顺序讲述了以下知识点zJavaBeans的基础知识zEJB的结构框架z会话EJB的开发部署测试应用zCMP模式BMP模式的实体EJB的开发部署测试应用zJ2EE体系结构zCORBA,RMI,JNDI技术入门zXML,XSL,CSS语法介绍zWML,XHTML简介zXML+JSP的开发模式zTagLibrary的开发应用运行原理zjavax.servlet.jsp.tagext包的详细说明zJRunTagLibrary的使用手册zJakartaTagLibrary的使用手册zJDBC2.0/3.0新特性介绍zJDBCOptionalPack介绍含RowSet包CachedRowSet包的介绍zJSP网络程序开发访问SMTP,FTP,News等服务Socket技术应用介绍zJavaMail技术完全指南总的来说本书可以分为四大部分第一部分是JSP技术与J2EE技术第一章至第四章着重介绍J2EE技术的代表EJB技术的基本原理与开发EJB组件的方法第二部分是JSP技术和XML技术第五章至第八章主要介绍了XML技术与JSP技术联合的方式之一TagLibrary第二部分后面的两章是针对市场上最流行的两个TagLibrary的详细介绍读者可以把它当作参考手册来使用本书的第三部分是JDBC新技术及其在JSP/Servlet程序中的应用第9章和第10章主要介绍最新的JDBC技术如JDBC2.0/JDBC3.0的新特性以及鲜为人知而又用处极大的JDBCOptionalPack本书的第四部分是JSP网络程序设计着重介绍如何使用sun.net包JavaMailAPI开发访问各种网络服务的JSP程序本书这四个部分之间互为关联又相互独立读者可以单独阅读某一个部分或者是通读全书顾名思义本书不是关于JSP技术的入门书籍本书要求读者必须有JSP,Java基础否则阅读起来可能会有很大的困难作者建议读者不妨参考《JSP深入编程》因为这两本书是配套编写的在知识体系结构上有一定的承接性本书虽然名为JSP高级编程但是真正涉及到JSP程序编写技巧方面的章节并不多这是因为JSP技术的核心内容很少很少除了基本语法编译指令操作指令和内部对象以外就没有别的东西了要发挥JSP技术的长处开发功能强大的JSP程序单单靠JSP技术本身是不可能的JSP技术必须和其他相关的Java技术结合起来例如JDBC,EJB,RMI,CORBA,JavaMail等技术才有可能开发出功能强大的程序本书重点介绍的就是上述技术的基本原理和开发方法至于如何把这些技术和JSP技术结合起来开发运行于服务端的应用程序与JSP程序书中讲的很少但是读者应该有这方面的经验况且只要明了这些技术的基本原理与开发的方法把它们和JSP技术结合起来是一件十分简单的事情不需要浪费过多的笔墨去介绍这方面的知识当你读完本书以后我们不能够保证你一定能够成为JSP高手因为本书提到的技术虽然很多但是由于篇幅的关系以及其他的原因这些技术讲的都很肤浅只是相当于入门的水平读者如果想有更大的进步最好是深入研究本书所提到的技术找几个项目来做当你能够游刃有余地应用这几种技术于JSP程序的开发中时那时你才是真正的精通JSP的高手本书给读者指出努力的方向以及提供入门的知识剩下的就靠读者自身的努力了这就是本书命名为JSP高级编程的原因本书由北京大学com工作室组织编写由于时间仓促笔者的水平有限书中的谬误一定很多不足之处请读者指正本书的成功出版首先归功于本书的主要作者北大黄理同学他深厚的计算机理论积累和丰富的实践经验才使得本书兼具理论指导及实务操作性其工作的严谨态度以及出色的语言驾驭功底相信读者在阅读本书时自有体会其次还有感谢北大洪亮同学其出色的工作为本书增色不少也感谢其他许许多多人辛勤的劳动与无私的帮助轻易便可以列出很多北大计算机系的李积善水木清华smth.org的javafancy北大未名站的javalover还有ROBBYlz.lansnowleaf以及可爱的Rainbow本书技术支持的联系方式com_pku@263.nethttp//162.105.106.1628080注访问前需要事先mail联系以便启动服务器目录第一部分JSP技术与J2EE技术第1章JavaBeans组件技术1.1什么是JavaBeans1.2JSP中如何使用JavaBeans1.3JavaBeans的Scope属性1.4JavaBeans应用实例1.5本章小结第2章EnterpriseJavaBeans2.1EJB技术简介2.2EJB体系结构(一)2.3EJB体系结构(二)2.4如何开发EJB(一)2.5如何开发EJB(二)2.6本章小结第3章EJB技术进阶3.1实体EJB的开发技术之一CMPEJB3.2实体EJB的开发技术之二——BMPEJB3.3EJB开发实例封装数据源3.4本章小结第4章JSP与J2EE分布式处理技术4.1J2EE和分布式处理技术4.2远程方法调用RMI技术4.3CORBA技术4.4JNDI技术4.5本章小结6第二部分JSP技术和XML技术第5章XML简介5.1XML简介及其语法规则5.2DTD的书写及实例目录5.3CSS与XSL及其实例5.4XHTML简介5.5WML简介5.6本章小结第6章JSP与XML联合开发技术6.1XML与JSP技术联合6.2在JSP中应用XML6.3javax.servlet.jsp.tagext包介绍6.4TagLibrary开发与应用实例6.5本章小结第7章典型TagLibrary介绍JRunTagLibrary7.1JRunTagLibrary简介7.2SQL标记7.3J2EE标记7.4Mail标记7.5XML标记7.6其它标记7.7本章小结第8章典型TagLibrary介绍JakartaTagLibrary8.1JakartaTagLibrarys简介8.2ApplicationTagLibrary8.3BSFTagLibrary8.4DateTimeTagLibrary8.5InputTagLibrary8.6JDBCTagLibrary8.7MailerTagLibrary8.8PageTagLibrary8.9RequestTagLibrary8.10ResponseTagLibrary8.11SessionTagLibrary8.12本章小结第三部分JDBC新技术及其在JSP/Servlet中的应用第9章JDBC2.0/3.0API的新特性9.1JDBCAPI2.0的新特性9.2JDBCAPI2.0简介9.3JDBCAPI3.0简介目录9.4附录JDBC数据类型和Java数据类型的映射关系9.5本章小结第10章JDBCOptionalPackage10.1JDBCOptionalPackage是什么10.2RowSet包10.3CachedRowSet包10.4数据库连接缓冲池10.5JNDI和RowSet10.6本章小结第四部分JSP网络程序设计第11章JSP网络程序开发11.1配置服务器11.2SMTP服务11.3FTP服务11.4News服务11.5JavaSocket11.6Telnet服务11.7本章小结第12章JavaMailAPI12.1JavaMailAPI简介12.2javax.mail包12.3javax.mail.internet包12.4SunProtocolPrividerAPI简介12.5使用JavaMailAPI访问Mail服务器12.6本章小结附录1支持EJB1.0技术规范的EJB平台开发工具一览表附录2JDBCDriver一览表附录3WebLogic服务器的配置方法附录4本书中所用数据库的数据库结构参考文献第一部分JSP技术与J2EE技术第1章JavaBeans组件技术本章将要向读者介绍JavaBeans组件技术在JSP程序开发中的应用在JSP深入编程中我们已经介绍了一点关于JavaBeans的知识但是由于体系结构的原因我们并没有深入讨论它也许有的读者对此还有些遗憾不过不要紧这一章就来弥补读者的这个遗憾本章中读者需要重点掌握的内容有zJavaBeans的属性zJavaBeans的事件模型zJSP中与JavaBeans相关的操作指令的语法与用法zJavaBeans的开发流程zJavaBeans的Scope属性zJavaBeans封装数据库操作1.1什么是JavaBeans1.1.1JavaBeans简介软件开发的真正目的之一是利用在程序编码方面的投资以便在同一公司或者不同公司的其他开发中重用程序编码近年来编程人员投入大量精力以便建立可重用的软件可重用的软件组件早期用在面向对象编程方面中的投资已经在JavaC#等编程语言的开发中充分实现很多软件可以不用做很大的改变就可以运行在各种平台上JavaBeans描述了Java的软件组件模型这个模型被设计成使第三方厂家可以生成和销售能够集成到其他开发厂家或者其他开发人员开发的软件产品的Java组件应用程序开发者可以从开发厂家购买现成的JavaBeans组件拖放到集成开发环境的工具箱中再将其应用于应用软件的开发对于JavaBeans组件的属性行为可以进行必要的修改测试和修订而不必重新编写和编译程序在JavaBeans模型中JavaBeans组件可以被修改或者与其他JavaBeans组件组合以生成新的JavaBeans组件或完整的Java应用程序Java应用程序在运行时最终用户也可以通过JavaBeans组件设计者或应用程序开发者所建立的属性存取方法setXXX方法和getXXX方法修改JavaBeans组件的属性这些属性可能是颜色和形状等简单属性也可能是影响JavaBeans组件总体行为的复杂属性JavaBeans组件模型使得软件可以设计成便于修改和便于升级每个JavaBeans组件都第一部分JSP技术与J2EE技术包含了一组属性操作和事件处理器将若干个JavaBeans组件组合起来就可以生成设计者开发者所需要的特定运行行为JavaBeans组件存放于容器或工具库中供开发者开发应用程序JavaBeans就是一个可以复用软件模型JavaBeans在某个容器中运行提供具体的操作性能JavaBeans是建立应用程序的建筑模块大多数常用的JavaBeans通常是中小型控制程序但我们也可以编写包装整个应用程序运行逻辑的JavaBeans组件并将其嵌入到复合文档中以便实现更为复杂的功能一般来说JavaBeans可以表示为简单的GUI组件可以是按钮组件游标菜单等等这些简单的JavaBeans组件提供了告诉用户什么是JavaBeans的直观方法但我们也可以编写一些不可见的JavaBeans用于接受事件和在幕后工作例如访问数据库执行查询操作的JavaBeans它们在运行时刻不需要任何可视的界面在JSP程序中所用的JavaBeans一般以不可见的组件为主可见的JavaBeans一般用于编写Applet程序或者Java应用程序1.1.2JavaBeans属性JavaBeans的属性与一般Java程序中所指的属性或者说与所有面向对象的程序设计语言中对象的属性是同一个概念在程序中的具体体现就是类中的变量在JavaBeans的设计中按照属性的不同作用又细分为4类Simple属性Index属性Bound属性与Constrained属性Simple属性一个Simple类型的属性表示一个伴随有一对getXXX()setXXX()方法的变量属性的名称与和该属性相关的getXXX()setXXX()方法相对应例如如果有setX()和getX()方法则暗指有一个名为"X"的属性如果有一个方法名为isX()则通常暗指"X"是一个布尔类型的属性请看下面的程序清单1.1(JavaBean1.java)程序清单1.1//FileName:JavaBean1.java//Author:fancy//Date:2001.3.29//Note:createasimplejavabeanpublicclassJavaBean1{StringourString="Hello";publicJavaBean1(){}publicvoidsetoutString(StringnewString)第1章JavaBeans组件技术{ourString=newString;}publicStringgetoutString(){returnourString;}}在程序清单1.1(JavaBean1.java)中我们定义了一个JavaBeanJavaBean1其实也就是定义了一个JavaBean1类JavaBean1有一个名为outString的字符串类型的属性与这个属性相对应的方法为setoutString()和getoutString()使用这两个方法可以存取outString属性的值Indexed属性一个Indexed类型的JavaBeans属性表示一个数组值使用与该属性相对应的setXXX()方法和getXXX()方法可以存取数组中某个元素的数值同时我们也可以使用另两个同名方法一次设置或取得整个数组的值(即属性的值)请看程序清单1.2程序清单1.2//FileName:JavaBean2.java//Author:fancy//Date:2001.3.29//Note:createaindexedjavabeanpublicclassJavaBean2{int[]dataSet={123456};publicvoidJavaBean2(){}publicvoidsetDataSet(int[]x){dataSet=x;}publicvoidsetDataSet(intindexintx){dataSet[index]=x;}publicint[]getDataSet()第一部分JSP技术与J2EE技术{returndataSet;}publicintgetDataSet(intx){returndataSet[x];}}在程序清单1.2(JavaBean2.java)中定义了JavaBeanJavaBean2JavaBean2具有属性dataSetdataSet属性是一个整型数组JavaBean2.java定义了4个方法以存取dataSet属性的值它们分别是setDataSet(int[]x)setDataSet(intindexintx)getDataSet(intx)getDataSet()其中setDataSet(int[]x)方法可以一次设定dataSet属性的值getDataSet()方法可以一次获取dataSet属性的值该方法的返回值是一个整型数组getDataSet(intx)方法可以获取dataSet属性中某个指定的元素的值该方法的返回值为整型数据与这个方法相对的方法是setDataSet(intindexintx)方法使用这个方法可以指定dataSet属性中某个特定元素的值Bound属性一个Bound类型的JavaBean组件的属性具有这样的特性当该种属性的值发生变化时必须通知其它的JavaBeans组件对象每次JavaBeans组件对象的属性值改变时这种属性就引发一个PropertyChange事件(属性改变事件在Java程序中事件也被看作是一个对象)这个事件中封装了发生属性改变事件的属性名属性的原值属性变化后的新值这个事件将被传递到其它的JavaBeans组件中至于接收事件的JavaBeans组件对象应该做什么动作由其自己定义请看程序清单1.3(JavaBean3.java)程序清单1.3//FileName:JavaBean3.java//Author:fancy//Date:2001.3.29//Note:createaboundjavabeanimportjava.beans.*;publicclassJavaBean3{StringourString="Hello";privatePropertyChangeSupportchanges=newPropertyChangeSupport(this);publicvoidsetString(StringnewString){StringoldString=ourString;ourString=newString;changes.firePropertyChange("ourString"oldStringnewString);第1章JavaBeans组件技术}publicStringgetString(){returnourString;}publicvoidaddPropertyChangeListener(PropertyChangeListenerl){changes.addPropertyChangeListener(l);}publicvoidremovePropertyChangeListener(PropertyChangeListenerl){changes.removePropertyChangeListener(l);}}读者对程序清单1.3(JavaBean3.java)的运行逻辑一定感到十分迷惑吧那好下面我们就来详细解释JavaBean3.java程序的含义程序首先创建了PropertyChangeSupport类型的对象changes这是最关键的一步操作changes对象主要用于向监听者对象发送信息当前的JavaBean对象已经发生了属性改变的事件在JavaBean3.java程序中除了普通的存取JavaBeans属性值的setXXX()getXXX()等方法以外还定义了如下的方法publicvoidaddPropertyChangeListener(PropertyChangeListenerl);publicvoidremovePropertyChangeListener(PropertyChangeListenerl);第一个方法(addPropertyChangeListener()方法)其实是调用changes对象的addPropertyChangeListener()方法使一个事件监听者对象和当前JavaBean对象绑定起来并把它添加到监听者队列中去充当当前JavaBean对象的事件监听者如果当前JavaBean对象发生了属性值改变的事件那么changes对象会依次通知监听者队列中的每一个对象当然也通知了这个事件监听者对象让它对这个事件做出反映第二个方法(removePropertyChangeListener()方法)和前者的作用相反该方法其实是调用changes对象的removePropertyChangeListener()方法从监听者队列中移除某个特定的事件监听者对象此事件监听者对象一旦从监听者队列中删除那么changes对象将不会把属性值改变的事件通知它它再也没有办法对属性值发生改变的事件作出响应了getString()方法可以返回属性值setString()方法用于设定属性值setString()方法的代码如下所示StringoldString=ourString;ourString=newString;changes.firePropertyChange("ourString"oldStringnewString);在上面的代码中首先新定义一个字符串oldString用于保存属性的原值然后把新值赋给属性值这样会产生JavaBeans组件属性值改变的事件最后调用changes对象的firePropertyChange()方法通知监听者队列里的所有事件监听者对象当前的JavaBean对第一部分JSP技术与J2EE技术象发生了属性值改变的事件属性的名称属性的新值属性的原值都被作为该方法的参数一并传给监听者对象由它们根据这些信息对此事件作出响应Bound类型的属性就是这样使用的Constrained属性JavaBeans组件的Constrained类型的属性具有这样的性质当这个属性的值将要发生变化但是还没有发生变化的时候与这个属性已经建立了某种监听关系的其它Java对象可以否决属性值的改变此Constrained类型的属性的事件监听者对象将会通过抛出PropertyVetoException异常事件来阻止该属性值的改变读者请看程序清单1.4(JavaBean4.java)程序清单1.4//FileName:JavaBean4.java//Author:fancy//Date:2001.3.29//Note:createaConstrainedjavabeanimportjava.beans.*;publicclassJavaBean4{privatePropertyChangeSupportchanges=newPropertyChangeSupport(this);privateVetoableChangeSupportvetos=newVetoableChangeSupport(this);intourPriceInCents;publicvoidsetPriceInCents(intnewPriceInCents)throwsPropertyVetoException{intoldPriceInCents=ourPriceInCents;vetos.fireVetoableChange("priceInCents"newInteger(oldPriceInCents)newInteger(newPriceInCents));ourPriceInCents=newPriceInCents;changes.firePropertyChange("priceInCents"newInteger(oldPriceInCents)newInteger(newPriceInCents));}publicvoidaddVetoableChangeListener(VetoableChangeListenerl){vetos.addVetoableChangeListener(l);}publicvoidremoveVetoableChangeListener(VetoableChangeListenerl)第1章JavaBeans组件技术{vetos.removeVetoableChangeListener(l);}publicvoidaddPropertyChangeListener(PropertyChangeListenerl){changes.addPropertyChangeListener(l);}publicvoidremovePropertyChangeListener(PropertyChangeListenerl){changes.removePropertyChangeListener(l);}}程序清单1.4(JavaBean4.java)比起程序清单1.3(JavaBean3.java)来说显得更为晦涩难解在程序清单1.4中定义了一个JavaBeanJavaBean4它有一个Constrained类型的属性是ourPriceInCents这是一个整型数据为什么说它是Constrained类型的属性呢?请读者注意在程序的开始部分我们分别定义了PropertyChangeSupport类型的对象changes和VetoableChangeSupport类型的对象vetoschanges对象的作用和程序清单1.3中changes对象的作用一样在这里我们就不讨论它的用法了在这里我们主要讨论vetos对象的用法vetos对象主要用于通知事件否决者对象某个JavaBean对象的属性值将要发生变化让它们投票表决是否允许这个事件的发生在JavaBean4.java中定义了这样的两个方法分别是publicvoidaddVetoableChangeListener(VetoableChangeListenerl);publicvoidremoveVetoableChangeListener(VetoableChangeListenerl);前者可以往事件否决者对象队列中添加新的事件否决者对象作为JavaBean4组件对象的事件否决者一旦成为JavaBean4对象的事件否决者就可以在事件发生之前否决事件的发生第二个方法与第一个方法的作用相反它可以将某个特定的事件否决者对象从事件否决者对象列表中删除被删除的事件否决者对象就再也没有权利否决事件的发生除非它们再次被添加到事件否决者队列中去在JavaBean4.java程序中读者需要特别注意setPriceInCents()方法的实现在setPriceInCents()方法中首先把ourPriceInCents属性的原值给保存下来然后调用vetos对象的fireVetoableChange()方法通知事件否决者对象队列中的每一个事件否决者对象告诉它们JavaBean4对象即将发生属性改变的事件发生此事件的属性是ourPriceInCents属性的新值为newPriceInCents属性的原值为oldPriceInCents(实际上还没有改变属性值)事件否决者对象会根据这些信息投票表决是否允许该事件的发生如果有任何一个事件否决者对象否决了这个事件发生的可能性那么setPriceInCents()方法将会抛出PropertyVetoException异常程序的运行将会中断下面的代码将不会执行也就是说属性值将会保持原来的值如果事件否决者不否决事件的发生那么程序将会继续往下执行第一部分JSP技术与J2EE技术给ourPriceInCents属性赋上新值然后changes对象调用firePropertyChange()方法通知事件监听者队列中的事件监听者对象让它们对这个事件作出响应总之某个JavaBean组件对象的Constrained类型的属性值可否改变取决于其它的事件否决者对象是否允许这种改变允许与否的条件由其它的事件否决者对象在自己的类中进行定义注意事件监听者和事件否决者的区别在于事件监听者不能够否决事件的发生但是可以响应事件的发生而事件否决者正好相反它可以否决事件的发生但是不能够响应事件的发生1.1.3JavaBeans的事件模型事件处理机制是JavaBeans体系结构的核心之一也是Java体系结构的核心之一通过事件处理机制我们可以指定一些组件作为事件源发出可以被系统运行环境或者是其它组件接收的事件这样不同的组件就可在某个应用程序内部真正结合在一起组件之间通过事件的发送传递接受进行通信构成一个完整的逻辑应用从概念上讲所谓事件机制是指一种在源对象和监听者对象之间某种状态发生变化时的消息传递机制事件有许多不同的用途例如在Windows系统中常要处理的鼠标事件窗口边界改变事件键盘事件等在Java和JavaBeans的事件模型中则是定义了一个一般的可扩充的事件机制这种机制能够z对事件类型和传递的模型的定义和扩充提供一个公共框架并适合于广泛的应用z与Java语言和环境有较高的集成度z事件能被系统运行环境捕获和引发z能使其它开发工具采取某种技术在设计时直接控制事件以及事件源和事件监听者事件否决者之间的联系z事件机制本身不依赖于复杂的开发工具特别地还应当z能够发现指定的对象类可以生成的事件z能够发现指定的对象类可以观察监听到的事件z提供一个常规的注册机制允许动态操纵事件源与事件监听者之间的关系z不需要其它的虚拟机和语言即可实现z事件源与监听者之间可进行高效快速的事件传递下面我们就来简单地介绍JavaBeans的事件机制是如何运作的事件模型概述事件从事件源到事件监听者的传递是通过对监听者对象的Java方法调用进行的对每个明确的事件的发生都必须相应地定义一个明确的Java方法这些方法都集中在事件监听者接口中定义而且这个接口必须要继承java.util.EventListener接口也就是说如果我们希望监听事件源发生的事件我们必须首先定义一个事件监听者接口定义各种各样的监听方法以便接收事件源传递来的事件具体实现了事件监听者接口中一些或全部方第1章JavaBeans组件技术法的类就是事件监听者伴随着事件的发生事件源通常把事件及其相应的状态都封装在事件状态对象中该对象必须继承自java.util.EventObject事件状态对象作为参数被传递给应该响应该事件的事件监听者的方法中产生某种特定事件的事件源的特征是遵从规定的编程格式为事件监听者定义注册方法以便把监听者对象加入当前事件源的事件监听者队列中并接受对指定事件监听者接口实例的引用有时事件监听者不能直接实现事件监听者接口或者还有其它的额外动作时就要在一个事件源与其它一个或多个事件监听者之间插入一个事件适配器类的实例对象来建立它们之间的联系实际上事件适配器类就相当于一个过滤器它可以把事件监听者对象不应该接收的事件或者是不能够接收的事件都过滤掉事件状态对象EventStateObject与事件有关的状态信息一般都封装在一个事件状态对象中这种对象必须是java.util.EventObject类的子类按设计习惯这种事件状态对象类的名应以Event结尾请看程序清单1.5(MouseMovedExamEvent.java)程序清单1.5//FileName:MouseMovedExamEvent//Author:fancy//Date:2001.3.31//Note:EventObject-----MouseMovedEventimportjava.awt.Point;publicclassMouseMovedExamEventextendsjava.util.EventObject{protectedintx;protectedinty;publicvoidMouseMovedExampleEvent(ComponentsourcePointlocation){super(source);x=location.x;y=location.y;}publicPointgetLocation(){returnnewPoint(xy);}}在程序清单1.5(MouseMovedExamEvent.java)中我们定义了一个事件状态对象MouseMovedExampleEvent它代表一个鼠标移动的事件getLocation()方法可以返回鼠标目前的位置第一部分JSP技术与J2EE技术事件监听者接口与事件监听者由于JavaBeans的事件模型是基于Java的方法调用因而需要一个定义并组织事件操纵方法的方式在JavaBeans事件模型中事件操纵方法都被定义在继承了java.util.EventListener接口的事件监听者接口中按照一般的规律事件监听者接口的命名要以Listener结尾任何一个类如果想使用在事件监听者接口中定义的方法都必须扩展这个接口并且实现其中定义的方法果真如此那么这个类也就是事件监听者请看程序清单1.6(ArbitraryObject.java)程序清单1.6//FileName:ArbitraryObject.java//Author:fancy//Date:2001.3.31//Note:showJavaBeaneventmodelimportjava.beans.*;//定义事件状态对象类publicclassMouseMovedExampleEventextendsjava.util.EventObject{//在此类中包含了与鼠标移动事件有关的状态信息}//定义了鼠标移动事件的事件监听者接口interfaceMouseMovedExampleListenerextendsjava.util.EventListener{//在这个接口中定义了鼠标移动事件监听者所应支持的方法voidmouseMoved(MouseMovedExampleEventmme);}//定义事件监听者classArbitraryObjectimplementsMouseMovedExampleListener{publicvoidmouseMoved(MouseMovedExampleEventmme){//代码省略}在程序清单1.6(ArbitraryObject.java)中首先定义了事件状态对象类MouseMovedExampleEvent在此类中包含了与鼠标移动事件有关的状态信息接着定义了事件监听者接口MouseMovedExampleListener在这个接口中定义了鼠标移动事件监听者所应支持的方法mouseMoved()该方法以MouseMovedExampleEvent类型的对象为参数ArbitraryObject类扩展了MouseMovedExampleListener接口实现了mouseMoved方法所第1章JavaBeans组件技术以它是事件监听者注意程序清单1.5/1.6只是简单的示例代码不完整编译不会通过也不能够运行读者务必要注意事件监听者的注册与注销为了把各种可能的事件监听者注册到合适的事件源的监听者队列中建立事件源与事件监听者间的事件流事件源必须为事件监听者提供注册和注销的方法在前面介绍bound类型的JavaBeans属性时我们已经提到了这两种方法在实际编程中事件监听者的注册和注销方法必须使用标准的设计格式publicvoidadd<ListenerType>(<ListenerType>listener)publicvoidremove<ListenerType>(<ListenerType>listener)前者用于注册事件监听者对象后者用于注销事件监听者对象ListenerType代表事件监听者对象的类型程序清单1.7//FileName:EventExam.java//Author:fancy//Date:2001.3.31//Note:showJavaBeaneventmodelimportjava.util.*;//首先定义了一个事件监听者接口publicinterfaceModelChangedListenerextendsjava.util.EventListener{
  • 相关资料
  • 该用户的其他资料
  • 名称/格式
  • 下载次数
  • 资料大小
  • 名称/格式
  • 下载次数
  • 资料大小

用户评论

0/200
暂无评论
上传我的资料
关闭

请选择举报的类型

关闭

提示

提交成功!

感谢您对爱问共享资料的支持,我们将尽快核实并处理您的举报信息。

关闭

提示

提交失败!

您的举报信息提交失败,请重试!

关闭

提示

重复举报!

亲爱的用户!感觉您对爱问共享资料的支持,请勿重复举报噢!

全屏 缩小 放大
收藏
资料评价:

/ 529
所需积分:2 立即下载
返回
顶部
举报
资料
关闭

温馨提示

感谢您对爱问共享资料的支持,精彩活动将尽快为您呈现,敬请期待!