




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Strutsl的工作原理Strutsl工作原理图:1、初始化:struts 框架的总控制器 ActionServlet 是一个Servlet,它在web.xml中配置成自动启动的Servlet ,在启动时总控制器会读取配置文件 (struts-config.xml)的配置信息,为struts中不同的模块初始化相应的对象。(面向对象思想)2、发送请求:用户提交表单或通过 URL向 WEB艮务器提交请求,请求的数据用 HTTP协议传给web服务器。3、form填充:struts的总控制器ActionServlet在用户提交请求时将数据放 到对应的form对象中的成员变量中。4、派发请求:控制器根据
2、配置信息对象 Actio nConfig将请求派发到具体的Action,对应的formBean 一并传给这个 Action中的excute()方法。5、 处理业务:Action 般只包含一个excute()方法,它负责执行相应的业务 逻辑(调用其它的业务模块)完毕后返回一个ActionForward对象。服务器通过 ActionForward对象进行转发工作。6返回响应:Action将业务处理的不同结果返回一个目标响应对象给总控制7、查找响应:总控制器根据 Action处理业务返回的目标响应对象,找到对应 的资源对象,一般情况下为jsp页面。8、响应用户:目标响应对象将结果传递给资源对象,将结
3、果展现给用户ssh框架启动流程系统从职责上分为四层:表示层、业务逻辑层、数据持久层和域模块层。其中使用Struts作为系统的整体基础架构,负责MVC的分离,在Struts框架的模型部分,禾U用Hibernate框架对持久层提供支持,业务层用Spring支持。具体做法是:用面向对象的分析方法根据需求提出一些模型,将这些模型实现为基本的Java对象,然后编写基本的 DAO接口,并给出Hibernate的DAO实现,采用 Hibernate架构实现的DAO类来实现Java类与数据库 之间的转换和访问,最后由Spring完成业务逻辑。系统的基本业务流程是:在表示层中,首先通过JSP页面实现交互界面,负
4、责传送请求(Request)和接收响应(Response),然后 Struts 根据配置文件 (struts-config.xml)将 ActionServlet接收到的Request委派给相应的 Action处理。在业务层中,管理服务组件的 Spring IoC容器负责向Action提供业务模型(Model)组件和该组件的协作对象数据处理 (DAO)组件完成业务逻辑,并提供事务处理、缓冲池等容器组件以提升系统性能和保证数 据的完整性。而在持久层中,则依赖于Hibernate的对象化映射和数据库交互,处理DAO组件请求的数据,并返回处理结果。采用上述开发模型,不仅实现了视图、控制器与模型的彻底
5、分离,而且还实现了业务 逻辑层与持久层的分离。这样无论前端如何变化,模型层只需很少的改动,并且数据库的 变化也不会对前端有所影响,大大提高了系统的可复用性。而且由于不同层之间耦合度小, 有利于团队成员并行工作,大大提高了开发效率。Strutsl与struts2有什么不同1. Action 类Stuts1要求Action类继承一个抽象基类。Struts1的一个普通问题是使用抽 象类编程而不是接口。Struts2 Action类可以实现一个Action接口,也可以 实现其它接口,使可选和定制的服务成为可能。Struts2提供一个ActionSupport基类去实现常用的接口。Action接口不是必
6、须的,任何有 execute标识的POJO寸象都可以用作 Struts2的Action对象。2. 线程模式:Struts1 Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。单例策略限制了Struts1 Action能作的事,并且要在开发时特别小心。Action资源必须是线程安全的或同步的。 Struts 2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。3. Servlet 依赖:Struts1 Action 依赖于 Servlet API,因为当一个 Action 被调用时,HttpServletResquest 和 HttpSe
7、rvletResponse 被传递给 execute 方法,即Action依赖了容器,测试变得非常麻烦。Struts2 Action不依赖于 容器,允许Action脱离容器单独被测试。如果需要,Struts2 Action仍然可 以访问初始的request和response。但是,其它的元素减少或者消除了直接访 问 HttpServletRequset 和 HttpServletResponse 的必要性。4.捕获输入: Struts1使用ActionForm对象捕获输入。所有的 ActionForm必须继承一个基 类。因为其它JavaBean不能用作ActionForm,开发者经常创建多余的
8、类捕获 输入。动态Bean可以作为创建传统ActionForm的选择,但是,开发者可能是 在重新描述已经存在的JavaBean,仍然会导致有冗余的javabean。 Struts2直 接使用Action属性作为输入属性,消除了对第二输入对象的需求。Action属 性能够通过web页面上的taglibs 访问。Struts2 也支持ActionForm模式。(Struts2用普通的POJO来接收数据)5. 表达式语言:Strutsl整合了 JSTL,但对集合和索引属性的支持很弱。Struts2可以是使用JSTL,但是也支持一个更加强大和灵活的表达式语言“Object Graph Notation
9、 Language”(OGNL).6. 绑定值到页面(view): Struts1使用标准JSP机制把对象绑定到页面中来 访问,Struts1要传递值的时候必须往request里放、往session里放,然后 再传递到jsp里面,铜鼓el表达式得到。Struts2使用“ ValueStack ”技术, 使taglib能够访问值而不需要把你的页面和对象绑定起来。ValueStack策略 允许通过一系列名称相同但类型不同的属性重用页面。值栈技术非常著名。不 需要request、不需要session,直接从Action中取值。7. 类型转换:Struts1 ActionForm属性通常都是 Stri
10、ng 类型。Struts1使用 Commons-Beanutils进行类型转换。每个类一个转换器,对每一个实例来说是 不可配置的。Struts2使用OGN进行类型转换。提供基本和常用对象的转换器。8. 校验:Struts1支持在ActionForm的validate 方法中手动校验,或者通过 Common s/alidator的扩展来校验。同一个类可以有不同的校验内容,但不能 校验子对象。Struts2支持通过validate方法和Xwork校验框架来进行校验。 Xwork校验框架使用为属性类类型定义的校验和内容校验,来支持 chain校验 子属性。9. Action执行的控制:Strutsl
11、支持每一个模块有单独的RequestProcessors (生命周期),但是模块中的所有 Action必须共享相同的 生命周期。(服务器重启时,Action生命周期结束,即生命周期无法控制)。Struts2支持通过拦截器堆栈(InterceptorStacks )为每一个Action创建不同的生命周期。堆栈能够根据需要和不同的Action 起使用。(可以控制Action的生命周期简单的说:strutsl 和struts2 的核心原理不同:strutsl.X 是基于 servlet 的struts2 是xwork的变体:他的核心是filterstrutsl是单例模式开发,struts2是多例模式
12、。strutsl的单例模式好处是节省内存,缺点是并发性查,非同步。struts2好处是线程安全是同步的每次使用开辟新的内存空间,缺点是占用资源多。Modell的原理:Actk)nUserSysbimResponseStrutsl的工作原理:BrawzeiUserAwtionSystemServletControNerREjrT上 (View)它引入了控制器这个概念,控制器一般由servlet来担任,客户端的请求不 再直接送给一个处理业务逻辑的JSP页面,而是送给这个控制器,再由控制器 根据具体的请求调用不同的事务逻辑,并将处理结果返回到合适的页面。因此, 这个servlet控制器为应用程序提供
13、了一个进行前-后端处理的中枢。一方面为 输入数据的验证、身份认证、日志及实现国际化编程提供了一个合适的切入点; 另一方面也提供了将业务逻辑从JSP文件剥离的可能。业务逻辑从JSP页面分 离后,JSP文件蜕变成一个单纯完成显示任务的东西,这就是常说的View。而独立出来的事务逻辑变成人们常说的 Model,再加上控制器Control本身,就构 成了 MV(模式。实践证明,MV(模式为大型程序的开发及维护提供了巨大的便 利。其实,MV(开始并不是为Wet应用程序提出的模式,传统的MVC要求M将其状 态变化通报给V,但由于Web浏览器工作在典型的拉模式而非推模式,很难做 到这一点。因此有些人又将用于
14、 Wet应用的MVC称之为MVC2正如上面所提到 的MV(是一种模式,当然可以有各种不同的具体实现,包括您自己就可以实现 一个体现MVC思想的程序框架,Struts就是一种具体实现MVC2勺程序框架 它的大致结构如图三所示:图三 图三基本勾勒出了一个基于Struts的应用程序的结构,从左到右,分别是其表 示层(view )、控制层(controller)、和模型层(Model)。其表示层使用 Struts标签库构建。来自客户的所有需要通过框架的请求统一由叫ActionServlet的 servlet 接收(ActionServletStruts 已经为我们写好了,只要您应用没有什么特别的要求,
15、它基本上都能满足您的要求),根据接收的 请求参数和Struts 配置(struts-config.xml) 中ActionMapping,将请求送给 合适的Action去处理,解决由谁做的问题,它们共同构成Struts的控制器。Action则是Struts应用中真正干活的组件,开发人员一般都要在这里耗费大 量的时间,它解决的是做什么的问题,它通过调用需要的业务组件(模型)来 完成应用的业务,业务组件解决的是如何做的问题,并将执行的结果返回一个 代表所需的描绘响应的JSP (或Action )的ActionForward对象给Actio nServlet以将响应呈现给客户。过程如图四所示:图四这
16、里要特别说明一下的是:就是 Action这个类,上面已经说到了它是 Struts 中真正干活的地方,也是值得我们高度关注的地方。可是,关于它到底是属于 控制层还是属于模型层,存在两种不同的意见,一种认为它属于模型层,如:JSPWeb编程指南;另一些则认为它属于控制层如:Programmi ngJakarta Struts、Mastering Jakarta Struts和Struts Kick Start 等认为它是控制器的一部分,还有其他一些书如Struts in Action也建议 要避免将业务逻辑放在Action类中,也就是说,图3中Action后的括号中的 内容应该从中移出,但实际中确
17、有一些系统将比较简单的且不打算重用的业务 逻辑放在Action中,所以在图中还是这样表示。显然,将业务对象从Action分离出来后有利于它的重用,同时也增强了应用程序的健壮性和设计的灵活性。 因此,它实际上可以看作是 Controller与Model的适配器,如果硬要把它归于 那一部分,笔者更倾向于后一种看法,即它是Con troller的一部分,换句话说,它不应该包含过多的业务逻辑,而应该只是简单地收集业务方法所需要的数据 并传递给业务对象。实际上,它的主要职责是:校验前提条件或者声明*调用需要的业务逻辑方法*检测或处理其他错误*路由控制到相关视图上面这样简单的描述,初学者可能会感到有些难以
18、接受,下面举个比较具体的 例子来进一步帮助我们理解。如:假设,我们做的是个电子商务程序,现在程 序要完成的操作任务是提交定单并返回定单号给客户,这就是关于做什么的问 题,应该由Action类完成,但具体怎么获得数据库连接,插入定单数据到数据 库表中,又怎么从数据库表中取得这个定单号(一般是自增数据列的数据),这一系列复杂的问题,这都是解决怎么做的问题,则应该由一个(假设名为 orderBo)业务对象即Model来完成。orderBo可能用一个返回整型值的名为 submitOrder的方法来做这件事,Action则是先校验定单数据是否正确,以免 常说的垃圾进垃圾出;如果正确则简单地调用order
19、Bo的submitOrder方法来得到定单号;它还要处理在调用过程中可能出现任何错误;最后根据不同的情 况返回不同的结果给客户。、为什么要使用Struts框架既然本文的开始就说了,自己可以建这种框架,为什么要使用Struts呢?我想下面列举的这些理由是显而易见的:首先,它是建立在MV(这种公认的好的模式上的,Struts在M V和C上都有涉及,但它主要是提供一个好的控制器和 一套定制的标签库上,也就是说它的着力点在C和V上,因此,它天生就有MVC所带来的一系列优点,女口:结构层次分明,高可重用性,增加了程序的健 壮性和可伸缩性,便于开发与设计分工,提供集中统一的权限控制、校验、国 际化、日志等
20、等;其次,它是个开源项目得到了包括它的发明者CraigR.McCla naha n在内的一些程序大师和高手持续而细心的呵护,并且经受了实战 的检验,使其功能越来越强大,体系也日臻完善;最后,是它对其他技术和框 架显示出很好的融合性。如,现在,它已经与tiles融为一体,可以展望,它很快就会与JSF等融会在一起。当然,和其他任何技术一样,它也不是十全十 美的,如:它对类和一些属性、参数的命名显得有些随意,给使用带来一些不 便;还有如Action类execute方法的只能接收一个 ActionForm参数等。但瑕 不掩瑜,这些没有影响它被广泛使用为什么使用Struts2 ?新版本的Struts2.
21、0 是struts 的action架构和webwork的融合体.依照Struts2.0.1的发布公告,一些关键特性如下:设计简单:使用抽象类而不是接口是Struts1的一个设计上的问题,这 已经在Struts2中得到了解决.在Struts2中绝大多数类都是基于接口 的,并且它的绝大多数核心接口都是独立于HTTP的 .Struts2的Action类是独立于框架的,可视为单纯的POJO框架的组件都设法保持松耦合 单纯的Action : Action都是单纯的POJO任何含有execute。方法的java类都可以当作Action类来使用.甚至我们始终都不需要实现接口反转控制会在开发 Action 类
22、的时候得到介绍过 , 这能让 Action 中立于 底层框架.不再使用 ActionForm : ActionForm 特性不再在 Structs2 中出现 . 简 单的JavaBean即可对Action直接传递参数.不再需要全部使用String 类型的参数 .简单的测试:Struts2的Action是独立于HTTP并且中立于框架的.这 使得 Struts2 的程序可以很容易的在没有模拟对象的情况下测试 .巧妙的默认值 : 大多数配置元素都设有一个根据需要设定的默认值 . 甚至根据需要基于XML勺默认配置文件都可以进行重写.改良的结果集 : 不像 Struts1 中的 ActionForwar
23、d,Struts2 的结果集 灵活的提供了多种类型的输出 , 事实上这促进了响应的准备工作 .更好的标签特性 : Struts2 可以添加样式表驱动标记 , 这使我们创建相 同的页面仅用更少的代码 .Struts2 的标签更有效而且是面向结果的 . Struts2 的标签标记可以通过修改基础样式表来修改 . 个别的标签标记 可以通过编辑 FreeMarker 的模板来修改 .JSP 和 FreeMarker 都完全得 到了支持 .引入注释:在Struts2程序中,除了 XML和Java properties 配置文 件外,Java 5的注释也可以作为一种选择.注释使得XML勺使用降至最 低.有
24、状态的 Checkbox: Struts2 中的 checkbox 不需要对 false 值进行 特殊处理.快速开始:很多改变无需重启web容器即可实现.自定义控制器 : Struts1 可以自定义每一个模块的请求处理器 , 如果需 要,Struts2 可以自定义每一个Action的请求处理.易与 Spring 整合 : Struts2 的 Action 与 Spring 是友好的 , 只需添加 Spring 的 bean轻巧的插件 : Struts2 可以通过添加一个 Jar 文件来进行扩展 , 不再需 要手动配置 !支持AJAX: AJAX主题对提升程序交互有着重要的意义.Struts2框
25、架 提供了一套标签来AJAX化你的程序甚至DOJO.AJAX!性包括:1. AJAX客户端验证.2. 支持远程表单提交.(同样适用于submit标签)3. 先进的div模板提供动态重载部份HTML4. 先进的模板提供远程加载和计算Javascript的能力.5. AJAX-only选项卡面板的实现6. 丰富的发布/订阅事件模型7. 自动交互完善标签深入全面阐释Struts 2的方方面面一、Struts 概述Struts是一个用来开发Model 2应用程序的框架。这个框架可以提高开发工作的速度,因为它提供的下面这些功能解决了Web应用程序开发过程中的一些常见问题:*对页面导航活动进行管理;*对来
26、自用户的输入数据进行合法性验证;*统一的布局;可扩展性;*国际化和本地化;*支持Ajax技术。因为Struts是一个Model 2框架,所以在使用 Struts时还应该遵守以下 几条不成文的规定。*不要在JSP页面里嵌入Java代码,应该把所有的业务逻辑包含在一些 被称为“动作类” (action class )的Java类里。 在JSP页面里使用 Expression Language( OGN)去访问有关的模型 对象。*尽量避免编写自定义标签(因为自定义标签的代码比较难以编写)。二、升级到Struts 2你也许用过Struts 1编程,这里提供了一个关于 Struts 2新功能的简要 介绍
27、。在Struts 1里需要使用一个像ActionServlet类这样的东西作为servlet控制器;Struct 2使用了一个过滤器来完成同样的任务。在Struts 2里没有任何动作表单。在Struts 1里,每个HTM表单都对应着一个ActionForm实例,你可以从动作类访问这个动作表单,并用 它来填充数据传输对象。在 Struts 2里,HTM表单将被直接映射为 一个POJO而不再需要你创建一个数据传输对象,因为没有动作表单, 维护工作变得简单容易了,你不再需要与那么多的类打交道。问题来了:没有了动作表单,怎样才能在Struts 2里通过编程对用户输入进行合法性验证呢?答案是把验证逻辑编
28、写在动作类里。* Struts 1通过几个标签库提供了一批定制标签供程序员在JSP页面里使用,其中最重要的是 HTM标签库、Bean标签库和Logic标签库。Servlet 2.4 里的 JSTL和 EL( Expression Language,表达式语言)经常被用来代替Bean和Logic标签库。Struts 2为程序员准备了一 个应有尽有的标签库,你不再需要 JSTL,但在某些场合你可能仍需要 EL。在Struts 1里,你还需要用到一些 Struts配置文件,其中最主要的是 存放在各Wet应用程序里的WEB-INF子目录里的struts-config.xml(默认文件名)。在Strut
29、s 2里,你仍需要用到多个配置文件,但必须把它们存放在 WEB-INF/classes子目录或它的某个下级子 目录里。* 要想使用 Struts 2,你的系统里必须有Java 5和Servlet 2.4(或更高版本)。之所以需要有 Java 5,是因为Java 5里新增加的注 解在Struts 2里扮演着重要角色。我们撰写本书时,Java 6已经发布,Java 7也指日可待,你很可能已经在使用Java 5或Java 6 了。*在Struts 1里,动作类必须扩展自org.apache.struts.action.Action类。在 Struts 2 里,任何一个POJO都可以是一个动作类。不过
30、,我们将在本书第3章说明,在Struts 2里最好对ActionSupport类进行扩展。在此基础上,可用一个 动作类来完成相关的动作。* Struts 2在JSP页面里使用OGN来显示各种对象模型,而不再是JSPEL和 JSTL原本是Struts 1组件之一的Tiles现在已经发展为一个独立的 ApacheHTTP没有“类型”的概念,在 HTTP青求里发送的值都是字符串。在把表单字 段映射到非String类型的动作属性时,Struts会自动对这些值进行必要的转 换。这一章将解释Struts如何完成这类转换,你还将学到如何为更加复杂的 情spring工作机制及为什么要用?1. springmv
31、c请所有的请求都提交给DispatcherServlet, 它会委托应用系 统的其他模块负责对请求进行真正的处理工作。2. DispatcherServlet 查询一个或多个HandlerMapping,找到处理请求的Controller.3. DispatcherServlet 请求提交到目标 Controller4. Controller 进行业务逻辑处理后,会返回一个 ModelAndView5. Dispathcher 查询一个或多个 ViewResolver 视图解析器 , 找到 ModelA ndView对象指定的视图对象6. 视图对象负责渲染返回给客户端。为什么用:AOP让开发人
32、员可以创建非行为性的关注点,称为横切关注点,并将它们 插入到应用程序代码中。使用 AOP后,公共服务(比如日志、持久性、事务等) 就可以分解成方面并应用到域对象上,同时不会增加域对象的对象模型的复杂 性。IOC 允许创建一个可以构造对象的应用环境,然后向这些对象传递它们的 协作对象。正如单词 倒置所表明的,IOC就像反过来的JNDI。没有使用一堆 抽象工厂、服务定位器、单元素( singleton )和直接构造(straightconstruction ),每一个对象都是用其协作对象构造的。因此是由 容器管理协作对象( collaborator )。Spring即使一个AOP匡架,也是一 IO
33、C容器。Spring最好的地方是它有 助于您替换对象。有了 Spring,只要用JavaBean属性和配置文件加入依赖性 (协作对象)。然后可以很容易地在需要时替换具有类似接口的协作对象。Spring 框架是一个分层架构,由 7 个定义良好的模块组成。 Spring 模块 构建在核心容器之上,核心容器定义了创建、配置和管理 bean 的方式,如图 1 所示。组成 Spring 框架的每个模块(或组件)都可以单独存在,或者与其他一 个或多个模块联合实现。每个模块的功能如下:核心容器:核心容器提供 Spring 框架的基本功能。核心容器的主要组件 是BeanFactory,它是工厂模式的实现。Be
34、anFactory使用控制反转(IOC)模 式将应用程序的配置和依赖性规范与实际的应用程序代码分开。Spring 上下文: Spring 上下文是一个配置文件,向 Spring 框架提供上 下文信息。Spring上下文包括企业服务,例如 JNDI、EJB电子邮件、国际化、 校验和调度功能。Spring AOP通过配置管理特性,Spring AOP模块直接将面向方面的编程 功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何 对象支持AOP Spring AOP模块为基于Spring的应用程序中的对象提供了事 务管理服务。通过使用 Spring AOP不用依赖E
35、JB组件,就可以将声明性事务 管理集成到应用程序中。Spring DAO JDBCDAQf由象层提供了有意义的异常层次结构,可用该结构 来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错 误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。SpringDAO的面向JDBC的异常遵从通用的DAO异常层次结构。Spring ORM Spring框架插入了若干个 ORMI架,从而提供了 ORM勺对 象关系工具,其中包括JDO Hibernate和iBatis SQL Map所有这些都遵从 Spring的通用事务和DA%常层次结构。Spring Web模块:Web上
36、下文模块建立在应用程序上下文模块之上,为基 于Web的应用程序提供了上下文。所以,Spring框架支持与Jakarta Struts 的集成。Web模块还简化了处理多部分请求以及将请求参数绑定到域对象的工 作。Spring MVC框架:MVC框架是一个全功能的构建 Web应用程序的MVC实 现。通过策略接口,MVC匡架变成为高度可配置的,MVC容纳了大量视图技术, 其中包括 JSP、Velocity、Tiles、iText 和 POI。Spring框架的功能可以用在任何 J2EE服务器中,大多数功能也适用于不 受管理的环境。Spring的核心要点是:支持不绑定到特定J2EE服务的可重用 业务和
37、数据访问对象。毫无疑问,这样的对象可以在不同 J2EE环境(Web或 EJB、独立应用程序、测试环境之间重用。共2页:1 2内容导航第1页:Hibernate工作原理及用的理由(1)第2页:Hibernate工作原 理及用的理由(2)IOC 和 AOP控制反转模式(也称作依赖性介入)的基本概念是:不创建对象,但是描 述创建它们的方式。在代码中不直接与对象和服务连接,但在配置文件中描述 哪一个组件需要哪一项服务。容器(在 Spring框架中是IOC容器)负责将这 些联系在一起。在典型的IOC场景中,容器创建了所有对象,并设置必要的属性将它们连 接在一起,决定什么时间调用方法。下表列出了 IOC的
38、一个实现模式。Spring框架的IOC容器采用类型2和类型3实现面向方面的编程即AOP是一种编程技术,它允许程序员对横切关注点或横切典型的职责 分界线的行为(例如日志和事务管理)进行模块化。AOP勺核心构造是方面,它将那些影响多个类的行为封装到可重用的模块中。AOP和IOC是补充性的技术,它们都运用模块化方式解决企业应用程序开 发中的复杂问题。在典型的面向对象开发方式中,可能要将日志记录语句放在 所有方法和Java类中才能实现日志功能。在 AOF方式中,可以反过来将日志 服务模块化,并以声明的方式将它们应用到需要日志的组件上。当然,优势就 是Java类不需要知道日志服务的存在,也不需要考虑相关
39、的代码。所以,用 Spring AOP编写的应用程序代码是松散耦合的。AOP的功能完全集成到了 Spring事务管理、日志和其他各种特性的上下 文中。IOC容器Spring 设计的核心是 org.springframework.beans包,它的设计目标是与JavaBean组件一起使用。这个包通常不是由用户直接使用,而是由服务器将 其用作其他多数功能的底层中介。下一个最高级抽象是Bea nF actory接口,它是工厂设计模式的实现,允许通过名称创建和检索对象。Bea nF actory也可以管理对象之间的关系。Bea nF actory支持两个对象模型。单态模型提供了具有特定名称的对象的共享
40、实例,可以在查询时对其进行 检索。Singleton是默认的也是最常用的对象模型。对于无状态服务对象很理 想。原型模型确保每次检索都会创建单独的对象。在每个用户都需要自己的对 象时,原型模型最适合。bean工厂的概念是Spring作为IOC容器的基础。IOC将处理事情的责任 从应用程序代码转移到框架。正如我将在下一个示例中演示的那样,Spring框架使用JavaBean属性和配置数据来指出必须设置的依赖关系。Bea nF actory 接口因为 org.springframework.beans.factory.BeanFactory是一 -个简单接口,所以可以针对各种底层存储方法实现。最常用
41、的BeanFactory定义是XmlBeanFactory,它根据XML文件中的定义装入 bean,如清单1所示。清单 1. XmlBeanFactoryBeanFactory factory = new XMLBeanFactory(newFileInputSteam(mybean.xml);在XML文件中定义的Bean是被消极加载的,这意味在需要 bean之前, bean本身不会被初始化。要从BeanFactory检索bean,只需调用 getBean() 方法,传入将要检索的bean的名称即可,如清单2所示。清单 2. getBean()MyBeanmybean= (MyBean) fa
42、ctory.getBean(mybean);每个bean的定义都可以是 POJO (用类名和JavaBean初始化属性定义) 或 FactoryBean 。 FactoryBean 接口为使用 Spring 框架构建的应用程序添加 了一个间接的级别。IOC 示例理解控制反转最简单的方式就是看它的实际应用。在对由三部分组成的Spring 系列 的第 1 部分进行总结时,我使用了一个示例,演示了如何通过 Spring IOC 容器注入应用程序的依赖关系(而不是将它们构建进来) 。我用开启在线信用帐户的用例作为起点。对于该实现,开启信用帐户要求 用户与以下服务进行交互:信用级别评定服务,查询用户的信
43、用历史信息。远程信息链接服务,插入客户信息,将客户信息与信用卡和银行信息连接 起来,以进行自动借记(如果需要的话) 。电子邮件服务,向用户发送有关信用卡状态的电子邮件。三个接口对于这个示例,我假设服务已经存在,理想的情况是用松散耦合的方式把 它们集成在一起。以下清单显示了三个服务的应用程序接口。清单 3. CreditRatingInterfacePublic interface CreditRatingInterfacePublic Boolean getUserCreditHistoryInformation(ICustomer iCustomer);清单3所示的信用级别评定接口提供了信用
44、历史信息。它需要一个包含客 户信息的Customer对象。该接口的实现是由CreditRating类提供的。清单 4. CreditLinkinglnterfacepublic in terfaceCreditL inkingln terfacepublic String getUrl(); public void setUrl(Stringurl);publicvoidlinkCreditBankAccount()throws Exception ;信用链接接口将信用历史信息与银行信息(如果需要的话)连接在一起, 并插入用户的信用卡信息。信用链接接口是一个远程服务,它的查询是通过 getUr
45、l()方法进行的。URL由Spring框架的bean配置机制设置,我稍后会 讨论它。该接口的实现是由CreditL in ki ng类提供的。7青单 5. EmailInterfacepublic in terfaceEmail In terfacepublic void sendEmail(ICustomer iCustomer);publicStringgetFromEmail(); public void setFromEmail(String fromEmail) ;publicStri ng getPassword(); public void setPassword(Stringp
46、assword);public String getSmtpHost() ; publicvoidsetSmtpHost(Stri ngsmtpHost); public Stri ng getUserId();publicvoid setUserId(Stri nguserld);Hibernate 工作原理及为什么要用?原理:1. 读取并解析配置文件2. 读取并解析映射信息,创建SessionFactory3. 打开 Sesssion4. 创建事务Transation5. 持久化操作6. 提交事务7. 关闭 Session8. 关闭 SesstionFactory为什么要用:1. 对JDB
47、C访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复 性代码。2. Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的 ORh实现 他很大程度的简化DAO层的编码工作3. hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。4. hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出 色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。2. Hibernate是如何延迟加载?1. Hibernate2延迟加载实现:a)实体对象b)集合(Collection )2. Hibernate3提供了属性的延迟加载功能当Hibernate
48、在查询数据的时候,数据并没有存在与内存中,当程序真正对数 据的操作时,对象才存在与内存中,就实现了延迟加载,他节省了服务器的内 存开销,从而提高了服务器的性能。3. Hibernate中怎样实现类之间的关系?(如:一对多、多对多的关系)类与类之间的关系主要体现在表与表之间的关系进行操作,它们都市对对象进 行操作,我们程序中把所有的表与类都映射在一起,它们通过配置文件中的 many-to-one、one-to-many、many-to-many、4. 说下Hibernate的缓存机制1.内部缓存存在Hibernate中又叫一级缓存,属于应用事物级缓存2.级缓存:a) 应用及缓存b) 分布式缓存条
49、件:数据不会被第三方修改、数据大小在可接受范围、数据更新频率低、同 一数据被系统频繁使用、非关键数据c) 第三方缓存的实现5 Hibernate 的查询方式Sql 、 Criteria,object comptositionHql:1、属性查询2、参数查询、命名参数查询3、关联查询4、分页查询5、统计函数6 如何优化 Hibernate ?1. 使用双向一对多关联,不使用单向一对多2. 灵活使用单向一对多关联3. 不用一对一,用多对一取代4. 配置对象缓存,不使用集合缓存5. 一对多集合使用 Bag, 多对多集合使用 Set6. 继承类使用显式多态7. 表字段要少,表关联不要怕多,有二级缓存撑
50、腰7. Struts工作机制?为什么要使用 Struts ?工作机制:Struts的工作流程:在web应用启动时就会加载初始化 ActionServlet,ActionServlet从struts-config.xml文件中读取配置信息,把它们存放到各种配置对象当ActionServlet接收到一个客户请求时,将执行如下流程.- 检索和用户请求匹配的ActionMapping实例,如果不存在,就返回请求 路径无效信息;-(2)如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提 交的表单数据保存到ActionForm对象中;-(3)根据配置信息决定是否需要表单验证.
51、如果需要验证,就调用Actio nF orm 的 validate。方法;-如果ActionForm的validate。方法返回null或返回一个不包含 ActionMessage的ActionErrors 对象,就表示表单验证成功;-(5)ActionServlet根据ActionMapping所包含的映射信息决定将请求转发给哪个Action,如果相应的Action实例不存在,就先创建这个实例,然后调用 Action 的 execute()方法;-(6)Action 的 execute()方法返回一个 ActionForward 对象,ActionServlet 在把客户请求转发给 Acti
52、o nF orward对象指向的JSP组件;-(7)ActionForward 对象指向JSP组件生成动态网页,返回给客户; 为什么要用:JSP Servlet、JavaBean技术的出现给我们构建了强大的企业应用系统提供可 能。但用这些技术构建的系统非常的繁乱,所以在此之上,我们需要一个规则、 一个把这些技术组织起来的规则,这就是框架,Struts便应运而生。基于Struts开发的应用由3类组件构成:C控制器组件、M模型组件、V视图 组件8. Struts的validate 框架是如何验证的?在struts 配置文件中配置具体的错误提示,再在FormBean中的validate。方法具体调用。9. 说下Struts的设计模式MVC莫式:web应用程序启动时就会加载并初始化 ActionServler。用户提交表 单时,一个配置好的ActionForm对象被创建,并被填入表单相应的数据,ActionServler根据Struts-config.xml文件配置好的设置决定是否需要表单验证,如果需要就调用 ActionForm的Validate ()验证后选择将请求发送到 哪个Action,如果Action不存在,ActionServlet 会先创建这个
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年学历类自考专业(行政管理)公共政策学-公务员制度参考题库含答案解析(5卷)
- 2025年学历类自考专业(英语)语言与文化-英语翻译参考题库含答案解析(5卷)
- 浙江名校2025-2026学年英语高三第一学期期末统考模拟试题
- 2025年学历类自考专业(英语)英语写作-英语词汇学参考题库含答案解析(5卷)
- 空调设备定期保养合同样本
- 2025年学历类自考专业(英语)现代英语语法-现代语言学参考题库含答案解析(5卷)
- 2025年学历类自考专业(英语)国际商法-现代英语语法参考题库含答案解析(5卷)
- 2025年阿坝市重点中学英语高三上期末检测试题
- 2026届河南省九师联盟英语高三上期末达标检测模拟试题
- 2025-2030工业设计创意园用户需求演变与设计服务升级路径报告
- DB15T 3543-2024 大蒜主要病虫害绿色防控技术规程
- 养老机构服务等级评定操作手册
- 中资企业在非洲的安全风险应对策略与启示
- 2025年山东高等学校教师资格考试(综合)历年参考题库含答案详解(5套)
- 劳动课洗衣服课件
- 2025年小学生“学宪法讲宪法”活动知识竞赛题库含答案
- 工勤人员技师等级考核(公共课程)题库及答案
- 医院固定电话管理办法
- 村卫生室医疗安全管理
- 2026年高考政治一轮复习统编版必修1《中国特色社会主义》考点清单
- 云南省曲靖市2025年八年级下学期语文期末考试卷及答案
评论
0/150
提交评论