介绍
- 客户端服务器通信发生在称为应用程序设计模式或体系结构的特定模式中。该应用程序是根据架构中指定的不同模块开发的。不同类型的架构可以是:
MVC架构、访问者架构、状态架构、观察者架构等。
- J2EE(即企业Java应用程序,如Spring、Struts、Hibernate、JDBC集成框架)遵循MVC架构,具有不同的层模型。MVC 在 J2EE 中使用以下模型实现:
MVC 架构
- MVC 是 Model-View-Controller 的缩写。
- 为了便于项目的开发和部署,Web 应用程序分为基本的 3 个模块:模型、视图和控制器。
- 顾名思义:
- Model:负责处理数据库与控制器的交互(数据库层)
- View:负责显示用户的内容(表示层)
- 控制器:负责按照用户操作(业务逻辑层)进行操作
- 考虑 AWT 或 Java Swing(下拉菜单/组合框菜单)的示例,如果用户想从下拉菜单中检索属于所选国家/地区的州,
- 模型:从数据库中检索选定的状态名称
- 视图:向用户显示组合框菜单(与模型坐标)
- 控制器:向模型发送有关用户选择国家名称的消息。
- 考虑 Struts 或 Spring 或 Hibernate 框架:
- 模型:Java Beans(数据库)
- 查看:HTML 或 JSP 页面
- 控制器:后端 servlet(转换后的 JSP)
- 完整的架构主要由控制器控制。视图上的最终用户(客户端)操作,控制器基于此操作将请求委托给模型。该模型从 bean 或数据库中检索所需的数据(通过数据库查询)并将响应返回给控制器。根据收到的响应,控制器更改/修改视图中的数据。
实际场景:如何使用MVC
- 视图:它是表示层,所有组件(按钮、复选框、单选按钮、文本字段、文本区域等)都放置和排列在容器中。
- 控制器:
- 模型:
MVC 模型:
-
一层架构:
- 将每个通信元素(如表示层、业务逻辑和数据库层)放在一个单元中的客户端-服务器架构称为单层架构或单层架构。
- 例如:
- 每个负责客户端-服务器交互的单元都位于客户端的一个位置。可以为服务器以及 n 个客户端重复相同的架构。
- 这种排列方式被认为是最简单、最直接的排列方式。对数据库层和业务应用层的访问变得更加容易。
- 遵循此架构的客户端或服务器也称为厚客户端或服务器。
优点:
- 更好的性能:由于这些层是内置的,因此不会出现无法访问或连接丢失等问题。
- 更高的安全性:数据库嵌入在这个架构中,即想要访问数据和业务逻辑的客户端拥有完全的权限。
- 提高可扩展性:每个应用模块紧密相连;因此它们可以很容易地缩放。
缺点:
- 由于所有三个元素都安装在每个客户端上,因此开发此架构的成本会增加。
- 维护成本也会增加。
-
两层架构:
- 在两层架构中,GUI(视图模块)位于客户端,而业务逻辑(控制器)和数据库(模型)位于服务器端。
- 客户端通过视图模块向服务器发送请求,服务器端的应用程序直接与数据库通信,并将检索到的结果发送回客户端。
客户端-服务器之间的通信需要持续的 Internet 或 Intranet 连接。
- 为了了解更多,让我们以在线电影票预订系统为例。假设 ABC 先生正在预订座位 A1 和 A2 的票。同时XYZ先生也在预定当天的票。在这种情况下,来自两个客户端的请求都在服务器上排队。如果来自客户端 1 的请求没有得到响应,同时来自客户端 2 的请求得到服务,则数据库中的数据可能会处于不一致状态。这可能会导致数据完整性问题。
优点:
- 更快的沟通
- 由于客户端只需要维护GUI,因此数据库维护和修改变得容易。
- 开发成本更低
缺点:
- 需要持续的 Internet 或 Intranet 连接
- 随着客户端数量的增加,服务器可能会延迟处理客户端的请求。
设想:
电影票预订系统的MVC:
-
三层架构:
- 在三层架构中,涉及两台服务器和一台客户端。
- MVC分为:
- 型号:数据库服务器
- 查看:客户端机器
- 控制器:应用服务器
- 客户端以请求的形式与应用服务器通信。这些请求由应用程序服务器以响应的形式提供服务。响应包括应用服务器从数据库中检索数据。
- 架构是:
-
设想:
优点:
- 更安全:由于客户端与数据库之间没有通信,因此与单层架构相比更安全。
- 可以修改单个模块(例如,可以在数据库中进行修改而不影响其他模块)。
- 如果其中一层停止工作,其他模块仍然可以正常工作。
- 与一层和两层架构相比,更具可扩展性。
缺点:
- 复杂性增加
- 所有模块的维护成本增加
- 分离可能会导致性能问题。
Struts 中的 MVC:
- struts中的MVC可以区分为:
- 模型:Java Beans(在后端与数据库交互)
- 视图:JSP(Java + HTML)
- 控制器:Servlet(或过滤器)
例如: