转SSH 各层作用及好处(个人收集)
- 格式:docx
- 大小:18.96 KB
- 文档页数:5
ssh教程SSH(Secure Shell)是一个网络协议,旨在通过加密传输数据,提供安全的远程连接。
SSH协议广泛用于远程计算机管理、远程登录、远程文件传输和远程端口转发等场景。
SSH协议的工作原理是通过公钥密码学来建立安全的连接。
在传统的远程登录中,用户需要输入密码来验证身份。
但是这种方式存在一些安全风险,比如密码被猜测、被监听或者通过暴力破解等。
而SSH协议使用了公钥密码学的方式,即每个用户都有一对密钥(公钥和私钥),公钥可以公开,而私钥必须保密。
在使用SSH协议进行连接时,客户端会将自己的公钥发送给服务器。
服务器会将客户端公钥存储起来。
当客户端发送请求时,服务器会生成一个随机数,用客户端公钥加密后返回给客户端。
客户端收到后使用私钥解密得到该随机数,然后用该随机数对密码进行加密传输给服务器。
使用SSH的好处包括:1. 安全性:SSH协议是加密的,可以防止密码和数据被窃取。
相比传统的Telnet协议,SSH提供了更高的安全性。
2. 跨平台:SSH可以在不同操作系统和设备上使用,包括Windows、Linux、macOS等。
3. 简单易用:SSH协议的配置和使用相对简单,只需安装客户端程序,就可以连接到远程计算机。
4. 远程管理:通过SSH协议,管理员可以远程管理服务器,包括安装软件、配置系统、查看日志等操作。
5. 文件传输:SSH协议支持通过SCP(Secure Copy)和SFTP (Secure FTP)来传输文件,安全且高效。
为了使用SSH协议,需要以下步骤:1. 安装SSH客户端:可以选择OpenSSH、PuTTY等多个SSH 客户端程序进行安装。
2. 生成密钥对:使用指令`ssh-keygen`生成一对密钥(公钥和私钥)。
该指令会要求输入密钥的保存路径和密码等信息。
3. 将公钥发送给服务器:将生成的公钥复制到服务器上,多数情况下是将公钥追加到`~/.ssh/authorized_keys`文件中。
SSH中各个框架的作用以及Spring AOP,IOC,DI详解在SSH框假中spring充当了管理容器的角色。
我们都知道Hibernate用来做持久层,因为它将JDBC做了一个良好的封装,程序员在与数据库进行交互时可以不用书写大量的SQL语句。
Struts是用来做应用层的,他它负责调用业务逻辑serivce层。
所以SSH框架的流程大致是:Jsp页面----Struts------Service(业务逻辑处理类)---Hibernate(左到右)struts负责控制Service(业务逻辑处理类),从而控制了Service的生命周期,这样层与层之间的依赖和强,属于耦合。
这时,使用spring框架就起到了控制Action 对象(Strus中的)和Service类的作用,两者之间的关系就松散了,Spring的Ioc 机制(控制反转和依赖注入)正是用在此处首先想说说IoC(Inversion of Control,控制倒转)。
这是spring的核心,贯穿始终。
所谓IoC,对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系。
这是什么意思呢,举个简单的例子,我们是如何找女朋友的?常见的情况是,我们到处去看哪里有长得漂亮身材又好的mm,然后打听她们的兴趣爱好、qq号、电话号、ip号、iq号………,想办法认识她们,投其所好送其所要,然后嘿嘿……这个过程是复杂深奥的,我们必须自己设计和面对每个环节。
传统的程序开发也是如此,在一个对象中,如果要使用另外的对象,就必须得到它(自己new一个,或者从JNDI中查询一个),使用完之后还要将对象销毁(比如Connection等),对象始终会和其他的接口或类藕合起来。
那么IoC是如何做的呢?有点像通过婚介找女朋友,在我和女朋友之间引入了一个第三者:婚姻介绍所。
婚介管理了很多男男女女的资料,我可以向婚介提出一个列表,告诉它我想找个什么样的女朋友,比如长得像李嘉欣,身材像林熙雷,唱歌像周杰伦,速度像卡洛斯,技术像齐达内之类的,然后婚介就会按照我们的要求,提供一个mm,我们只需要去和她谈恋爱、结婚就行了。
《ssh架构个人总结》(转载)看过了两三个ssh搭建的视频(浪曦风中叶老师、尚学堂李勇老师的两个视频),也跟着视频把这个框架搭了两遍,有点迷迷糊糊的,为了加深印象,我决定不依靠视频再来搭一遍,经过一天的调试与处理,终于能够独立自主地把ssh框架给搭建起来了,不容易啊。
其中出现的错误以及各种各样的bug不计其数,通过查阅文档以及google得到了解决。
这里,我就来做一个总结:ssh框架的基本配置:1.相关jar包的引入,这里我采用的是spring2+struts2+hibernate3的组合,搭完了之后才发现spring已经到3了,不知道在spring3上面的配置是否相同,有待尝试。
code:18.-----核心jar包-----#spring.jar#struts2-core.jar#xwork-core.jar#mysql-connector-java.jar #hibernate3.jar#struts2-spring-plugin.jar-----在默认配置下核心jar所依赖的jar包---#mons-collections.jar---|#mons-fileupload.jar-----|------------这三个jar包是在jakarta-mons项目中一些#mons-logging.jar--------|基于jdk上扩展的工具包。
#freemarker.jar#log4j.jar#ognl.jar#dom4j.jar#jta.jar#cglib-nodep.jar#antl r.jar------------这个jar包是springaop采用动态代理时需要的jar包。
2.相关的配置i)/web-inf/web.xmla.需要配置一个struts2的filter:code:3.struts2org.apache.struts2.dispatcher.ng.filter.strutsprepareandexe cutefilter6.struts2b.由于从struts2.1.3之后的版本不再建议采用org.apache.struts2.dispatcher.filterdispatcher,所以,我们最好配置成strutsprepareandexecutefilter或者strutsexecutefilter以及strutspreparefilter,需要注意的是:如果配置成strutsexecutefilter需要将strutspreparefilter也配置上,否则将会报错。
SSH各框架工作原理SSH 是指以 Spring + SpringMVC + MyBatis 为基础的 Java Web 开发框架。
它是将三个框架集成在一起,以实现各自的功能,并提供了更加便捷的开发方式和高效的开发效率。
在了解 SSH 的工作原理之前,我们先来了解一下每个框架的作用和特点。
1. Spring:Spring 是一个开源的 JavaEE 框架,它提供了一个容器,负责管理对象的创建、销毁和依赖注入等工作。
Spring 的特点是灵活,它通过配置文件或注解的方式将对象进行装配,降低了耦合度,并支持面向切面编程(AOP)和事务管理等功能。
2. SpringMVC:SpringMVC 是 Spring 框架的一个模块,用于开发Web 应用程序。
它采用 MVC(Model-View-Controller)的设计模式,将业务逻辑、视图展示和用户交互分开。
SpringMVC 提供了一套基于注解的方式来映射 URL 到具体的处理方法,并支持数据校验、文件上传等常用功能。
3. MyBatis:MyBatis 是一个持久层框架,用于操作数据库。
它通过XML 配置文件或注解的方式,将 SQL 语句与 Java 对象进行映射。
MyBatis 提供了丰富的查询功能,并支持事务管理和缓存机制,可以有效地减少开发人员编写 SQL 语句的工作量。
了解了每个框架的作用和特点,下面我们来了解SSH框架是如何工作的。
1. 客户端发送请求:用户通过浏览器发送 HTTP 请求到服务器,请求的 URL 被映射到 SpringMVC 控制器的处理方法上。
2. SpringMVC 控制器处理请求:SpringMVC 根据请求的 URL,查找到对应的控制器,并调用相应的处理方法对请求进行处理。
控制器方法可以通过注解方式获取请求参数、校验数据等。
3. 控制器调用业务逻辑:在控制器中,可以调用业务逻辑层(Service)处理业务逻辑。
业务逻辑层通过依赖注入的方式获取数据库访问层(DAO)的实例。
SSH框架使用概述前言使用新框架主要是处于系统代码的可扩展性和可移植性两方面进行考虑。
在早期的代码编写中,没有特别规范代码的层次结构和编码形式,因此程序员往往不考虑代码层次结构的设计,只关心功能的实现和执行效率。
随着时代的发展,计算机硬件水平的不断提高,代码执行的效率由计算机本身的运行速度所决定。
程序员不必过分的追求代码的执行速度。
因此代码风格和层次结构成为开发人员更为关心的内容。
与此同时,客户也随着时代的改变需求也随之更新。
要求系统不断的进行升级和改造,这样,开发人员要不断的对系统的各个部分进行改进。
往往因为一个很小的问题,导致人们要从底层一直改进的页面展示。
从而出现“牵一发动全身”的现象。
显然在使用老的层次结构来面对如今快速更新发展的需求是不合适的。
因此,使得程序员们对代码的层次结构和改进成为一件刻不容缓的事情。
基于上述考虑,项目组在北京市目录三期系统中,对框架进行了改进,采用了SSH的结构。
下面我通过在使用新框架开发项目过程中的一些感受进一步进行讲解。
分析说到SSH技术,因此就一定先要谈一谈mvc开发模式。
大家请看这张图,这张图就是mvc最简单明了的一张关系图。
任何技术和框架都有优缺点,我们只有了解了他的优缺点才能将它更好的应用在我们的系统中。
我将结合北京市三期目录系统具体说明mvc结构的优缺点。
MVC的优点◆低耦合性。
视图层和业务层分离,这样就允许更改视图层代码而不用重新编译模型和控制器代码,同样,一个应用的业务流程或者业务规则的改变只需要改动MVC的模型层即可。
因为模型与控制器和视图相分离,所以很容易改变应用程序的数据层和业务规则。
◆高重用性和可适用性。
随着技术的不断进步,现在需要用越来越多的方式来访问应用程序。
MVC模式允许你使用各种不同样式的视图来访问同一个服务器端的代码。
它包括任何WEB(HTTP)浏览器或者无线浏览器(wap),比如,用户可以通过电脑也可通过手机来订购某样产品,虽然订购的方式不一样,但处理订购产品的方式是一样的。
SSH框架用法1. 什么是SSH框架SSH框架是一种用于构建分布式系统的开发框架,它由三个关键组件组成:Spring、Struts和Hibernate。
这三个组件分别负责处理应用程序的业务逻辑、Web层和数据访问层。
通过将它们集成在一起,SSH框架提供了一个完整的解决方案,使开发人员能够更快速、更高效地开发和维护复杂的分布式系统。
2. SSH框架的优势SSH框架具有以下几个优势:•模块化:SSH框架将整个应用程序划分为不同的模块,每个模块负责不同的功能。
这种模块化设计使得应用程序易于维护和扩展。
•松耦合:SSH框架使用依赖注入(Dependency Injection)来管理各个组件之间的依赖关系。
这种松耦合的设计使得各个组件可以独立开发、测试和部署。
•高效性能:SSH框架采用了多种优化技术,如缓存、懒加载等,来提高应用程序的性能。
同时,Hibernate作为数据访问层的组件,可以利用其自身的缓存机制来减少数据库访问次数,进一步提高性能。
•安全性:SSH框架提供了多种安全措施,如用户认证、权限控制等,以保护应用程序的安全。
同时,SSH框架还支持HTTPS协议,可以加密数据传输,提高数据的安全性。
3. SSH框架的核心组件SSH框架由三个核心组件组成:•Spring:Spring是一个轻量级的Java开发框架,它提供了依赖注入、面向切面编程等功能。
在SSH框架中,Spring负责处理应用程序的业务逻辑。
通过使用Spring的IoC容器和AOP技术,开发人员可以更方便地管理各个业务组件之间的依赖关系,并实现横切关注点的模块化。
•Struts:Struts是一个基于MVC设计模式的Web开发框架,它负责处理应用程序的Web层。
在SSH框架中,Struts作为前端控制器接收用户请求,并将请求转发给相应的业务处理组件。
通过使用Struts的标签库和拦截器机制,开发人员可以更方便地实现表单验证、页面跳转等功能。
三大框架ssh模式的详解SSH是Secure Shell的缩写,是一种用于安全远程登录的协议。
它可以通过加密隧道来传输数据,并提供了身份验证和数据完整性保护。
SSH模式可以分为以下三大框架:SSH-1、SSH-2和OpenSSH。
1.SSH-1:SSH-1是最早的SSH协议版本,由Tatu Ylönen在1995年开发。
SSH-1使用了基于RSA算法的身份验证机制,并使用了Diffie-Hellman 算法进行密钥交换。
然而,SSH-1存在许多安全漏洞,包括易受到中间人攻击的问题。
因此,SSH-1在1996年被SSH-2所取代,成为历史遗留的协议版本。
2.SSH-2:SSH-2是目前最广泛使用的SSH协议版本。
与SSH-1相比,SSH-2具有更好的安全性和可靠性。
SSH-2支持多种身份验证机制,包括密码、公钥和基于证书的身份验证。
它还增加了Diffie-Hellman组合机制和更强大的加密算法,如AES和3DES。
SSH-2还提供了压缩数据和端口转发等功能。
由于SSH-2的安全性和功能,它成为了企业网络中常用的远程登录协议。
3. OpenSSH:OpenSSH是SSH协议的开源实现,也是最常用的实现之一、OpenSSH 包括了SSH客户端和服务器端。
它被广泛使用于Linux和Unix系统中,提供了安全的远程登录和文件传输功能。
OpenSSH拥有良好的安全性和稳定性,并提供了许多高级功能,如X11转发、SFTP文件传输和动态端口转发。
OpenSSH还支持在非标准端口上运行,从而增加了安全性。
总结来说,SSH模式的三大框架包括SSH-1、SSH-2和OpenSSH。
SSH-1是最早的SSH协议版本,但存在安全漏洞,已被SSH-2所取代。
SSH-2具有更好的安全性和可靠性,支持多种身份验证机制和强大的加密算法。
而OpenSSH则是SSH协议的开源实现,被广泛应用于Linux和Unix系统中,提供了安全的远程登录和文件传输功能,并支持多种高级功能。
SSH原理详解SSH是Secure Shell(安全外壳协议)的简称。
它是一种用于加密远程管理和传输数据的网络协议。
SSH协议的出现解决了传统Telnet和FTP协议中存在的安全漏洞问题,能够保证数据在互联网中的安全传输。
本文将详细介绍SSH的原理及其工作机制。
一、SSH的基本概念SSH是一种加密协议,可以在不安全的网络中建立安全的远程连接。
它提供了加密、认证、完整性保护等功能,确保数据传输的机密性和完整性。
SSH主要由三个组件组成,分别是客户端、服务器端和SSH协议。
客户端:用户使用SSH客户端程序登录到远程服务器进行操作。
客户端负责发送命令和接收服务器返回的结果。
服务器端:远程服务器上运行的SSH服务器程序。
服务器端负责接收客户端的连接请求,并验证客户端的身份。
SSH协议:客户端和服务器之间进行通信的规则和标准。
SSH协议使用非对称密钥加密算法、对称密钥加密算法和哈希算法等进行加密和认证。
二、SSH的工作原理1. 生成密钥对在建立SSH连接之前,客户端和服务器分别生成一对密钥:公钥和私钥。
私钥保存在客户端,而公钥则被复制到服务器端。
密钥对的生成通常使用非对称加密算法,如RSA。
公钥用于加密数据,私钥用于解密数据。
2. 用户认证当客户端发起连接请求时,服务器会返回一个随机数。
客户端使用自己的私钥对随机数进行加密,并将加密后的结果发送给服务器。
服务器使用之前保存的客户端公钥进行解密,得到原始的随机数。
如果解密后的随机数与服务器发送的相同,则说明客户端身份验证通过。
3. 数据传输加密在用户认证通过后,服务器会生成一个会话密钥,用于后续通信的对称密钥加密。
会话密钥只在该次连接中使用,并在连接结束后销毁。
客户端和服务器使用会话密钥对通信数据进行加密和解密。
加密过程使用的是对称密钥加密算法,如AES。
这种加密方式速度快,适合大量数据的传输。
4. 完整性检查为了确保传输的数据没有被篡改,SSH使用哈希算法对数据进行完整性检查。
SSH协议体系结构解读SSH(Secure Shell)是一种用于在不安全网络上进行安全远程登录和传输文件的协议。
它提供了加密的通信和身份验证方法,用于保护用户的私密信息。
SSH协议体系结构由三个主要组件组成:传输层协议(SSH-TRANS),用户认证协议(SSH-AUTH)和连接层协议(SSH-CONN)。
本文将深入解读SSH协议体系结构的工作原理和各个组件的作用。
一、传输层协议(SSH-TRANS)传输层协议是SSH协议体系结构的核心组件之一,它负责在客户端和服务器之间建立加密通信通道。
SSH-TRANS使用公钥密码学和对称密钥加密算法来保证数据的机密性和完整性。
1.1 加密算法传输层协议使用对称密钥加密算法进行数据加密和解密。
常见的对称加密算法包括AES(Advanced Encryption Standard)和3DES(Triple Data Encryption Standard)。
这些算法使用相同的密钥对数据进行加密和解密,确保数据在传输过程中的安全性。
1.2 身份验证传输层协议还负责客户端和服务器之间的身份验证。
SSH使用公钥密码学来实现身份验证,通过交换公钥进行验证,保证了通信双方的身份可信。
二、用户认证协议(SSH-AUTH)用户认证协议是SSH协议体系结构的另一个重要组件,它负责验证用户的身份和权限。
SSH-AUTH使用公钥密码学和数字签名来实现用户的身份认证。
2.1 公钥密码学用户认证协议使用公钥密码学来验证用户的身份。
在用户首次连接服务器时,服务器会生成一对公钥和私钥。
用户将自己的公钥发送给服务器,服务器使用该公钥对用户发送的数据进行加密。
用户使用私钥对服务器返回的数据进行解密,完成身份验证过程。
2.2 数字签名用户认证协议还使用数字签名技术来确保数据的完整性和真实性。
服务器使用自己的私钥对数据进行签名,客户端使用服务器的公钥对签名进行验证,确保数据没有被篡改。
三、连接层协议(SSH-CONN)连接层协议是SSH协议体系结构的最上层组件,它负责在已建立的加密通道上传输数据和执行远程命令。
SSH的原理及应用什么是SSH?SSH(Secure Shell)是一种由网络协议组成的加密协议,用于通过不安全的网络连接,如互联网,来安全地进行远程操作。
它使用加密技术来保证数据传输的机密性和完整性。
SSH最初是为替代不安全的Telnet和FTP而设计的,它可以提供加密的远程登录、文件传输和执行远程命令等功能。
SSH的原理SSH的原理基于公钥加密。
下面是SSH通信的基本流程:1.客户端发起连接请求,服务器端响应并返回自己的公钥给客户端。
2.客户端使用服务器的公钥对一个随机生成的会话密钥进行加密,并发送给服务器。
3.服务器使用自己的私钥对接收到的会话密钥进行解密。
4.客户端和服务器使用会话密钥来加密和解密数据传输。
使用公钥加密可以保证数据传输的机密性,从而防止被中间人窃取敏感信息。
此外,SSH还使用消息认证码(MAC)来验证数据的完整性,以防止数据被篡改。
SSH的应用SSH在计算机领域有许多应用,主要包括以下几个方面:远程登录SSH最常见的应用是通过远程登录来访问远程服务器或主机。
与传统的Telnet 不同,SSH提供了加密和安全的登录方式,可以有效防止用户登录信息的泄漏和被黑客攻击。
远程文件传输SSH提供了安全的文件传输功能,可以通过SCP(Secure Copy)或SFTP(SSH File Transfer Protocol)来上传和下载文件。
这些传输过程都是加密的,确保了文件在传输过程中的安全性。
远程执行命令SSH允许用户在远程服务器上执行命令并获取执行结果。
这对于系统管理和故障排除非常有用,可以远程监控和控制服务器,无需直接访问物理设备。
SSH隧道SSH还可以用于创建安全的通信隧道,将其他协议的数据进行加密传输。
例如,可以使用SSH隧道来安全地传输HTTP、SMTP等网络协议的数据。
配置远程访问SSH还可以用于配置网络设备,如路由器和防火墙。
管理员可以通过SSH远程登录到设备,并进行配置和管理操作。
简单的说:struts 控制用的hibernate 操作数据库的spring 用解耦的详细的说:struts 在SSH 框架中起控制的作用, 其核心是Controller, 即ActionServlet, 而ActionServlet 的核心就是Struts-confi g.xml. 主要控制逻辑关系的处理.hibernate 是数据持久化层, 是一种新的对象、关系的映射工具, 提供了从Java 类到数据表的映射,也提供了数据查询和恢复等机制, 大大减少数据访问的复杂度。
把对数据库的直接操作, 转换为对持久对象的操作.spring 是一个轻量级的控制反转(IoC) 和面向切面(AOP) 的容器框架, 面向接口的编程, 由容器控制程序之间的(依赖)关系,而非传统实现中,由程序代码直接操控。
这也就是所谓“ 控制反转” 的概念所在:(依赖)控制权由应用代码中转到了外部容器,控制权的转移,是所谓反转。
依赖注入,即组件之间的依赖关系由容器在运行期决定,形象的来说,即由容器动态的将某种依赖关系注入到组件之中起到的主要作用是解耦Struts 、spring 、Hibernate 在各层的作用1 )struts 负责web 层.ActionFormBean 接收网页中表单提交的数据,然后通过Action 进行处理,再Forward 到对应的网页。
在struts-config.xml 中定义<action-mapping>, ActionServlet 会加载。
2 )spring 负责业务层管理,即Service (或Manager).1 .service 为action 提供统计的调用接口,封装持久层的DAO.2 .可以写一些自己的业务方法。
3 .统一的javabean 管理方法4 .声明式事务管理5. 集成Hiberante3 )Hiberante ,负责持久化层,完成数据库的crud 操作hibernate 为持久层,提供OR/Mapping 。
它有一组.hbm.xml 文件和POJO, 是跟数据库中的表相对应的。
然后定义DAO ,这些是跟数据库打交道的类,它们会使用PO 。
在struts+spring+hibernate 的系统中,对象的调用流程是:jsp-> Action -> Service ->DAO ->Hibernate 。
数据的流向是ActionFormBean 接受用户的数据,Action 将数据从ActionFromBean 中取出,封装成VO 或PO,再调用业务层的Bean 类,完成各种业务处理后再forward 。
而业务层Bean 收到这个PO 对象之后,会调用DAO 接口方法,进行持久化操作。
使用SSH框架的好处典型的J2EE三层结构,分为表现层、中间层(业务逻辑层)和数据服务层。
三层体系将业务规则、数据访问及合法性校验等工作放在中间层处理。
客户端不直接与数据库交互,而是通过组件与中间层建立连接,再由中间层与数据库交互。
表现层是传统的JSP技术,自1999年问世以来,经过多年的发展,其广泛的应用和稳定的表现,为其作为表现层技术打下了坚实的基础。
中间层采用的是流行的Spring+Hibernate,为了将控制层与业务逻辑层分离,又细分为以下几种。
Web层,就是MVC模式里面的“C”(controller),负责控制业务逻辑层与表现层的交互,调用业务逻辑层,并将业务数据返回给表现层作组织表现,该系统的MVC框架采用Struts。
Service层(就是业务逻辑层),负责实现业务逻辑。
业务逻辑层以DAO层为基础,通过对DAO组件的正面模式包装,完成系统所要求的业务逻辑。
DAO层,负责与持久化对象交互。
该层封装了数据的增、删、查、改的操作。
PO,持久化对象。
通过实体关系映射工具将关系型数据库的数据映射成对象,很方便地实现以面向对象方式操作数据库,该系统采用Hibernate作为ORM框架。
Spring的作用贯穿了整个中间层,将Web层、Service层、DAO层及PO无缝整合,其数据服务层用来存放数据。
一个良好的框架可以让开发人员减轻重新建立解决复杂问题方案的负担和精力;它可以被扩展以进行内部的定制化;并且有强大的用户社区来支持它。
框架通常能很好的解决一个问题。
然而,你的应用是分层的,可能每一个层都需要各自的框架。
仅仅解决UI问题并不意味着你能够很好的将业务逻辑和持久性逻辑和UI 组件很好的耦合。
不可否认,对于简单的应用,采用ASP或者PHP的开发效率比采用J2EE框架的开发效率要高。
甚至有人会觉得:这种分层的结构,比一般采用JSP + Servlet的系统开发效率还要低。
笔者从一下几个角度来阐述这个问题。
—开发效率:软件工程是个特殊的行业,不同于传统的工业,例如电器、建筑及汽车等行业。
这些行业的产品一旦开发出来,交付用户使用后将很少需要后续的维护。
但软件行业不同,软件产品的后期运行维护是个巨大的工程,单纯从前期开发时间上考虑其开发效率是不理智的,也是不公平的。
众所周知,对于传统的ASP和PHP等脚本站点技术,将整个站点的业务逻辑和表现逻辑都混杂在ASP或PHP页面里,从而导致页面的可读性相当差,可维护性非常低。
即使需要简单改变页面的按钮,也不得不打开页面文件,冒着破坏系统的风险。
但采用严格分层J2EE架构,则可完全避免这个问题。
对表现层的修改即使发生错误,也绝对不会将错误扩展到业务逻辑层,更不会影响持久层。
因此,采用J2EE分层架构,即使前期的开发效率稍微低一点,但也是值得的。
—需求的变更:以笔者多年的开发经验来看,很少有软件产品的需求从一开始就完全是固定的。
客户对软件需求,是随着软件开发过程的深入,不断明晰起来的。
因此,常常遇到软件开发到一定程度时,由于客户对软件需求发生了变化,使得软件的实现不得不随之改变。
当软件实现需要改变时,是否可以尽可能多地保留软件的部分,尽可能少地改变软件的实现,从而满足客户需求的变更?答案是——采用优秀的解耦架构。
这种架构就是J2EE的分层架构,在优秀的分层架构里,控制层依赖于业务逻辑层,但绝不与任何具体的业务逻辑组件耦合,只与接口耦合;同样,业务逻辑层依赖于DAO层,也不会与任何具体的DAO组件耦合,而是面向接口编程。
采用这种方式的软件实现,即使软件的部分发生改变,其他部分也尽可能不要改变。
注意:即使在传统的硬件行业,也有大量的接口规范。
例如PCI接口、显卡或者网卡,只要其遵守PCI的规范,就可以插入主板,与主板通信。
至于这块卡内部的实现,不是主板所关心的,这也正是面向接口编程的好处。
假如需要提高电脑的性能,需要更新显卡,只要更换另一块PCI接口的显卡,而不是将整台电脑抛弃。
如果一台电脑不是采用各种接口组合在一起,而是做成整块,那将意味着即使只需要更新网卡,也要放弃整台电脑。
同样,对于软件中的一个个组件,当一个组件需要重构时,尽量不会影响到其他组件。
实际上,这是最理想的情况,即使采用目前最优秀的架构,也会有或多或少的影响,这也是软件工程需要努力提高的地方。
技术的更新,系统重构:软件行业的技术更新很快,虽然软件行业的发展不快,但小范围的技术更新特别快。
一旦由于客观环境的变化,不得不更换技术时,如何保证系统的改变最小呢?答案还是选择优秀的架构。
在传统的Model 1的程序结构中,只要有一点小的需求发生改变,将意味着放弃整个页面。
或者改写。
虽然前期的开发速度快,除非可以保证以后永远不会改变应用的结构,否则不要采用Model 1的结构。
采用Hibernate作为持久层技术的最大的好处在于:可以完全以面向对象的方式进行系统分析、系统设计。
DAO模式需要为每个DAO组件编写DAO接口,同时至少提供一个实现类,根据不同需要,可能有多个实现类。
用Spring容器代替DAO工厂通常情况下,引入接口就不可避免需要引入工厂来负责DAO组件的生成。
Spring实现了两种基本模式:单态模式和工厂模式。
而使用Spring可以完全避免使用工厂模式,因为Spring就是个功能非常强大的工厂。
因此,完全可以让Spring充当DAO工厂。
由Spring充当DAO工厂时,无须程序员自己实现工厂模式,只需要将DAO组件配置在Spring 容器中,由ApplicationContext负责管理DAO组件的创建即可。
借助于Spring提供的依赖注入,其他组件甚至不用访问工厂,一样可以直接使用DAO实例。
优点:Struts跟Tomcat、Turbine等诸多Apache项目一样,是开源软件,这是它的一大优点。
使开发者能更深入的了解其内部实现机制。
除此之外,Struts的优点主要集中体现在两个方面:Taglib和页面导航。
Taglib是Struts的标记库,灵活动用,能大大提高开发效率。
另外,就目前国内的JSP开发者而言,除了使用JSP自带的常用标记外,很少开发自己的标记,或许Struts是一个很好的起点。
关于页面导航,我认为那将是今后的一个发展方向,事实上,这样做,使系统的脉络更加清晰。
通过一个配置文件,即可把握整个系统各部分之间的联系,这对于后期的维护有着莫大的好处。
尤其是当另一批开发者接手这个项目时,这种优势体现得更加明显。
缺点:Taglib是Struts的一大优势,但对于初学者而言,却需要一个持续学习的过程,甚至还会打乱你网页编写的习惯,但是,当你习惯了它时,你会觉得它真的很棒。
Struts 将MVC的Controller一分为三,在获得结构更加清晰的同时,也增加了系统的复杂度。
Struts从产生到现在还不到半年,但已逐步越来越多运用于商业软件。
虽然它现在还有不少缺点,但它是一种非常优秀的J2EE MVC实现方式,如果你的系统准备采用J2EE MVC架构,那么,不妨考虑一下Struts。