本文共 2588 字,大约阅读时间需要 8 分钟。
今天我们来学习java中比较流行的框架SSH。
所谓框架,其实就像我们盖房子一样,需要先搭建支架,然后再进行添砖加瓦,使之达到完美。而在软件开发中,框架也是一样的:就是将通用的代码进行封装,使我们可以重复利用,达到了高效开发的效果。当然既然已经搭建好的框架,用到我们的系统中,我们就需要学习它,怎么使我们自己独有的代码和框架进行完美的结合。因为大家都在用这些优秀的框架,所以框架的学习,其实就是框架规范的学习。有了规范,有个约束,有了统一,才能更加有利于合作的开发。 那么SSH又是什么呢?
关注数据流程的MVC框架 (Struts1/2, WebWork, Spring MVC……)
关注数据关系的容器框架 (Spring, GUICE……)
关注数据操作的持久层框架(Hibernate,IBatis……)
当然,每个公司用到的框架可能都不太一样,但是他们的原理是相通的,我们只要学习会一套框架,然后能够举一反三,构建出自己的知识网,然后就会很快的适应新的知识了。
首先,今天我们来一起学习一下Structs2。之后会继续介绍Hibernate和spring的学习。
Struts2框架是一个轻量级的MVC流程框架,轻量级是指程序的代码不是很多,运行时占用的资源不是很多,MVC流程框架就是说它是支持分层开发,控制数据的流程,从哪里来,到那里去,怎么来,怎么去的这样一个框架
一个请求在Struts2框架中的处理大概分为以下几个步骤
客户端初始化一个指向Servlet容器(例如Tomcat)的请求
这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin)
接着FilterDispatcher被调用, 它是控制器的核心,就是mvc中c控制层的核心,通过询问ActionMapper来决定这个请是否需要调用某个Action 。
如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy
ActionProxy通过ConfigurationManager询问框架的配置文件,找到需要调用的Action类 ,这里,我们一般是从struts.xml配置中读取。同时ActionProxy创建一个ActionInvocation的实例。ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。
一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper。
commons-fileupload-1.2.1.jarcommons-logging-1.0.4.jarfreemarker-2.3.15.jarognl-2.7.3.jarstruts2-core-2.1.8.jarxwork-core-2.1.6.jar
index.jsp Struts2.1 Hello World struts2 org.apache.struts2.dispatcher.FilterDispatcher struts2 /*
/success.jsp /error.jsp
实体类是一个普通的POJO类
创建dao.impl包
action类继承ActionSupport 默认重写execute()或者自定义实现方法
struts2相对于struts1来说简单了很多,并且功能强大了很多,我们可以从几个方面来看:
struts2大量使用拦截器来出来请求,从而允许与业务逻辑控制器 与 servlet-api分离,避免了侵入性;而struts1.x在action中明显的侵入了servlet-api.
struts2.x是线程安全的,每一个对象产生一个实例,避免了线程安全问题;而struts1.x在action中属于单线程。
struts2.x测试可以脱离web容器,而struts1.x依赖servlet-api,测试需要依赖web容器。
struts2.x使用ModelDriven模式,这样我们 直接 封装model对象,无需要继承任何struts2的基类,避免了侵入性。
标签库几乎可以完全替代JSTL的标签库,并且 struts2.x支持强大的ognl表达式。
一个比较优秀的框架可以帮着我们更高效,稳定的开发合格的产品,不过我们也不要依赖框架,我们只要知道了原理,理解了思想,我们就可以在这个基础上创造出属于我们自己的框架!让我们站在巨人身上,去发现,去创新。