




已阅读5页,还剩44页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
I 摘 要 随着因特网的飞速发展 在线商城实现的功能越来越多 承受的访问量越 来越大 相应地网上购物系统需要处理的信息量急剧增加 单台服务器往往无 法承受巨大的访问量 这时候就需要采用分布式系统 EJB规范定义了开发和 部署基于事务性 分布式对象应用程序的服务器端软件组件的体系结构 很适 合用于构建大型分布式网站 关键词 Java EJB 3 0 Servlet 分布式 网上书城 II Abstract With the rapid development of Internet online store has to achieve more and more functions and serve more and more visitors Accordingly online shopping system has to deal with the rapid increase of the amount of information A single server often can not afford a huge number of visits then you need to adopt a distributed system EJB specification defines the development and deployment of a server side software component architecture based on transaction and distributed object application and it is suitable for building large distributed sites Keywords Java EJB 3 0 Servlet distributed system online bookstore III 目录 1 课题研究背景 1 1 1 课题研究内容及意义 1 1 2 EJB 的历史及现状 1 1 3 从 WEB层访问 EJB 4 1 4 论文内容安排 5 2 系统开发环境及相关技术 6 2 1 系统开发环境 6 2 2 JAVA技术简介 6 2 3 EJB 3 0 技术简介 7 2 4 SERVLET技术简介 11 2 5 JSP 技术简介 11 3 系统需求分析 14 3 1 用例分析 14 3 2 活动图 17 3 3 时序图 19 3 4 E R 图 21 3 5 部署分析 22 4 系统设计 23 4 1 项目结构设计 23 4 2 类设计 24 4 3 WEB设计 26 4 4 数据库设计 27 5 系统实现与测试 30 5 1 功能实现 30 5 2 部署实现 38 5 3 系统测试 39 6 总结与展望 43 6 1 开发总结 43 6 2 未来展望 43 参考文献 44 致谢 45 基于 EJB3 0 的分布式网上购物系统 1 1 课题研究背景 1 1 课题研究内容及意义 网上购物系统又称为在线商城 无论是开设个人网上购物商店还是企业在线购物 商城 一套好用的网上购物系统都是必须的 网上购物系统拥有强大的商城功能 如 商品的推荐和展示等 运营商提供全方位的广告宣传和推广 而顾客可以方便地找到 自己心仪的商品 网上购物系统是实体店的很好补充 它节省了人力方面的投资 而 且营业时间不受限制 消费者可以在任何时间登录 购物 另外 网上购物系统没有 地域界限 相比实体店有更完善的客户群 网上购物系统还可以实现免费的市场调查 功能 在网站上点击和成交都是自动统计的 你可以通过网络点击和成交量把握商品 库存的尺度和市场的趋势 并且通过顾客的反馈得到更多有助于网店发展的信息 随着因特网的飞速发展 在线商城实现的功能越来越多 承受的访问量越来越大 相应地网上购物系统需要处理的信息量急剧增加 单台服务器往往无法承受巨大的访 问量 这时候 分布式系统的应用就显得格外重要了 分布式系统把一个功能拆分成 多个功能 不同功能分布部署到不同的服务器上实现 它提供多个对外的接口 按照 一定规则 分派不同请求由不同接口来处理 由此实现各服务器负载的均衡 另外 分布式系统也增强了整个在线商城的健壮性 当其中一台服务器出现故障时 我们可 以实现故障转移 让服务器自动切换 Enterprise JavaBeans EJB 规范定义了开发和部署基于事务性 分布式对象应用 程序的服务器端软件组件的体系结构 企业组织可以构建它们自己的组件 或从第三 方供应商购买组件 这些服务器端组件称作Enterprise Bean 它们是EJB容器中驻留的 分布式对象 为分布在网络中的客户机提供远程服务 因此 EJB很适合用于构建大型 分布式网站 并具有其现实而重要的意义 1 2 EJB 的历史及现状 每次 EJB 的新版本发布时 都会带来新的重要的特性 满足大众需求并采用新兴 技术 下面是从 1996 年 EJB 出现以来 或者说从更重要的 1998 年 EJB 的第一个商业 实现以来 其规范发展的简要总结 1 2 1 EJB 的历史版本 1 EJB 1 0 最初的版本 1 0 开始支持有状态和无状态服务对象 称为会话 Bean 以及可选 支持持久化域对象 称为实体 Bean 在可移植性方面 EJB 通过提供可移植性和远 基于 EJB3 0 的分布式网上购物系统 2 程特性的专门远程接口达到访问的目的 但是受到了远程基础结构和按值传递的语义 的开销的影响 2 EJB 1 1 其后的版本 1 1 要求厂商支持实体 Bean 并且引入 XML 部署描述文件来替换存储 在专门的串行化类文件中的元数据 3 EJB 2 0 EJB2 0 通过引入本地接口解决远程接口造成的开销和按值传递的缺陷 只有运行 在 J2EE 容器内的客户才能通过其本地接口访问 EJB 按引用传递的方法调用允许组件 之间更加有效地进行交换操作 EJB2 0 还引入了新型的 EJB 消息驱动 Bean Message Driven Bean MDB 从而能够参与异步消息系统 实体 Bean 得到 了容器管理的关系 Container Managed Relationship CMR 的支持 它允许 Bean 的 开发者声明式地指定由 EJB 容器管理的实体 Bean 之间的持久化关系 另外 EJB2 0 还引入了 EJB 查询语言 Enterprise JavaBeans Query Language EJB QL 它使开发 者具有了使用类似 SQL 那样的语言来查询实体 Bean 实例的功能 4 EJB2 1 EJB2 1 添加了 Web 服务的支持 允许会话 Bean 暴露端点接口 添加了允许按照 指定的时间或者时间间隔调用 EJB 的计时器服务 EJB2 1 还提供了扩展的 EJB QL 功 能 并且引入 XML schema 来替换定义了 ejb jar xml 部署描述文件的 DTD 5 EJB3 0 EJB 3 0 最重要的改动是实体 Bean 被替换成 POJO 现在被称为实体 它可以运行 在 EJB 容器的外部 因此在实体类本身中不需要专门的接口或者 EJB 专有的代码 会 话 Bean 不再需要主接口或者 EJB 专有的组件接口 虽然在逻辑上它们仍然支持远程和 非远程 普通 接口 这两个改动和很多其它改动都符合 EJB 3 0 以简化的开发模型为 中心的新的设计理念 表 1 1 列出了 EJB 规范的历史版本 发布时间及其相应特性 表表 1 1 EJB 历史版本历史版本 版本号发布时间新增特性 EJB1 03 24 1998 定义了 EJB 和 EJB 容器的作用 实现与互动 提供了最早的开发者与用户视图 EJB1 112 17 1999 开始采用 XML 部署描述符 默认的 JNDI 上下文以及可 支持 IIOP 的 RMI 安全机制由角色 Role 驱动 而非方法 支持实体类 且必须在应用中实现 EJB2 08 22 2001 制定了构建面向对象商务应用的标准组建结构 支持构筑使用不同开发工具所开发之组件的联合应用部署 在多线程 连接池 事务管理等方面对用户透明化 使符合 一次写成 多次运行 的 Java 思想 基于 EJB3 0 的分布式网上购物系统 3 关注企业级应用生命期间的开发 部署 运行等动作 定义了不同开发工具所需遵守的契约 以便其产品能够在 运行期交互 支持与现行系统兼容 开发者可以扩展现有产品以使之支 持 EJB 与其它 Java API 兼容 支持 EJB 与 Java2 平台企业版或者其他非 Java 应用程序之 间的互操作性 支持与 CORBA 兼容的 RMI IIOP EJB2 111 24 2003 Web 服务 可将无状态会话 bean 暴露为 Web 服务 EJB 可通过引用访问 Web 服务 EJB 定时器服务 提供一种新的基于定时器的事件驱动方 式 可供消息驱动 bean 作为消息源使用 增加了消息目的地 进一步丰富了 EJB 查询语言 新增支持 ORDER BY AVG MIN MAX SUM COUNT 和 MOD 使用 XML schema 代替 DTD 以定义部署描述符 EJB3 05 2 2006 全面采用 Java 注释代替部署描述符 后者仍可使用 并且 具有更高优先级 把 2 x 版的实体 Bean 改为由 JPA 支持 1 2 2 EJB 的新生 由于 IBM 和 Sun Microsystems 等 EJB 提倡者力推其前景 起初一些大公司纷纷采 用 EJB 部署他们的系统 然而随后各种问题便接踵而至 对 EJB 的恶评短时间内激增 对于初学者 EJB 的 API 显得太过困难 对于许多程序员来说 书写那些必须抛出特 定异常的接口并将 Bean 类作为抽象类实现的做法既不直观也不正常 当然 EJB 所被 赋予的使命 如对象关系映射和事务管理确实有其天然复杂性 但其 API 之复杂还是 令开发人员们望而却步 一些人开始怀疑 EJB 除了引入了复杂的实现手段以外似乎并 未带来什么实际好处 另外 实际运用中发现 如果使用 EJB 来封装业务逻辑会带来性能上的下降 这 是因为最早的 EJB 规范只允许客户端通过特定协议 如 CORBA 进行远程方法调用 来调用 即使大部分实际应用根本就不需要分布式计算 直到 EJB 2 0 才引入了本地接 口 以支持可以开发不通过网络就能直接本地调用的 EJB 系统 尽管如此 EJB 的广泛普及仍然为其复杂度所制约 尽管已经有一些高质量的集 成开发工具可以协助开发人员通过自动编码解决一部分重复作业 但这并不能降低学 习此项技术的难度 另一方面 草根阶层 的编程爱好者们发起了一场旨在使用 轻量级 技术以代替复杂的 EJB 的运动 这些技术包括 Hibernate 用于提供数据持 基于 EJB3 0 的分布式网上购物系统 4 久化和对象 关系映射 及 Spring 框架 用于封装业务逻辑 尽管它们不像 EJB 那 样有巨头支持 但其在庶民间却更加流行 并且也被一些对 EJB 深感失望的企业所采 用 EJB 规范起初的一个主要价值 对分布式应用进行事务管理 在随后的实践 中被一致认为几乎没能派上用场 对于企业级应用来说 Spring 和 Hibernate 等简化框 架更加实用 因此 EJB 3 0 规范 JSR 220 为了迎合这个趋势相比于其前辈进行了一 次激进的大跳跃 受到 Spring 的影响 EJB 3 0 也使用了所谓的 传统简单 Java 对象 POJO 同时 支持依赖注入来简化全异系统的集成与配置 Hibernate 的创始人 Gavin King 参与了这一新版规范的制订 并对 EJB 大加提倡 Hibernate 的许多特性也 被引入到 Java 持久化 API 当中 从而取代原来的实体 Bean EJB 3 0 规范大幅采用 Java 注解 annotation 来对代码进行元数据修饰 从而消减了此前 EJB 编程的冗杂性 相应地 EJB 3 0 几乎成为了一个全新的 API 与此前的数版可谓毫无相似度可言 1 3 从 Web 层访问 EJB 1 3 1 DAO 和 EAO 模式 EJB 组件设计是 Java EE 应用设计中的核心模块 它强调的是可复用性 可维护性 和可移植性等 当开发者设计 EJB 时 最困难的工作就是要选择一个正确的体系结构 或者一个正确的逻辑层的划分 目前 EJB 的设计模式有几十种 如何选择适合自己 项目的模式是 EJB 设计的关键问题 也是最难解决的问题 在 Hibernate 这样的 ORM 框架开始流行之前 很多应用程序开发者直接使用 JDBC 开发数据库访问代码 在业务逻辑层直接使用 JDBC 导致了若干维护问题 因此 出现了 DAO 模型 其目的是从业务逻辑去除数据库访问代码 DAO 设计模式一度非 常流行 不仅用于 JDBC 也用于 ORM 框架和 CMP 实体 Bean DAO 是 J2EE 应用的重要组件 它隐藏了底层的数据库访问细节 DAO 层也是 J2EE 应用分层中的重要分层 该层向上提供通用的数据访问接口 通过 DAO 组件 可实现业务逻辑和数据库访问的分离 避免业务逻辑与具体的数据库访问实现耦合 对于 J2EE 应用而言 数据库是相对稳定的部分 其 DAO 组件依赖于数据库系统 提 供数据库访问的接口 只要数据库没有重构 则 DAO 层通常无需改写 DAO 层也分隔了数据库与业务逻辑层 使业务逻辑层更加专注于业务逻辑的实现 而无需理会持久层访问实现 DAO 模式是 J2EE 设计模式中的一种核心设计模式 DAO 模式可抽象出数据访问方式 在访问数据源时 完全感觉不到数据源的存在 DAO 将数据访问集中在独立的一层 因为所有的数据访问都由 DAO 代理 这层 独立的 DAO 就将数据访问的实现与系统的其余部分剥离 将数据访问集中使得系统更 具可维护性 DAO 还降低了层的复杂程度 基于 EJB3 0 的分布式网上购物系统 5 1 3 2 Session Facade 模式 Session Facade 模式出现的主要原因之一是减少以前 EJB 版本中远程调用的数量 对于 EJB 3 0 也是如此 在 EJB 2 0 中 客户端远程访问实体 Bean 然而远程访问有其 代价 即降低性能并且紧急耦合客户端和域数据 通过会话 Bean 外端 可以在本地使 用实体 Bean 并且把会话 Bean 暴露给客户端 这样显著减少了 RMI 调用的数量 并且 加强了客户端和实体 Bean 之间的松散耦合 因此改进了代码的可维护性 Facade 模式为子系统中的一套接口提供了一个统一的接口 Facade 定义了一个更 高层次的接口 使子系统更容易使用 在 EJB 设计中 Session Facade 是应用最广泛的 设计模式 它应用会话 Bean 来实现 Facade 模式的思想 把构成子系统的一套业务对 象 包装 在会话 Bean 中 这样 Session Facade 作为客户端访问业务对象的拦截器 屏蔽了业务对象 EJB 客户端访问会话 Bean 来代替访问业务对象 当一个 EJB 客户端 需要调用多个业务对象的方法时 它只需要进行一次粗粒度的远程方法调用 将请求 送给 Session Facade 再由 Session Facade 通过本地方法调用 调用相应的业务对象 执行其方法 这样就减轻了网络负载 提高了系统性能 并且当业务对象的方法改动 时 只需要修改会话 Bean 而客户端可以保持不变 这就减少了客户端和业务对象之 间的耦合度 同时客户端也不必管理事务的细节 1 3 3 从 Web 层访问会话 Bean 我们知道 可以使用会话 Bean 构造应用程序的业务逻辑并且从企业应用程序的表 现层或 Web 层访问会话 Bean 表现层和 Web 层可以通过依赖注入或 JNDI 查找或访问 会话 Bean 但只有受管理类 如 Servlet 才支持依赖注入 其生命周期由容器管理 不受管理的应用程序组件必须使用 JNDI 查找才能获得会话 Bean 的引用 不管通过哪 种方式访问 EJB 在获得 EJB 引用之后 我们都会通过相同方式与它们进行交互 1 4 论文内容安排 本文第一章首先介绍了些必要的背景知识 主要包括 EJB 规范的发展过程和 EJB 3 0 技术的简单介绍 第二章介绍了开发使用到的技术 Java EJB Servlet JSP 和 DOM 技术 第三章对系统的整体需求分析 第四章和第五章是系统设计与实现 第六 章总结了开发的经验和教训 并对 EJB 技术的发展做了展望 基于 EJB3 0 的分布式网上购物系统 6 2 系统开发环境及相关技术 2 1 系统开发环境 系统使用 MyEclipse8 6 作为开发工具 采用 JBoss5 0 0 作为应用服务器 使用 EJB 3 0 Servlet 和 JSP 技术作为开发方法 是基于 EJB 3 0 的 Web 应用 2 2 Java 技术简介 Java 是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 程序设计语言 以下简 称 Java 语言 和 Java 平台的总称 用 Java 实现的 HotJava 浏览器 支持 Java applet 显示了 Java 的魅力 跨平台 动感的 Web Internet 计算 从此 Java 被广泛接受并 推动了 Web 的迅速发展 常用的浏览器现在均支持 Java applet Java 平台由 Java 虚拟机 Java Virtual Machine 和 Java 应用编程接口 Application Programming Interface API 构成 Java 应用编程接口为 Java 应用提供 了一个独立于操作系统的标准接口 可分为基本部分和扩展部分 在硬件或操作系统 平台上安装一个 Java 平台之后 Java 应用程序就可运行 现在 Java 平台已经嵌入了几 乎所有的操作系统 这样 Java 程序可以只编译一次 就可以在各种系统中运行 Java 应用编程接口已经从 1 1x 版发展到 1 2 版 目前常用的 Java 平台基于 Java1 4 最近版 本为 Java1 6 Java 分为三个体系 JavaME JavaSE JavaEE Java ME 用于开发在移动设备和嵌 入式设备 比如手机 PDA 电视机顶盒和打印机 上运行的应用程序 包括灵活的 用户界面 健壮的安全模型 许多内置的网络协议以及对可以动态下载的连网和离线 应用程序的丰富支持 Java SE 是标准版本 用于开发和部署在桌面 服务器 嵌入式 环境和实时环境中使用的 Java 应用程序 Java EE 是企业版本 用于开发和部署可移植 健壮 可伸缩且安全的服务器端 Java 应用程序 Java EE 是在 Java SE 的基础上构建 的 它提供 Web 服务 组件模型 管理和通信 API 可以用来实现企业级的面向服务 体系结构和 Web 2 0 应用程序 Java 语言是一个支持网络计算的面向对象程序设计语言 Java 语言吸收了 Smalltalk 语言和 C 语言的优点 并增加了其它特性 如支持并发程序设计 网络通 信 和多媒体数据控制等 Java 语言的优良特性使得 Java 应用具有无比的健壮性和可 靠性 这也减少了应用系统的维护费用 Java 对对象技术的全面支持和 Java 平台内嵌 的 API 能缩短应用系统的开发时间并降低成本 Java 的编译一次 到处可运行的特性 使得它能够提供一个随处可用的开放结构和在多平台之间传递信息的低成本方式 特 别是 Java 企业应用编程接口 Java Enterprise APIs 为企业计算及电子商务应用系统提 基于 EJB3 0 的分布式网上购物系统 7 供了有关技术和丰富的类库 2 3 EJB 3 0 技术简介 企业级 JavaBean Enterprise JavaBean EJB 是一个用来构筑企业级应用的服务 器端可被管理组件 Java 企业版 Java Enterprise Edition API 中提供了对 EJB 的规范 EJB 是一个封装有某个应用程序之业务逻辑的服务器端组件 EJB 最早于 1997 年 由 IBM 提出 旋即被 Sun Microsystems 采用并形成标准 EJB 1 0 和 EJB 1 1 其后 在 Java 社区进程 Java Community Process 的支持下陆续有一些 JSR 被制订来定义新 的 EJB 标准 分别是 JSR 19 EJB 2 0 JSR 153 EJB 2 1 以及最新的 JSR 220 EJB 3 0 EJB 规范的目的在于为企业及应用开发人员实现后台业务提供一个标准方式 从而 解决一些此前在作业过程中总是重复发生的问题 EJB 以一个标准方式自动处理了诸如 数据持久化 事务集成 安全对策等不同应用的共有问题 使得软件开发人员可以专 注于程序的特定需求而不再饱受那些非业务元素的困扰 2 3 1 EJB 与 JavaBean 的区别 JavaBean 是可复用的组件 对 JavaBean 并没有严格的规范 理论上讲 任何一个 Java 类都可以是一个 Bean 例如 Spring 中就是这样 所有的类都可以配置为 Bean 但通常情况下 由于 JavaBean 是被容器所创建的 如 Tomcat 所以 JavaBean 应具 有一个无参的构造器 另外 通常 JavaBean 还要实现 Serializable 接口用于实现 Bean 的持久性 JavaBean 实际上相当于微软 COM 模型中的本地进程内 COM 组件 它是不 能被跨进程访问的 Enterprise JavaBean 则相当于 DCOM 即分布式组件 它是基于 Java 的远程方法调用 RMI 技术的 所以 EJB 可以被远程访问 跨进程 跨计算机 但 EJB 必须被部署在诸如 Webspere WebLogic JBoss 这样的容器中 EJB 客户从 不直接访问真正的 EJB 组件 而是通过其容器访问 EJB 容器是 EJB 组件的代理 EJB 组件由容器所创建和管理 客户通过容器来访问真正的 EJB 组件 2 3 2 EJB3 0 与 EJB2 0 的区别 图 2 1 是 EJB2 0 的访问模型 基于 EJB3 0 的分布式网上购物系统 8 图图 2 1 EJB2 0 的访问模型的访问模型 如图所示 EJB 2 0模型存在复杂度高的缺陷 EJB 2 0模型要求创建多个组件接口并实现多个不必要的回调方法 组件接口要求实现EJBObject或EJBLocalObject以及处理许多不必要的异常 基于XML的EJB 2 0部署描述符比较复杂并容易出错 基于EJB模型的容器管理持久性在开发和管理方面过于复杂 并且失去了几个基本特 性 如使用数据库序列定义主键的标准方法 EJB QL语法非常有限 而且是静态的 无法做到运行期间的动态查询 EJB 2 0组件并非是真正面向对象的 因为它们在继承和多态性方面的有使用限制 开发人员无法在EJB容器外部测试EJB模块 而在容器内部调试EJB非常复杂和耗时 查找和调用EJB 2 0是一项复杂的任务 即使是在应用程序中使用最基本的EJB 也 需要对JNDI有一个详细的了解 对容器的依赖使得EJB 2 0只能用于服务器组件的开发 无法实现一次编写 到处运 行的面向构件的开发 所有这些复杂度和缺陷 都导致EJB 2 0的采用无法真正简化开发并提高生产力 所以出现了EJB 3 0 图2 2是EJB 3 0的访问模型 基于 EJB3 0 的分布式网上购物系统 9 图图 2 2 EJB3 0 的访问模型的访问模型 EJB 3 0旨在解决以往EJB 2 0模型的复杂性和提高灵活性 具体体现在 消除了不必要的接口Remote Home EJB以及回调方法实现 实体Bean采用了POJO模型 一个简单的JavaBean就可以是一个实体Bean 无需依赖 容器运行和测试 全面采用O R Mapping技术来实现数据库操作 实体Bean可以运用在所有需要持久化的应用 不管是客户端还是服务器端 从而真 正实现面向构件的开发 实体Bean现在支持继承和多态性 灵活丰富的JPQL查询语言 SQL支持 使用元数据注解代替部署描述符 减少复杂配置和提高可维护性 将常规Java类用作EJB并将常规业务接口用于EJB 从整个EJB规范的角度来看 EJB 3 0相比于EJB 2 0最大的变化在于实体Bean的持 久化API上 在EJB 3 0中 实体Bean持久化已经单独作为一个持久化API规范和EJB的 其它部分分离开来 2 3 3 EJB3 0 中 Bean 的分类 根据 Bean 的用途 EJB 3 0 规范中将它们分为三种类型 会话 Bean 消息驱动 基于 EJB3 0 的分布式网上购物系统 10 Bean 和实体 每种 Bean 类型都服务于一个目的 并且可以使用 EJB 服务的特定子集 给 Bean 分类的真正目的是保证不会在允许的范围内使它们过多地加载服务 Bean 分 类也帮助我们以有意义的方式了解和组织应用程序 例如 Bean 类型帮助我们在分层 架构的基础上开发应用程序 会话 Bean 和消息驱动 Bean Message Driven Bean MDB 用于构造业务逻辑 它们活动于容器中 容器管理这些 Bean 并且为它们提供服务 实体用于构建应用程序 的持久化部分 与容器一样 由持久化管理器管理实体 持久化管理器可以插入到容 器中 是 Java 持久化 API 更高的抽象 2 3 4 EJB 3 0 的新特性 1 简化的程序设计模型 EJB 2 0 最大的问题在于为了实现 EJB 我们需要编写大量代码 而 EJB 3 0 使我们 可以使用 POJO 和 POJI 开发 EJB 组件 然后我们可以按照需求 使用注解对它们应用 配置元数据 以便添加平台服务 如远程性 Web 服务支持以及生命周期回调 在 EJB 3 0 中 服务定义从类型安全的领域转移到了部署和运行时配置中 基本用不到的 很多机制性步骤都由平台本身自动完成 2 用注解代替部署描述文件 除了必须编写大量样板代码之外 管理 EJB 2 0 的重要障碍是仍然必须为每个组件进 行大量 XML 配置 EJB 3 0 允许我们使用元数据注解配置组件 而不一定要使用冗长 可读性差的 XML 部署描述文件 除了使配置任务更加容易之外 EJB 3 0 还通过尽可 能地使用有意义的默认值减少了需要配置的任务的总量 当我们使用 ORM 处理自动持 久化时 这显得尤为重要 3 依赖注入和 JNDI 查找 EJB 2 0 开发中最为单调乏味的一部分是 当访问 EJB 或由容器管理的资源 如池化 的数据库连接处理 以进行 JNDI 查找时 必须多次编写相同的几行样板代码 JNDI 的麻烦在于它使应用程序代码与应用程序服务器结合在一起 这使开发和测试非常困 难 在 EJB 3 0 中 JNDI 查找被转换为使用基于元数据的依赖注入的简单配置 4 简化的持久化 API EJB 2 0 持久化模型的大量问题源于它把容器范例应用到了不适合它解决的问题上 使实体 Bean 受容器管理的主要动机是为了允许远程访问 但因为性能的原因 实际上 很少有客户端利用这一特性 而是选择使用会话 Bean 作为远程访问端点 EJB 3 0 通 过使用更为自然的 API 范例 通过 EntityManager 接口操作基于元数据的 POJO 从而 解决了这个问题 EJB 2 0 中实体 Bean 的 ORM 从未标准化 查询机制 EJB QL 也很不 完善 在 EJB 3 0 中 持久化由 Java 持久化 API Java Persistence API JPA 管理 首先 它提供能够处理大部分自动持久化复杂情况的健壮的 ORM 配置集 其次 Java 基于 EJB3 0 的分布式网上购物系统 11 持久化查询语言 JPQL 显著地改进了 EJB QL 使 OR 查询技术趋于标准化 最后 EntityManager API 标准化了 ORM CURD 操作 但是 标准化不是简化的 API 的唯一 优势 另一个非常好的特性是它可以运行在容器之外 5 可进行单元测试的 POJO 组件 在 EJB 2 0 中 只能对组件进行功能性测试 因为组件必须部署到容器中才能执行 因为所有 EJB 3 0 组件都是 POJO 所以可以容易地在容器之外执行它们 这就是说使 用测试框架 如 Junit 或者 TestNG 对所有组件业务逻辑进行单元测试成为可能 2 4 Servlet 技术简介 Servlet 是一种服务器端的 Java 应用程序 具有独立于平台和协议的特性 可以生 成动态的 Web 页面 它担当客户请求 Web 浏览器或其他 HTTP 客户程序 与服务器 响应 HTTP 服务器上的数据库或应用程序 的中间层 Servlet 是位于 Web 服务器内 部的服务器端的 Java 应用程序 与传统的从命令行启动的 Java 应用程序不同 Servlet 由 Web 服务器进行加载 一个 Servlet 就是 Java 编程语言中的一个类 它被用来扩展 服务器的性能 服务器上驻留着可以通过 请求 响应 编程模型来访问的应用程序 虽然 Servlet 可以对任何类型的请求产生响应 但通常只用来扩展 Web 服务器的应用程 序 该 Web 服务器必须包含支持 Servlet 的 Java 虚拟机 最早支持 Servlet 技术的是 JavaSoft 的 Java Web Server 此后 一些其它的基于 Java 的 WebServer 开始支持标准的 Servlet API Servlet 的主要功能在于交互式地浏览 和修改数据 生成动态 Web 内容 这个过程为 1 客户端发送请求至服务器端 2 服务器将请求信息发送至 Servlet 3 Servlet 生成响应内容并将其传给服务器 响应内容动态生成 取决于客户端的请求 4 服务器将响应返回给客户端 Servlet 看起来像是通常的 Java 程序 Servlet 导入特定的属于 Java Servlet API 的包 因为是对象字节码 可动态地从网络加载 可以说 Servlet 对服务器就如同 Applet 对客 户端一样 但是 由于 Servlet 运行于服务器中 它并不需要一个图形用户界面 从这 个角度讲 Servlet 也被称为 Faceless Object Servlet 目前最新版本为 3 0 草案 2 5 JSP 技术简介 JSP Java Server Pages 是由 Sun Microsystems 公司倡导 许多公司参与一起建立 的一种动态网页技术标准 其在动态网页的建设中有其强大而别特的功能 JSP 与 基于 EJB3 0 的分布式网上购物系统 12 Microsoft 的 ASP 技术非常相似 两者都提供在 HTML 代码中混合某种程序代码 由 语言引擎解释执行程序代码的能力 在 ASP 或 JSP 环 境下 HTML 代码主要负责描 述信息的显示样式 而程序代码则用来描述处理逻辑 普通的 HTML 页面只依赖于 Web 服务器 而 ASP 和 JSP 页面需要附加 的语言引擎分析和执行程序代码 程序代 码的执行结果被重新嵌入到 HTML 代码中 然后一起发送给浏览器 ASP 和 JSP 都是 面向 Web 服务器的技术 客户端浏览器不需要任何附加的软件支持 现介绍如下 1 将内容的生成和显示进行分离 使用 JSP 技术 Web 页面开发人员可以使用 HTML 或者 XML 标识来设计和格式 化最终页面 使用 JSP 标识或者小脚本来生成页面上的动态内容 内容是根据请求来 变化的 例如请求帐户信息或者特定的一瓶酒的价格 生成内容的逻辑被封装在标识 和 JavaBeans 组件中 并且捆绑在小脚本中 所有的脚本在服务器端运行 如果核心逻 辑被封装在标识和 Beans 中 那么其他人 如 Web 管理人员和页面设计者 能够编辑 和使用 JSP 页面 而不影响内容的生成 在服务器端 JSP 引擎解释 JSP 标识和小脚本 生成所请求的内容 例如 通过访 问 JavaBeans 组件 使用 JDBCTM 技术访问数据库 或者包含文件 并且将结果以 HTML 或者 XML 页面的形式发送回浏览器 这有助于作者保护自己的代码 而又 保证任何基于 HTML 的 Web 浏览器的完全可用性 2 生成可重用的组件 绝大多数 JSP 页面依赖于可重用的 跨平台的组件 JavaBeans 或者 Enterprise JavaBeans TM 组件 来执行应用程序所要求的更为复杂的处理 开发人员能够共享和 交换执行普通操作的组件 或者使得这些组件为更多的使用者或者客户团体所使用 基于组件的方法加速了总体开发过程 并且使得各种组织在他们现有的技能和优化结 果的开发努力中得到平衡 3 采用标识简化页面开发 Web 页面开发人员不会都是熟悉脚本语言的编程人员 Java Server Page 技术封装 了许多功能 这些功能是在易用的 与 JSP 相关的 XML 标识中进行动态内容生成所需 要的 标准的 JSP 标识能够访问和实例化 JavaBeans 组件 设置或者检索组件属性 下载 Applet 以及执行用其他方法更难于编码和耗时的功能 通过开发定制化标识库 JSP 技术是可以扩展的 今后 第三方开发人员和其他人员可以为常用功能创建自己的 标识库 这使得 Web 页面开发人员能够使用熟悉的工具和如同标识一样的执行特定功 能的构件来工作 4 将内容的生成和显示进行分离 与 Servlet 相比 JSP 能提供所有 Servlet 的功能 但它比用 println 书写和修改 HTML 更方便 此外 你可以更明确的进行分工 WEB 页面设计人员编写 HTML 只 需要留出地方让 Servlet 程序员插入动态部分即可 基于 EJB3 0 的分布式网上购物系统 13 5 由于 JSP 页面的内置脚本语言是基于 Java 编程语言的 而且所有的 JSP 页面 都被编译成为 Java Servlet JSP 页面就具有 Java 技术的所有好处 包括健壮的存储管 理和安全性 6 作为 Java 平台的一部分 JSP 拥有 Java 编程语言 一次编写 各处运行 的 特点 随着越来越多的供应商将 JSP 支持添加到他们的产品中 您可以使用自己所选 择的服务器和工具 更改工具或服务器并不影响当前的应用 基于 EJB3 0 的分布式网上购物系统 14 3 系统需求分析 3 1 用例分析 3 1 1 用例图 如图 3 1 所示 用户功能划分为 5 个主要用例 分别为用户注册 Register 用户 登录 Login 图书查询 Book Query 购物车管理 Cart Manage 和订单管理 Order Manage 管理员功能划分为 3 个主要用例 分别为用户管理 Book Manage 图书管理 Book Manage 和图书上传 Book Upload 图图 3 1 系统用例图系统用例图 3 1 2 用例描述 用例名用例名用户注册 用例用例 IDUsecase1 主要业务参与者主要业务参与者用户 前置条件前置条件无 后置条件后置条件用户获得一个新的账号 触发条件触发条件用户需要登录 基本流程基本流程1 用户在注册页面填写并提交注册信息 2 系统检查用户填写的注册信息并查询数据库 查看用 户名是否已存在 3 若注册信息全部有效且用户名不存在 则注册成功 扩展流程扩展流程3 1 如果注册信息无效 系统显示具体错误信息 要求 用户重新填写 3 2 如果用户名已存在 则系统显示提示信息 要求用 户重新填写用户名 用例名用例名用户登录 用例用例 IDUsecase2 基于 EJB3 0 的分布式网上购物系统 15 主要业务参与者主要业务参与者用户 前置条件前置条件用户拥有一个有效账号 后置条件后置条件用户登录到系统 触发条件触发条件用户需要下单 基本流程基本流程1 用户在登录页面输入用户名和密码并提交 2 系统查询数据库 查看用户名是否存在以及用户名和 密码是否匹配 3 若用户名存在且和密码匹配 则成功登录到系统 扩展流程扩展流程3 1 如果用户名不存在 系统显示提示信息 要求用户 重新输入用户名 3 2 如果密码错误 系统显示提示信息 要求用户重新 输入密码 用例名用例名图书查询 用例用例 IDUsecase3 主要业务参与者主要业务参与者用户 前置条件前置条件无 后置条件后置条件用户获得查询结果 触发条件触发条件用户需要以关键字搜索图书 基本流程基本流程1 用户选择图书分类 输入关键字并搜索 2 系统查询数据库 将匹配结果返回给用户 扩展流程扩展流程2 1 如果没有匹配的结果 系统显示空查询结果页面 用例名用例名购物车管理 用例用例 IDUsecase4 主要业务参与者主要业务参与者用户 前置条件前置条件无 后置条件后置条件改变购物车内容 触发条件触发条件用户需要改变购物车内容 基本流程基本流程1 用户进入购物车页面 删除不需要的图书 2 点击链接进入管理页面 修改图书数量 确认后返回 到购物车页面 扩展流程扩展流程2 1 如果购物车为空 系统显示空购物车页面 用例名用例名订单管理 基于 EJB3 0 的分布式网上购物系统 16 用例用例 IDUsecase5 主要业务参与者主要业务参与者用户 前置条件前置条件用户登录到系统 后置条件后置条件订单发送到用户的注册邮箱 触发条件触发条件用户需要下单 基本流程基本流程1 用户进入订单管理页面 可以返回到购物车页面修改 图书数量或删除图书 2 用户确认之后 系统将订单信息保存到数据库 向用 户邮箱发送订单信息 显示 下单成功 提示信息 并 在 2 秒后自动跳转到网站主页 扩展流程扩展流程2 1 如果下单失败 系统显示提示信息 下单失败 并在 2 秒后自动跳转到网站主页 用例名用例名用户管理 用例用例 IDUsecase6 主要业务参与者主要业务参与者管理员 前置条件前置条件管理员登录到系统 后置条件后置条件用户信息更新 触发条件触发条件需要管理用户 基本流程基本流程1 管理员进入后台用户管理页面 查看所有用户的注册 信息 2 点击 删除 按钮删除相应用户账号 扩展流程扩展流程无 用例名用例名图书管理 用例用例 IDUsecase7 主要业务参与者主要业务参与者管理员 前置条件前置条件管理员登录到系统 后置条件后置条件图书信息更新 触发条件触发条件需要管理图书 基本流程基本流程1 管理员进入后台图书管理页面 查看所有图书的主要 信息 2 点击某一图书条目 在下方显示该图书的全部信息 3 修改之后确认 更新图书信息 扩展流程扩展流程无 基于 EJB3 0 的分布式网上购物系统 17 用例名用例名图书上传 用例用例 IDUsecase8 主要业务参与者主要业务参与者管理员 前置条件前置条件管理员登录到系统 后置条件后置条件上传一本新书 触发条件触发条件需要新增图书 基本流程基本流程1 管理员进入后台图书上传页面 填写待上传图书的全 部信息 确认之后上传 2 若图书信息全部有效 系统将图书预览图片上传到服 务器 并向数据库中插入相应记录 扩展流程扩展流程2 1 如果图书信息无效 系统显示具体错误信息 要求 管理员重新填写 3 2 活动图 基于 EJB3 0 的分布式网上购物系统 18 基于 EJB3 0 的分布式网上购物系统 19 图图 3 2 系统活动图系统活动图 图 3 2 是系统的活动图 整个活动流程如下 index jsp 作为整个网站的入口 会自 动重定向到主页 allBook jsp 在主页上可以使用关键字来搜索图书 queryBook jsp 显 示返回的结果 点击某一图书的预览图片或链接后 bookDetail jsp 将会显示该图书的 详细信息 在把某一图书添加到购物车之后 showCart jsp 会显示当前的购物车信息 点击 修改数量 按钮 在 manageCart jsp 页面可以修改购物车 点击 结算 按钮 login jsp 将会要求用户登录 若还未注册 需要先在 register jsp 页面注册 登录成功之 后 showOrder jsp 显示订单信息 用户点击 确定 之后 系统将订单信息发送到用 户的注册邮箱 并返回 success jsp 页面告诉用户下单成功 3 3 时序图 基于 EJB3 0 的分布式网上购物系统 20 基于 EJB3 0 的分布式网上购物系统 21 图图 3 3 系统时序图系统时序图 图 3 3 是系统的时序图 与用例分析及活动图一一对应 3 4 E R 图 用户 订单订单明细 图书 管理员 n 1 1 n 1 n 图图 3 4 数据库数据库 E R 图图 如图 3 4 所示 数据库共有 5 个表 分别是管理员表 tbl user 用户表 tbl user 图书信息表 tbl book 订单信息表 tbl order 和订单明细信息表 tbl item 它们之间的关系如图所示 管理员表存储管理员账户 管理员账户不可 以注册 用户表存放用户注册信息 图书信息表存储图书信息 订单表存储用户的订 单信息 订单明细表存储订单信息中的每一条目 基于 EJB3 0 的分布式网上购物系统 22 3 5 部署分析 本网上购书系统是一个分布式的应用 整个系统应该有多个服务器和多个客户端 由于资源有限 所以使用虚拟机来模拟分布式部署 主机作为服务器部署 EJB 项目 虚拟机兼作服务器和客户端 部署 Web 项目 使用虚拟机上的浏览器登录网站 基于 EJB3 0 的分布式网上购物系统 23 4 系统设计 4 1 项目结构设计 如图 4 1 所示 整个企业应用项目 OnlineBookstore 包含一个 EJB 项目 一个 Web 项目和一个 UML 项目 图图 4 1 项目整体目录结构项目整体目录结构 图 4 2 是 OnlineBookstoreEJB 项目的目录结构 entity session 和 mdb 三个包分别 存放 EJB 的实体 会话 Bean 和消息驱动 Bean help 包中存放辅助类 entity 包中是与数据库表一一对应的实体 它们都是简单的 JavaBean session 包中 是与实体相对应的 Facade 接口 EJB 客户端通过它们来访问实体 mdb 包中是使用 JMS 的消息驱动 Bean 用于处理像发送邮件这种可以异步处理的用户请求 help 包中 是供其它类调用的辅助类 图图 4 2 EJB 项目的目录结构项目的目录结构 图 4 3 是 OnlineBookstoreWeb 项目的目录结构 servlet 和 helper 两个包分别存放 Servlet 和辅助类 WebRoot 文件夹下有 css image
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 滤棒成型设备操作工专项考核试卷及答案
- 急救中心标准化建设与认证
- 第五节 从第二共和国到法兰西第二帝国说课稿-2025-2026学年高中历史北师大版2010选修2近代社会的民主思想与实践-北师大版2010
- 2025-2030钻石矿和钻石金行业市场现状供需分析及投资评估规划分析研究报告
- 第一单元第1课《丰富多彩的亚非拉美术作品》 说课稿 -2024-2025学年人教版初中美术九年级下册
- 专业农业合作协议承诺书(7篇)
- 企业员工招聘代理及培训协议
- 2025-2030二手电子产品交易平台商业模式与用户画像分析报告
- 2025-2030中国青年公寓隔音材料应用与居住舒适度提升方案
- 2025-2030中国青年公寓装修标准化与成本控制优化方案研究
- 2025年医师定期考核题库附答案详解
- 国家电投2023上半年ESG实践报告:绿色发展助力电力行业转型升级
- 2025呼伦贝尔市交投公路建设有限公司招聘工作人员考试参考试题及答案解析
- 污水处理自动化工程施工组织计划
- 美发发型培训知识课件
- 档案归档办法课件
- 2025年医院保洁员知识考试题(附答案)
- 中国汽车零配件出口分析及各国进口政策影响白皮书 2025
- T-CCCI 001-2024 企业文化建设与管理评价标准
- 妇产科健康宣教
- 2025方便速食行业线上消费趋势洞察
评论
0/150
提交评论