2022年SSH_三大框架_面试 .pdf

上传人:C****o 文档编号:32530677 上传时间:2022-08-09 格式:PDF 页数:21 大小:373.80KB
返回 下载 相关 举报
2022年SSH_三大框架_面试 .pdf_第1页
第1页 / 共21页
2022年SSH_三大框架_面试 .pdf_第2页
第2页 / 共21页
点击查看更多>>
资源描述

《2022年SSH_三大框架_面试 .pdf》由会员分享,可在线阅读,更多相关《2022年SSH_三大框架_面试 .pdf(21页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、Spring 1、简介它是为了解决企业应用开发的复杂性而创建的。Spring 使用基本的 JavaBean来完成以前只可能由EJB完成的事情。然而, Spring 的用途不仅限于 服务器 端的开发。从简单性、可测试性和松耦合的角度而言,任何Java 应用都可以从Spring 中受益。目的:解决企业应用开发的复杂性功能:使用基本的JavaBean代替 EJB ,并提供了更多的企业 应用功能范围:任何 Java 应用简单来说, Spring 是一个轻量级的 控制反转 (IoC)和面向切面( AOP )的容器框架。轻量从大小与开销两方面而言Spring 都是轻量的。完整的Spring 框架可以在一个

2、大小只有1MB多的 JAR文件里发布。并且Spring 所需的处理开销也是微不足道的。此外, Spring 是非侵入式的:典型地, Spring 应用中的 对象不依赖于 Spring 的特定类。控制反转 Spring 通过一种称作控制反转( IoC)的技术促进了松耦合。当应用了 IoC,一个 对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoC 与 JNDI 相反不是 对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。面向切面 Spring 提供了 面向切面编程 的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如

3、审计( auditing)和事务(transaction)管理)进行内聚性 的开发。 应用对象 只实现它们应该做的完成业务逻辑仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。容器Spring 包含并管理 应用对象 的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean 如何被创建基于一个可配置原型(prototype ),你的 bean 可以创建一个单独的实例或者每次需要时都生成一个新的实例以及它们是如何相互关联的。然而,Spring 不应该被混同于传统的重量级的 EJB容器,它们经常是庞大与笨重的,难以使用。框架Spring 可以将简单的 组件配置

4、、组合成为复杂的应用。在Spring中,应用对象 被声明式地组合,典型地是在一个XML文件里。 Spring 也提供了很多基础功能( 事务管理 、持久化框架集成等等),将应用逻辑的开发留给了你。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 21 页 - - - - - - - - - 所有 Spring 的这些特征使你能够编写更干净、更可管理、并且更易于测试的代码。它们也为 Spring 中的各种模块提供了基础支持。2、特点方便解耦,简化开发通过 Spring 提供的

5、IoC 容器,我们可以将 对象之间的依赖关系交由Spring 进行控制,避免硬编码所造成的过度程序耦合。有了Spring ,用户不必再为单实例模式类、属性文件解析等这些很底层的需求编写代码,可以更专注于上层的应用。AOP 编程的支持通过 Spring 提供的 AOP 功能,方便进行面向切面的编程,许多不容易用传统OOP 实现的功能可以通过AOP 轻松应付。声明式事务 的支持在 Spring 中,我们可以从单调烦闷的事务管理代码中解脱出来,通过声明式方式灵活地进行事务的管理,提高开发效率和质量。方便程序的测试可以用非容器依赖的 编程方式进行几乎所有的测试工作,在Spring 里,测试不再是昂贵的

6、操作,而是随手可做的事情。方便集成各种优秀框架Spring 不排斥各种优秀的开源 框架,相反, Spring 可以降低各种框架的使用难度,Spring提供了对各种优秀框架(如Struts,Hibernate、Hessian、Quartz )等的直接支持。降低 Java EE API 的使用难度Spring 对很多难用的 Java EE API (如 JDBC ,JavaMail ,远程调用等)提供了一个薄薄的封装层,通过Spring 的简易封装,这些Java EE API 的使用难度大为降低。Java 源码是经典学习范例Spring 的源码设计精妙、结构清晰、匠心独用,处处体现着大师对Java

7、 设计模式灵活运用以及对 Java 技术的高深造诣。 Spring 框架源码无疑是Java 技术的最佳实践范例。如果想在短时间内迅速提高自己的Java 技术水平和应用开发水平,学习和研究Spring 源码将会使你收到意想不到的效果。3、好处在我们进入细节以前,让我们看一下Spring 可以给一个工程带来的一些好处:Spring 能有效地组织你的中间层 对象,无论你是否选择使用了EJB 。如果你仅仅使用了 Struts或其他的包含了 J2EE特有 APIs 的 framework,你会发现Spring 关注了遗留下的问题。名师资料总结 - - -精品资料欢迎下载 - - - - - - - -

8、- - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 21 页 - - - - - - - - - Spring 能消除在许多工程上对Singleton的过多使用。根据我的经验,这是一个主要的问题,它减少了系统的可测试性 和面向对象 特性。Spring 能消除使用各种各样格式的属性定制文件的需要,在整个应用和工程中,可通过一种一致的方法来进行配置。曾经感到迷惑,一个特定类要查找迷幻般的属性关键字或系统属性,为此不得不读Javadoc 乃至源编码吗?有了Spring ,你可很简单地看到类的JavaBean属性。倒置控制的使用(在下面讨论)帮助完成这种简

9、化。Spring 能通过接口而不是类促进好的编程习惯,减少编程代价到几乎为零。Spring 被设计为让使用它创建的应用尽可能少的依赖于他的APIs。在Spring 应用中的大多数 业务对象 没有依赖于 Spring 。使用 Spring 构建的 应用程序 易于单元测试 。Spring 能使 EJB的使用成为一个实现选择,而不是应用架构的必然选择。你能选择用 POJOs 或 local EJBs来实现业务接口,却不会影响调用代码。Spring 帮助你解决许多问题而无需使用EJB 。Spring 能提供一种 EJB的替换物,它们适于许多web应用。例如, Spring 能使用 AOP 提供声明性

10、事务而不通过使用 EJB容器,如果你仅仅需要与单个的数据库打交道,甚至不需要JTA实现。Spring 为数据存取提供了一致的框架,不论是使用JDBC 或 O/R mapping 产品(如 Hibernate )。Spring 确实使你能通过最简单可行的解决办法解决你的问题。这些特性是有很大价值的。总结起来, Spring 有如下优点:低侵入式设计,代码污染极低 独立于各种 应用服务器 ,基于 Spring 框架的应用,可以真正实现Write Once,Run Anywhere的承诺Spring 的 DI 机制降低了 业务对象 替换的复杂性,提高了组件之间的解耦Spring 的 AOP 支持允许

11、将一些通用任务如安全、事务、日志等进行集中式管理,从而提供了更好的复用Spring 的 ORM 和 DAO 提供了与第三方持久层框架的良好整合,并简化了底层的数据库访问Spring 并不强制应用完全依赖于Spring ,开发者可自由选用Spring 框架的部分或全部4、基本框架Spring 框架是一个分层架构,由 7 个定义良好的模块组成。Spring 模块构建在核心容器之上,核心容器定义了创建、配置和管理 bean 的方式,如图所示:组成 Spring 框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。每个模块的功能如下:1、核心容器:核心容器提供 Spring 名师

12、资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 21 页 - - - - - - - - - 框架的基本功能 (Spring Core)。核心容器的主要组件是 BeanFactory ,它是 工厂模式 的实现。 BeanFactory 使用控制反转 (IOC) 模式将 应用程序 的配置和依赖性规范与实际的应用程序代码分开。2、Spring 上下文: Spring 上下文是一个 配置文件 ,向 Spring框架提供上下文信息。 Spring 上下文包括企业 服务,例如 JNDI

13、、EJB 、电子邮件 、国际化、校验和调度功能。3、Spring AOP:通过配置管理特性, Spring AOP 模块直接将面向切面的编程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何对象支持 AOP 。Spring AOP 模块为基于 Spring 的应用程序 中的对象提供了事务管理服务。通过使用 Spring AOP ,不用依赖 EJB 组件,就可以将声明性事务管理集成到 应用程序 中。4、Spring DAO:JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理 和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理

14、,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。5、Spring ORM:Spring 框架插入了若干个ORM 框架,从而提供了 ORM 的对象关系工具,其中包括JDO 、Hibernate 和 iBatis SQL Map 。所有这些都遵从Spring 的通用 事务和 DAO 异常层次结构。6、Spring Web 模块:Web 上下文模块建立在 应用程序 上下文模块之上,为基于 Web 的应用程序提供了上下文。所以,Spring 框架支持与 Jakarta Struts 的集成。 Web 模块还

15、简化了处理多部分请求以及将请求参数绑定到域对象 的工作。7、Spring MVC 框架:MVC 框架是一个全功能的构建 Web应用程序 的 MVC 实现。通过策略接口, MVC 框架变成为高度可配置的, MVC 容纳了大量视图技术,其中包括 JSP、Velocity 、Tiles 、iText 和 POI。模型由 javabean 构成,存放于 Map ;视图是一个接口,负责显示模型;控制器表示逻辑代码,是Controller的实现。 Spring 框架的功能可以用在任何J2EE服务器 中,大多数功能也适用于不受管理的环境。Spring 的核心要点是:支持不绑定到特定J2EE服务的可重用业务和

16、 数据访问对象 。毫无疑问,这样的 对象可以在不同J2EE 环境( Web 或 EJB )、独立 应用程序 、测试环境 之间重用。5、步骤Spring 确实使你能通过最简单可行的解决办法来解决你的问题。而这是有有很大价值的。同时他的 源代码 的设计理念也受到很多程序员的追捧,简洁,易用.可是从哪着手研究Spring 却是很多新手头疼的地方,下面的参考资料将带领大家慢慢的深入解析Spring 1 Spring中的事务处理2ioc 容器在 Web 容器中的启动名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - -

17、- - - - 第 4 页,共 21 页 - - - - - - - - - 3 Spring JDBC 4 Spring MVC 5 Spring AOP 获取 Proxy 6 Spring声明式事务处理7 Spring AOP 中对拦截器调用的实现8 Spring驱动 Hibernate 的实现9 Spring Acegi框架鉴权的实现IOC和 AOP控制反转 模式(也称作依赖性注入)的基本概念是:不创建对象,但是描述创建它们的方式。在代码中不直接与对象和服务连接,但在 配置文件 中描述哪一个组件需要哪一项服务。容器(在 Spring 框架中是 IOC 容器) 负责将这些联系在一起。在典型

18、的 IOC 场景中,容器创建了所有 对象,并设置必要的属性将它们连接在一起,决定什么时间调用方法。下表列出了 IOC 的一个实现模式。类型 1 服务需要实现专门的接口,通过接口,由对象提供这些服务,可以从对象查询 依赖性 (例如,需要的附加服务)【接口注入】。类型 2 通过 JavaBean的属性(例如 setter 方法)分配依赖性【 setter方法注入】。类型 3 依赖性以 构造函数 的形式提供,不以 JavaBean 属性的形式公开【构造器注入】。Spring 框架的 IOC 容器采用类型 2 和类型 3 实现。面向方面的编程,即 AOP ,是一种编程技术,它允许程序员对横切关注点或横

19、切典型的职责分界线的行为(例如日志和事务管理)进行模块化。AOP 的核心构造是方面,它将那些影响多个类的行为封装到可重用的模块中。AOP 和 IOC 是补充性的技术,它们都运用模块化方式解决企业应用程序开发 中的复杂问题。在典型的 面向对象 开发方式中,可能要将日志记录语句放在所有方法和 Java 类中才能实现日志功能。在 AOP 方式中,可以反过来将 日志服务模块化,并以声明的方式将它们应用到需要日志的组件上。当然,优势就是Java 类不需要知道日志 服务的存在,也不需要考虑相关的代码。所以,用Spring AOP 编写的应用程序 代码是松散耦合的。AOP 的功能完全集成到了 Spring事

20、务管理 、日志和其他各种特性的上下文中。AOP 编程方面 , Spring 提供了很多特性 , 例如 PointCut, Advice, Advisor, 粗略来说就是 事务管理 、日志和其他各种特性的切入地点。6、容器Spring 设计的核心是 org.springframework.beans 包,它的设计目标是与JavaBean 组件一起使用。这个包通常不是由用户直接使用,而是由服务器 将其用作其他多数功能的底层中介。下一个最高级抽象是BeanFactory 接口,它是工厂设计模式的实现,允许通过名称创建和检索对象。BeanFactory 也可以管理对象之间的关系。名师资料总结 - -

21、-精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 21 页 - - - - - - - - - BeanFactory 支持两个 对象模型。1、单态模型提供了具有特定名称的对象的共享实例,可以在查询时对其进行检索。Singleton是默认的也是最常用的对象模型 。对于无状态 服务对象 很理想。2、原型模型确保每次检索都会创建单独的对象。在每个用户都需要自己的对象时,原型模型 最适合。bean 工厂的概念是 Spring 作为 IOC 容器的基础。 IOC 将处理事情的责任从应用程序 代码转移到框

22、架。Struts 1、概述Struts 2 是 Struts 的下一代产品,是在 struts 1 和 WebWork 的技术基础上进行了合并的全新的 Struts 2 框架。其全新的Struts 2 的体系结构 与 Struts 1 的体系结构差别巨大。 Struts 2 以 WebWork 为核心 ,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与Servlet API 完全脱离开,所以Struts 2 可以理解为WebWork 的更新产品。虽然从Struts 1 到 Struts 2 有着太大的 变化 ,但是相对于WebWork ,Struts 2 的变化很小。2、

23、应用流程注解(体系结构 )当 Web容器收到 请求( HttpServletRequest)它将请求传递给一个标准的的过滤链包括(ActionContextCleanUp )过滤器,然后经过Other filters(SiteMesh ,etc), 接下来需要调用 FilterDispatcher核心控制器,然后它调用ActionMapper 确定请求那个 Action ,ActionMapper 返回一个收集 Action 详细信息的ActionMaping 对象。接下来 FilterDispatcher将控制权委派给 ActionProxy,ActionProxy调用配置管理器 (Conf

24、igurationManager) 从配置文件中读取配置信息(struts.xml),然后创建 ActionInvocation对象, ActionInvocation在调用 Action 之前会依次的调用所用配置拦截器(Interceptor N) 一旦执行结果返回结果字符串ActionInvocation负责查找结果字符串对应的(Result )然后执行这个Result Result 会调用一些模版( JSP )来呈现页面,之后拦截器(Interceptor N)会在被执行 ( 顺序和 Action 执行之前相反) 最后响应 (HttpServletResponse)被返回在 web.xm

25、l 中配置的那些过滤器和(核心控制器)( FilterDispatcher)。3、技术改进( Struts1 ,Struts1 比较)Struts2对 Struts1进行了巨大的改进。主要表现在如下几个方面:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 21 页 - - - - - - - - - 在 Action 的实现方面Struts1要求必须统一扩展自Action 类,而 Struts2中可以是一个普通的POJO 。线程模型方面Struts1的 Action 是单

26、实例的,一个Action 的实例处理所有的请求。Struts2的 Action 是一个请求对应一个实例(每次请求时都新new出一个对象) , 没有线程安全 方面的问题。Servlet依赖方面Struts1的 Action 依赖于 Servlet API,比如 Action 的 execute 方法的参数就包括 request 和 response 对象。这使程序难于测试。Struts2中的 Action 不再依赖于 Servlet API,有利于测试,并且实现TDD 。封装请求参数Struts1中强制使用 ActionForm 对象封装请求的参数。 Struts2可以选择使用POJO 类来封装

27、请求的参数,或者直接使用Action 的属性。表达式语言方面Struts1中整合了 EL,但是 EL对集合和索引的支持不强,Struts2整合了 OGNL(Object Graph NavigationLanguage)。绑定值到视图技术Struts1使用标准的 JSP ,Struts2使用“ValueStack ”技术。类型转换Struts1中的 ActionForm 基本使用 String类型的属性。 Struts2中使用 OGNL进行转换,可以更方便的使用。Struts1中支持覆盖 validate方法或者使用 Validator框架。Struts2支持重写 validate方法或者使用

28、 XWork的验证框架。Action 执行控制 的对比Struts1支持每一个模块对应一个请求处理,但是模块中的所有Action 必须共享相同的生命周期。 Struts2支持通过拦截器 堆栈为每一个 Action 创建不同的生命周期。Struts 和 Webwork 同为服务于Web 的一种 MVC 框架,从某种程度上看,Struts2 是从WebWork2 上升级得到的。甚至Apache 的官方文档也讲:WebWork2 到 Struts2 是平滑的过渡。我们甚至也可以说Struts2 就是 WebWork2.3 而已。在很多方面Struts 仅仅是改变了WebWork 下的名称。 Stru

29、ts2 对应的有自己的标签,并且功能强大。Webwork 也有自己的标签。在2005 年 12 月,WebWork 与 Struts Ti 决定合并,再此同时, Struts Ti 改名为 Struts Action Framework 2.0,成为 Struts 真正的下一代4、ActionSupport基类五个标准返回值名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 21 页 - - - - - - - - - ActionSupport基类中定义了五个标准的返回值,

30、当然我们可以自己随意定义返回的名字String SUCCESS = success; /默认是 SUCCESS 类型String NONE = none; String ERROR = error; String INPUT = input; String LOGIN = login; 方法ActionSupport基类定义了了一些方法,程序员自己写的action 如果继承了ActionSupport基类,就可以应用这些方法,很方便解决一些问题。一些比较常用的方法:getText(String aTextName);/国际化用到./getText(String aTextName)的重载方法a

31、ddActionMessage(String aMessage); addFieldError(String fieldName, String errorMessage); / 校验失败后返回给客户端的信息,struts2 标签可以取得addActionError(String anErrorMessage); 5、Result Type 在默认时, 标签的 type 属性值是“ dispatcher ”(实际上就是转发,forward )。开发人员可以根据自己的需要指定不同的类型,如redirect、stream 等。如下面代码所示: /result.jsp 这此 result-type可

32、以在 struts2-core-2.0.11.1.jar包或 struts2源代码 中的 struts-default.xml文件中找到,在这个文件中找到dispatcher 用来转向页面,通常处理JSP org.apache.struts2.dispatcher.ServletDispatcherResult freemaker 处理 FreeMarker 模板org.apache.struts2.views.freemarker.FreemarkerResult 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理

33、- - - - - - - 第 8 页,共 21 页 - - - - - - - - - httpheader 控制特殊 HTTP行为的结果类型org.apache.struts2.dispatcher.HttpHeaderResult stream 向浏览器 发送 InputStream 对象,通常用来处理文件下载,还可用于返回AJAX数据org.apache.struts2.dispatcher.StreamResult StreamResult 等价于在 Servlet中直接输出 Stream 流。这种 Result 被经常使用于输出图片、文档等二进制流到客户端。通过使用 StreamR

34、esult ,我们只需要在 Action 中准备好需要输出的InputStream 即可。配置: image/jpeg imageStream filename=document.pdf 1024 同时, StreamResult 支持许多参数,对输出的Stream 流进行参数控制。velocity 处理 Velocity模板org.apache.struts2.dispatcher.VelocityResult 随着模板技术的越来越流行,使用Freemarker 或者 Velocity模板进行 View 层展示的开发者越来越多。Struts2同样为模板作为 Result 做出了支持。由于模板

35、的显示需要模板( Template)与数据( Model)的紧密配合,所以在Struts2中,这两个 Result 的主要工作是为模板准备数据。xslt 处理 XML/XLST 模板org.apache.struts2.views.xslt.XSLTResult plainText 显示原始文件内容,例如文件源代码org.apache.struts2.dispatcher.PlainTextResult 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 21 页 - - -

36、 - - - - - - chain 用来处理 Action 链com.opensymphony.xwork2.ActionChainResult chain 其实只是在一个 action执行完毕之后, forward 到另外一个 action ,所以他们之间是共享HttpServletRequest的。在使用 chain 作为 Result 时,往往会配合使用 ChainingInterceptor。ChainingInterceptor的作用是在Action 直接传递数据。事实上,源Action 中 ValueStack 的数据会被做一次Copy,这样, 2 个 Action 中的数据都在

37、 ValueStack 中,使得对于前台来说,通过 ValueStack 来取数据,是透明而共享的。比如说,一张页面中,你可能有许多数据要显示,而某些数据的获取方式可能被很多不同的页面共享(典型来说,“推荐文章”这个小栏目的数据获取,可能会被很多页面所共享)。这种情况下,可以把这部分逻辑抽取到一个独立Action 中,并使用 chain ,将这个Action 与主 Action 串联起来。这样,最后到达页面的时候,页面始终可以得到每个 Action 中的数据。从实战上讲,使用chain 作为 Result 也的确存在着上面所说的许多问题,我个人也是非常不推崇滥用这种Result 。尤其是,对于

38、使用Spring 和 Hibernate的朋友来说,如果你开启OpenSessionInView 模式,那么 Hibernate的session 是跟随 HttpServletRequest的,所以 session 在整个 action链中共享。这会为我们的编程带来极大的麻烦。因为我们知道Hibernate 的 session会保留一份一级缓存,在action链中,共享一级缓存无疑会为你的调试工作带来很大的不方便。所以,谨慎使用 chain 作为你的 Result ,应该成为一条最佳实践。redirect 重定向到一个 URL org.apache.struts2.dispatcher.Ser

39、vletRedirectResult 如果你在 Action执行完毕后,希望执行另一个Action ,有 2 种方式可供选择。一种是 forward ,另外一种是 redirect。有关 forward 和 redirect的区别,这里我就不再展开,这应该属于Java 程序员的基本知识。在Struts2中,分别对应这两种方式的 Result ,就是 chain 和 redirect。先来谈谈 redirect,既然是重定向,那么源地址与目标地址之间是2 个不同的HttpServletRequest。所以目标地址将无法通过ValueStack 等 Struts2的特性来获取源 Action 中的

40、数据。同时, Redirect的 Result 支持在配置文件中,读取并解析源Action 中ValueStack 的值,并成为 参数传递 到 Redirect 的地址中。redirectAction 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 21 页 - - - - - - - - - 重定向到一个 Action org.apache.struts2.dispatcher.ServletActionRedirectResult 6、区别比较redirect和 r

41、edirectAction chain的区别struts2中关于 result的返回类型一般我们是转发到一个jsp 页面或者是 html页面等,但是 struts2中的 result的返回类型还有redirect,redirectAction,chain。对于这三种返回类型之间肯定是有区别的,下面我们来看看关于redirect redirectAction chain这三种 struts2的返回类型之间的区别。当使用typ e=“redirectAction” 或 type=“redirect”提交到一个 action并且需要传递一个参数时。这里是有区别的:使用type=“redirectAc

42、tion”时,结果就只能写Action的配置名,不能带有后缀:“.action ”Xml代码 User?u_id=$loginBean.u_id 使用 type=“redirect”时,结果应是action 配置名 +后缀名Xml代码 User.action?u_id=$loginBean.u_id redirect:action处理完后重定向到一个视图资源(如:jsp 页面),请求参数全部丢失, action 处理结果也全部丢失。redirect-action:action处理完后重定向到一个action ,请求参数全部丢失,action处理结果也全部丢失。chain:action处理完后转

43、发到一个action ,请求参数全部丢失, action 处理结果不会丢失。Hibernate 1、Hibernate是一个开放源代码的对象 关系映射 框架 ,它对 JDBC进行了非常轻量级的对象封装,使得Java 程序员 可以随心所欲的使用对象编程思维来操纵 数据库 。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java 的客户端 程序使用,也可以在Servlet/JSP名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 21 页 - - - - - -

44、 - - - 的 Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的 J2EE架构中取代CMP ,完成 数据持久化 的重任。2、核心接口Hibernate 的核心接口一共有6 个,分别为 :Session 、SessionFactory 、Transaction 、Query、Criteria和 Configuration。这 6 个核心接口在任何开发中都会用到。通过这些接口,不仅可以对持久化 对象进行存取,还能够进行事务控制。下面对这6 个核心接口分别加以介绍。Session Session 接口负责执行被持久化 对象的 CRUD 操作(CRUD 的任务是完成与 数据库

45、的交流,包含了很多常见的SQL语句。 )。但需要注意的是Session 对象是非线程安全 的。同时, Hibernate 的 session 不同于 JSP应用中的 HttpSession 。这里当使用 session 这个术语时,其实指的是Hibernate 中的 session ,而以后会将 HttpSession对象称为用户 session 。SessionFactory SessionFactory接口负责初始化 Hibernate 。它充当数据存储源的代理,并负责创建 Session 对象。这里用到了 工厂模式 。需要注意的是 SessionFactory并不是轻量级的,因为一般情况

46、下,一个项目通常只需要一个SessionFactory就够,当需要操作多个 数据库 时,可以为每个数据库指定一个SessionFactory 。3、主键介绍Assigned Assigned 方式由用户生成主键值,并且要在save() 之前指定否则会 抛出异常特点:主键的生成值完全由用户决定,与底层数据库无关。用户需要维护主键值,在调用 session.save()之前要指定主键值。Hilo Hilo 使用高低位算法生成主键,高低位算法使用一个高位值和一个低位值,然后把算法得到的两个值拼接起来作为数据库 中的唯一主键。 Hilo 方式需要额外的数据库 表和字段提供高位值来源。默认情况下使用的表

47、是hibernate_unique_key,默认字段叫作 next_hi 。next_hi必须有一条记录否则会出现错误。特点:需要额外的 数据库 表的支持,能保证同一个数据库中主键的唯一性名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 21 页 - - - - - - - - - ,但不能保证多个数据库之间主键的唯一性。Hilo 主键生成方式由Hibernate 维护,所以 Hilo 方式与底层 数据库 无关,但不应该手动修改hi/lo算法使用的表的值,否则会引起主键重

48、复的异常。Increment Increment 方式对主键值采取自动增长的方式生成新的主键值,但要求底层数据库的主键类型为 long,int等数值型。主键按数值顺序递增,增量为1。/* 特点:由 Hibernate 本身维护,适用于所有的数据库 ,不适合 多进程 并发更新数据库,适合单一进程访问数据库。不能用于群集环境。*/ Identity Identity方式根据底层 数据库 ,来支持自动增长,不同的数据库用不同的主键增长方式。特点:与底层 数据库 有关,要求数据库支持Identity,如 MySQl中是auto_increment, SQL Server 中是 Identity,支持的

49、数据库有MySql、SQL Server 、DB2 、Sybase和 HypersonicSQL。 Identity无需 Hibernate 和用户的干涉,使用较为方便,但不便于在不同的数据库 之间移植 程序。Sequence Sequence需要底层 数据库 支持 Sequence方式,例如 Oracle 数据库 等特点:需要底层 数据库的支持序列,支持序列的数据库有DB2 、PostgreSql 、Oracle 、SAPDb 等在不同数据库之间移植程序,特别从支持序列的数据库移植到不支持序列的数据库需要修改配置文件 。Native Native 主键生成方式会根据不同的底层数据库 自动选择

50、 Identity、Sequence 、Hilo 主键生成方式特点:根据不同的底层 数据库 采用不同的主键生成方式。由于Hibernate 会根据底层 数据库 采用不同的映射方式,因此便于程序移植,项目中如果用到多个数据库时,可以使用这种方式。UUID UUID使用 128位 UUID算法生成主键,能够保证网络环境下的主键唯一性,也就能够保证在不同 数据库 及不同服务器下主键的唯一性。特点:能够保证 数据库中的主键唯一性,生成的主键占用比较多的存贮空间名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