Struts是进行流程控制。
它的工作流程:
1)客户端向Servlet容器发送请求
2)经过一系列的过滤器
3)到filterDispatcher,然后FilterDispatcher会询问ActionMapper是否调用某个Action
4)如果ActionMapper同意调用某个Action,那么就把请求交给ActionProxy管理
5)ActionProxy会通过配置文件Struts.xml找到相应的Action
6)ActionProxy会创建ActionInvocation实例
7)ActionInvocation会调用相对应的Action
8)执行了execute方法之后,根据Struts.xml返回相应的JSP页面或者Action
Hibernate是ORM框架,让Pojo类和数据库进行映射,实现对象的持久化。
工作原理:
1)通过Configuration().configure()来读取并解析hibernate.cfg.xml文件
2)hibernate.cfg.xml读取*.hbm.xml文件
3)config.buildSessionFactory() 创建Session工厂
4)打开session SessionFactory.OpenSession()
5)创建事务 session.beginTransaction()
6)持久化
7)事务提交
8)session关闭
9)SessionFactory关闭
有两个配置文件
hibernate.cfg.xml(配置数据库相关)
tablename.hbm.xml(映射关系)
在hibernate中,有几个重要的问题
1)二级缓存的问题
缓存的好处:
hibernate是ORM框架,要对物理数据源进行访问,当应用程序对数据源访问的频率过多,那么就会造成整个系统的运行效率降低。缓存就是把数据库中的数据复制到到缓存池中,然后访问的时候,直接访问缓存,这样就会提高程序的运行效率。
session就是一级缓存。当查询数据的时候,session先从自身内部进项查询,如果查到,就取出数据,如果没有再从数据库中查找,并且把查找到的数据存到缓存池中,以便下次再次进行查询。但是session缓存是线程不安全的,是事务级别的缓存,多个线程都进行查询的时候,数据不安全,所以没有太大的使用价值。
因此有了hibernate的二级缓存。它是独立于hibernate的。如OSCache,首先需要在hibernate.cfg.xml中配置第三方的缓存,然后要配置缓存的配置文件,然后还要确定哪些实体对象需要在二级缓存中。
hibernate如何使用缓存:
当查询一个数据的时候,先从session中查找,找不到的话如果配置了二级缓存,那么从二级缓存中查找,如果还差找不到,从数据库中进行查找。
2)session的get和load方法
load可以延迟加载,get不可以
Spring中主要是两种思想:IOC(控制反转)和AOP(面向切面)
IOC:比如一个类想调用另一个类,通常需要新建一个对象吧,但是在IOC中,新建类和依赖关系都交给Spring容器来管理。降低了各个模块之间的耦合度。
通常有两种:
1)setter
2)构造器注入
AOP:一种编程思想。比如日志:
一个例子:一个项目已经做完了,但是突然想给每个业务都加上日志,那么需要对每个业务的代码都进行修改,这样明显比较麻烦,而且还是重复写代码。有了AOP之后,写一个方法,某个业务要操作数据库的时候,就会调用这个方法,就会形成相应的日志,这样就不用写那么多重复的代码。