近期在学习企业开发领域非常流行的SSH框架(Struts、Hibernate、Spring)。因为之前有做过原生的Servlet+JSP的项目,所以在学习过程中我会跟原生开发模式进行对照,在这里我把自己的一些理解做下小结。

1、Servlet+JSP原生开发

先简要说一下Java Web原生开发模式,Java Web开发一般是使用Tomcat之类的容器,Tomcat容器实现了一套也能够称为框架的东西,就是Servlet。Tomcat执行于Apache之类的Webserver上。Apacheserver负责处理用户请求的HTTP协议本身的部分。

当用户请求的HTTP协议部分被Apacheserver处理之后,内容部分就要由Tomcat来处理了。Tomcat归纳了Web请求的共同特性,封装了一个叫Servlet的东西,开发人员基于Servlet,就仅仅须要编写处理Web请求的详细逻辑部分了,至于HTTP请求字段的解析,响应字段的封装都交给Servlet了。

另外对于Web页面的拼接生成。是使用JSP脚本,Tomcat容器内置有解析器。能够把JSP文件解析成Servlet来执行。

JSP除了包括HTML/CSS/JS内容以外,有一些JSP的标签语法,用于Servlet向JSP传递一些对象。这样就能够把Servlet处理的结果动态的在JSP页面中显示出来,从而实现动态页面的效果。

2、Struts框架

我们来看下原生开发的的一些不足,这样才干较好的理解为什么会有Struts框架。事实上从功能实现角度来说,一般的Web开发用Servlet基本是可以满足的,可是当项目规模比較大的时候,就会显得比較凌乱,由于会定义大量的Servlet。各个Servlet的处理流程会有一些同样的部分,每一个Servlet都须要去反复实现。针对这个问题,SSH框架中的Struts基于软件分层的思想,把Web处理流程中各个部分独立开来,而且把Servlet同样的处理逻辑放到框架来实现,从而把开发者从反复中释放出来。聚焦于详细业务功能实现。Struts採用称为MVC的设计模式,把Web应用分为数据库訪问(M)、业务逻辑(C)、JSP页面(C)三个部分。

可以通过XML配置文件的方式,把不同的Action訪问引导到相应的Action类进行处理,而且依据Action类处理的结果,在XML中配置不同的结果调用不同的JSP页面资源。

Struts还把Web开发中一些经常使用通用的工作整合进了框架内:

1)国际化资源文件,假设用原生开发模式。JSP中的字符串多语言须要自己实现,在各个JSP文件里引入各自语言的JSP字符串定义文件,假设使用Struts就能够由框架来实现。并通过XML配置。

2)JSP标签。针对原生JSP的不足。Struts定义了一些标签,增强了JSP的表达能力。

3)输入类型转换,这个工作假设是原生开发通常也是由开发者自己实现的。使用Struts就能够由框架来帮助完毕请求參数到内建对象成员之间相互转换。

4)输入校验。这个工作假设是原生开发通常也是由开发者自己实现的。使用Struts就能够通过XML定义的方式,由框架来帮助实现。

5)拦截器。因为假设使用Struts,那么Struts就接管了处理Web请求的整个过程,用户没法自由的在处理过程中插入一些必要的逻辑代码。

所以框架提供了拦截器这种机制。可以让开发人员在Web请求处理过程中插入一些须要的处理逻辑。通过在XML定义拦截器的方式来提供。

从上面分析能够看出。相比于原生开发,从功能角度Struts并没有增强多少。Struts基本的工作就是帮助我们把Web应用进行比較好的分层,同一时候把一些反复的工作集成到框架来完毕。这就是框架的作用。

3、Hibernate框架

不论採用原生开发模式还是Struts框架,我们都须要自己实现Web应用的详细逻辑部分,这当中包含对数据库的訪问。对于Web应用来说,数据库訪问所占的比重是比較多的,特别是近年来流行的比方ArgularJS之类的前端框架,都有把原本在后端实现的业务逻辑放到前端来实现。假设这样,后端的工作就主要仅仅剩下数据库訪问和安全相关功能了。假设我们採用原生开发模式,我们须要自己实现对数据库的CRUD訪问,通常要编写SQL语句直接訪问数据库。然后解析SQL訪问的结果,并封装到Java对象中提供给上层使用。假设后期切换不同数据库。我们就须要又一次编写SQL处理代码并适配。

