Java开发中的事件驱动模型实例详解
或许每个软件从业者都有从学习控制台应用程序到学习可视化编程的转变过程,控制台应用程序的优点在于可以方便的练习某个语言的语法和开发习惯(如.net 和java),而可视化编程的学习又可以非常方便开发出各类人机对话界面(HMI)。可视化编程或许是一个初学者开始对软件感兴
或许每个软件从业者都有从学习控制台应用程序到学习可视化编程的转变
过程,控制台应用程序的优点在于可以方便的练习某个语言的语法和开发习惯(如.net和java),而可视化编程的学习又可以非常方便开发出各类人机对话界面(HMI)。可视化编程或许是一个初学者开始对软件感兴趣的开始,也可能是一个软件学习的里程碑点,因为我们可以使用各类软件集成开发环境(IDE)方便的在现成的界面窗口上拖放各类组件(Component),这类组件包括我们常见的按钮(Button),单选按钮(Radio Button),复选框等(Checkbox)。这样的拖放式开发方式不但方便,而且窗口会立竿见影的显示在我们的面前,这对于一个软件初学者而言或许是一件非常有成就感的事情。
但是很多软件学习者在学习可视化开发的过程中,只是非常表面的来理解可视化编程,他们可能认为能够使用拖放方式完成一个界面就非常值得称道,但是很少有人会认真的去理解编程语言对于可视化编程组件的支持和整合,在Softworks软件人才培训中心的两年教学过程,我深刻的感受到了这一点,因此下文将会结合我的教学经验来讲解可视化编程过程中最为关键的“事件驱动模型”。
1.什么是事件驱动模型?
在讲解事件驱动模型之前,我们现在看看事件驱动模型的三大要素:
·事件源:能够接收外部事件的源体。
·侦听器:能够接收事件源通知的对象。
·事件处理程序:用于处理事件的对象。
学员应该要理解任何基于事件驱动模型的开发技术都包含以上三大要素,不管是.net还是java技术,甚至是以前我们使用的Visual Basic和Delphi语言都有基于以上三大要素的事件驱动模型开发流程。
现在我们来看一个生活中的示例,如果有一天你走在路上一不小心被天上掉下来的花瓶砸到了,并且晕死了过去。那么整个过程其实就是一个事件处理流程,而且我们可以非常方便的分析出刚才所提到的事件驱动模型中的三大要素。
1.被砸晕的这个人其实就是事件源,因为他是能够接受到外部的事件的源体。
2.侦听器就是这个人的大脑神经,因为它会感知到疼痛。
3.事件处理就是这个人晕死了过去。
由于事件驱动模型在我们日常生活中是无处不在的,因此Java和其他的编程语言都将这一过程运用到了可视化编程中了。
2.Java编程语言中的事件驱动模型
在Java编程技术中,最常用的可视化编程当属Java Swing技术,Java Swing 为开发者提供了很多现成的组件,如:按钮(JButton),单选按钮(JRadioButton)等。为了管理用户与组成程序图形用户界面的组件间的交互,必须理解在Java 中如何处理事件。
假设用户单击了程序图形用户界面中的一个按钮,其实该按钮就是这个事件的源(可以引发事件的物体)。所有的Java Swing对象都有感知自己被操作的能力,因此JButton按钮也具有这样能力。一个事件通常必须有一个源对象,这里就是JButton对象。当单击按钮时,JButton组件类会生成一个用于存放该事件参数的ActionEvent的对象,该对象包含了事件及事件源的信息。图1-1显示了这种机制。
图 1-1
当JButton感知到自己被点击以后会将这种感觉传递给某个侦听器对象,该侦听器对象原先已被告知对该类事件感兴趣,侦听器对象仅是一种侦听特定事件的对象。这里的“将事件传递给侦听器”仅意味着事件源调用侦听器对象中的一个特定方法,并以事件对象作为实参。侦听器对象可以侦听一个特定对象的事件(比如一个按钮)。
其实可以使任何类的对象成为侦听器对象,只要使该类实现侦听器接口。你将会发现有各种各样的侦听器接口,以满足不同类型事件的需要。在这个单击按钮的例子中,需要实现ActionListener接口以便接收按钮事件。在侦听器接口声明的方法中,实现了接受这个事件对象并响应该事件的代码。在本例中,在事件发生时,调用了ActionListener接口中的actionPerformed()方法。每种侦
听器接口都定义了特定的方法,用来接收该侦听器计划要处理的事件。
仅仅实现侦听器接口还不足以将侦听器对象连接到事件源上,仍需要把侦听器与希望处理的事件单个源或多个源连接起来。通过调用事件源对象的特定方法,可以注册带有事件源的侦听器对象。例如,为了注册侦听单击按钮事件的侦听器,需要调用JButton对象的addActionListener()方法,该操作可以使侦听对象和事件源绑定。
每个事件响应时只涉及到对该事件感兴趣的侦听器。由于侦听器只要求实现一个合适的接口,所以实际上,可以在任何希望的地方接收和处理事件。在Java 中使用侦听器对象处理事件的方式,称为委托事件模型,这是因为对于诸如按钮这种组件引起的事件响应,并不是由引起事件的对象本身处理,而是委托独立的侦听器对象进行处理,刚才的actionPerformed()其实就是一个委托处理方法。现在让我们来看一下,JButton是如何将用户的点击转化成方法处理的(如图
1-2)。
图1-2
JButton组件初始化代码片断:
侦听器创建的代码片断:
//侦听器对象ButtonEventHandler(用来侦听按钮的点击操作)class ButtonEventHandler implements ActionListener { //窗体对象
private EventDemo form = null;
//通过构造体传入窗体对象,
//作用在于让侦听器对象明白事件源处于
//哪个窗体容器中
public ButtonEventHandler(EventDemo form) {
this.form = form;
}
//委托方法
public void actionPerformed(ActionEvent e) {
//该方法将会把事件的处理权交给窗体容器类的
//btnPress_Click方法处理。
this.form.btnPress_Click(e);
}
}
真正的事件处理代码片断:
/**
*按钮btnPress的事件处理方法。
*
*@param e事件参数
*/
private void btnPress_Click(ActionEvent e) {
String message = "你点击的按钮名叫:"
+ ((JButton) e.getSource()).getName();
this.txtMessage.setText(message);
}
代码工作原理:
JButton组件初始化代码片断已经明确阐述了按钮被创建后放置于窗体上,关键在于本代码片断的以下语句:
btnPress.addActionListener(new ButtonEventHandler(this));
该语句就是向事件源植入了侦听器对象ButtonEventHandler,该类实现了ActionListener结构,因此JButton类的对象btnPress这个时候已经具有了处理用户点击按钮的能力了。
当用户点击btnPress这个按钮的时候,按钮对象会直接把这次点击感觉传递给ButtonEventHandler的actionPerformed方法处理,为养成较好的编程习惯,我们中心并不建议学员直接在该委托方法中编写代码,而是需要将该事件处理再次转发给窗体中的某个方法来处理,这个方法的命名也必须是有规则的,就是事件源名+下划线+事件名(btnPress_Click),并且该方法必须具有事件参数ActionEvent,因为在该对象中明确指明了,哪个按钮受到了点击了。
e.getSource()方法返回了被点击按钮的对象,由于这次被点击的是一个按钮,因此我们需要使用JButton对e.getSource()的返回值进行强转,随后通过getName()方法得到这个按钮的名字。至此整个点击事件处理完了。
原文出处:中软卓越https://www.doczj.com/doc/9f18854783.html, https://www.doczj.com/doc/9f18854783.html,
《Java Web应用开发》项目设计参考方案(学时:84)项目一网上商城项目开发环境的搭建(学时:8) 一、教学目标 最终目标:学会Java Web 开发环境搭建,了解如何在集成开发环境中开发JSP、Servlet程序,能在Web服务器上进行运行测试。 促成目标: 1. 了解JSP、Servlet技术; 2. 了解Java Web 开发模式; 3. 了解Java Web服务器运行条件,掌握如何安装、配置Jdk、Tommcat和集成开。 二、工作任务 1.任务1 Java Web 环境搭建 2. 任务2 简单JSP、Servlet测试 三、活动设计 1.活动思路 首先介绍动态网页技术及相关开发模式,并将相关技术进行比较,从而引出本门课的重点。接着指出建立Web服务器的条件,引出如何搭建Java Web运行环境;最后学习集成开发环境的安装与设置,并学习如何写JSP程序、Servlet 程序,并掌握如何在客户端进行运行测试。 2.活动组织 3.活动评价 评价内容:根据学生具体任务完成情况、课后作业等情况进行评价。 评价标准: 实践部分评价:能基本完成相关软件的安装、环境配置为及格;独立完成相关软件的安装、环境配置,基本能进行代码编写及测试为良好;独立完成相关软件的安装、环境配置,并能进行正确的代码编写及测试为优秀。
模块一 Java Web 环境搭建(学时:4) 一、教学目标 最终目标:掌握浏览静态网页和动态网页的技能,掌握分析网页所采用的技术的技能,能独立完成JSP运行环境的安装及配置 促成目标: 1.了解静态网页中的静态的概念; 2.了解动态网页中的动态的概念; 3. 了解JSP、Servlet技术; 4. 了解Java Web 开发模式; 5.学会JDK、Tomcat的下载、安装及配置。 二、工作任务 1. JDK、Tomcat的安装及配置; 2.浏览各种类型的网页,分析出网页采用的技术; 三、活动设计 1.活动内容 通过浏览多种类型的网页、导出静态网站与动态网站的概念,继而引出对各种网页开发技术的分析,引入JSP动态网页开发技术、开发模式及运行环境;浏览电子商务网站,导出网上商城的项目;分析JSP的基本概念,导出Web服务器的概念,引出JSP常用的Web服务品Tomcat。构建JSP运行环境,为下一步开发工作做好准备。 子任务一:JDK安装与配置 子任务二:Tomcat的安装与配置,服务器运行测试。 2.活动组织
j a v a项目开发实例图书信息管理系统开发及源 码 集团文件发布号:(9816-UATWW-MWUB-WUNN-INNUL-DQQTY-
图书信息管理系统 一、系统功能概述: 根据图书信息管理系统的特点,可以将本系统分为2大功能模块,分别为:基础数据维护、系统数据维护。本系统各个部分及其包括的具体功能模块如下图所示: 二、数据库设计: 图书信息表: 图书类别表: 用户信息表:
读者信息表: 三、系统源代码: ewInstance(); conn = (dbUrl, dbUser, dbPwd); "数据库连接成功!"); } else return; } catch (Exception ee) { (); } } xecuteQuery(sql); } catch (SQLException e) { ();
return null; } finally { } } xecuteUpdate(sql); } catch (SQLException e) { quals("[Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]DELETE 语句与 COLUMN REFERENCE 约束 'FK_TB_BORRO_REFERENCE_TB_BOOKI' 冲突。该冲突发生于数据库 'db_library',表 'tb_borrow', column 'bookISBN'。")) return -1; } finally { } } etLayout(borderLayout); setIconifiable(true); dd(panel); final JLabel label_2 = new JLabel(); ("图书编号:"); (label_2); ISBN = new JTextField("请输入13位书号",13); (new MyDocument(13)); dd(panel_1, ; final FlowLayout flowLayout = new FlowLayout();
5.1 抽象窗口工具集AWT 5.1 抽象窗口工具集AWT 设计Java图形用户界面(GUI, Graphics User 5.1 抽象窗口工具集AWT(续1完) java.awt AWT核心包,包括组件类,事件类等 5.2 Java图形类(续1) 5.4 容器与容器类组件 (1)容器有一定范围,容器一般都是矩形,容器范围边界可
5.4 容器与容器类组件(续1) 5.4 容器与容器类组件(续2完) 5.5 Java事件类(续1) 5.5 Java事件类(续2完) 5.6 Java事件响应机制 5.6 Java事件响应机制(续1)
5.6 Java事件响应机制(续2) 5.6 Java事件响应机制(续3) 5.6 Java事件响应机制(续4) 5.6 Java事件响应机制(续5) 5.6 Java事件响应机制(续6) 5.6 Java事件响应机制(续7)
5.6 Java事件响应机制(续8) 组件可以响应的事件 5.6 Java事件响应机制(续9) 5.6 Java事件响应机制(续10)例5.1一个多监听的例子。5.6 Java事件响应机制(续11) //第一个内嵌事件响应类 5.6 Java事件响应机制(续12) //第二个内嵌事件响应类5.6 Java事件响应机制(续13) //第三个内嵌事件响应类
5.6 Java事件响应机制(续14) public void display()5.6 Java事件响应机制(续15完) public static void main(String args[]) { C5_1 c=new C5_1(); c.display(); } Ch5-26 5.7 Java事件适配器 5.7 Java事件适配器(续1) Listener接口对应的Adapter抽象类 5.7 Java事件适配器(续2) 例5.2将例5.1改造成Adapter类事件处理方式。5.7 Java事件适配器(续3完) class MyEvent2 extends WindowAdapter
1、In Action (1)根据添加信息(insert)来考虑表中的字段,进行建表。使用PD画出ER图。要注意字段的数据类型的确定以及建表要满足三范式,减少数据冗余; (2)表建好后,根据表中各个字段来建pojo中的属性。要注意属性的数据类型和字段的数据类型要一致; (3)根据pojo中的属性确定bean的属性,直接拷贝即可,用于页面展示。在bean中,统一使用String类型变量接收前台页面传递的参数;每个HTML表单对应一个bean。HTML 表单中的字段和bean中的属性一一对应。 (4)自顶向下,依次定出action、manager、dao。先写出轮廓,跑通整个流程,再写具体实现,一点点累加,便于调试错误; (5)根据数据实体和具体业务逻辑,使用StarUML画类图,进行OOA和OOD,灵活运用设计模式。 (6)API命名: CRUD:add,get,update,delete,[list] 严格区分单复数形式,单数表示对象,复数表示对象集合。 对象、属性最好单个单词。 (7)前后台都要校验。 (8)按照资源方式组织数据接口,对前端开发帮助很大。即通过REST来实现资源的增、删、改、查。 (9)软件开发,思路最重要!代码开发多了,思路就有了。 a、一个版本一个版本递增的开发;每个版本增加一点内容; b、总结开发思路;第一步怎么做,下一步怎么做? c、用文档记录开发的思路,即第一个版本开发实现了什么功能以及开发步骤,下一个版本实现了什么功能等等?
d、程序员进行程序开发时,不要仅仅停留在代码,要深入到底层的运行机制,才可以对程序的运行机制有更准备的把握; (10)网页模板 request到template.jsp文件(此文件假设包括三个部分,即title、banner、body) web客户——> title banner———————>include:banner.jsp body————————>include:showcart.jsp (11)一步一步的定位。根据结果进行分析。 (12)分页控件 假分页: 基本思想是将所有的数据从数据库中取出,只显示有用的部分。靠的是程序的算法,实际上就是在ResultSet上进行操作。 真分页:(数据库中的一种实现) 任何数据库都会提供分页的函数操作:Oracle、MySQL(limit,即limit 开始的记录, 要查询的行数)、SQL Server(top) 基本思想是在数据库中编写特定的SQL语句。程序中只读取有用的部分,没用的部分不会加载到内存中。 (13) 2、TIPS
第1章JAVA简介 一、判断题 1.√ 2.√ 3.? 4.? 5.? 6.√ 7.√ 8.√ 9.? 10.? 二、填空题 1.Application Applet 2. 类(字节码文件、目标文件) .class 3.对象 4. 主 5. J2SE J2EE J2ME 三、选择题 1.B 2. D 3.B 4.B 5. A 四、简答题 1.参考答案 Java语言是简单的、面向对象的、分布式的、健壮的、安全的、体系结构中立的、可 移植的、编译解释型的、高性能的、多线程的、动态的等等。 2.参考答案 Java程序执行的具体过程如图1所示。 图1 Java程序的运行机制 3.参考答案 Java程序在计算机在执行要经历以下几个阶段: (1)使用文字编辑软件(例如记事本、写字板、UltraEdit等)或集成开发环境 (JCreater、Eclipse、MyEclipse等)编辑Java源文件,其文件扩展名为.java。 (2)通过编译使.java的文件生成一个同名的.class文件。 (3)通过解释方式将.class的字节码文件转变为由0和1组成的二进制指令执行。 在以上阶段中可以看出Java程序的执行包括了编译和解释两种方式。 第2章Java 语法基础 一、判断题
1. ? 2.√ 3. ? 4.? 5.? 二、填空题 1.10 2. 单精度双精度 3. n%13 !=0?false:true 4.接口 5. false 三、选择题 1.D 2. C 3.D 4.A 5. C 第3章程序流程控制 一、判断题 1.错误 2.? 3.? 4.? 5.√ 二、填空题 1.循环 2. if 3.case switch 4. while do-while 5. continue 三、选择题 1.D 2. C 3.C 4.B 5. C 第4章数组 一、判断题 1. ? 2. √ 3. √ 4. √ 5.? 二、填空题 1.类型 2. new 3.长度 4. 分配空间 5. 3 6 9 三、选择题 1.D 2. A 3.C 4.B 5. B 第5章类和对象 一、判断题 1.√ 2.√ 3.? 4.? 5.√ 6.? 7.√ 8.? 9.? 10.√ 11.√ 12.√ 13.? 14.? 15. ? 二、填空题 1.public default 2. class 属性方法 3.public static void main(String args[]){} 4. new
实验五Java项目开发实例 实验目的: 掌握运用RAD开发Java应用程序 目标要求: 1.掌握运用Visual Editor创建窗口应用程序 2.掌握通过JDBC连接数据库 内容简介: 本章将介绍MyLibrary的 GUI应用程序。 实验说明: 第一节创建GUI应用程序 1.添加JDBC环境变量 在菜单栏点击“文件 -> 新建 -> 项目”,选择“Java项目”,点击“下一步”。 输入项目名称“MyLibraryGUI”,点击“下一步”。 在Java设置中选择“库”栏,点击“添加变量”。在“新建变量类路径条目”对话框
中点击“配置变量” 在“类途径变量”对话框中点击“新建”按钮,会弹出“新建变量条目”对话框。在“名称”栏中输入“CLOUDSCAPE_DRIVER_JAR”,然后点击“文件”按钮,找到D:/Program Files/IBM/Rational/SDP/runtimes/base_v6/cloudscape/lib/,如下图: 点击“确定”。再次点击“确定”。在弹出对话框点击“是”。 在“新建变量类路径条目”窗口中选择 ,点击“确定”。
这样就在MyLibraryGUI项目里添加了Cloudscape 的JDBC驱动。点击“完成”按钮。 2.新建可视类(Visual Class) 在菜单栏选择“文件 -> 新建 -> 其它 -> Java -> 可视类”,点击“下一步”。 在“Java类”窗口,“包”文本框输入,“名称”文本框输入“MyLibraryDesktopApp”,“样式”选择“Swing -> 框架”(选择后“超类”变成),点击“接口”右侧的“添加”,输入ActionListener,点击“确定”。勾选“pulibc static void main(String[] args)”,点击“完成”
BOS物流管理系统第一天搭建环境 内容安排: 1、运行项目,分析功能结构 Struts2 通配符映射,将所有页面放在WEB-INF下 2、项目改造为maven结构 项目使用STS 3、jQuery EasyUI 框架 常用各个布局插件、Ztree菜单技术 学习目标:maven 、svn 、eclipse 工具、掌握前端开发框架EasyUI 1.BOS项目概述 1.1.项目背景 什么是BOS? (Business Operation System) ,各个软件最核心业务系统 用友软件公司为宅急送公司开发ERP系统---- 核心系统 BOS一期工程C/S结构,二期工程B/S 结构 传统项目分类:OA 自动化办公系统、CRM 客户关系管理系统、ERP 综合管理平台
1.2.项目开发任务 项目完整开发流程: 需求分析(需求分析文档)----- 系统设计(页面原型设计jquery easyui 、数据库设计PowerDesigner )------ 编码----- 测试----- 集成部署和运维 BOS系统非常庞大,十几天学习哪些功能
涉及三大核心业务模块:基础设置模块、取派模块、中转模块 基础设置模块:管理物流信息基础元素信息(快递员、配送区域、配送时间、排班…)取派模块:客户要进行快递,系统进行业务受理、系统分单到快递员、快递员取件、打包、计费 中转模块:管理货物在配送路程中间数据 路由模块:管理车辆和线路 财务模块:计费 PDA模块:管理快递员无线电通信 报表模块:生成统计数据 用户权限管理:通用权限管理系统Apache Shiro
1.3.项目开发平台和技术 新建一个Maven工程mavenbos 1.4.导入原型页面 配置说明pom.xml 导入参照下发pom.xml 文档!
实验五Java事件处理 实验目的 1.掌握Java语言中的事件处理方法 2.掌握Java语言中事件源、监视器和处理事件的接口的概念 实验内容 1.图形用户界面设计程序(ArtFo nt.java) 在实验三第1题的基础上,添加事件处理机制,并逐步完善程序功能。分别用ArtFont 类的对象做监视器和匿名内部类的对象做监视器实现。 要求实现如下功能: 当在文本框中输入文字后回车,在文本域中显示输入的文字。当分别选择粗体和斜体 复选框时,文本域中的文字分别显示粗体和斜体样式。 当点击颜色按钮时,出现颜色选择对话框,选择需要的颜色,按确定按钮后,按钮的 前景色和文本域的前景色设置为选定的颜色。 当选择字体样式下拉框中的某一字体样式时,文本域中的文字设置为指定的字 体样式。 当选择字体大小下拉框中的某一字体大小时,文本域中的文字设置为指定的字 体大小。 当选择窗体样式下拉框中的某一窗体效果时,窗体外观改变为指定的窗体外观。 图1程序界面运行效果 package Sy; import java.awt.*; import java.awt.event.*;
import javax.swing.*; public class ArtFont extends JFrame { static ArtFont artFont; JComboBox fontType;// 字体样式下拉框 JComboBox fontSize;// 字体大小下拉框 JComboBox windowStyle;// 窗体样式下拉框 JCheckBox boldBx;// 粗体按钮 JCheckBox italicBx;// 斜体按钮 JButton colorBtn;// 颜色按钮 String[] fontNames;// 字体名称 String[] fontSizes;// 字体大小 JLabel label;// 输入提示标签 JTextField inputText;// 文字输入框 JTextArea txtArea;// 文字显示区 JPanel northPanel;// 字体设置 JPanel centerPanel;// 显示效果区 JPanel southPanel;/样式设置 Font font; int boldStyle, italicStyle; int fontSizeStyle; String fontNameStyle; Color colorStyle = Color.black;// 设置字体的默认颜色为黑色 String[] style = { "默认显示效果 ", "Windows 显示效果 ", "Unix 显示效果 " }; public ArtFont() { super(”字体设置"); // 设置默认字体 boldStyle = 0; italicStyle = 0; fontSizeStyle = 10; fontNameStyle = "宋体 ";
JA V A编程实例大全及详解答案(50例) 【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? //这是一个菲波拉契数列问题 public class lianxi01 { public static void main(String[] args) { System.out.println("第1个月的兔子对数: 1"); System.out.println("第2个月的兔子对数: 1"); int f1 = 1, f2 = 1, f, M=24; for(int i=3; i<=M; i++) { f = f2; f2 = f1 + f2; f1 = f; System.out.println("第" + i +"个月的兔子对数: "+f2); } } } 【程序2】 题目:判断101-200之间有多少个素数,并输出所有素数。 程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。 public class lianxi02 { public static void main(String[] args) { int count = 0; for(int i=101; i<200; i+=2) { boolean b = false; for(int j=2; j<=Math.sqrt(i); j++) { if(i % j == 0) { b = false; break; } else { b = true; } } if(b == true) {count ++;System.out.println(i );} } System.out.println( "素数个数是: " + count);
案例--注册功能 1功能说明 没有人不知道什么叫注册功能吧! 我们这里的注册功能很简单,给用户提供一个页面,在页面中给出一个注册表单,用户输入自己的注册信息(用户名和密码)。然后提交表单,把请求发送到Servlet,Servlet会把用户的注册信息保存到XML文件中。完毕! 我们也不打算让Servlet做太多的事情,所以真正保存信息的工作还是交给DAO来做吧!所以在Servlet中只是获取DAO对象,然后调用DAO的方法来完成保存信息! DAO – Data Access Object(数据的存取工作,由这个对象来完成!) ●User :这是我们注册功能的唯一数据类! 不能用业务数据做主键(唯一标识!) username:用户名是唯一的! password email:唯一的! 2项目分析 用户通过注册页面的表单向Servlet发送请求,Servlet获取DAO对象,然后调用DAO 对象的方法save()方法完成向XML文档中保存注册信息。 ●reigst.jsp:包含注册表单的页面,提交表单会把请求交给RegistServlet来处理; ●RegistServlet:注册Servlet,包含doPost()方法。获取DAO对象,然后调用DAO对 象的save()方法传递User对象(注册信息领域对象)过去,由DAO完成保存注册信 息; ●RegistDao:只有一个save(User)方法,会使用DOM4J完成把User保存到XML文件 中; ●RegistDaoImpl:为了更好的处理耦合的问题,我们把RegistDao定义为接口,而 RegistDaoImpl为其实现类; ●User:领域对象,用来封装注册信息。最终还需要把它转换成XML数据持久化! ●user.xml:因为我们现在没学数据库,只能使用XML作为存储数据的工具。 总是从无依赖开始! 3从注册页面开始