关于SSH框架发展
- 格式:doc
- 大小:43.00 KB
- 文档页数:5
Struts、Hibernate和Spring是我们Java开发中的常用关键,也被称为Java三大框架。
他们分别针对不同的应用场景给出最合适的解决方案。
但你是否知道,这些知名框架最初是怎样产生的?传统的Java Web应用程序是采用JSP+Servlet+Javabean来实现的,这种模式实现了最基本的MVC分层,使的程序结构分为几层,有负责前台展示的JSP、负责流程逻辑控制的Servlet以及负责数据封装的Javabean。
但是这种结构仍然存在问题:如JSP页面中需要使用符号嵌入很多的Java代码,造成页面结构混乱,Servlet和Javabean负责了大量的跳转和运算工作,耦合紧密,程序复用度低等等。
Struts框架为了解决这些问题,出现了Struts框架,它是一个完美的MVC实现,它有一个中央控制类(一个Servlet),针对不同的业务,我们需要一个Action类负责页面跳转和后台逻辑运算,一个或几个JSP页面负责数据的输入和输出显示,还有一个Form类负责传递Action 和JSP中间的数据。
JSP中可以使用Struts框架提供的一组标签,就像使用HTML标签一样简单,但是可以完成非常复杂的逻辑。
从此JSP页面中不需要出现一行包围的Java代码了。
可是所有的运算逻辑都放在Struts的Action里将使得Action类复用度低和逻辑混乱,所以通常人们会把整个Web应用程序分为三层,Struts负责显示层,它调用业务层完成运算逻辑,业务层再调用持久层完成数据库的读写。
使用JDBC连接来读写数据库,我们最常见的就是打开数据库连接、使用复杂的SQL语句进行读写、关闭连接,获得的数据又需要转换或封装后往外传,这是一个非常烦琐的过程。
Hibernate框架这时出现了Hibernate框架,它需要你创建一系列的持久化类,每个类的属性都可以简单的看做和一张数据库表的属性一一对应,当然也可以实现关系数据库的各种表件关联的对应。
SSH框架简介SSH 即是Struts + Spring + Hibernate 3个开源框架。
一、Struts是一个MVC框架,通过配置文件很好的实现了模型与视图的分离,Struts应用包括3个组件:控制器组件(ActionServ let和自定义Action);模型组件(普通接口和Jav aBean);视图组件(ActionForm和Struts标签);Struts 的MVC设计模式可以使我们的逻辑变得很清晰。
Struts的工作流程:在web应用启动时就会加载初始化ActionServ let,ActionServ let从struts-conf ig.xml文件中读取配置信息,把它们存放到各种配置对象当ActionServ let接收到一个客户请求时,将执行如下流程.-(1)检索和用户请求匹配的ActionMapping实例,如果不存在,就返回请求路径无效信息;-(2)如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到ActionForm对象中;-(3)根据配置信息决定是否需要表单验证.如果需要验证,就调用ActionForm的v alidate()方法;-(4)如果ActionForm的v alidate()方法返回null或返回一个不包含ActionMessage的ActuibErrors对象, 就表示表单验证成功;-(5)ActionServ let根据ActionMapping所包含的映射信息决定将请求转发给哪个Action,如果相应的Action实例不存在,就先创建这个实例,然后调用Action的execute()方法;-(6)Action的execute()方法返回一个ActionForward对象,ActionServ let在把客户请求转发给ActionForward对象指向的JSP组件;-(7)ActionForward对象指向JSP组件生成动态网页,返回给客户;二、Spring是一个轻量级框架,提供依赖注入容器,AOP实现,DAO/ORM支持,Web集成等功能。
1、概念SSH的英文全称为Secure Shell,是IETF(Internet Engineering Task Force)的Network Working Group所制定的一族协议,其目的是要在非安全网络上提供安全的远程登录和其他安全网络服务。
如需要SSH的详细信息请参考(SSH Communications Security Corporation的网站)和(开放源码的OpenSSH组织的网站)。
2、基本框架SSH协议框架中最主要的部分是三个协议:传输层协议、用户认证协议和连接协议。
同时SSH 协议框架中还为许多高层的网络安全应用协议提供扩展的支持。
它们之间的层次关系可以用如下图1来表示:图1 SSH协议的层次结构示意图在SSH的协议框架中,传输层协议(The Transport Layer Protocol)提供服务器认证,数据机密性,信息完整性等的支持;用户认证协议(The User Authentication Protocol)则为服务器提供客户端的身份鉴别;连接协议(The Connection Protocol)将加密的信息隧道复用成若干个逻辑通道,提供给更高层的应用协议使用;各种高层应用协议可以相对地独立于SSH基本体系之外,并依靠这个基本框架,通过连接协议使用SSH的安全机制。
3、主机密钥机制对于SSH这样以提供安全通讯为目标的协议,其中必不可少的就是一套完备的密钥机制。
由于SSH协议是面向互联网网络中主机之间的互访与信息交换,所以主机密钥成为基本的密钥机制。
也就是说,SSH协议要求每一个使用本协议的主机都必须至少有一个自己的主机密钥对,服务方通过对客户方主机密钥的认证之后,才能允许其连接请求。
一个主机可以使用多个密钥,针对不同的密钥算法而拥有不同的密钥,但是至少有一种是必备的,即通过DSS算法产生的密钥。
关于DSS算法,请参考[FIPS-186]。
SSH协议关于主机密钥认证的管理方案有两种,如下图2所示:图2 SSH主机密钥管理认证方案示意图每一个主机都必须有自己的主机密钥,密钥可以有多对,每一对主机密钥对包括公开密钥和私有密钥。
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 的缩写,由 IETF 的网络工作小组(Network Working Group)所制定;SSH 为建立在应用层和传输层基础上的安全协议。
SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。
利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。
S S H最初是U N I X系统上的一个程序,后来又迅速扩展到其他操作平台。
S S H在正确使用时可弥补网络中的漏洞。
S S H客户端适用于多种平台。
几乎所有U N I X平台—包括H P - U X、L i n u x、A I X、S o l a r i s、Digital UNIX、I r i x,以及其他平台—都可运行SSH。
传统的网络服务程序,如:ftp、pop和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。
而且,这些服务程序的安全验证方式也是有其弱点的,就是很容易受到“中间人”(man-in-the-middle)这种方式的攻击。
所谓“中间人”的攻击方式,就是“中间人”冒充真正的服务器接收你的传给服务器的数据,然后再冒充你把数据传给真正的服务器。
服务器和你之间的数据传送被“中间人”一转手做了手脚之后,就会出现很严重的问题。
通过使用SSH,你可以把所有传输的数据进行加密,这样"中间人"这种攻击方式就不可能实现了,而且也能够防止DNS欺骗和IP欺骗。
使用SSH,还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。
SSH有很多功能,它既可以代替Telnet,又可以为FTP、PoP、甚至为PPP提供一个安全的"通道"。
Java2企业版为中间件领域思想的统一上发挥了很大的作用。
比如,J2EE为分布式事务管理、目录服务和消息服务提供了一套标准的编程接口。
J2EE的基础——Java2标准版(J2SE) ,成功地为Java提供了一套访问关系数据库的标准。
但是,就像本文中“J2EE缺乏对编程的支持”提到的一样,J2EE这个平台没有能够提供一个令人满意的应用程序编程模型(application programming model)。
Sun 公司和一些大的应用服务器供应商都想用开发工具来降低J2EE开发的复杂性,但是这些工具没有其他的JAVA 开发工具优秀,后者有先进的重构工具,和.NET平台相比,J2EE 的工具支持显得很逊色。
很多J2EE开发工具自动产生的代码像这些工具本身同样复杂。
在开源社区很多小型J2EE开发者选择了另外一种开发方式——一些可以降低J2EE开发难度的开发框架,较为流行的比如: Struts, Hibernate, 和 Spring Framework,他们当今很多J2EE项目种扮演着重要角色。
为什么要采用框架?框架是一由一些类组成,正式这些类为应用程序提供了一个可重用的设计――或者我们经常提到的——应用程序种的一层。
应用程序代码访问类库从而执行任务,而框架是调用应用程序代码,从而管理程序的流程。
这就是经常说道的好莱坞原则:“不要试图联系我们,我们到时候自会通知你。
”开发者写的程序在运行时由框架调用。
设计一个在各种未知背景下都可以使用的框架是很有挑战性的。
框架很适合在复杂的J2EE开发中使用,它可以为开发者提供一个简单易用的模型。
采用一个经过良好设计的开源框架有很多好处:·在好的框架下,开发者只需要写一些必须的代码;他们不需要直接接触底层的API。
这一点很重要。
·经过良好设计的框架可以为程序提供清晰的结构并且提高程序的内聚性。
好清晰的结构使得其他人可以更容易加入项目。
·一个容易使用的框架可以通过一些例子和文档为用户提供最佳实践。
·采用成功的框架的代码比自己的代码容易测试·框架只有提供了一些值得使用的功能才会变得流行。
J2EE工程只有真正需要框架的时候才会用它,而自己的框架并不是这样,后者是处于统治地位的。
J2EE本身也提供了一些框架。
比如, Enterprise Java-Beans (EJB) container 或者 Servlet engine,二者都运用了“采用了好莱坞原则”这个思想,并采用运行时调用来管理对象。
像Struts这些开源web应用框架正式建立在这两个框架的基础上的,本文讨论的重点也是像Struts这样建立在J2EE上的框架,他们为开发者提供了更为简单的模型,和其他的一些好处。
开源框架的出现很多大型的J2EE项目都用自己的内部框架来隐藏平台的复杂性,直到最近人们才逐渐发现一些在很多项目中都存在的共有的难题,这些难题都可以由一个较为统一的解决方案来解决。
而有的框架正好可以充当这些问题的解决方案。
现在有种很明显的趋势:与从前的内部框架相比,这些框架将成为这些难题的更加“标准化”的解决方案。
J2EE平台的日益成熟是这些框架流行的一个原因。
开发者知道有些地方是J2EE的标准API无能为力的,倚他们的经验来看,要弥补这个缺陷是很困难的。
于此同时,一些优秀的开源框架可供使用,它们提供了极为丰富的技术文档,在它们背后还有一个专业的团队做支持,并且一切都是免费的。
Struts,在web应用程序产生时就有的开源框架。
在1999-2000年,开发者们意识到JSP“Model1”的缺陷,JSP中充斥着请求处理代码和静态数据模板,这意味着你不得不把业务逻辑和复杂的HTML以及其他的标签混到一起。
那个时候还没有标准的框架和J2EE的标准支持,要解决这个问题开发者就得自己实现前端控制器,这样可以把业务逻辑分离到java类中,从而可以减轻对JSP的维护难度。
前端控制器模式经常运用在MVC架构中,MVC模式在OO语言的GUI开发中经常使用(这个名字总是让人误解,WEB MVC中的视图是从模型中“拉”数据;而在经典MVC中,模型把事件“推向”视图)。
最初的前端控制器实现质量参差不齐。
2001~2002年间,Apache开源组织发布的Struts改变了这个状况,虽然它并非一个完美的框架,但已经足够使其成为该领域事实上的标准。
Struts向人们展示了开源框架的一些优点,比如,新手可以很容易地熟悉它的结构。
2002年末,它成立很多J2EE项目很自然的选择,每一个认真的J2EE开发者都会对它很熟悉。
Struts几乎用才每一个J2EE项目中,这使得它成为J2EE架构的一个重要组成部分。
甚至很多保守的组织也将其作为软件底层的一部分,并同意接受Apache的开源协议条款。
Hibernate。
下一个倒下的多骨诺米牌就是持久化。
J2EE提供了两个持久化的手段:JDBC,它是J2SE中访问关系数据库系统的标准API;另一个是实体Beans ,它是EJB中专门模型化持久化实体的组件。
JDBC以一种错误的编程模型来强制开发者用Java代码来处理关系思想。
而实体beans,先不说Sun和其他主要的J2EE供应商的吹嘘,给人很笨重的感觉:起初这门技术的应用范围很窄,连持久对象间的关系都不能处理。
它使得应用程序难于测试,并且使用了一个很糟糕的查询语言。
直到2003年,即使EJB2.0和2.0做了很多改进,开发者们却很少用它。
早期的尝试持久化问题的解决方案是由关系-对象映射(ORM)来解决的,它可以透明地持久化普通java对象(POJO)。
该思想在注释中有解释。
虽然这种方案并不是专属java的。
但相对与其他的社区而言比如.NET,ORM在java社区更加流行(.NET开发者总是对之抱有怀疑的态度)。
早在1990年,一些商业的ORM工具就出现了,比如TopLink。
但由于其价格昂贵、结构复杂并且与Sun的实体bean标准相左,所以很少人会用。
不管怎样,在持久化POJO 方面,这些工具与JDBC和实体Bean相比确实有了很大的进步Java Data Object于2001年在Java Community Progress()的规范中出现。
它为一般的POJO提供了大多数的持久化实现(尽管很多实现都是对关系数据库的)。
但Sun公司以及其他的J2EE技术提供商对该技术表现的很冷淡。
所以JDO也没有能够流行。
Hibernate的出现。
ORM领域在2002年发生了大变化,原因有两个。
首先,实体Beans在实践中失败,开发者们将其从J2EE中忽视掉了。
它向开发者们说明了一个规范是如何将开发拉入泥潭的。
另外的一个原因是Hibernate的发布,它是第一个功能健全的解决关系对象影射解决方案。
虽然在功能上,它没有TopLink多样。
但在那些最常用的功能上,Hibernate 实现的更加健壮,并且有一个非常专业的团队提供全职的开发。
Hibernate并不是全新的,它的ORM思想在这个领域很普遍,但它提供的编程模型比其他任何竞争者都容易使用、都来的直接,它为ORM的使用提供了更加易用、廉价的途径。
于此同时,新一代的商业产品针对关系数据库提供了极其高效的JDO规范的实现。
这样开发者的选择就更丰富了;还有,TopLink也朝着开发者友好的方向前进,它的liscense越来越开放了。
ORM大获全胜所的这些因素是的ORM比以往更加规范。
虽然很多项目仍然使用自己的持久层框架,但Hibernate,TopLink以及一些高端的JDO实现,使得使用自己持久层框架的难度相对变大、可维护性降低,自然,也没有什么理由去使用自己的框架了。
虽然这些框架的功能覆盖范围已经很大了,但仍有很多地方不在其中。
比如,一个基于struts,hibernate的项目,业务逻辑很难搞定。
尽管对于这种问题,J2EE规范提出了解决方案(EJB),但仍旧没有一个合适的编程模型。
SpringJ2EE框架被大规模地运用到项目中,而项目总要负责这些框架以及自己业务代码的连接,使之真正融合到一起。
Spring就是专注于这个问题的,它和Hibernate融合的很好。
本质上讲,Spring是IOC(Inversion of Control)和面向切面编程(AOP)的组合体。
它是一个非侵入式的框架,增强了POJO的功能。
从服务上讲(With a service abstraction),它将程序代码从J2EE环境解耦到普通的java对象(自然,这些代码可以脱离J2EE而在多种环境中运行)。
它还在很多功能上提供了除EJB之外的选择――比如为所有的POJO提供声明式事务。
Spring被广泛运用到很多项目中,从小的web程序到大的企业应用程序。
在这个领域还有其他的产品,比如HiveMind和NamoContainer。
前者和Spring的思想大致相同,只不过在IOC上有较大差异;后者将很多服务融合在PicoContainer的IOC容器中。