Hibernate框架帮我们封装了对数据库的訪问,为我们提供了第二种选择。

它通过XML配置的方式。完毕数据库连接。把数据库表映射到Java对象。而且可以把表之间的关联关系也通过XML配置映射到Java对象中。这样开发者訪问数据库时就仅仅须要面对Java对象进行操作,而不用自己去实现原生开发的那些工作了,这样就能从详细的数据库操作中解放出来。后期假设切换数据库通常仅仅用改动XML配置就行了。这样的方式的不足就是添加的了XML的配置。

4、Spring框架

Spring框架实现主要包括两个核心机制,一个是IOC(依赖注入)。还有一个是AOP(切面注入)。我如今分别来分析。

IOC解决的是对象之间的依赖问题,Java是面向对象语言,Web应用会定义大量的对象。对象之间也有相互关联。在通常的开发模式下。我们须要编程来创建各种Java对象,而且把它们互相关联起来,这样做的缺点是对象之间的耦合比較多,兴许维护变更时会须要改动代码。IOC提供了第二种做法。就是对象和对象之间关系通过XML方式定义,然后Spring框架通过Java反射机制帮我们创建这些对象,并依照定义把对象相互关联起来,之后就能够提供给业务逻辑使用了。有人会想,自己创建对象和框架创建对象哪种好,这可能各人有各人的看法,对于大型project来说,Spring关联对象创建和关联可能更清晰,但由此带来的代价就是XML配置的膨胀。所以实际中通常对于大的组件级的对象能够採用IOC注入,对于细小的对象还是自己创建管理。这样能够取得两者之间的平衡。

AOP是一个重要思想在Spring框架中的详细实现,就是面向切面编程。这个思想简单的说,就是对已有程序的某个接口插入一些另外处理逻辑,这是如何做到的呢?这依赖于IOC机制,因为使用IOC,对象由框架创建,当AOP在XML中定义了切入点和切面函数后,再定义这些切入点指向的IOC对象,之后框架在创建这些IOC对象时,就会通过Java的动态代理机制,对这些IOC对象生成对应的动态代理,并在定义的切入点把切面函数集成进去。当用户程序调用这些代理对象切入点的函数时。也会自己主动调用切面函数,这样就实现了把切面函数的注入。通过这样的机制就行把独立切面函数任意注入须要切入的IOC对象中去,在实际中的一个典型应用就是为对象添加事务机制,可以把事务处理独立的注入须要事务的对象里,这样事务处理就不用与须要事务的对象紧密耦合。除了事务,在Web系统中一些具有横切性质的服务通常也会使用AOP来实现,比方安全检查、缓存、对象池管理等。

5、总结

从上面的分析能够看出来,Servlet帮我们封装了Web请求和响应的通用处理逻辑,而SSH又在Servlet的基础上又帮我们封装了一些Web应用系统的通用处理逻辑。软件就是这样一层一层的叠加而成,遇到通用的地方就进行抽象封装。当然封装的代价是添加了很多XML配置,这也是很多人诟病SSH配置繁复的原因。在实际项目如何取舍我想每一个人心中都有一杆秤。

(完)

