第15章 · 播客 第8集
基于中间件的开发 · SSH 轻量级架构与全章总复习
🎙️ 本集播客:第8集:MVC 三角色、Struts 的工作流程、Spring 的 IoC 依赖注入与模块分层、Hibernate 的 hbm.xml 与 HQL、SSH 三层怎么分工,以及轻量级与重量级各自的优劣和 JPA 的调和方案——最后附全章必背清单,直接对接练习题。 语音由微软 Edge 神经网络语音预生成(女声·晓伊,男声·云希)。点击下方任意对话可直接从该句开始播,当前句朗读时下一句已预先加载,无缝衔接。
明
阿明
小雅姐,最后一集了,轻量级架构是不是就是那三个开源框架的组合?
雅
小雅
先垫地基:MVC 模式是一种广泛流行的软件设计模式,随着 J2EE 的成熟正成为 J2EE 平台上推荐的设计模型,将业务处理与显示分离,应用分为模型、视图及控制层,增加了可扩展性,为搭建可伸缩、灵活、易维护的 Web 系统提供了机制。背景:J2EE 只提出了一般意义上的框架设计,体系庞大显得臃肿,轻量级 Web 架构保持 J2EE 的优势又简化了开发——主流做法是把 Struts、Spring、Hibernate 三种开源技术基于 MVC 相结合。
明
阿明
所以主流的轻量级架构是 SSH?
雅
小雅
先垫地基:MVC 模式是一种广泛流行的软件设计模式,随 J2EE 的成熟正成为 J2EE 平台上推荐的设计模型,将业务处理与显示分离,应用分为模型、视图及控制层,增加了可扩展性。背景:J2EE 只提出了一般意义上的框架设计,体系庞大显得臃肿,轻量级 Web 架构保持 J2EE 的优势又简化了开发——主流做法是把 Struts、Spring、Hibernate 三种开源技术基于 MVC 相结合。
明
阿明
模型 JavaBean 或 EJB、控制器 ActionServlet 和 Action、视图 JSP 文件。它的工作流程呢?
雅
小雅
Struts 是一个基于 SUN J2EE 平台的 MVC 框架,主要采用 Servlet 和 JSP 技术实现。角色分配逐个背:模型由实现业务逻辑的 JavaBean 或 EJB 构件构成,控制器由 ActionServlet 和 Action 实现,视图由一组 JSP 文件构成。Struts 把 Servlet、JSP、自定义标签和信息资源整合到一个统一的框架中,开发人员不用自己再编码实现全套 MVC 模式。
明
阿明
Struts 还有个 Front Controller 和 Validator?
雅
小雅
原文流程按顺序记:首先 JSPview 发起一个以 .do 表示的请求;ActionForm 封装用户请求数据并提供验证;ActionServlet 根据 struts-config.xml 文件得到处理请求的 Action 对象并发送请求;Action 对象调用 model 处理,结果返回给 ActionServlet;ActionServlet 决定结果返回给对应的 view 显示。链条:.do 请求、ActionForm 封装、查配置找 Action、Action 调 model、结果回 view。
明
阿明
Spring 呢,它是不是就是管容器的?
雅
小雅
有。Struts 将业务数据、页面显示、动作处理进行分离,有利于各部分的维护。Struts 采用 Front Controller 模式实现动作处理,所有动作请求经过一个统一入口再分发,方便在入口加入全局控制代码,如安全控制、日志管理、国际化编码。通常借助 Struts Validator 框架完成 Web 层验证,不用为每个页面写验证代码,只需通过配置实现。
明
阿明
IoC 和依赖注入这两个词什么关系?
雅
小雅
有。Struts 将业务数据、页面显示、动作处理分离,利于各部分维护。采用 Front Controller 模式实现动作处理,所有动作请求经过统一入口再分发,方便加入全局控制代码,如安全控制、日志管理、国际化编码。通常借助 Struts Validator 框架完成 Web 层验证,只需通过配置实现,验证代码集中管理便于维护。
明
阿明
Spring 的模块分层那一段也有考点?
雅
小雅
Spring Framework 是由 Rod Johnson 创立的开放源码的应用框架,它是轻量级的 J2EE 应用程序框架,旨在简化 J2EE 的开发,降低 J2EE 项目实施的难度,包括声明性事务管理、通过 RMI 或 web services 远程访问业务逻辑、mail 支持工具、持久层的各种配置支持,还提供与 Hibernate、Struts 的集成接口。
明
阿明
ORM 那个列表里居然有 Hibernate 和 JPA,那 Context 和 Web 包呢?
雅
小雅
原文一句话说清:Spring 的核心概念是控制反转(Inversion of Control,IoC),更具体而易懂的名词是依赖注入(Dependency Injection)。使用 Spring 不必自己在程序码中维护物件的依赖关系,只需在构件中加以设定,核心容器会自动将依赖注入指定的物件。Spring 核心本身是个容器,管理物件的生命周期、组态、相依注入,并可控制物件以原型(Prototype)或单例子(Singleton)方式创立。
明
阿明
第三个 Hibernate,它是干持久化的桥梁?
雅
小雅
ORM 框架提供了对象关系映射工具,包括 JDO(Java 持久对象)、Hibernate、Ibstis、JPA(Java Persistence API,Java 持久 API),都遵从 Spring 的通用事务和 DAO 异常层次结构。Context 上下文是一个配置文件,包括企业服务,例如 EJB、JNDI、邮件、Validation。Web 包提供针对 Web 开发的集成特性,例如多方文件上传。Spring 的核心要点是支持不绑定到特定 J2EE 服务的可重用业务和数据访问对象。
明
阿明
映射靠什么文件?
雅
小雅
原文定性:Hibernate 是一种对象和关系之间映射的框架,是 Java 应用和关系数据库之间的桥梁。它可以将数据库资源映射为一个或者多个 POJO,以 POJO 的属性和方法实现各种业务操作,摆脱烦琐的 JDBC 代码。身份说明:Hibernate 是一个工具,而不是一个 J2EE 的服务器——可在服务器中做持久化处理、在桌面程序中直接用,还可基于它扩展功能,例如完成对 EJB3.0 标准的实现。
明
阿明
现在把三个框架拼起来,SSH 架构怎么分层?
雅
小雅
在 Hibernate 中对象关系映射机制的核心是一个 XML 文件,通常命名为 .hbm.xml,描述数据库模式怎么与一组 Java 类绑定。Hibernate 提供工具从已有的数据库模式和 Java 代码生成 .hbm.xml 文件;有了它就可以生成 Java 代码或数据库模式,或者两者兼得。Hibernate 只是一个将持久化类与数据库表映射的工具,每个持久化实例对应表中的一个数据行。
明
阿明
Struts 表示、Spring 业务、Hibernate 持久。Hibernate 在持久层里还用什么查询?
雅
小雅
真题问「在 SSH 轻量级架构中,Struts 主要负责哪一层」,选项表示层、业务层、持久层、数据库层,答案表示层。原文分工:表示层由 Struts 实现,管理用户请求和响应、提供控制器调用业务逻辑、处理异常、借助 Validator 完成验证;持久层由 Hibernate 实现;业务层由 Spring 实现。口诀:Struts 表示、Spring 业务、Hibernate 持久。
明
阿明
Spring 在业务层的优点呢?
雅
小雅
原文三条:利用延时注入思想组装代码,提高了系统扩展性和灵活性,实现插件式编程;利用 AOP 思想,集中处理业务逻辑,减少重复代码;利用其对 Hibernate 的会话工厂(Session Factory)、事务管理的封装,可以更简洁地应用 Hibernate。三个关键词:延时注入、AOP、封装会话工厂和事务管理。
明
阿明
最后那个轻量级对重量级的探讨,考试也考。
雅
小雅
原文三条:利用延时注入思想组装代码,提高系统扩展性和灵活性,实现插件式编程;利用 AOP 思想,集中处理业务逻辑,减少重复代码;利用其对 Hibernate 的会话工厂(Session Factory)、事务管理的封装,更简洁地应用 Hibernate。三个关键词:延时注入、AOP、封装会话工厂和事务管理。
明
阿明
轻量级的优势就是反过来?
雅
小雅
轻量级框架的优势很大程度上是因为加速了开发的速度,不用部署庞大的容器系统就能实现以前需要容器才能实现的功能:可以使用 Spring 代替 EJB 中的无状态的会话 Bean,可以使用 Hibernate 代替 EJB 中的实体 Bean,而且可以直接写一个应用程序运行已完成的系统,马上看到结果,做单元测试非常简单。两个代替配对背——正好接上第五集三种 Bean 的知识点。
明
阿明
那道对比题呢?轻量级和重量级谁性能好?
雅
小雅
轻量级框架的优势很大程度上是因为加速了开发的速度,不用部署庞大的容器系统就能实现以前需要容器才能实现的功能:可以使用 Spring 代替 EJB 中的无状态的会话 Bean,可以使用 Hibernate 代替 EJB 中的实体 Bean,而且可以直接写一个应用程序运行已完成的系统,马上看到结果,做单元测试非常简单。
明
阿明
全章到这就讲完了,总复习清单呢?
雅
小雅
全章必背分八块过。第一块中间件概念:位于操作系统网络和数据库之上、应用软件之下;IDC 定义位于客户机服务器的操作系统之上、管理计算资源和网络通信;特点五条;Standish 十大优越性;总建设费用减少 50% 左右。第二块分类与产品:八类中间件;消息中间件销售额最大、代表 eLink、MQSeries、TongLINK;Tuxedo 交易中间件、增长率最高、ATMI、DDR、LLE。
明
阿明
第三块到第四块呢?应用服务器和 J2EE。
雅
小雅
第五块 .NET:四特点软件变服务、XML 共同语言、融合设备平台、新一代人机界面;CLR 最底层统一运行环境、受控代码源代码到 MIL 到 JITC;DataSet 驻内存缓冲区替代 Recordset、DataReader 只读;COM 加 MTS 加 DCOM 等于 COM+;J2EE 跨平台单语言、.NET 单平台多语言。第六块 EAI:49 个应用系统、33% 预算;三层由低到高数据集成、应用集成、业务过程集成。
明
阿明
最后四块,.NET、EAI、SSH 和轻重之辨。
雅
小雅
第三块应用服务器:三阶段演进,并非传统软件而是平台、企业级应用的操作系统,运行期四服务名字解析路由选择负载平衡事务控制,五产品各记一个标签。第四块 J2EE:四构件、EJB 封装业务逻辑,三种 Bean——实体 Bean 持久、只要数据存在就存在;会话 Bean 短暂、故障即消失,无状态不含客户端状态;消息驱动 Bean 是 EJB2.0、处理 JMS 队列异步消息。JMS 点到点单消费者、出版订阅多消费者;JTA 高级、JTS 低级。
明
阿明
SSH 和轻重之辨也压一遍。
雅
小雅
第七块 SSH:Struts 表示层、Spring 业务层、Hibernate 持久层;IoC 等于依赖注入;hbm.xml 是映射文件;HQL 把表和列换成对象和字段;Spring 代替无状态会话 Bean、Hibernate 代替实体 Bean。第八块轻重之辨:重量级大规模运行性能优异但开发效率低,轻量级开发迅速但大规模性能有差异,单元测试轻量级简单,JPA 注解调和两者。
明
阿明
八章八块,全串起来了。这一章从中间件概念一路听到 JPA,平台之争的来龙去脉都清楚了。
雅
小雅
第十六章我们讲安全性和保密性设计——加密算法、数字签名、认证这些,那章的概念辨析比这章还密,对称与非对称、公钥私钥的用法都是选择题重仓。先去把第十五章的练习做了,错题对回对应集数再听一遍,下章见。