近期在学习企业开发领域非常流行的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. Null指针

    C++ Null 指针 C++ 指针 C++ 指针 在变量声明的时候,如果没有确切的地址可以赋值,为指针变量赋一个 NULL 值是一个良好的编程习惯.赋为 NULL 值的指针被称为空指针. NULL ...

  2. Qt Installer Framework的学习

    Qt Installer Framework是Qt默认包的发布框架.它很方便,使用静态编译Qt制作而成.并且使用了压缩率很高的7z对组件进行压缩.之所以有这些好处,我才觉得值得花一点儿精力研究一下这个 ...

  3. kinect for windows - DepthBasics-D2D详解之二

    通过上篇文章,我们了解了在视频图像从kinect开发包传输到应用程序之前的一系列初始化工作,那么这篇文章主要来叙述,如何将一帧图像数据获取到,并显示出来的. 更新窗口是在Run函数消息处理中,当Kin ...

  4. 解题报告 HDU1159 Common Subsequence

    Common Subsequence Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u ...

  5. ACM高精度加减乘除模板

    [转]#include <iostream> #include <string> using namespace std; inline int compare(string ...

  6. ckeditor3.4.2是否升级为4.2.1的问题

    ckeditor官网访问地址: http://ckeditor.com/demo 目前公司项目中用到富文本编辑器基本都是cheditor3.4.2, 在不修改其源码的情况下,不兼容于IE10,具体见& ...

  7. iOS系统自带的 UIAlertView 自动旋转的实现

    这里主要解析 UIAlertView 的几个关键功能的实现: 随着设备屏幕的旋转而旋转: Alert弹出框,使用UIWindow来实现,就是说,不用依赖于当前显示在最前面的UIView. 实现源码参考 ...

  8. 写一方法计算实现任意个整数之和.在主调函数中调用该函数,实现任意个数之和。(使用params参数)

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  9. IF的使用

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  10. BZOJ 3626: [LNOI2014]LCA( 树链剖分 + 离线 )

    说多了都是泪啊...调了这么久.. 离线可以搞 , 树链剖分就OK了... -------------------------------------------------------------- ...