关于SSH框架设计的一些理解的更多相关文章

  1. 说说你对用SSH框架进行开发的理解

    SSH框架指的是Struts,Spring,Hibernate.其中,Struts主要用于流程控制:Spring的控制反转能祈祷解耦合的作用:Hibernate主要用于数据持久化.

  2. SSH框架搭建和整合(struts2、spring4、hibernate5)

    声明: 本博文是个人通过对ssh框架的学习.理解还有一些看法而描述出来的,可能有不足之处,请大家谅解,但希望能帮助到大家! 目的: 使初学者能更好的去了解SSH框架. 给以后的自己,也给别人一个参考. ...

  3. 【SSH 1】SSH框架的基本理解

    导读:在结束了BS之后,接触到的第一个项目算是网上商城了.这次用到了和之前都不一样的框架:SSH.这个项目就和之前学牛腩一样,有着里程碑的意义.当然了,这也就意味着,什么都是新鲜的,接触到的东西,有时 ...

  4. 基于SSH框架的考勤管理系统的设计与实现

    基于SSH框架的考勤管理系统的设计与实现

  5. Java SSH框架系列:用户登录模块的设计与实现思路

    1.简介用户登录模块,指的是根据用户输入的用户名和密码,对用户的身份进行验证等.如果用户没有登录,用户就无法访问其他的一些jsp页面,甚至是action都不能访问.二.简单设计及实现本程序是基于Jav ...

  6. 基于ssh框架开发的购物系统的质量属性

    根据前面的博客,我们已经大致了解了ssh架构开发整体概念:Struts是一个实现了MVC模式的经典的框架:Hibernate是轻量级Java EE应用的持久层解决方案,以面向对象的方式提供了持久化类到 ...

  7. SSH框架总结(框架分析+环境搭建+实例源码下载) 《转》

    这篇文章比较易懂,易理解: 首先,SSH不是一个框架,而是多个框架(struts+spring+hibernate)的集成,是目前较流行的一种Web应用程序开源集成框架,用于构建灵活.易于扩展的多层W ...

  8. SSH框架总结(框架分析+环境搭建+实例源码下载)

    来源于: http://blog.csdn.net/shan9liang/article/details/8803989 首先,SSH不是一个框架,而是多个框架(struts+spring+hiber ...

  9. [Java] SSH框架笔记_框架分析+环境搭建+实例源码下载

    首先,SSH不是一个框架,而是多个框架(struts+spring+hibernate)的集成,是目前较流行的一种Web应用程序开源集成框架,用于构建灵活.易于扩展的多层Web应用程序. 集成SSH框 ...

随机推荐

  1. NGUI 按钮音效问题

    昨天给NGUI的按钮添加音效时,刚开始是自己新建空对象绑定声音的,后来发现NGUI按钮携带button sound组件,直接将音效拖入即可,不用写一行代码,非常简单.但是后来发现添加相同的音效有的按钮 ...

  2. [置顶] 程序员必知(二):位图(bitmap)

    位图是什么? 位图就是数组,一般来说是bit型的数组,具有快速定位某个值的功能,这种思想有很广泛的应用,比如下边两题: 1 找出一个不在5TB个整数中存在的数 假设整数是32位的,总共有4GB个数,我 ...

  3. Windows Phone 8初学者开发—第3部分:编写第一个Windows Phone 8应用程序

    原文 Windows Phone 8初学者开发—第3部分:编写第一个Windows Phone 8应用程序 原文地址: http://channel9.msdn.com/Series/Windows- ...

  4. Apache BeanUtils 1.9.2 官方入门文档

    为什么需要Apache BeanUtils? Apache BeanUtils 是 Apache开源软件组织下面的一个项目,被广泛使用于Spring.Struts.Hibernate等框架,有数千个j ...

  5. Python模拟登陆

    模拟人人登陆 #encoding=utf-8 import urllib2 import urllib import cookielib def renrenBrower(url,user,passw ...

  6. SQL Server 自学笔记

    --★★★SQL语句本身区分大小写吗 --SQLServer 不区分大小写 --Oracle 默认是区分大小写的 --datetime的输入格式,2008-01-07输入进去后显示为1905-06-2 ...

  7. 4.5 HOOK分发函数

    4.5 HOOK分发函数 本节开始深入的探讨键盘的过滤与反过滤.有趣的是,无论是过滤还是反过 滤,其原理都是进行过滤.取胜的关键在于:谁将第一个得到信息. 黑客可能会通过修改一个已经存在的驱动对象(比 ...

  8. Easyui中tree组件实现搜索定位功能及展开节点定位

    这几天遇到个input + tree  实现搜索功能的需求,在这里贴出来供大家参考下,如果你有更好的实现效果希望不腻赐教! 首先给大家看看效果     小二 上图  : 需要的部件知识: easyui ...

  9. 鸟哥私房菜--第1章 Linux 是什么

    [只做搬运工,在搬运的时候窃看其中乐趣.] 历史渊源 Linus Torvalds(请记住这个名字)当年(1991)在写Linux的时候,初衷是针对386型机器的,当时只是一套裸露的操作系统并不包含任 ...

  10. Linux下安装jekyll

    折腾了大半天,终于搞定了,这可得记下来了. 我的Linux版本:CentOS 6.5 主要的安装顺序还是官网上的说明:http://jekyllrb.com/docs/installation/,所以 ...