四大框架(面试题)

来源:互联网 发布:博思数据研究中心 编辑:程序博客网 时间:2024/05/22 15:23

struts2简介:

一款优秀的mvc模式应用于web程序的框架。struts2是在struts1和webwork的技术基础上进行的合并。

struts2流程如下(核心):
1、浏览器发送一个请求。
2、核心控制器FilterDispatcher根据请求决定调用合适的Action
3、webwork的拦截器链自动对请求应用通用功能,如验证等。
4、回调Action的execute方法,该execute方法根据请求的参数来执行一定的操作。
5、Action的execute方法处理结果信息将被输出浏览器中,支持多种视图模式。
Struts2 与 Struts1:
1、在Action的实现方面:struts1要求必须统一扩展自Action类,而struts2中可以是一个普通的POJO
2、线程模型方面:struts1的Action工作在单列模式,一个action的实例处理所有的请求。struts2的action是一个请求对应一个实例。没有线程安全方面的问题。
3、servlet依赖方面:struts1的action依赖于servlet API,比如Action的excute方法的参数就包括request和response对象,这使程序难于测试。struts2中的Action不再依赖于Servlet API,有利于测试,并且实现TDD.
4、封装请求参数:Struts1中强制使用ActionForm对象封装请求的参数。Struts2可以选择使用POJO类封装请求参数,或者直接使用Action的属性。
5、表达式语言方面:Struts1中整合了EL,但EL对集合和索引的支持性不强,Struts2整合了OGNL。
6、绑定值到视图技术:Struts1使用标准的JSP,Struts2使用ValueStack技术。
7、类型转换:Struts1中的ActionForm基本使用String类型的属性。Struts2中使用OGNL进行转换,可以更方便地使用。
8、数据校验:Struts1中支持覆盖validate方法或者使用Validator框架。Struts2支持重写validate方法或者使用xwork的验证框架。
9、Action执行控制的对比:Struts1支持每一个模块对应一个请求处理,但是模块中的所有Action必须共享相同的生命周期。Struts2支持通过拦截器堆栈为每一个Action创建不同的生命周期。
Strus2 (功能):
Strus2 有数据校验(前台校验、后台校验。后台校验提供的数据校验可以重写validate方法实现)、国际化、类转换(自定义类转换器)、标签库(OGNL)、结合ajax技术使用表单验证。


Hibernate技术:

1、hibernate是jdbl的轻量级的对象封装,封装了通过jdbc访问数据库的操作。它是一个独立的对象持久层框架,可以用在任何jdbc可以使用的场合,既可以在Java的客户端程序使用,又可以在servlet/jsp的web应用中使用,最具革命意义的是,hibernate可以在应用ejb的架构中取代cmp,完成数据持久化的重任。
2、hibernate是一个和jdbc密切关联的框架,所以hibernate的兼容性和jdbc驱动,和数据库都有一定的关系,但是和使用它的Java程序,以及App Server没有任何关系,也不存在兼容问题。
3、由于是对jdbc的轻量级封装,内存消耗少,可获得较快的运行效率。
4、可发效率高,Eclipse\jbuilder等主流java集成开发环境对hibernate有很好的支持。在大项目,特别是持久层关系映射很复杂的情况下,hibernate效率高的很惊人。
5、分布式,安全检查,集群,负载均衡的支持。
6、具有可扩展性,API开发,当本身功能不够用的时候,可以自己编码进行扩展。
对象-关系映射(ORM)
ORM是对象-关系型数据映射(Object Relational Mapping)的简称。持久化通常是将对象保存到关系型数据库,或者把数据库中的数据读取出来,封装到对象中。可见,持久化工作主要在O(对象)和R(关系型数据)之间进行。
然而,在编写程序时,处理数据采用面向对象的方式,保存数据却以关系型数据库的方式,因此需要一种能在两者之间进行转换的机制。这种机制称为ORM,ORM保存了对象和关系型数据库表的映射信息。在hibernate中,映射保存在xml格式的配置文件中。


MyBatis 技术:

MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。


