# 软件平台与中间技术复习手册
标识定义:
🔥 - 这是去年的考点
🔔 - 这可能是一个重点
🛠 - 这是一个代码块
- - -
## 第一章:软件平台与中间技术概述
- - -
**【1】什么是软件平台?**
> 软件平台是指用来构建与支撑应用软件的独立软件系统,它是开发与运行应用软件的基础,是任何一个应用软件得以实现与应用的必要条件。
> 举例:操作系统、数据库、中间件
**【2】什么是分布式系统?**
> 两个程序分别运行在两台主机进程上,相互协作完成同一个服务,这两个程序所组成的系统成为“分布式系统”。
> 分布式系统设计时考虑的特性:异构性、互操作性、透明性、可扩展性、并发、安全性
**【3】中间件的诞生背景**
> 随网络技术的产生、发展而兴起,需要解决异构分布网络环境下软件系统的通信、互操作、协同、事务、安全等共性问题。
**【4】定义中间件(英语)(🔔)**
> Middleware is computer software that connects software components and applications. The software consists of a set of enabling services that allow multiple processes running on one or more machines to interact across a network. This technology evolved to provide for interoperability in support of the move to coherent distributed architectures, which are used most often to support and simplify complex, distributed applications. It includes web servers, transaction monitors, and messaging-and-queueing software.
> 中间件是一类连接软件组件和应用软件,它包括一组服务, 以便于运行一台或多台机器上的多个软件通过网络进行交互。 该技术所提供的互操作性,支持向相干的分布式体系架构的迁移。 该架构通常用于支持分布式应用程序并简化其复杂度,它包括web服务器、 事务监控器和消息队列软件。
**【5】中间件的分类(🔔)**
- UDA:数据访问中间件
> 数据访问中间件是为了建立数据应用资源互操作的模式,对异构环境下的数据库实现联接或文件系统实现联接的中间件。例如:JDBC、ODBC等
- PRC:远程过程调用中间件
> 一个应用程序使用RPC来远程执行一个位于不同地址空间的过程,从效果上看和执行本地调用相同
- MOM:消息中间件
> 消息中间件是利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。例如:ActiveMQ、Kafka、MQSeries等
- ORB:对象中间件
> ORB提供了一个标准的构建架构,能使不同厂家的软件通过不同的地址空间、网络和操作系统实现交互访问。一些ORB标准:Corba IDL、COM、SOM等
- TPM:交易中间件
- AS:应用服务器
**【6】中间件技术的优势**
- 中间件可以节省应用开发
- 使用中间件的应用系统可以节省开发资金
- 中间件可以缩短开发周期
- 中间件的使用可以减少项目开发风险
- 中间件的使用方便应用集成、系统维护,提高软件的质量等
**【7】中间件技术在应用软件开发中的作用**
> 中间件屏蔽了底层操作系统的复杂性,使程序开发人员面对一个简单而统一的开发环境,减少程序设计的复杂性,将注意力集中在自己的业务上,不必再为程序在不同系统软件上的移植而重复工作,从而大大减少了技术上的负担。中间件带给应用系统的,不只是开发的简便、开发周期的缩短,也减少了系统的维护、运行和管理的工作量,还减少了计算机总体费用的投入。
- - -
## 第二章:JDBC 与 ORM
- - -
**【1】如何使用JDBC连接数据库?(DatabaseConnection)(🔔🛠)**
以连接MySQL的数据库为例:
```java
public class JDBCConnectionTest
{
// 数据库的基本信息:连接地址、驱动、用户名和密码
private static final String URL = "jdbc:mysql://localhost:3306/TestDatabase";
private static final String DRIVER = "com.mysql.jdbc.Driver";
private static final String USERNAME = "root";
private static final String PASSWORD = "123456";
private JDBCConnectionTest(String sql)
{
// 注册驱动
Class.forName(DRIVER);
// 使用驱动和数据库连接
Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
// 获取操作数据库的执行对象
PreparedStatement preparedStatement = connection.prepareStatement(sql);
}
}
```
**【2】JDBC API**
> 详见 https://docs.oracle.com/javase/8/docs/api/java/sql/package-summary.html
**【3】连接池**
> 在执行 JDBC 的 CRUD 操作时,连接池可以复用已经创建的连接,来避免频繁地创建与销毁 JDBC 连接。
**【4】MyDataSource(自建连接池🛠)**
```java
public class MyDataSource
{
// 定义一个链表,来存放已创建的连接
private final LinkedList<Connection> dataSource = new LinkedList<>();
// 向连接池中一次性创建十条连接
public MyDataSource()
{
for (int i = 0; i < 10; i++)
{
DriverManager.registerDriver(new SQLServerDriver());
Connection conn = DriverManager.getConnection(url, username, password);
dataSource.add(conn);
}
}
// 从连接池中获取一个连接
public Connection getConnection()
{
return dataSource.removeFirst();
}
// 向连接池中加入新的连接
public void releaseConnection(Connection conn)
{
dataSource.add(conn);
}
}
```
使用JNDI获得连接池对象(🛠)
```
Context context = new InitialContext();
DataSource dataSource = (DataSource)context.lookup("java:comp/env/jdbc/dataSource");
Connection conn = dataSource.getConnection();
```
**【5】JDBC驱动类型**(🔥)
> - 第一类:`JDBC-ODBC 桥驱动`,把JDBC操作翻译成对应的ODBC调用
> - 第二类:`本地 API 驱动`,通过客户端加载数据库厂商提供的本地代码库来访问数据库
> - 第三类:`网络协议的驱动`, 给客户端提供了一个网络 API,客户端上的 JDBC 驱动程序使用套接字来调用服务器上的 Middleware,然后再转换成具体的 API 调用
> - 第四类:`本地协议驱动`,数据库可用的最高性能驱动程序,通常由供应商提供,使用Socket直接在客户端与数据库间通信
**【6】DAO模式(🔥🔔)**
DAO模式由以下几部分组成:
> 1. bean:数据库中的实体,每个属性都有 setter 与 getter
> 2. connection:连接器,用于连接数据库,包含url、driver、username、password等信息
> 3. DAO:接口,用于做数据库的增删改查操作
> 4. IMPL:实现DAO的具体方法,包含查询语句
**【7】使用ORM框架**
以Hibernate框架为例,Hibernate框架是Java语言下的对象映射关系解决方案之一
> - Hibernate 使用数据库和配置文件来提供持久化的服务
> - hibernate.cfg.xml,hibernate 的配置文件
> - `pojo`.hbm.xml,实体映射文件
> - 示例请参见:https://github.com/Robert-RK-Chen/StudentORMWithMySQL
- - -
## 第三章:AS 与 JavaEE
- - -
**【1】什么是应用服务器?(英语)**
> An application server’s fundamental job is to provide its clients with access to what is commonly called business logic, which generates dynamic content.
**【2】什么是 Web 服务器?(英语)**
> A web server’s fundamental job is to accept and fulfill reque