文章编号:11151时间:2024-09-30人气:
性能开销:
JSF 声明式语法可能会引入性能开销,尤其是在处理大型表单或复杂 UI 布局时。
富客户端框架主要有以下几种:
1. Spring MVC框架
Spring MVC是一种基于Java的Web应用程序框架,广泛应用于构建富客户端应用程序。 它提供了强大的功能,如模型-视图-控制器(MVC)设计模式支持、视图模板语言集成和Spring的各种便利功能,包括事务管理和安全性控制。 该框架可以使开发者以更低复杂性来开发高性能和可靠的富客户端应用。
2. JSF框架(JavaServer Faces)
JSF是Java EE平台的一个规范,用于构建基于Web的用户界面层应用。 它提供了丰富的组件库和标签库,可以方便地创建用户界面。 JSF框架也支持事件驱动模型,这使得开发人员能够更容易地实现富客户端交互特性。
3. Angular框架
Angular是一个流行的前端JavaScript框架,适用于构建单页面应用(SPA)。 它提供了强大的数据绑定和依赖注入功能,以及丰富的内置指令和组件模型。 Angular框架可以帮助开发人员创建复杂且响应迅速的富客户端应用。 由于其结构清晰,适用于大型和复杂的项目,并且是端到端服务的集成栈的核心组成部分之一。 它的测试功能也使得维护和改进复杂应用的维护更加便利。 由于其流行度高、可跨浏览器操作并维护简易的优势使得开发者更倾向于使用Angular构建富客户端应用。 除了以上三种常见的框架外,还有其他一些例如React框架等也是常见的富客户端框架选择。 每种框架都有其独特的优点和适用场景,可以根据具体的需求进行选择。 希望这些信息能对您有所帮助!如您有其他疑问欢迎进一步提问和交流经验。 希望我们可以共享信息和共同进步交流新技术的发展方向及应用范围扩展知识储备。 主要优势和特性体现在易于管理客户端应用程序组件化和声明式编程风格上。
Swing 能否经受住富互联网应用程序宣传热潮的考验?2006 年 3 月发布J2EE Web 技术已经从一个静态的内容提供环境迅速发展为一个在内联网和互联网上运行的动态业务应用程序的可靠平台。 Web 的前景体现在,无论您的业务需求如何,浏览器都将是您未来唯一需要的客户端。 在这种趋势的推动下,最近掀起了新一轮围绕高度交互的 Web 界面(基于一组称作 AJAX 的技术)的宣传热潮。 AJAX 与新 J2EE 标准 JavaServer Faces (JSF) 的结合使用在处理 Web 应用程序方面有望提供更好的最终用户体验和认可。 AJAX(异步 Javascript+XML 的缩写)描述了一组现有技术(如 JavaScript、XML 和文档对象模型 (DOM))的使用模式。 不可否认的是,AJAX 和 JavaServer Faces 来势迅猛,并将很快挡住 Swing 的去路,而 Swing 自 1998 年以来一直是用 Java 构建丰富用户界面的标准方法。 浏览器将在未来唱主角?Swing 能否经受住富互联网应用程序宣传热潮的考验?本文针对 Swing 和 JavaServer Faces 进行了介绍、定位和比较,以帮助开发人员决定对某种作业使用哪种技术。 此外,本文还介绍了 Oracle 应用程序开发框架 (ADF) 如何有助于简化使用这两种技术进行的应用程序开发。 从Java 到 Swing 再到 JavaServer Faces应用程序开发史中曾出现过许多编程语言。 早在 1991 年,James Gosling 发明了“Oak”,即 Java 的前身。 由于 Oak 无法出售,因此 Sun 于 1995 年推出了 Web 编程语言 - Java,此后不久 Java Applet 即成为 Web 应用程序开发的这个“石器时代”的主导技术。 1998 年发布了用于开发轻型 Java Web GUI 和客户端桌面应用程序的 Java Swing 平台。 一年以后,Sun 推出了 Java 2 企业版 (J2EE) 平台,该平台在 6 年后引入了 JavaServer Faces。 Swing 本身是一个基于抽象窗口工具包 (AWT) 和 Java 基础类 (JFC) 构建的轻型组件集。 从推出到现在的七年多时间里,Swing 程序包已经成为 J2SE 中一个非常成熟的 Java 库,并广泛用在企业级业务应用程序的构建中。 Swing 以灵活而强大的开发环境著称,它为应用程序开发人员提供了大量的控制权。 毫不夸张地说,只要是可以用 Java 构思的应用程序,就可以用 Swing 构建它。 但 Swing 的灵活增加了复杂度和学习难度。 类似 Oracle JDeveloper、NetBeans 和 IntelliJ 这样的 Java IDE 为 Swing 提供了可视的 4GL 编辑环境,有助于开发人员快速入门并执行更深层次的操作,而不必深入学习 Swing。 2004 年 3 月推出的 JavaServer Faces(也称作 JSF,或简称为“Faces”)是一个用于构建 Web 应用程序的基于组件的框架,该框架并入了 JavaBean 事件模型,用于将信息发送到其他组件。 作为 J2EE Web 技术的发展,JavaServer Faces 将基于模板的编程式 Web 开发与 4GL 类型的开发选项结合在一起。 J2SE Swing 体系结构尽管Swing 是 Java 标准版 (Java SE) 的正式部分,但它并不是核心 Java 语言的成员,而是被视为一个标准扩展。 以 而非 开头的 Swing 程序包名称也反映了这一点。 使用 Swing 开发的应用程序在 Java 运行时环境 (JRE) 中执行,该环境可以安装在本地桌面客户端中,也可以集成到 Java Web Start 或 Web 浏览器中。 所有Swing UI 组件均为 JavaBean,并采用对象模型控制器体系结构,将数据表示与对数据的操作分离。 该模型不包含任何 UI 特定的代码,反之亦然。 模型与 UI 之间的所有信息交换均通过 JavaBean 事件和监听器进行。 这种职责划分使经验丰富的 Swing 开发人员能够自定义组件 UI,而不必更改组件行为。 Swing 中的组件控制器和视图称作 UI 代理。 控制器将用户交互指派给模型,并由模型保存组件的状态。 图1:Swing 体系结构 Swing 中的 UI 组件可在运行时通过属性方法或在设计时通过可视编辑器以编程方式进行控制。 并非 Swing 中的所有组件均绑定到数据,某些组件(如按钮)只需要处理 GUI 状态。 UI 组件中的事件通过注册的 JavaBean 监听器(如 MouseListener、FocusListener 或 ChangeListener)进行检测。 ADF 与 SwingSwing 始终存在的难题之一是如何将组件绑定到动态数据。 过去,有许多不同框架已经通过非标准方法多次解决了这一难题。 而作为 JSR-227(用于解决此数据绑定难题的建议标准)早期采用者的 ADF 以及 ADF Swing 采用标准方法将 Swing 应用程序绑定到所有业务服务,如 Enterprise JavaBeans、TopLink、Web 服务、ADF 业务组件以及 URL。 ADF Swing 是一个将 Swing 域模型绑定到 Oracle ADF 绑定的小型 Java 层。 ADF Swing 开发人员采用声明方式将组件模型设置为 ADF 绑定中的有名引用。 ADF 中的数据控件将一致的客户端开发 API 公开给不同的业务服务,以便 Swing 开发人员使用。 数据控件采用标准方法来创建、删除和插入数据,并采用标准控件来导航数据集。 ADF 绑定将一个可以从数据控件访问的较小的数据子集公开给 Swing 应用程序面板或框架。 Swing 开发人员无需了解应用程序构建所基于的业务服务,这是因为他们不再处理特定的模型 API。 同样,他们并不负责资源查找或类似任务。 所有这些任务均由 JSR-227 实现处理,该实现提供了一个有效的控制反转机制。 由于ADF Swing 应用程序开发在很大程度上是一个使用 ADF 执行的声明任务,因此它缩短了新手和 Java 专家的应用程序开发周期。 例如,UI 第一绑定使项目团队可以轻松地进行快速原型设计。 可以采用概念验证的方式创建 UI 的非绑定版本,然后采用回溯方式将其绑定到服务。 图2:ADF Swing 体系结构 JavaServer FacesJavaServer Faces 是 Web 应用程序开发中的一个里程碑,它将成为 J2EE 5.0(SUN 最近将其重新命名为 JEE 5.0)中核心 Java 企业版平台的一部分。 JavaServer Faces 可以作为独立的 Servlet 在 J2EE1.4 应用服务器中使用。 Web 并非为需要事务和状态处理的业务应用程序而设计。 多年来,开发人员花费了大量时间使用各种技术(如隐藏的 HTML 域、cookie、URL 或会话参数)来跟踪 Web 应用程序的状态,而这样做仅仅为了克服 HTTP 协议无状态这个问题。 JavaServer Faces 有助于开发人员重新关注应用程序的业务要求,而不再关注基础的交付技术。 JavaServer Faces 是一个 UI 框架,它对应用程序开发人员隐藏了 HTTP 请求 – 响应循环的细节。 与Swing 中的 JavaBean 体系结构相似,JavaServer Faces 使用通过属性公开状态和行为的 UI 组件来构建 Web 界面。 尽管 JavaServer Faces 页面通常汇集在 JSP 文件中,但这并不是必需的。 JSF 这项技术并非只可用于基于浏览器的应用程序,同时也可用于构建移动应用程序。 JavaServer Faces 中的 UI 组件是显示不可知的。 这意味着应用程序开发人员并不构建针对特定设备的应用程序,而是构建可以在许多设备上运行的应用程序。 JSF 中的 UI 组件呈现器类(打包的呈现器集的一部分)决定 UI 的可视化表示。 如果初始应用程序请求来自 Web 浏览器,则该表示采用 HTML 格式,否则应用程序将按照请求客户端设备所支持的方式呈现(假设该设备类型存在一组呈现器类)。 类似文本域这样的 UI 组件通过 ExpressionLanguage (EL) 值绑定绑定到 (JSF) 管理的 bean 模型上。 在值绑定中,EL 用于引用辅助 bean 中的 setter 和 getter 方法对。 例如,EL 表达式 #{} 将 JSF 组件绑定到用户 bean 中的 setFirstname 和 getFirstname 方法上。 EL 绑定另一个可能的形式是方法绑定。 方法绑定引用受管理 bean 中的方法,并在 JSF 中(就像在按钮中一样)用于将操作属性绑定到视图层逻辑,以便在复杂导航情形下或者在需要导航前和导航后处理的情况下执行。 图3:JavaServer Faces 体系结构 受管理 bean 的另一个角色是将 UI 组件绑定到域数据,例如访问 JDBC 查询的结果集或查找 Enterprise JavaBean (EJB) 会话。 此外,页面上的 UI 组件可能在辅助 bean 中包含一个用于以编程方式访问的表示。 Oracle 应用程序开发框架 (ADF) 和 JavaServer FacesOracle JDeveloper 10.1.3 支持通过可视编辑器进行 JavaServer Faces 开发。 此外,Oracle ADF 可用于通过声明方式将 JavaServer Faces 和 ADF Faces 组件绑定到业务服务数据。 正如在 Swing 的上下文中介绍 Oracle ADF 时所指出的,使用 Oracle ADF 绑定为 JavaServer Faces Web 应用程序开发人员提供了一个统一的开发 API,用于访问 Web 服务、Enterprise Java Bean、TopLink、POJO、ADF 业务组件以及其他类型的业务服务。 ADF Faces 是一组基于 JavaServer Faces API 构建并可以部署到任何 JSF 实现(如由 Sun 或 Apache MyFaces 提供的参考实现)的 100 多个 JSF UI 组件的总称。 除了适用于浏览器客户端的 HTML 呈现器工具包以外,ADF Faces 还为在 telnet 客户端、移动设备和 PDA 上显示的 Web 应用程序提供了呈现器,并支持作为显示不可知 Web 应用程序开发环境的 JavaServer Faces 的强大功能。 为将ADF 与 JavaServer Faces 应用程序集成,表达式语言值绑定访问 ADF 绑定对象,而非辅助 bean 中的数据。 ADF 绑定对象(默认情况下名为“bindings”)由 ADF servlet 在应用程序初始化过程中创建,并使开发人员能够访问通过 ADF 数据控件和绑定层公开的所有集合和方法。 要以编程方式引用和使用辅助 bean 中的 ADF 绑定对象,可以通过 faces 配置中的 ExpressionLanguage 表达式 #{bindings} 访问绑定对象并将其作为受管理属性的值注入到辅助 bean 中。 图4:使用 ADF 的 JavaServer Faces 体系结构 履行富互联网应用程序的诺言:AJAX 和 ADF Faces对于并非熟悉 Javascript、XML 或文档对象模型 (DOM) 等 Web 技术的开发人员而言,AJAX 易于理解但却难于实现。 对于业务应用程序而言,仅当在 JavaServer Faces 这样的 Web 应用程序框架中以“现成方式”在组件中使用时,AJAX 才有意义。 ADF Faces 提供了部分页面呈现和对话框支持,使开发人员能够构建更好的 Web 客户端。 作为一个早期实现的 AJAX,部分页面呈现缩短了客户端的响应时间,因为它减小了只需刷新页面的某些部分的网页的下载大小。 ADF Faces 的未来发展方向是提供一组利用 AJAX 的富互联网组件,以便 Web 应用程序开发人员能够构建响应性和交互性较高的 Web 客户端,而不必编写 JavaScript 或 DHTML 代码。 在 JavaOne 2005 召开期间首次展示了 ADF Faces 富互联网应用程序客户端的预览版本。 在什么场合使用什么技术? 当决定对新应用程序开发使用哪种技术时,应用程序的要求(而非各种技术的功能)是一个不错的指标。 以下是对两种技术的简要分类比较 开发:主要的 Java IDE 支持对 Swing 和 JavaServer Faces 进行可视开发。 开发 JavaServer Faces 应用程序时,开发人员可以获得很多好处而不必编写 Java 代码。 组件:Swing 和 JavaServer Faces 均基于组件,并将 JavaBeans 用于其 UI 组件。 还可以创建在应用程序中使用的自定义组件。 页面和布局:Swing 中的布局通过嵌套 Swing 面板定义。 Swing 组件的位置及其调整大小的行为通过 LayoutManagers 确定。 同样,在 JavaServer Faces 中,布局通过容器(如 ADF Faces 中的 PanelPage 和 PanelBox)定义。 每个容器可以有很多个子组件,而其中的每个子组件本身也是容器。 尽管使用 HTML 表格安排 JSF 应用程序的布局可能比较吸引人,但在处理 JSF 应用程序时建议您不要混合使用多技术。 UI 响应性:AJAX 更适合于 Web 应用程序,它可以根据提供的输入或模型层中引发的事件向用户立即提供反馈。 Swing 用户界面具有高响应性,并可以刷新屏幕上的特定区域而不用刷新整个屏幕。 例如,股票应用程序可以向 Swing 应用程序发送有关已更改值的信息,无需重新查询即可将该信息显示给用户。 更新、插入和删除:Web 模型基于 HTTP 协议,该协议并非为事务应用程序和动态业务应用程序而设计。 JavaServer Faces 自动处理 Web 开发人员以往所面临的大量问题,但在处理多行更新方面,有时仍需要开发人员亲自操作。 而在 Swing 中,多行操作对于应用程序开发人员(如使用 ADF Swing 的开发人员)而言比较简单。 外观: Swing 支持动态外观类,这些类在应用程序启动时向其应用特定颜色方案。 更改应用程序外观不需要更改应用程序代码。 JavaServer Faces 使用样式表显示不同的用户外观。 此外,Oracle ADF Faces 还提供了一个称作“换肤”的特性,其作用与 Swing 中的外观类相似。 国际化:这两种技术均支持使用资源包进行字符串翻译。 JavaServer Faces 包含客户端上的浏览器设置中的首选用户语言,而 Swing 应用程序根据 Java 运行时环境中的区域设置确定语言。 JavaServer Faces 和 Swing 均可以编程方式设置语言,以便应用程序用户可以从应用程序中选择一种翻译。 事件模型:JavaServer Faces 和 Swing 组件均使用 JavaBean 事件模型发布有关模型或组件更改的信息。 相关各方可以使用 JavaBean 监听器注册事件,如值更改事件、属性更改事件或阶段事件。 键盘快捷方式:尽管这两种技术均支持键盘快捷方式,但由于 Swing 并不依赖于浏览器,因此在这方面优势比较明显。 所有键盘功能均由 Swing 处理并可以由应用程序开发人员控制。 桌面集成:安装到本地的 Swing 应用程序拥有客户端桌面的完全访问权限。 JavaServer Faces 通过上载和下载文件只提供有限的桌面集成。 导航:Swing 只具有编程式导航功能,而不存在为 Swing 标准(定义应根据操作输出显示哪个面板)定义的外部控制器。 JavaServer Faces 使用一个控制器组件,可以根据计算输出使用指定的导航示例对其进行配置。 导航可以定义为操作组件的静态字符串,而对于更复杂的导航,则可以用 Java 表示。 应用程序控制:与导航相关,相对于在 JavaServer Faces 中而言,应用程序开发人员可以更好地控制客户端中的 Swing 应用程序。 用户在 Java 运行时环境中运行 Swing 应用程序,而这并不会因为(例如)工具栏不是应用程序本身的一部分而引起冲突。 在浏览器中运行的 JavaServer Faces 应用程序总要求开发人员解决已知的浏览器限制。 如今,没有使应用程序开发人员能够关闭不需要的浏览器行为或功能(如浏览器后退按钮或浏览器保留的键盘快捷方式)的通用浏览器标准和一组通用 API。 性能:对于执行数据密集型操作的应用程序而言,JavaServer Faces 的性能似乎要高于 Swing,这是因为它只显示对客户端的更改。 使用 AJAX,所需的下载大小将变得更小,从而性能将得到进一步的提高。 尽管 Swing 可以使用远程服务器上部署的业务逻辑,但这需要使用远程方法调用 (RMI),该调用的性能要低于 JavaServer Faces 模型。 但应始终针对单个应用程序来分析网络性能,并应在可能的用户界面中考虑应用程序的要求。 安全性:JavaServer Faces 集成了声明式 J2EE 安全性,从而易于保护 Web 应用程序以及与一次性登录集成。 Swing 更难于保护,且将基于 J2SE 权限的安全性与需要更多专业技能的 Java 验证和授权服务 (JAAS) 结合使用。 部署:JavaServer Faces 部署到 J2EE 容器并从 Web 中进行访问。 该部署的体系结构既可以是两层的(其中的业务逻辑层与视图层位于同一服务器上)也可以是三层的。 Swing 通常部署到本地客户端上,或通过 JavaWeb Start(J2SE 中一个基于服务器的软件管理选件)进行部署。 对于 JavaServer Faces 而言,使用 Oracle Application Server Control 或相似的管理控制台可以使部署变得更简单、更易于管理。 综上所述,如果应用程序要求对用户输入或更改用户显示的事件立即做出响应,则 应使用 Swing。 这对在一个屏幕上显示多个主/从相关性的复杂用户界面也是如此。 此外,与 Web 相比,Swing 还可以为需要执行即时项目验证的应用程序(可能基于复杂的逻辑)提供更好的支持。 使用 Swing 的另一个重要原因是需要不仅能文件上载和下载的桌面集成。 此类集成的例子有本地打印机访问、对电话或扫描仪等外部设备的访问。 此外,与 Web 技术(其中封闭浏览器使用某些键盘组合)相比,Swing 可以为需要定义其自身的键盘映射的应用程序提供更好的服务。 在构建 Swing 应用程序时,其他浏览器功能(如可能妨碍业务控制的应用程序导航的浏览器后退按钮)不会成为问题。 某些业务要求应用程序脱机运行(即与网络断开连接),您可以根据此要求来构建 Swing 应用程序。 最后,Swing 应用程序只使用一种语言开发,而 JavaServer Faces 混合使用 Java、XML 和 ExpressionLanguage 等技术。 如果需要可以从任何位置(不要求安装客户端)访问应用程序,则 应使用 JavaServer Faces。 这包括可能为 PDA、移动电话和 telnet 客户端等显示设备提供的支持。 与 Swing 不同,JavaServer Faces 可以通过防火墙(使用 HTTP 或 HTTPS 来保护客户端-服务器通信)进行轻松的运行。 由于逻辑在服务器上执行,因此 JavaServer Faces 更易于部署并需要更少的客户端资源。 如今,互联网应用程序已得到普遍使用,因此您可以假设应用程序用户熟悉 Web 应用程序的外观和使用。 这降低了用户在使用新应用程序时的学习难度。 安全性是使用基于 Web 的 JavaServer Faces 应用程序的另一个重要原因。 尽管可以使用 JAAS 构建安全的 Swing 应用程序,但构建与服务器上容器管理的安全性和一次性登录集成的基于 Web 的应用程序则更为简单。 此外,与在 Swing 中相比,在 JSF 中更容易实现需要将其中的身份发送到其他组件或应用程序的安全性集成。 但您应该知道的是,将 JSF 与 AJAX 结合使用是基于 Javascript(需要浏览器支持)的。 将来,Swing 技术如今具有的优点将逐渐消失。 例如在美国,宾西法尼亚和旧金山两座城市已经启动了一些在整个城市提供无线访问的项目。 一旦世界上的其他国家/地区采用了该模型,那么在断开连接模式下工作(Swing 当前的优点)将不再必要。 有关 Swing 逐渐失去优势的另一个例子是 AJAX 有望为 Web 应用程序带来的即时客户端显示响应这一优点。 有选择的生产效率:是否只须学习一种技术? 成功开发 J2EE 应用程序需要 J2EE 框架和 Java IDE,它们尽量对应用程序开发人员隐藏复杂性,同时还实施了最佳的编码实践。 一项互联网工作招聘快速调查显示,Web 应用程序开发人员的就业市场远远大于 Swing 应用程序开发人员。 因此,在理想情况下您需要学习的一门技术是 Web 应用程序开发,其中包括 JavaServer Faces、AJAX 和 JavaServer Pages。 在需要开发 Swing 应用程序时,如果将 Oracle 应用程序开发框架和 Oracle JDeveloper 与 Swing 结合使用,则 Web 应用程序开发技术就足够了。 Oracle JDeveloper 是一个支持 J2EE 桌面和 Web 应用程序的集成 Java IDE。 使用 Oracle 应用程序开发框架,应用程序开发人员无须再学习如何使用不同的 API 来访问各种持久层技术,使用一个一致的 API 就可以了。 使用Oracle ADF,Web 应用程序开发人员可以在设计时和运行时使用与 Swing 应用程序开发人员构建 Java 桌面应用程序所使用的同一组元数据文件。 由于提供了相似的开发环境,因此 Swing 应用程序开发人员将发现开发 Web 应用程序其实比较简单,反之亦然。 因此,如果您必须只学习一种技术,则建议您最好学习如何使用 Oracle 应用程序开发框架开发 Web 应用程序。 总结JavaServer Faces 与 AJAX 的发展过程就像人类学习走路一样,是一个渐进的过程。 Web 应用程序最初以静态界面形式出现,现在已经逐步演变为一个动态应用程序平台。 AJAX 只不过是需要在其最具有意义的环境 - JSF 中实现的下一个逻辑步骤。 拥有富互联网客户端使开发人员可以选择使用适当的技术解决问题。 富互联网应用程序 (AJAX)基于组件的 Web 客户端 (JSF)基于动态标记的 Web 客户端 (JSP)桌面集成客户端 (Swing)AJAX 阐述了一种使 J2EE 应用程序开发人员能够将复杂的业务应用程序发布到 Web 的可能。 作为 Swing 开发人员,您不必在意围绕 AJAX 展开的宣传热潮,但应在意它的动机。 宣传是为了推广新机会,而这正体现了 JavaServer Faces 和 AJAX 的本质:为应用程序开发人员构建富 Web 应用程序提供新机会。 Swing 是为客户端桌面开发 Java 应用程序的标准方法,并且它要解决的开发问题与 JavaServer Faces 和 AJAX 不同。 它通过 Community Process 以及 Sun(它还领导了 Java 桌面网络组件 (JDNC) 项目)的努力得到不断发展和改进。 尽管Swing 与 JavaServer Faces/AJAX 在功能上存在重叠,但两者并不直接竞争。 为某项工作选择的技术必须解决您要解决的问题,而反之则不然。 使用 Oracle 应用程序开发框架,开发人员可以灵活地选择相应的技术,以便使用一种基础技术集开发 Web 应用程序和桌面应用程序。 Frank Nimphius 和Duncan Mills 是Oracle 开发人员工具部门的产品经理,两人均为 Oracle ACE。
1.1.1 Spring是什么 Spring是一个开源的轻量级Java SE(Java 标准版本)/Java EE(Java 企业版本)开发应用框架,其目的是用于简化企业级应用程序开发。 应用程序是由一组相互协作的对象组成。 而在传统应用程序开发中,一个完整的应用是由一组相互协作的对象组成。 所以开发一个应用除了要开发业务逻辑之外,最多的是关注如何使这些对象协作来完成所需功能,而且要低耦合、高内聚。 业务逻辑开发是不可避免的,那如果有个框架出来帮我们来创建对象及管理这些对象之间的依赖关系。 可能有人说了,比如“抽象工厂、工厂方法设计模式”不也可以帮我们创建对象,“生成器模式”帮我们处理对象间的依赖关系,不也能完成这些功能吗?可是这些又需要我们创建另一些工厂类、生成器类,我们又要而外管理这些类,增加了我们的负担,如果能有种通过配置方式来创建对象,管理对象之间依赖关系,我们不需要通过工厂和生成器来创建及管理对象之间的依赖关系,这样我们是不是减少了许多工作,加速了开发,能节省出很多时间来干其他事。 Spring框架刚出来时主要就是来完成这个功能。 Spring框架除了帮我们管理对象及其依赖关系,还提供像通用日志记录、性能统计、安全控制、异常处理等面向切面的能力,还能帮我管理最头疼的数据库事务,本身提供了一套简单的JDBC访问实现,提供与第三方数据访问框架集成(如Hibernate、JPA),与各种Java EE技术整合(如Java Mail、任务调度等等),提供一套自己的web层框架Spring MVC、而且还能非常简单的与第三方web框架集成。 从这里我们可以认为Spring是一个超级粘合平台,除了自己提供功能外,还提供粘合其他技术和框架的能力,从而使我们可以更自由的选择到底使用什么技术进行开发。 而且不管是JAVA SE(C/S架构)应用程序还是JAVA EE(B/S架构)应用程序都可以使用这个平台进行开发。 让我们来深入看一下Spring到底能帮我们做些什么? 1.1.2 Spring能帮我们做什么 Spring除了不能帮我们写业务逻辑,其余的几乎什么都能帮助我们简化开发: 一、传统程序开发,创建对象及组装对象间依赖关系由我们在程序内部进行控制,这样会加大各个对象间的耦合,如果我们要修改对象间的依赖关系就必须修改源代码,重新编译、部署;而如果采用Spring,则由Spring根据配置文件来进行创建及组装对象间依赖关系,只需要改配置文件即可,无需重新编译。 所以,Spring能帮我们根据配置文件创建及组装对象之间的依赖关系。 二、当我们要进行一些日志记录、权限控制、性能统计等时,在传统应用程序当中我们可能在需要的对象或方法中进行,而且比如权限控制、性能统计大部分是重复的,这样代码中就存在大量重复代码,即使有人说我把通用部分提取出来,那必然存在调用还是存在重复,像性能统计我们可能只是在必要时才进行,在诊断完毕后要删除这些代码;还有日志记录,比如记录一些方法访问日志、数据访问日志等等,这些都会渗透到各个要访问方法中;还有权限控制,必须在方法执行开始进行审核,想想这些是多么可怕而且是多么无聊的工作。 如果采用Spring,这些日志记录、权限控制、性能统计从业务逻辑中分离出来,通过Spring支持的面向切面编程,在需要这些功能的地方动态添加这些功能,无需渗透到各个需要的方法或对象中;有人可能说了,我们可以使用“代理设计模式”或“包装器设计模式”,你可以使用这些,但还是需要通过编程方式来创建代理对象,还是要耦合这些代理对象,而采用Spring 面向切面编程能提供一种更好的方式来完成上述功能,一般通过配置方式,而且不需要在现有代码中添加任何额外代码,现有代码专注业务逻辑。 所以,Spring 面向切面编程能帮助我们无耦合的实现日志记录,性能统计,安全控制。 三、在传统应用程序当中,我们如何来完成数据库事务管理?需要一系列“获取连接,执行SQL,提交或回滚事务,关闭连接”,而且还要保证在最后一定要关闭连接,多么可怕的事情,而且也很无聊;如果采用Spring,我们只需获取连接,执行SQL,其他的都交给Spring来管理了,简单吧。 所以,Spring能非常简单的帮我们管理数据库事务。 四、Spring还提供了与第三方数据访问框架(如Hibernate、JPA)无缝集成,而且自己也提供了一套JDBC访问模板,来方便数据库访问。 五、Spring还提供与第三方Web(如Struts、JSF)框架无缝集成,而且自己也提供了一套Spring MVC框架,来方便web层搭建。 六、Spring能方便的与Java EE(如Java Mail、任务调度)整合,与更多技术整合(比如缓存框架)。 Spring能帮我们做这么多事情,提供这么多功能和与那么多主流技术整合,而且是帮我们做了开发中比较头疼和困难的事情,那可能有人会问,难道只有Spring这一个框架,没有其他选择?当然有,比如EJB需要依赖应用服务器、开发效率低、在开发中小型项目是宰鸡拿牛刀,虽然发展到现在EJB比较好用了,但还是比较笨重还需要依赖应用服务器等。 那为何需要使用Spring,而不是其他框架呢?让我们接着往下看。 1.1.3 为何需要Spring 一 首先阐述几个概念 1、应用程序:是能完成我们所需要功能的成品,比如购物网站、OA系统。 2、框架:是能完成一定功能的半成品,比如我们可以使用框架进行购物网站开发;框架做一部分功能,我们自己做一部分功能,这样应用程序就创建出来了。 而且框架规定了你在开发应用程序时的整体架构,提供了一些基础功能,还规定了类和对象的如何创建、如何协作等,从而简化我们开发,让我们专注于业务逻辑开发。 3、非侵入式设计:从框架角度可以这样理解,无需继承框架提供的类,这种设计就可以看作是非侵入式设计,如果继承了这些框架类,就是侵入设计,如果以后想更换框架之前写过的代码几乎无法重用,如果非侵入式设计则之前写过的代码仍然可以继续使用。 4、轻量级及重量级:轻量级是相对于重量级而言的,轻量级一般就是非入侵性的、所依赖的东西非常少、资源占用非常少、部署简单等等,其实就是比较容易使用,而重量级正好相反。 5、POJO:POJO(Plain Old Java Objects)简单的Java对象,它可以包含业务逻辑或持久化逻辑,但不担当任何特殊角色且不继承或不实现任何其它Java框架的类或接口。 6、容器:在日常生活中容器就是一种盛放东西的器具,从程序设计角度看就是装对象的的对象,因为存在放入、拿出等操作,所以容器还要管理对象的生命周期。 7、控制反转:即Inversion of Control,缩写为IoC,控制反转还有一个名字叫做依赖注入(Dependency Injection),就是由容器控制程序之间的关系,而非传统实现中,由程序代码直接操控。 8、Bean:一般指容器管理对象,在Spring中指Spring IoC容器管理对象。 二 为什么需要Spring及Spring的优点 ● 非常轻量级的容器:以集中的、自动化的方式进行应用程序对象创建和装配,负责对象创建和装配,管理对象生命周期,能组合成复杂的应用程序。 Spring容器是非侵入式的(不需要依赖任何Spring特定类),而且完全采用POJOs进行开发,使应用程序更容易测试、更容易管理。 而且核心JAR包非常小,Spring3.0.5不到1M,而且不需要依赖任何应用服务器,可以部署在任何环境(Java SE或Java EE)。 ● AOP:AOP是Aspect Oriented Programming的缩写,意思是面向切面编程,提供从另一个角度来考虑程序结构以完善面向对象编程(相对于OOP),即可以通过在编译期间、装载期间或运行期间实现在不修改源代码的情况下给程序动态添加功能的一种技术。 通俗点说就是把可重用的功能提取出来,然后将这些通用功能在合适的时候织入到应用程序中;比如安全,日记记录,这些都是通用的功能,我们可以把它们提取出来,然后在程序执行的合适地方织入这些代码并执行它们,从而完成需要的功能并复用了这些功能。 ● 简单的数据库事务管理:在使用数据库的应用程序当中,自己管理数据库事务是一项很让人头疼的事,而且很容易出现错误,Spring支持可插入的事务管理支持,而且无需JEE环境支持,通过Spring管理事务可以把我们从事务管理中解放出来来专注业务逻辑。 ● JDBC抽象及ORM框架支持:Spring使JDBC更加容易使用;提供DAO(数据访问对象)支持,非常方便集成第三方ORM框架,比如Hibernate等;并且完全支持Spring事务和使用Spring提供的一致的异常体系。 ● 灵活的Web层支持:Spring本身提供一套非常强大的MVC框架,而且可以非常容易的与第三方MVC框架集成,比如Struts等。 ● 简化各种技术集成:提供对Java Mail、任务调度、JMX、JMS、JNDI、EJB、动态语言、远程访问、Web Service等的集成。 Spring能帮助我们简化应用程序开发,帮助我们创建和组装对象,为我们管理事务,简单的MVC框架,可以把Spring看作是一个超级粘合平台,能把很多技术整合在一起,形成一个整体,使系统结构更优良、性能更出众,从而加速我们程序开发,有如上优点,我们没有理由不考虑使用它。 1.1.4 如何学好Spring 要学好Spring,首先要明确Spring是个什么东西,能帮我们做些什么事情,知道了这些然后做个简单的例子,这样就基本知道怎么使用Spring了。 Spring核心是IoC容器,所以一定要透彻理解什么是IoC容器,以及如何配置及使用容器,其他所有技术都是基于容器实现的;理解好IoC后,接下来是面向切面编程,首先还是明确概念,基本配置,最后是实现原理,接下来就是数据库事务管理,其实Spring管理事务是通过面向切面编程实现的,所以基础很重要,IoC容器和面向切面编程搞定后,其余都是基于这俩东西的实现,学起来就更加轻松了。 要学好Spring不能急,一定要把基础打牢,基础牢固了,这就是磨刀不误砍柴工。 1.2 Spring基础 1.2.1 Spring架构图 图 1-1 Spring架构图 核心容器:包括Core、Beans、Context、EL模块。 ● Core模块:封装了框架依赖的最底层部分,包括资源访问、类型转换及一些常用工具类。 ● Beans模块:提供了框架的基础部分,包括反转控制和依赖注入。 其中Bean Factory是容器核心,本质是“工厂设计模式”的实现,而且无需编程实现“单例设计模式”,单例完全由容器控制,而且提倡面向接口编程,而非面向实现编程;所有应用程序对象及对象间关系由框架管理,从而真正把你从程序逻辑中把维护对象之间的依赖关系提取出来,所有这些依赖关系都由BeanFactory来维护。 ● Context模块:以Core和Beans为基础,集成Beans模块功能并添加资源绑定、数据验证、国际化、Java EE支持、容器生命周期、事件传播等;核心接口是ApplicationContext。 ● EL模块:提供强大的表达式语言支持,支持访问和修改属性值,方法调用,支持访问及修改数组、容器和索引器,命名变量,支持算数和逻辑运算,支持从Spring 容器获取Bean,它也支持列表投影、选择和一般的列表聚合等。 AOP、Aspects模块: ● AOP模块:Spring AOP模块提供了符合 AOP Alliance规范的面向方面的编程(aspect-oriented programming)实现,提供比如日志记录、权限控制、性能统计等通用功能和业务逻辑分离的技术,并且能动态的把这些功能添加到需要的代码中;这样各专其职,降低业务逻辑和通用功能的耦合。 ● Aspects模块:提供了对AspectJ的集成,AspectJ提供了比Spring ASP更强大的功能。 数据访问/集成模块:该模块包括了JDBC、ORM、OXM、JMS和事务管理。 ● 事务模块:该模块用于Spring管理事务,只要是Spring管理对象都能得到Spring管理事务的好处,无需在代码中进行事务控制了,而且支持编程和声明性的事物管理。 ● JDBC模块:提供了一个JBDC的样例模板,使用这些模板能消除传统冗长的JDBC编码还有必须的事务控制,而且能享受到Spring管理事务的好处。 ● ORM模块:提供与流行的“对象-关系”映射框架的无缝集成,包括Hibernate、JPA、Ibatiss等。 而且可以使用Spring事务管理,无需额外控制事务。 ● OXM模块:提供了一个对Object/XML映射实现,将java对象映射成XML数据,或者将XML数据映射成java对象,Object/XML映射实现包括JAXB、Castor、XMLBeans和XStream。 ● JMS模块:用于JMS(Java Messaging Service),提供一套 “消息生产者、消息消费者”模板用于更加简单的使用JMS,JMS用于用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。 ● Web/Remoting模块:Web/Remoting模块包含了Web、Web-Servlet、Web-Struts、Web-Porlet模块。 ● Web模块:提供了基础的web功能。 例如多文件上传、集成IoC容器、远程过程访问(RMI、Hessian、Burlap)以及Web Service支持,并提供一个RestTemplate类来提供方便的Restful services访问。 ● Web-Servlet模块:提供了一个Spring MVC Web框架实现。 Spring MVC框架提供了基于注解的请求资源注入、更简单的数据绑定、数据验证等及一套非常易用的JSP标签,完全无缝与Spring其他技术协作。 ● Web-Struts模块:提供了与Struts无缝集成,Struts1.x 和Struts2.x都支持 Test模块: Spring支持Junit和TestNG测试框架,而且还额外提供了一些基于Spring的测试功能,比如在测试Web框架时,模拟Http请求的功能。 1.2.2 典型应用场景 Spring可以应用到许多场景,从最简单的标准Java SE程序到企业级应用程序都能使用Spring来构建。 以下介绍几个比较流行的应用场景: ● 典型Web应用程序应用场景: 图1-2 web应用程序应用场景 在Web应用程序应用场景中,典型的三层架构:数据模型层实现域对象;数据访问层实现数据访问;逻辑层实现业务逻辑;web层提供页面展示;所有这些层组件都由Spring进行管理,享受到Spring事务管理、AOP等好处,而且请求唯一入口就是DispachterServlet,它通过把请求映射为相应web层组件来实现相应请求功能。 ● 远程访问应用场景: Spring能非常方便的提供暴露RMI服务,远程访问服务如Hessian、Burlap等,实现非常简单只需通过在Spring中配置相应的地址及需要暴露的服务即可轻松实现,后边会有介绍; ● EJB应用场景: Spring也可以与EJB轻松集成,后边会详细介绍。
是 还有: Spring Framework 【Java开源 J2EE框架】Spring 是一个解决了许多在J2EE开发中常见的问题的强大框架。 Spring提供了管理业务对象的一致方法并且鼓励了注入对接口编程而不是对类编程的良好习惯。 Spring的架构基础是基于使用JavaBean属性的 Inversion of Control容器。 然而,这仅仅是完整图景中的一部分:Spring在使用IoC容器作为构建完关注所有架构层的完整解决方案方面是独一无二的。 Spring提供了唯一的数据访问抽象,包括简单和有效率的JDBC框架,极大的改进了效率并且减少了可能的错误。 Spring的数据访问架构还集成了 Hibernate和其他O/R mapping解决方案。 Spring还提供了唯一的事务管理抽象,它能够在各种底层事务管理技术,例如JTA或者JDBC事务提供一个一致的编程模型。 Spring提供了一个用标准Java语言编写的AOP框架,它给POJOs提供了声明式的事务管理和其他企业事务--如果你需要--还能实现你自己的 aspects。 这个框架足够强大,使得应用程序能够抛开EJB的复杂性,同时享受着和传统EJB相关的关键服务。 Spring还提供了可以和IoC容器集成的强大而灵活的MVC Web框架。 【SpringIDE:Eclipse平台下一个辅助开发插件】. WebWork 【Java开源 Web框架】 WebWork 是由OpenSymphony组织开发的,致力于组件化和代码重用的拉出式MVC模式J2EE Web框架。 WebWork目前最新版本是2.1,现在的WebWork2.x前身是Rickard Oberg开发的WebWork,但现在WebWork已经被拆分成了Xwork1和WebWork2两个项目。 Xwork简洁、灵活功能强大,它是一个标准的Command模式实现,并且完全从web层脱离出来。 Xwork提供了很多核心功能:前端拦截机(interceptor),运行时表单属性验证,类型转换,强大的表达式语言(OGNL – the Object Graph Notation Language),IoC(Inversion of Control倒置控制)容器等。 WebWork2建立在Xwork之上,处理HTTP的响应和请求。 WebWork2使用ServletDispatcher将HTTP请求的变成 Action(业务层Action类), session(会话)application(应用程序)范围的映射,request请求参数映射。 WebWork2支持多视图表示,视图部分可以使用 JSP, Velocity, FreeMarker, JasperReports,XML等。 在WebWork2.2中添加了对AJAX的支持,这支持是构建在DWR与Dojo这两个框架的基础之上.【EclipseWork:用于WebWork辅助开发的一个Eclipse插件】 Struts 【Java开源 Web框架】Struts 是一个基于Sun J2EE平台的MVC框架,主要是采用Servlet和JSP技术来实现的。 由于Struts能充分满足应用开发的需求,简单易用,敏捷迅速,在过去的一年中颇受关注。 Struts把Servlet、JSP、自定义标签和信息资源(message resources)整合到一个统一的框架中,开发人员利用其进行开发时不用再自己编码实现全套MVC模式,极大的节省了时间,所以说Struts是一个非常不错的应用框架。 【StrutsIDE:用于Struts辅助开发的一个Eclipse插件】 Hibernate 【Java开源 持久层框架】Hibernate 是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序实用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。 Eclipse平台下的Hibernate辅助开发工具:【Hibernate Synchronizer】【MiddlegenIDE】 Quartz 【Java开源 Job调度】Quartz 是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。 Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的日程序表。 Jobs可以做成标准的Java组件或 EJBs。 Quartz的最新版本为Quartz 1.5.0。 Velocity 【Java开源 模板引擎】Velocity 是一个基于java的模板引擎(template engine)。 它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。 当Velocity应用于web开发时,界面设计人员可以和java程序开发人员同步开发一个遵循MVC架构的web站点,也就是说,页面设计人员可以只关注页面的显示效果,而由java程序开发人员关注业务逻辑编码。 Velocity将java代码从web页面中分离出来,这样为web站点的长期维护提供了便利,同时也为我们在JSP和PHP之外又提供了一种可选的方案。 Velocity的能力远不止web站点开发这个领域,例如,它可以从模板(template)产生SQL和PostScript、XML,它也可以被当作一个独立工具来产生源代码和报告,或者作为其他系统的集成组件使用。 Velocity也可以为Turbine web开发架构提供模板服务(template service)。 Velocity+Turbine提供一个模板服务的方式允许一个web应用以一个真正的MVC模型进行开发。 【VeloEclipse :Velocity在Eclipse平台下的一个辅助开发插件】IBATIS 【Java开源 持久层框架】使用ibatis 提供的ORM机制,对业务逻辑实现人员而言,面对的是纯粹的Java对象, 这一层与通过Hibernate 实现ORM 而言基本一致,而对于具体的数据操作,Hibernate 会自动生成SQL 语句,而ibatis 则要求开发者编写具体的SQL 语句。 相对Hibernate等 “全自动”ORM机制而言,ibatis 以SQL开发的工作量和数据库移植性上的让步,为系统设计提供了更大的自由空间。 作为“全自动”ORM 实现的一种有益补充,ibatis 的出现显 得别具意义。
Java开源项目 Spring Framework 【Java开源 J2EE框架】Spring 是一个解决了许多在J2EE开发中常见的问题的强大框架。 Spring提供了管理业务对象的一致方法并且鼓励了注入对接口编程而不是对类编程的良好习惯。 Spring的架构基础是基于使用JavaBean属性的 Inversion of Control容器。 然而,这仅仅是完整图景中的一部分:Spring在使用IoC容器作为构建完关注所有架构层的完整解决方案方面是独一无二的。 Spring提供了唯一的数据访问抽象,包括简单和有效率的JDBC框架,极大的改进了效率并且减少了可能的错误。 Spring的数据访问架构还集成了 Hibernate和其他O/R mapping解决方案。 Spring还提供了唯一的事务管理抽象,它能够在各种底层事务管理技术,例如JTA或者JDBC事务提供一个一致的编程模型。 Spring提供了一个用标准Java语言编写的AOP框架,它给POJOs提供了声明式的事务管理和其他企业事务--如果你需要--还能实现你自己的 aspects。 这个框架足够强大,使得应用程序能够抛开EJB的复杂性,同时享受着和传统EJB相关的关键服务。 Spring还提供了可以和IoC容器集成的强大而灵活的MVC Web框架。 【SpringIDE:Eclipse平台下一个辅助开发插件】. WebWork 【Java开源 Web框架】 WebWork 是由OpenSymphony组织开发的,致力于组件化和代码重用的拉出式MVC模式J2EE Web框架。 WebWork目前最新版本是2.1,现在的WebWork2.x前身是Rickard Oberg开发的WebWork,但现在WebWork已经被拆分成了Xwork1和WebWork2两个项目。 Xwork简洁、灵活功能强大,它是一个标准的Command模式实现,并且完全从web层脱离出来。 Xwork提供了很多核心功能:前端拦截机(interceptor),运行时表单属性验证,类型转换,强大的表达式语言(OGNL – the Object Graph Notation Language),IoC(Inversion of Control倒置控制)容器等。 WebWork2建立在Xwork之上,处理HTTP的响应和请求。 WebWork2使用ServletDispatcher将HTTP请求的变成 Action(业务层Action类), session(会话)application(应用程序)范围的映射,request请求参数映射。 WebWork2支持多视图表示,视图部分可以使用 JSP, Velocity, FreeMarker, JasperReports,XML等。 在WebWork2.2中添加了对AJAX的支持,这支持是构建在DWR与Dojo这两个框架的基础之上.【EclipseWork:用于WebWork辅助开发的一个Eclipse插件】 Struts 【Java开源 Web框架】Struts 是一个基于Sun J2EE平台的MVC框架,主要是采用Servlet和JSP技术来实现的。 由于Struts能充分满足应用开发的需求,简单易用,敏捷迅速,在过去的一年中颇受关注。 Struts把Servlet、JSP、自定义标签和信息资源(message resources)整合到一个统一的框架中,开发人员利用其进行开发时不用再自己编码实现全套MVC模式,极大的节省了时间,所以说Struts是一个非常不错的应用框架。 【StrutsIDE:用于Struts辅助开发的一个Eclipse插件】 Hibernate 【Java开源 持久层框架】Hibernate 是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序实用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。 Eclipse平台下的Hibernate辅助开发工具:【Hibernate Synchronizer】【MiddlegenIDE】 Quartz 【Java开源 Job调度】Quartz 是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。 Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的日程序表。 Jobs可以做成标准的Java组件或 EJBs。 Quartz的最新版本为Quartz 1.5.0。 Velocity 【Java开源 模板引擎】Velocity 是一个基于java的模板引擎(template engine)。 它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。 当Velocity应用于web开发时,界面设计人员可以和java程序开发人员同步开发一个遵循MVC架构的web站点,也就是说,页面设计人员可以只关注页面的显示效果,而由java程序开发人员关注业务逻辑编码。 Velocity将java代码从web页面中分离出来,这样为web站点的长期维护提供了便利,同时也为我们在JSP和PHP之外又提供了一种可选的方案。 Velocity的能力远不止web站点开发这个领域,例如,它可以从模板(template)产生SQL和PostScript、XML,它也可以被当作一个独立工具来产生源代码和报告,或者作为其他系统的集成组件使用。 Velocity也可以为Turbine web开发架构提供模板服务(template service)。 Velocity+Turbine提供一个模板服务的方式允许一个web应用以一个真正的MVC模型进行开发。 【VeloEclipse :Velocity在Eclipse平台下的一个辅助开发插件】IBATIS 【Java开源 持久层框架】使用ibatis 提供的ORM机制,对业务逻辑实现人员而言,面对的是纯粹的Java对象, 这一层与通过Hibernate 实现ORM 而言基本一致,而对于具体的数据操作,Hibernate 会自动生成SQL 语句,而ibatis 则要求开发者编写具体的SQL 语句。 相对Hibernate等 “全自动”ORM机制而言,ibatis 以SQL开发的工作量和数据库移植性上的让步,为系统设计提供了更大的自由空间。 作为“全自动”ORM 实现的一种有益补充,ibatis 的出现显 得别具意义。 Compiere ERP&CRM 【Java开源ERP与CRM系统】Compiere ERP&CRM为全球范围内的中小型企业提供综合型解决方案,覆盖从客户管理、供应链到财务管理的全部领域,支持多组织、多币种、多会计模式、多成本计算、多语种、多税制等国际化特性。 易于安装、易于实施、易于使用。 只需要短短几个小时,您就可以使用申购-采购-发票-付款、报价-订单-发票-收款、产品与定价、资产管理、客户关系、供应商关系、员工关系、经营业绩分析等强大功能了。 Roller Weblogger 【Java开源 Blog博客】这个weblogging 设计得比较精巧,源代码是很好的学习资料。 它支持weblogging应有的特性如:评论功能,所见即所得HTML编辑,TrackBack,提供页面模板,RSS syndication,blogroll管理和提供一个XML-RPC 接口。 Eclipse 【Java开源 开发工具】Eclipse平台是IBM向开放源码社区捐赠的开发框架,它之所以出名并不是因为IBM宣称投入开发的资金总数 —4千万美元,而是因为如此巨大的投入所带来的成果:一个成熟的、精心设计的以及可扩展的体系结构。 NetBeans 【Java开源 开发工具】NetBeans IDE 是一个为软件开发者提供的自由、开源的集成开发环境。 您可以从中获得您所需要的所有工具,用 Java、C/C++ 甚至是 Ruby 来创建专业的桌面应用程序、企业应用程序、web 和移动应用程序。 此 IDE 可以在多种平台上运行,包括 Windows、Linux、Mac OS X 以及 Solaris;它易于安装且非常方便使用。 XPlanner 【Java开源 项目管理】XPlanner 一个基于Web的XP团队计划和跟踪工具。 XP独特的开发概念如iteration、user stories等,XPlanner都提供了相对应的的管理工具,XPlanner支持XP开发流程,并解决利用XP思想来开发项目所碰到的问题。 XPlanner特点包括:简单的模型规划,虚拟笔记卡(Virtual note cards),iterations、user stories与工作记录的追踪,未完成stories将自动迭代,工作时间追踪,生成团队效率,个人工时报表,SOAP界面支持。 HSQLDB 【Java开源 DBMS数据库】HSQLDB(Hypersonic SQL)是纯Java开发的关系型数据库,并提供JDBC驱动存取数据。 支持ANSI-92 标准 SQL语法。 而且他占的空间很小。 大约只有160K,拥有快速的数据库引擎。 Liferay 【Java开源 Portal门户】代表了完整的J2EE应用,使用了Web、EJB以及JMS等技术,特别是其前台界面部分使用Struts 框架技术,基于XML的portlet配置文件可以自由地动态扩展,使用了Web Services来支持一些远程信息的获取,使用 Apahce Lucene实现全文检索功能。 JetSpeed 【Java开源 Portal门户】Jetspeed 是一个开放源代码的企业信息门户(EIP)的实现,使用的技术是Java和XML。 用户可以使用浏览器,支持WAP协议的手机或者其它的设备访问Jetspeed架设的信息门户获取信息。 Jetspeed扮演着信息集中器的角色,它能够把信息集中起来并且很容易地提供给用户。 JOnAS 【Java开源 J2EE服务器】JOnAS 是一个开放源代码的J2EE实现,在ObjectWeb协会中开发。 整合了Tomcat或Jetty成为它的Web容器,以确保符合Servlet 2.3和JSP 1.2规范。 JOnAS服务器依赖或实现以下的Java API:JCA、JDBC、JTA 、JMS、JMX、JNDI、JAAS、JavaMail 。 JFox3.0 【Java开源 J2EE服务器】 JFox 是 Open Source Java EE Application Server,致力于提供轻量级的Java EE应用服务器,从3.0开始,JFox提供了一个支持模块化的MVC框架,以简化EJB以及Web应用的开发! 如果您正在寻找一个简单、轻量、高效、完善的Java EE开发平台,那么JFox正是您需要的。
内容声明:
1、本站收录的内容来源于大数据收集,版权归原网站所有!
2、本站收录的内容若侵害到您的利益,请联系我们进行删除处理!
3、本站不接受违法信息,如您发现违法内容,请联系我们进行举报处理!
4、本文地址:http://www.jujiwang.com/article/91ec5348f3710205f959.html,复制请保留版权链接!
当双击下载的ZIP文件时,如果显示错误信息路径未DWF文件,则表明ZIP文件中并不包含DWF文件,或者DWF文件已损坏,原因导致此错误的一些可能原因包括,下载的文件不完整或已损坏,ZIP文件未包含DWF文件,DWF文件的扩展名不正确,DWF文件已损坏,解决方案要解决此错误,请尝试以下步骤,检查文件完整性,重新下载ZIP文件并检查其是否...。
本站公告 2024-09-28 01:42:01
本文将为你提供一个从头到尾的指南,让你全面掌握如何使input元素不可编辑,我们将探讨各种技术,包括HTML属性、CSS样式、JavaScript事件处理程序,以及如何处理不同浏览器和设备的兼容性问题,1.HTML属性,readonly最简单的方法是使用HTMLreadonly属性,该属性指示浏览器不得允许用户编辑字段的内容,<,...。
技术教程 2024-09-16 15:37:44
准备好踏上激动人心的滑梯之旅了吗,SuperSlide是一家革命性的滑梯公司,旨在为您带来前所未有的滑梯体验,我们相信滑梯不仅仅是一种娱乐活动,它还是一种自我发现和冒险的途径,当您滑下我们的滑梯时,您将不仅体验到速度和刺激,还将探索您的极限,发现新的可能性,我们的滑梯在SuperSlide,我们为各个年龄和技能水平的人提供各种各样的滑...。
最新资讯 2024-09-15 22:17:55
引言未定义错误是计算机编程中一种常见的错误类型,它们可能难以诊断和解决,因为它们通常没有提供太多信息,本文将提供一个全面指南,帮助您理解和解决未定义错误,未定义错误的类型有几种不同类型的未定义错误,变量未定义,尝试使用未在程序中声明的变量,函数未定义,尝试调用尚未定义的函数,类未定义,尝试实例化尚未定义的类,属性未定义,尝试访问不存在...。
最新资讯 2024-09-15 01:12:59
ul>,使用CDN,CDN可以加快静态资源的加载速度,启用Gzip压缩,Gzip可以减少HTTP响应的大小,提高加载速度,优化图像,使用图像优化工具减少图像大小,加快加载速度,使用缓存,缓存API调用和网络响应,以减少延迟,监控网络流量,使用性能分析工具监控网络流量,识别延迟和错误,提高设备性能使用轻量级库,选择轻量级库,以减少应...。
互联网资讯 2024-09-14 11:54:27
爬虫程序,又称网络爬虫,是一种自动化程序,用于从互联网上收集数据,它们可以执行从简单页面抓取到复杂数据分析的各种任务,尽管爬虫程序非常有用,但重要的是要意识到使用它们的道德和责任,爬虫程序的道具有哪些,爬虫程序可以拥有各种功能,包括,从网站上抓取HTML、CSS和JavaScript文件分析页面内容,提取文本、图像和链接遵守网站的ro...。
互联网资讯 2024-09-12 23:13:05
前言Socket编程是网络编程的基础,它允许应用程序通过网络与其他计算机进行通信,Linux提供了出色的Socket编程支持,本文将通过示例指导您创建多用户聊天应用程序,展示LinuxSocket编程的实际应用,准备工作确保您的系统已安装Linux操作系统,例如Ubuntu或CentOS,安装C编译器和必要的库,sudoapt,get...。
最新资讯 2024-09-12 05:17:07
引言C语言是一种强大的、广泛使用的编程语言,以其高效性和可移植性而闻名,但是,对于初学者来说,C语言的复杂性可能会令人生畏,特别是,二级C语言的概念可能会让人感到困惑,文章旨在提供二级C语言的全面指南,帮助读者深入理解其概念并掌握其复杂性,本文将涵盖指针、函数指针、数组和结构等关键主题,二级C语言二级C语言是指C语言中更高级、更复杂的...。
互联网资讯 2024-09-11 10:41:26
什么是二分法,二分法是一种快速高效的搜索算法,用于在有序数据集中查找目标元素,其基本思想是将数据集合不断对半分,并根据目标元素与中间元素的大小关系来缩小搜索范围,二分法的核心思路初始化,将查找范围设定为集合的第一个和最后一个元素,循环搜索,重复以下步骤,直到找到目标元素或搜索范围为空,计算集合中间元素的索引,将目标元素与中间元素进行比...。
本站公告 2024-09-11 08:51:28
云计算已成为现代应用程序开发的基石,通过利用云服务,开发人员可以构建可扩展、可靠且高效的应用程序,而无需管理和维护自己的基础设施,在众多的云计算提供商中,AWS,亚马逊网络服务,、Azure,微软Azure,和GCP,谷歌云平台,是市场上的三大领导者,这些平台提供了广泛的服务,包括计算、存储、数据库、分析和大数据,云计算编程模型云计算...。
最新资讯 2024-09-11 02:22:55
成为电影界的巨擘,打造您独有的电影网站,用源码扩展您的创造力在当今数字化的时代,电影制作不再是传统意义上的,大制作,,而是任何拥有创造力、奉献精神和正确工具的人都可以实现的梦想,通过创建您自己的电影网站,您可以展示您的才华,与世界分享您的故事,并拓展您作为电影制作者的潜力,步骤1,选择正确的平台建立电影网站的首要步骤是选择一个合适的平...。
互联网资讯 2024-09-07 10:23:06
前言在当今快速变化的数字时代,编程思维已成为必不可少的技能,它是一套可用于解决复杂问题、分析信息和开发创造性解决方案的认知过程和方法,编程思维不仅对于技术专业人员至关重要,对于所有希望在个人和职业生活取得成功的人来说也很重要,编程思维的组成部分编程思维涉及以下关键组成部分,分解问题,将复杂问题分解成更小的、可管理的部分,模式识别,识别...。
本站公告 2024-09-06 21:48:13