java的常用框架总结(一)

今天这篇文章主要是总结java中常用的框架的总结:

(一)Struts2框架

Strust2的工作原理:

工作原理大多数是复杂的,可以通过图片以及步骤来了解底层的工作,但是个人还是觉得要理解工作原理,还是代码操作一遍好。

java的常用框架总结(一)_第1张图片

 

1.客户端初始化一个指向Servlet容器(例如Tomcat)的请求
2.这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin);
3.接着StrutsPrepareAndExecuteFilter被调用,StrutsPrepareAndExecuteFilter询问ActionMapper来决定这个请求是否需要调用某个Action;
4.如果ActionMapper决定需要调用某个Action,StrutsPrepareAndExecuteFilter把请求的处理交给ActionProxy;
5.ActionProxy通过ConfigurationManager询问框架的配置文件,找到需要调用的Action类;
6.ActionProxy创建一个ActionInvocation的实例。
7.ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。
8.一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。

返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。
在表示的过程中可以使用Struts2框架中继承的标签。在这个过程中需要涉及到ActionMapper。

Struts2的优点:

①基于MVC架构,框架架构结构清晰

②使用OGNL:OGNL可以快速的访问值栈中的数据、调用值栈中对象的方法。

③拦截器:Struts2中的很多特性都是通过拦截器实现的,例如:异常处理,文件上传,验证等。

④多种表现层技术,如:JSP、FreeMarker、Velocity。

Stuts2拦截器和过滤器的区别:

 

Stuts2过滤器 Stuts2拦截器
过滤器依赖于Servlet容器 拦截器依赖于Servlet容器
过滤器可以对几乎所有的请求起作用 Stuts2拦截器只能对Action请求起作用
Stuts2过滤器不能访问Action下问 Stuts2拦截器可以访问Action上下文(ActionContext)
在Aciton中生命周期中,过滤器只能在容器初始化的时候调用一次 在Aciton中生命周期中,拦截器可以多次调用

 

谈谈ValueStack:

①ValueStack贯穿整个Action的生命周期,保存在request域中,所以ValueStack和request的生命周期时一样的

② ValueStack是多实例的,因为Action是多实例的(Servlet是单例的),每个Action都有一个对应的值栈,Action对象默认保存在栈顶

③拦截器:Struts2中的很多特性都是通过拦截器实现的,例如:异常处理,文件上传,验证等。

ValueStack本质上就是一个ArrayList

④.使用OGNL访问值栈内容是,不需要#号,而访问作用域中的值时,需要#号

⑤. Struts2重写了request的getAttribute方法,所以可以用EL直接访问值栈中的内容

 

(二)Hibernate框架

Hibernate的工作原理相对于Struts2要简单点,Hibernate是一个全自动化的持久化化框架,可以帮我们程序员干很多事情,还是很嗨皮的。

Hibernate的工作原理:

1.通过Configuration读取并解析hibernate.cfg xml配置文件

2.由hibernate.cfg.xml中的读取并解析映射文件

3.通过config.buildSessionFactory创建sessionFactory

4.通过sessionFactory.openSession获取session

5.通过session.beginTransaction开启事务

6.操作数据

7.提交事务

8.关闭session和sessionFactory

Hibernate的优缺点:

优点:

①.对JDBC访问数据库的代码进行了封装,简化了数据库访问层繁琐的重复性代码

②.映射的灵活性,它支持各种关系数据库,从一对一到多对多的各种复杂关系③.非侵入性、移植性会好

④.缓存机制:提供一级缓存和二级缓存


缺点:

①.无法对SQL进行优化

②.框架中使用ORM原则,导致配置过于复杂

③.执行效率和原生的JDBC相比偏差:特别是在批量数据处理的时候

④.不支持批量修改、删除

在Hibernate应用中Java对象的状态有哪些:

①临时状态(新建状态):不处于session缓存中
②持久化状态:加入到session缓冲中
③游离状态:已经被持久化,但不在session的缓存中

Hibernate如何延迟加载:

当调用:session:的load()方法加载实体类时,就会延迟加载
Hibernate进行大批暈更新的经验
直接通过JDBC API执行相关的SQL语句或者调用相关的存储过程是最佳的方式

 

Hibernate中getCurrentSession()和openSession()的区别:

①getCurrentSession()会先查看当前线程是否绑定了session,如果有则直接返回,如果没有在创建。而openSession()则直接会new一个新的session并返回。
②getCurrentSession()在事务提交中会自动关闭session,而openSession()需要手动关闭。

 

Hibernate的查询方式有哪些?

①QBC标准查询;

②HQL查询(Hibernate  quary  language  hibernate查询语言);

③本地SQL查询(原生态查询);

Hibernate中Load()和get()区别:

①. 从返回结果上对比:get方法检索不到结果的话,返回结果为null;但是load()方法检索不到结果的话,则会出现ObjectNotFoundException异常。

②. 从检索机制上对比:load支持延迟加载(懒加载),get不支持延迟加载。

 

 

 

今天先介绍这两种框架,后期再补充别的。希望有用噢

 

 

 

 

 

你可能感兴趣的:(java)