SSH组成方式

本文针对SSH(Struts+Spring+Hibernate)架构存在的问题,提出一种改进的分层结构,旨在简化开发流程并增强与AJAX等现代Web技术的结合。通过统一业务逻辑接口,减少StrutsAction的编写负担,并实现多种数据格式输出。

转载自:http://www.uml.org.cn/j2ee/200803315.asp

SSH为Struts+Spring+Hibernate的组成方式,Struts实现MVC,Spring负责架构的结合,Hibernate进行数据的持久化。通常其分层开发的结构图(以一个业务新增为例)如下:

这样的结构,满足了一般的业务需要,但是对于当前日益复杂化的WEB2.0的开发,却存在不少问题,归纳起来主要有以下几点的不足:

A)DAO和服务层容易出现职责不明,由于按照MVC逻辑,业务代码应该写在Struts Action里,但是其事务的提供,却是配置在Service层。为了一组在逻辑上完整的数据操作业务逻辑,需要涉及两个层(Serveice、Action)来进行编写,遇到判断的情况下,为了保证完整的事务操作,则需要将业务代码移到Service层完成,而通常习惯了在Struts Action里调用多次Service而产生多个事务而在出现Exception时导致出错时操作之前调用的Service事务的业务数据没有回滚。

B)当需要返回的数据供AJAX使用,操作JSON或XML的的大量使用时。开发起来会很费力,一段同样的业务代码,为了使用AJAX和XML可能需要重新编写一次,或者在同一个ACTION里通过标志来判断,对分层结构造成了比较糟糕的破坏。如果设计得不好,为了使用JSON和XML还得额外增加大量的配置,严重降低了开发效率。

因此,为了克服这些缺点,本人对于SSH架构,进行了实现了重新的分层,共享了业务代码。简化了开发、增强了与AJAX技术、MXL技术的结合。提供了一种更高效的开发模式。

其开发的结构图如下:

看到这个架构图有人可能会问,Struts Action类的编写去哪了呢?答案正是这个架构的优点,由于业务代码统一实现IbusinessService接口,使得只需要相对固定的几个Struts Action类调用Service层的方法,便可以完成工作。包括JSON格式输出,XML输出及WebService输出均调用Service层方法来完成功能。这样便实现了业务代码的分离,以及与前端框架的极大解耦。

SSH协议是一种用于安全远程登录和其他安全网络服务的协议,其设计目标是替代不安全的明文传输协议,如Telnet、FTP等。SSH协议通过加密技术和认证机制,确保数据传输的机密性、完整性和身份验证的安全性。 ### SSH协议的组成结构 SSH协议主要由三部分组成,分别是**传输层协议(SSH-TRANS)**、**用户认证协议(SSH-USERAUTH)**和**连接协议(SSH-CONNECT)**。 - **传输层协议(SSH-TRANS)** 提供了服务器端的身份认证、数据加密和完整性保护。它通常运行在TCP/IP之上,但也可以在其他可靠的数据流协议上运行。该层使用强加密算法(如AES、3DES等)来保护数据,并支持数据压缩功能[^1]。 - **用户认证协议(SSH-USERAUTH)** 负责客户端用户的身份验证。它运行在传输层协议之上,并依赖于传输层提供的会话标识符(从密钥交换中派生出的哈希值)来验证用户身份。常见的认证方式包括密码认证、公钥认证、键盘交互认证等[^1]。 - **连接协议(SSH-CONNECT)** 在用户认证完成后建立,它将加密的通信隧道划分为多个逻辑通道,用于支持不同的应用服务,如远程命令执行、文件传输、端口转发等。该协议允许在同一个SSH连接上同时运行多个独立的通信通道。 ### SSH协议的工作原理 SSH协议的工作流程可以分为以下几个阶段: 1. **协议版本协商**:客户端与服务器首先交换协议版本信息,确认双方支持的SSH版本(如SSH-1或SSH-2),并选择合适的版本进行后续通信。 2. **密钥交换与会话密钥生成**:在传输层协议中,客户端与服务器通过密钥交换算法(如Diffie-Hellman)协商出一组共享的会话密钥,用于后续的数据加密和完整性保护。此过程还涉及服务器端的身份认证,通常通过服务器的主机密钥完成[^1]。 3. **用户身份认证**:在传输层安全通道建立后,用户认证协议启动,客户端向服务器提交身份认证信息(如用户名和密码、公钥签名等)。只有通过认证的用户才能继续进行后续操作。 4. **建立连接与通道分配**:一旦用户认证成功,连接协议开始运行,客户端可以请求建立多个逻辑通道,每个通道可以用于不同的应用,如执行远程命令、启动交互式终端、转发端口等。 5. **数据传输与会话管理**:所有在逻辑通道中传输的数据都经过加密和完整性验证,确保通信安全。用户可以在多个通道中并行执行操作,直到主动关闭连接或超时。 ### 示例:SSH连接的基本流程 以下是一个使用Python的`paramiko`库建立SSH连接的简单示例: ```python import paramiko # 创建SSH客户端 client = paramiko.SSHClient() client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 连接到远程主机 client.connect('example.com', username='user', password='password') # 执行远程命令 stdin, stdout, stderr = client.exec_command('ls -l') print(stdout.read().decode()) # 关闭连接 client.close() ``` ###
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值