`
shibin_1109
  • 浏览: 76191 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java面试三大框架

    博客分类:
  • java
阅读更多
----------------------------------------------------------------MVC部分-------------------------------------------------------
1. MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻     辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。

Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。
  通常模型对象负责在数据库中存取数据。
View(视图)是应用程序中处理数据显示的部分。
  通常视图是依据模型数据创建的。
Controller(控制器)是应用程序中处理用户交互的部分。
  通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。

2. MVC的优点
可以为一个模型在运行时同时建立和使用多个视图。变化-传播机制可以确保所有相关的视图及时得到模型数据变化,从而使所有关联的视图和控制器做到行为同步。
视图与控制器的可接插性,允许更换视图和控制器对象,而且可以根据需求动态的打开或关闭、甚至在运行期间进行对象替换。
模型的可移植性。因为模型是独立于视图的,所以可以把一个模型独立地移植到新的平台工作。需要做的只是在新平台上对视图和控制器进行新的修改。
潜在的框架结构。可以基于此模型建立应用程序框架,不仅仅是用在设计界面的设计中。
3. MVC的不足之处
增加了系统结构和实现的复杂性。对于简单的界面,严格遵循MVC,使模型、视图与控制器分离,会增加结构的复杂性,并可能产生过多的更新操作,降低运行效率。
视图与控制器间的过于紧密的连接。视图与控制器是相互分离,但确实联系紧密的部件,视图没有控制器的存在,其应用是很有限的,反之亦然,这样就妨碍了他们的独立重用。
视图对模型数据的低效率访问。依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问,也将损害操作性能。
目前,一般高级的界面工具或构造器不支持此模式。改造这些工具以适应MVC需要和建立分离的部件的代价是很高的,从而造成MVC使用的困难。
----------------------------------------------------------------Struts2部分-----------------------------------------------------
1. Struts 2是基于mvc的web框架,是在 WebWork的技术基础上开发的全新MVC框架。

2. 工作流程
  1> 客户端浏览器发出HTTP请求.
  2> 根据web.xml配置,该请求被FilterDispatcher接收
  3> 根据struts.xml配置,找到需要调用的Action类和方法, 并通过IoC方式,将值注入给Aciton
  4> Action调用业务逻辑组件处理业务逻辑,这一步包含表单验证。
  5> Action执行完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转到相应页面
  6> 返回HTTP响应到客户端浏览器

3. 工作原理
  1>  客户端初始化一个指向Servlet容器的请求
  2>  这个请求经过一系列的过滤器(Filter)
  3>  接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action
  4>  如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy
  5 > ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类
  6>  ActionProxy创建一个ActionInvocation的实例。
  7>  ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。
  8>  一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。

4. 为什么使用struts2?
  1> 开源的mvc框架
  2> 纯pojo的Action
  3> 更好的标签特性
  4> 易测试
  5> 易扩展

5. 比较struts1和struts2的不同
在Action的实现方面:Struts1要求必须统一扩展自Action类,而Struts2中可以是一个普通的POJO。
线程模型方面:Struts1的Action工作在单例模式,一个Action的实例处理所有的请求。Struts2的Action是一个请求对应一个实例。没有线程安全方面的问题。
Servlet依赖方面:Struts1的Action依赖于Servlet API,比如Action的execute方法的参数就包括request和response对象。这使程序难于测试。Struts2中的Action不再依赖于Servlet API,有利于测试,并且实现TDD。
封装请求参数:Struts1中强制使用ActionForm对象封装请求的参数。Struts2可以选择使用POJO类来封装请求的参数,或者直接使用Action的属性。
表达式语言方面:Struts1中整合了EL,但是EL对集合和索引的支持不强,Struts2整合了OGNL(Object Graph Notation Language)。
绑定值到视图技术:Struts1使用标准的JSP,Struts使用“ValueStack”技术。
类型转换:Struts1中的ActionForm基本使用String类型的属性。Struts2中使用OGNL进行转换,可以更方便的使用。
数据校验:Struts1中支持覆盖validate方法或者使用Validator框架。Struts2支持重写validate方法或者使用XWork的验证框架。
Action执行控制的对比:Struts1支持每一个模块对应一个请求处理,但是模块中的所有Action必须共享相同的声明周期。Struts2支持通过拦截器堆栈为每一个Action创建不同的声明周期。


----------------------------------------------------------------Hibernate部分-------------------------------------------------
1. Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。

2. 工作原理
1>  通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件
2>  由hibernate.cfg.xml中的<mapping resource="com/xx/User.hbm.xml"/>读取并解析映射信息
3>  通过config.buildSessionFactory();//创建SessionFactory
4>  sessionFactory.openSession();//打开Sesssion
5>  session.beginTransaction();//创建事务Transation
6>  persistent operate持久化操作
7>  session.getTransaction().commit();//提交事务
8>  关闭Session
9>  关闭SesstionFactory

3. 为什么使用Hibernate?

Hibernate对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码

Hibernate是一个基于jdbc的主流持久化框架,是用优秀的orm实现,它很大程度的简化了dao层编码工作

4. Hibernate 能干什么?

实现OR之间的Mapping。
减少jdbc+sql的开发时间,提高开发效率。
能够屏蔽不同的数据库的实现,能够实现平滑的在不同数据库之间进行移植。

------------------------------------------------------Spring部分--------------------------------------------
1. Spring是一个轻量级控制反转(IOC)和面向切面(AOP)的容器框架。

2. 控制反转——Spring通过一种称作控制反转(IOC)的技术促进了松耦合。当应用了IOC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。
 
3. 面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务和事务进行内聚性的开发。

4.为什么使用Spring?
1> 方便解耦,简化开发
2> 方便程序的测试
3> 方便集成各种优秀框架
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics