一、J2EE简介
J2EE(Java 2 Enterprise Edition)是建立在Java 2平台上的企业级应用的解决方案。J2EE技术的基础便是Java 2平台,不但有J2SE平台的所有功能,同时还提供了对EJB,Servlet,JSP,XML等技术的全面支持,其最终目标是成为一个支持企业级应用开发的体系结构,简化企业解决方案的开发,部署和管理等复杂问题。事实上,J2EE已经成为企业级开发的工业标准和首选平台。J2EE并非一个产品,而是一系列的标准。
二、MVC设计模式
MVC英文即(Model-View-Controller),即把一个应用的输入、处理、输出流程按照Model、View、Controller的方式进行分离,这样一个应用被分成三个层模型层、视图层、控制层。 视图(View)代表用户交互界面,对于Web应用来说,可以概括为HTML界面,但有可能为XHTML、XML和Applet。模型(Model)就是业务流程/状态的处理以及业务规则的制定。控制(Controller)可以理解为从用户接收请求, 将模型与视图匹配在一起,共同完成用户的请求。
三、Struts J2EE典型的MVC框架
(一)Struts框架的分析
Client browser(客户浏览器)表示来自客户浏览器的每个HTTP请求创建一个事件。Web容器将用一个HTTP响应做出响应。Controller(控制器)接收来自浏览器的请求,并决定将这个请求发往何处。就Struts而言,控制器是以servlet实现的一个命令设计模式。struts-config.xml文件配置控制器。业务逻辑更新模型的状态,并帮助控制应用程序的流程。就Struts而言,这是通过作为实际业务逻辑“瘦”包装的Action类完成的。Model(模型)表示应用程序的状态。业务对象更新应用程序的状态。ActionForm bean在会话级或请求级表示模型的状态,而不是在持久级。JSP文件使用JSP标记读取来自ActionForm bean的信息。View(视图)就是一个 JSP 文件。其中没有流程逻辑,没有业务逻辑,也没有模型信息,只有标记。标记是使 Struts 有别于其他框架(如 Velocity)的因素之一。Struts框架为Model部分提供了Action和ActionForm对象,所有的Action处理器对象都是Action类派生的子类。Struts中的Controller功能是由ActionServlet和ActionMapping对象构成。
(二)Struts框架的优、缺点
Struts 主要有以下几个优点:(1)JSP 标记机制的使用,标记特性从 JSP 文件获得可重用代码和抽象 Java 代码。这个特性能很好地集成到基于 JSP 的开发工具中,这些工具允许用标记编写代码。(2)标记库。(3)管理问题空间,分治是解决问题并使问题可管理的极好方法。当然,这是一把双刃剑。问题越来越复杂,并且需要越来越多的管理。
Struts的缺点:(1)有限的适用范围,Struts 是一种基于 Web 的 MVC 解决方案,所以必须用 HTML、JSP 文件和 servlet 来实现它。(2)复杂性,在将问题分为几个部分的同时也引入了复杂性。毫无疑问,要理解 Struts 必须接受一定的培训。随着变化的不断加入,这有时会令人很沮丧。
四、SpringJ2EE的一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架
(一)Spring框架的简单介绍
Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。从大小与开销两方面而言Spring都是轻量的。Spring通过一种称作控制反转(IoC)的技术促进了松耦合。同时,Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务进行内聚性的开发。
(二)Spring框架的分析
Spring框架是一个分层架构,由七个定义良好的模块组成。Spring模块构建在核心容器之上,核心容器定义了创建、配置和管理bean的方式,组成Spring框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。每个模块的功能如下:
核心容器:核心容器提供Spring框架的基本功能。核心容器的主要组件是BeanFactory,它是工厂模式的实现。BeanFactory使用控制反转(IOC)模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。
(三)Spring框架的优、缺点
Spring框架有以下几个优点,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类,代码的污染极低。Spring框架独立于各种应用服务器,基于Spring框架的应用,可以真正实现良好的移植性能。Spring的DI机制降低了业务对象替换的复杂性。Spring的高度开放性,并不强制应用完全依赖于Spring,开发者可自由选用Spring框架的部分和全部。
Spring作为一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架已经非常优秀,如果非要谈论其不足,Spring框架的开放性可能会给它带来一些不好的因素,Spring奉行的原则就是:不要重新发明轮子,如果有好的实现,就集成进来,而不是自己重新去做。
五、基于MVC模式的Struts与Spring框架的整合
Struts框架有成熟的标签库,Web层主要由Struts框架实现;
而Spring框架同Struts框架能够完美的结合,并且在事务管理和依赖注入方面有着独到之处,因此主要用于业务逻辑层。这样实现Struts与Spring的集成,主要使得Spring提供的IoC与AOP能为Struts使用。我们的整合方法是利用Struts架构作为系统的整体基础架构,它负责了MVC的分离,而在Struts架构的业务层用Spring来支持。将Spring引入Struts框架中的关键是:Spring是轻量级容器,在业务层中使用可以尽可能的减少消耗。同时它可以在Struts中得到应用上下文。在Struts中Action是整个流程的核心部分,所以只要我们能够在Struts的Action中得到相应的Spring应用上下文,就可以通过它来得到Spring框架丰富IoC和AOP管理功能。
将Spring集成到Struts中后,我们会得到一个新的Web应用框架,其各个部分组成如图1所示.
Struts框架的优势在于简单易用,提供了丰富的Taglib,使得对视图层的实现节省了大量的开发时间,并且具有良好的页面导航功能,开发者可以通过struts-config.xml把握整个系统各部分之间的联系,这对于后期维护有着极大的帮助,尤其是当开发者换人接手该项目时,这种优势体现得更加明显.而Spring的目标是提供一种贯穿始终的解决方案,将各种专用框架整合成一个连贯的整体构架。在这种意义上说Spring框架就像一个粘合剂,将各个领域出色的解决方案粘合到一起,构成一个新的架构,更好地为应用服务。
通过整合,我们可以在Struts中使用Spring的应用上下文,使Struts得到了Spring IoC和AOP所带来的优势。并且对熟悉Struts的开发人员来说,其视图层与控制层的开发并没有
因Spring的加入而产生很大的变动。当我们将Spring集成到Struts中后,就可以使用Spring中的IoC及AOP对系统的业务层进行有效的管理,从而使业务层的实现得到改善。
六、结束语
Struts和Spring采用低耦合的方式整合在一起。应用起来更灵活。两种框架是单独运行的,对于表示层来说,有的地方可能不必用到中间层的对象。Struts和Spring的整合方法很多,但最终目的都是希望所产生的新的架构可以很好利用上两种框架的优点,并且
第二篇:Struts,Spring,Hibernate面试题总结
Hibernate工作原理及为什么要用?
原理:
1. 读取并解析配置文件
2. 读取并解析映射信息,创建SessionFactory
3. 打开Sesssion
4. 创建事务Transation
5. 持久化操作
6. 提交事务
7. 关闭Session
8. 关闭SesstionFactory
为什么要用:
1. 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。
2. Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作
3. hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。
4. hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。
2. Hibernate是如何延迟加载?
1. Hibernate2延迟加载实现:a)实体对象 b)集合(Collection)
2. Hibernate3 提供了属性的延迟加载功能
当Hibernate在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,他节省了服务器的内存开销,从而提高了服务器的性能。
3. Hibernate中怎样实现类之间的关系?(如:一对多、多对多的关系)
类与类之间的关系主要体现在表与表之间的关系进行操作,它们都是对对象进行操作,我们程序中把所有的表与类都映射在一起,它们通过配置文件中的many-to-one、one-to-many、many-to-many、
4. 说下Hibernate的缓存机制
1. 内部缓存存在Hibernate中又叫一级缓存,属于应用事物级缓存
2. 二级缓存:
a) 应用及缓存
b) 分布式缓存
条件:数据不会被第三方修改、数据大小在可接受范围、数据更新频率低、同一数据被系统频繁使用、非 关键数据
c) 第三方缓存的实现
5. Hibernate的查询方式
Sql、Criteria,object comptosition
Hql:
1、 属性查询
2、 参数查询、命名参数查询
3、 关联查询
4、 分页查询
5、 统计函数
6. 如何优化Hibernate?
1. 使用双向一对多关联,不使用单向一对多
2. 灵活使用单向一对多关联
3. 不用一对一,用多对一取代
4. 配置对象缓存,不使用集合缓存
5. 一对多集合使用Bag,多对多集合使用Set
6. 继承类使用显式多态
7. 表字段要少,表关联不要怕多,有二级缓存撑腰
7. Struts工作机制?为什么要使用Struts?
工作机制:
Struts的工作流程:
在web应用启动时就会加载初始化ActionServlet,ActionServlet从
struts-config.xml文件中读取配置信息,把它们存放到各种配置对象
当ActionServlet接收到一个客户请求时,将执行如下流程.
-(1)检索和用户请求匹配的ActionMapping实例,如果不存在,就返回请求路径无效信息;
-(2)如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到ActionForm 对象中;
-(3)根据配置信息决定是否需要表单验证.如果需要验证,就调用ActionForm的validate()方法;
-(4)如果ActionForm的validate()方法返回null或返回一个不包含ActionMessage的ActuibErrors对象, 就表示表单验证成功;
-(5)ActionServlet根据ActionMapping所包含的映射信息决定将请求转发给哪个Action,如果相应的 Action实例不存在,就先创建这个实例,然后调用Action的execute()方法;
-(6)Action的execute()方法返回一个ActionForward对象,ActionServlet在把客户请求转发给 ActionForward对象指向的JSP组件; -(7)ActionForward对象指向JSP组件生成动态网页,返回给客户;
为什么要用:
JSP、Servlet、JavaBean技术的出现给我们构建强大的企业应用系统提供了可能。但用这些技术构建的系统非常的繁乱,所以在此之上,我们需要一个规则、一个把这些技术组织起来的规则,这就是框架,Struts便应运而生。
基于Struts开发的应用由3类组件构成:控制器组件、模型组件、视图组件
8. Struts的validate框架是如何验证的?
在struts配置文件中配置具体的错误提示,再在FormBean中的validate()方法具体调用。
9. 说下Struts的设计模式
MVC模式: web应用程序启动时就会加载并初始化ActionServler。用户提交表单时,一个配置好的ActionForm对象被创建,并被填入表单相应的数据,ActionServler根据
Struts-config.xml文件配置好的设置决定是否需要表单验证,如果需要就调用ActionForm的Validate()验证后选择将请求发送到哪个Action,如果Action不存在,ActionServlet会先创建这个对象,然后调用Action的execute()方法。Execute()从ActionForm对象中获取数据,完成业务逻辑,返回一个ActionForward对象,ActionServlet再把客户请求转发给ActionForward对象指定的jsp组件,ActionForward对象指定的jsp生成动态的网页,返回给客户。
单例模式
Factory(工厂模式):
定义一个基类===》实现基类方法(子类通过不同的方法)===》定义一个工厂类(生成子类实例)
===》开发人员调用基类方法
Proxy(代理模式)
10. spring工作机制及为什么要用?
1.spring mvc将所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责对请求进行真正的处理工作。
2.DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller.
3.DispatcherServlet请请求提交到目标Controller
4.Controller进行业务逻辑处理后,会返回一个ModelAndView
5.Dispathcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图对象
6.视图对象负责渲染返回给客户端。
为什么用:
{AOP 让开发人员可以创建非行为性的关注点,称为横切关注点,并将它们插入到应用程序代码中。使用 AOP 后,公共服务 (比 如日志、持久性、事务等)就可以分解成方面并应用到域对象上,同时不会增加域对象的对象模型的复杂性。
IOC 允许创建一个可以构造对象的应用环境,然后向这些对象传递它们的协作对象。正如单词 倒置 所表明的,IOC 就像反 过来的 JNDI。没有使用一堆抽象工厂、服务定位器、单元素(singleton)和直接构造(straight construction),每一个对象都是用 其协作对象构造的。因此是由容器管理协作对象(collaborator)。 Spring既是一个AOP框架,也是一IOC容器。 Spring 最好的地方是它有助于您替换对象。有了 Spring,只要用 JavaBean 属性和配置文件加入依赖性(协作对象)。然后可以很容易地在需要时替换具有类似接口的协作对象。}