当前位置:编程学习 > JS >>

struts2、hibernate、spring的工作原理[简明易懂]

简单地说,这三者不过把一些常用的功能方法进行封装,使得这些方法规范化,避免像在jsp开发中重复而零散地编写类似代码。 再详细一点就是说,struts2负责处理客户的请求并转发到特定action方法去执行,这个过程用到的是struts2的转转器、过滤器、易做图等功能。struts2标签功能等同于jsp标签,struts2标签的优势在于利用struts2框架的运作机制,让数据在页面的展示更加便捷。hibernate干啥呢?它负责action方法里面的逻辑实现(CRUD操作),这些实现包括与数据库打交道——如何连接数据库,如何把数据表里面的数据映射为普通的java类等等。那么spring干嘛用的?先看下文,到最后你就明白了。
下面说明它们各自的功能角色:struts2侧重于控制器功能,当客户端发送一个地址请求,Struts(通过配置文件)根据请求代码做出反映,并进行页面调用或转发。比如:/login 请求很可能是一个登录请求,那么Struts2应该回复一个login.jsp页面给客户端进行登录,然而地址栏不会看到/login.jsp样式,具体地址被隐藏了,只看到请求地址样式。struts2的标签类似于jstl标签,它们在本质上是一致的,都是为视图层方便编码以及为更好地与控制器融合。不是一定要使用Struts2标签才能使用它的控制器功能。可以选择其他标签,如jsp或jstl标签等。标签只是皮毛。其实spring它也有一套自己的标签,哪能用那么多啊。熟悉使用一种标签即可。
 
hibernate框架主要是负责连接数据库,把每个数据表转化为一个类,表中的每行数据相当于类的一个对象,hibernate通过对象的方式进行读取操作。
 
说到spring,不得不说控制反转,有关控制反转,请搜索“java设计模式”。然而,控制反转不能说是spring的功能,而只是他的设计思想,也就是说spring是由“控制反转”和”切面编程”这些设计模式开发出来的。spring包有许多类和方法,有像hibernate那样操作底层数据库功能的方法,有可以操作复杂的业务操作,这要看调用它什么样的接口和方法。由于它特殊的设计模式,使得它可以灵活地与其它框架整合,主要是通过配置文件的方式来完成。spring和hibernate整合在实际上替代了hibernate,因为它对hibernate的方法进行了包装。
 
三者整合的话,由spring来统领全局。spring和strut2整合不过是为struts2的action类提供容器管理,也就是说,当要实例化一个action类的时候,根据spring配置,spring容器会负责生成该action的对象。什么时候要实例化action类呢?也就是说何时生成action类的对象(实例)?答案是当客户端请求的时候。客户请求的目的是调用action中的方法,以便获取数据或操作数据。action类里面定义的方法,一般都是实例方法,因此需要得到action实例去调用这些方法。对于每个action类,实例化方式有2类:单例方式,原型方式。单例方式是说spring对该action类只实例化一次,即new一次而已,得到该类的一个对象,以后每一个客户端请求都是调用该对象的方法去响应客户。另外的话,像tomcat这样的web容器,它为每一次请求新建一个线程,如何以单例模式实例化的action类中没有类变量,则没有临界资源问题,相反,action类中定义的类变量则可能变成临界资源。如果在spring配置中,对某action类以原型方式实例化,则每一次新请求,都会新实例化一次,并为该请求新建一个线程。也就是说在这个新的线程里面,用这个新的实例去响应客户的这次请求。同样,如果action实例方法存在操作action类变量的行为,则可能引发线程问题,即对临界资源的访问问题。
实际上,我们一般把那些响应用户请求的action方法定义为无参数的形式,但是这并不能妨碍方法内部与外界与的交流,这是有其它途径,那就是通过在action方法中访问action的实例变量来获取用户给它发生的信息,也可以通过调用其他action实例方法得到信息,当然也可以是调用类变量和类方法获得信息,但这需要处理线程问题,因为类变量和类方法被所有的线程执行。
补充:Web开发 , Jsp ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,