Hibernate与Ibatis(区别):
Hibernate 提供了java对象到数据库表之间的直接映射。开发者无需涉及数据库操作的实现细节,实现了一站式ORM解决方案。
而Ibatis则采取了另一种方式,即提供java对象到SQL(面向参数和结果集)的映射实现,实现的数据库操作需要通过手动编写SQL实现。
Ibatis是有一个O/R Mapping解决方案,和Hibernate相比,Ibatis最大的特点就是小巧,上手快。
如果你不需要太复杂的功能,Ibatis是满足你的要求又足够灵活的、最简单的解决方案。


spring框架(简介):

hibernate框架,极大地简化了持久化的代码,struts2框架是一个java web框架,提供了MVC设计模式支持。
而spring相当于粘合剂的角色,讲hibernate和stuts2等框架提供良好的支持。

spring框架(核心):
1)非侵入式。所谓非侵入式是指spring框架的api不会在业务逻辑上出现,也就是说业务逻辑应该是纯净的,不能出现于业务逻辑无关的代码。针对应用而言,这样才能将业务逻辑从当前应用中剥离出来,从而在其他应用中实现复用;针对框架而言,由于业务逻辑中没有spring的api,所以业务逻辑也可以从spring框架快速地移植到其他框架。
2)容器。spring提供容器功能,容器可以管理对象的生命周期,以及对象与对象之间的依赖关系。可以写一个配置文件(通常是xml文件),在上面定义对象的名字,是否是单利,以及设置与其他对象的依赖关系。那么在容器启动之后,这些对象就被实例化好了,你可以直接去用,而且依赖关系也已建立好。
3)IOC。控制反转,及依赖关系的转移,如果以前都是依赖于实现,那么现在反转为依赖于抽象,其核心思想就是面向接口编程。
4)依赖注入。对象与对象之间的依赖关系的实现,包括接口注入、构造注入、set方法注入。在spring中只支持后两种。
5)AOP,面向方面编程,讲日志、安全、事务管理等服务(或功能)理解成一个"方面",以前这些服务通常是直接写在业务逻辑的代码当中的,它有两个缺点:首先是业务逻辑不纯净,其次是这些服务被很多业务逻辑反复使用,不能做到复用。AOP解决了上述问题,可以把这些服务剥离出来形成一个“方面”,可以实现复用;然后将这些“方面”动态地插入业务逻辑中,让业务逻辑能够方面地使用“方面”提供的服务。
spring框架(其他特点):
其他还有一些特点但不是spring的核心,如:对jdbc的封装与简化,提供事务管理功能,对O/R mapping工具的整合;提供MVC解决方案,也可以与其他web框架(struts、jsf)进行整合;还有对JNDI、mail等服务进行封装。


1.Spring MVC概述:

Spring MVC是Spring提供的一个强大而灵活的web框架。借助于注解,Spring MVC提供了几乎是POJO的开发模式,使得控制器的开发和测试更加简单。这些控制器一般不直接处理请求,而是将其委托给Spring上下文中的其他bean,通过Spring的依赖注入功能,这些bean被注入到控制器中。
Spring MVC主要由DispatcherServlet、处理器映射、处理器(控制器)、视图解析器、视图组成。他的两个核心是两个核心:
处理器映射:选择使用哪个控制器来处理请求 
视图解析器:选择结果应该如何渲染
通过以上两点,Spring MVC保证了如何选择控制处理请求和如何选择视图展现输出之间的松耦合。


2、SpringMVC运行原理
(1) Http请求:客户端请求提交到DispatcherServlet。 
(2) 寻找处理器:由DispatcherServlet控制器查询一个或多个HandlerMapping,找到处理请求的Controller。 
(3) 调用处理器:DispatcherServlet将请求提交到Controller。 
(4)(5)调用业务处理和返回结果:Controller调用业务逻辑处理后,返回ModelAndView。 
(6)(7)处理视图映射并返回模型: DispatcherServlet查询一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图。 
(8) Http响应:视图负责将结果显示到客户端。


spring与springmvc的区别
Spring的两大核心AOP与IOC,可以单独用于任何应用,包括与Struts等MVC框架与Hibernate等ORM框架的集成。
Spring MVC就是一个MVC框架,个人觉得Spring MVC annotation式的开发比Struts2方便,可以直接代替上面的Struts(当然Struts的做为一个非常成熟的MVC,功能上感觉还是比Spring强一点,不过Spring MVC已经足够用了)。当然spring mvc的执行效率比struts高,是因为struts的值栈影响效率


原创粉丝点击