struts:在这个架构中,struts的角色完全的被前台化了,就是说这是一个更广泛意义上的mvc架构,只是在不同的层间采用了不同的架构和技术,struts本身的配置和使用并没有什么好学习的地方,在我的第一篇文章中已经阐述的很清楚了,懂得那些就基本OK了!但是他的功能强大之处在于标签的使用,因为真正jsp的应用最好的方式是不要在页面上出现任何的java代码,如何做到,那就是struts的标签和EL表达式。
dao模式:其实就是一系列的接口,工厂的引入是为了适应不同的数据库,因为仅仅使用dao而没有使用工厂模式,那么我们在struts中要使用dao的实现是就需要这样的定义:假如我的是userDao
userDao ud = new userDaoImpl();
(顺便说一下,大家看出这个是什么了吗!? 这叫做类的多态,面向对象最不好理解的一个特性。)
也就是说我必须知道实现是什么我才能做事情,这个实现是依赖于数据库的,一旦我们更改了数据库,那么好所有的子类全都要改,我们要该的不是别的!而是成千上万个页面上的方法,这显然不符合我们面向对象的思想。
那么如何来解决这个问题 就是使用工厂
工厂来找dao,比如:
public static userDao getuserDaoinstance()
{
return new userDaoImpl();
}
在struts中调用的时候就好说了!就是
DAOFactory.getuserDaoinstance().***();
大家可以很明显的看到,前台的struts已经没有了具体的实现类,因为他根本就没有必要知道我后台数据库是什么,我要找谁去实现我下面的操作,交给工厂就可以了!工厂去给你生产。
hibernate,这几个中最没有技术含量但是最繁琐的就是hibernate,他异常的强大,可能后期的操作我们对hibernate就是一个配置,而操作要放到dao的implent中,呈现放到struts中。这样。
他的整体的一个走向应该是这样的:
client》提交表到到 struts》请求 daofactory》 我需要实现什么方法 dao》按照我声明的接口去实现》daoimpl》我需要知道我操作那个数据库 hibernate
如何操作hibernate 是通过一个session对象来操作,hibernate的session有别于httpcontext的session,为什么要hibernate来持久化,我个人理解是这样的!他是仿照http协议来进行的,因为http协议是一种无状态的协议,那么我要想在一定的时间内保持一定的数据,就需要试用他提供的一个session来保持数据的“持久化”,同样为了在程序中对数据进行持久化的保持,hibernate模仿http协议,不过他就是懒省事,直接把本应该是什么名字的东西也叫成了session,并且由这个session来完全的操作hibernate。