SSH框架入门.doc_第1页
SSH框架入门.doc_第2页
SSH框架入门.doc_第3页
SSH框架入门.doc_第4页
SSH框架入门.doc_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第16页中国矿业大学2012届本科生毕业设计(论文) 2 Hibernate的核心组件和运行机制Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了封装。Hibernate提供了强大、高性能的对象到关系型数据库的持久化服务,利用Hibernate,开发人员可以按照JAVA的基础语义(包括关联、继承、多态、组合以及JAVA的集合架构)进行持久层开发。Hibernate提供的HQL(HibernateQuery Language)是面向对象的查询语言,它在对象型数据和关系型数据库之间构建了一条高效、便捷的沟通渠道。2.1Hibernate概述2.1.1了解持久化和持久层以及对象关系映射持久层是在系统逻辑层面上,专注于实现数据持久化的一个相对独立的领域。持久化是把数据保存到永久性数据存储设备中加以固化。如果把持久化看成一个动词的话,那么可以把持久层看成一个名词,持久层实现了持久化,持久层是独立于一个系统中的模块,一个实现了持久化的模块,这个模块的最大好处可以分三部分(暂且把持久化代码看做是sql的插入,查看,或删除等语句)1:1.表示层发生变化时,数据持久化代码不需重新编译。如jsp迁移到java webstart clent2.业务逻辑层发生了变化,持久化代码不需重新编译3.底层数据持久化机制发生变化,持久化代码也不许重新编译 如数据库类型更换用持久层来持久化对象与以往的不同:可以通过配置文件直接通过类名或对象名实现对象属性的更改!对象关系映射(Object Relational Mapping,简称ORM)是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将java程序中的对象自动持久化到关系数据库中。本质上就是将数据从一种形式转换到另外一种形式2。例如有实体类Customer: 创建数据库Schema:create table cutomers ( id bigint not null primary key, name varchar(15) not null, email varchar(128) not null, password varchar(8) not null, phone int , address varchar(255), sex char(1) , is_married bit, description text, image blob, birthday date, registered_time timestamp); 创建对象-关系映射文件Customer.hbm.xml: 2.1.2理解持久化对象的生命周期在持久化的角度,一个持久化类的实力在其生命周期内可能处于三种不同的状态。三种状态的定义与持久化上下文(persistence context)有关,Session对象就是Hibernate的持久化上下文。持久化类的实例的生命周期有以下三种状态3:临时状态(transient):刚用new语句创建,还没有被持久化,不处于Session的缓存中。处于临时状态的Java对象称为临时对象。持久化状态(persistent):已经被持久化,加入到Session的缓存中。处于持久化状态的Java对象称为持久化对象。游离状态(detached):已经被持久化,但不再处于Session的缓存中。处于游离状态的Java对象称为游离对象。Java对象:开始生命周期临时状态持久化状态游离状态结束生命周期。图2-1是对象的状态转换图4。图2-1 对象的状态转换图2.2Hibernate的原理及接口2.2.1原理在Java应用中使用Hibernate的步骤如下5:1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory 3.打开Sesssion 4.创建事务Transation 5.持久化操作 6.提交事务 7.关闭Session 8.关闭SesstionFactory例如:设有一实体类Customer,实现大概步骤如下: 创建SessionFactory实例:static try / 根据默认位置的Hibernate配置文件的配置信息,创建一个 /Configuration实例 Configuration config = new Configuration(); config.addClass(Customer.class); / 创建SessionFactory实例 */ sessionFactory = config.buildSessionFactory(); catch(Exception e)e.printStackTrace(); 创建一个Configuration类的实例,Configuration类的构造方法把默认文件路径下的perties配置文件中的配置信息读入到内存: Configuration config = new Configuration(); 调用Configuration类的addClass(Customer.class)方法: config.addClass(Customer.class);该方法把默认文件路径下的Customer.hbm.xml文件中的映射信息读入到内存中。 调用Configuration类的buildSessionFactory()方法: sessionFactory = config.buildSessionFactory();图2-3是事务执行的流程图6。图2-3Hibernate正常执行数据库事务的流程2.2.2接口 SessionFactory接口一个SessionFactory实例对应一个数据存储源,应用从SessionFactory中获得Session实例。SessionFactory有以下特点:它是线程安全的,这意味着它的同一个实例可以被应用的多个线程共享。它是重量级的,这意味着不能随意创建或销毁它的实例。如果应用只访问一个数据库,只需要创建一个SessionFactory实例,在应用初始化的时候创建该实例。如果应用同时访问多个数据库,则需要为每个数据库创建一个单独的SessionFactory实例7。 Session接口Session接口是Hibernate应用使用最广泛的接口。Session也被称为持久化管理器,它提供了和持久化相关的操作,如添加、更新、删除、加载和查询对象。Session有以下特点:不是线程安全的,因此在设计软件架构时,应该避免多个线程共享同一个Session实例。Session实例是轻量级的,所谓轻量级是指它的创建和销毁不需要消耗太多的资源。这意味着在程序中可以经常创建或销毁Session对象,例如为每个客户请求分配单独的Session实例,或者为每个工作单元分配单独的Session实例8。2.3小结本章介绍了Hibernate中持久化、ORM的概念,Hibernate配置及映射文件,实体对象的生命周期和Hibernate中的常用接口。Hibernate实现了对JDBC的封装,方便程序员进行开发,相对于JDBC,极大地提高了编程效率。 3 Spring 框架的核心组件和运行机制3.1Spring概述Road Johnson在Expert One-on-One J2EE 设计与开发一书中,对传统的J2EE技术日益臃肿和低效提出了质疑,他觉得应该有更便捷的做法,于是提出了interface21,也就是Spring框架的雏形。他提出了技术实用为准的主张,引发了人们对“正统”的J2EE的反思。2003年2月Spring框架正是成为一道开源项目。Spring致力于J2EE应用的各种解决方案,而不是仅仅专注于某一层的方案。可以说,Spring是企业应用开发的“一站式”选择,Spring贯穿表现层、业务层和持久层。然而,Spring并不想取代那些已有的框架,而是以高度的开放性与它们无缝整合9。3.2Spring体系结构 Spring是轻量级的J2EE应用程序开源框架,他为编写企业应用程序提供了轻量级的解决方案,同时仍然使用声明式事务、用RMI或Web Service远程调用、以及使用多种方式来将数据持久化到数据库。Spring提供了全功能的MVC框架,以及透明集成AOP到软件中的能力。Spring也是模块化的,允许只使用应用开发所需要的那部分,而无需附加其他部分。 Spring是一个开源的控制反转(IoC, Inversion of Control)和面向切面编程(AOP ,Aspect Oriented Programming)的容器,它的主要作用就是简化企业开发,它的框架组成结构如下图3-1所示10。3.2.1各结构功能 Spring框架由七个模块组成,组成Spring框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现,Spring的所有模块都是建立在核心容器之上的,它的七个模块的功能如下11:Spring Core:Spring框架的核心,提供IoC和依赖注入特性。Spring Context:它提供了一种框架风格的方式来访问对象,有些像JNDI注册表。他继承了Beans包的功能,同时增加了国际化、事件传播、资源装载以及透明创建上下文。Spring AOP:通过配置管理,Spring AOP直接将AOP的功能集成到了Spring框架中。Spring DAO:提供了JDBC的抽象层,它可以消除冗长的JDBC编码和解析数据库厂商有的代码错误。Spring ORM:Spring框架插入了若干个ORM框架,从而提供了ORM的对象关系工具,其中包括JDO、Hibernate和iBatis。所有这些都遵从Spring的通用事务和DAO一场层次结构。Spring Web模块:Web上下文模块建立在应用程序上下文模块之上,为基于Web的应用程序提供了上下文。所以,它支持与Jakarta Struts的集成。Spring MVC框架:MVC是一个全功能的构建Web应用程序的MVC实现。图3-1Spring框架的组成结构3.3Spring的核心组件这里将详细介绍每个组件内部类的层次关系,以及它们在运行时的时序顺序。我们在使用Spring是应该注意的地方。3.3.1 Bean组件Bean组件在Spring的org.springframework.beans包下。这个包下的所有类主要解决了三件事:Bean的定义、Bean的创建以及对Bean的解析。对Spring的使用者来说唯一需要关心的就是Bean的创建,其他两个由Spring在内部帮你完成了,对你来说是透明的。Spring Bean的创建时典型的工厂模式,他的顶级接口是BeanFactory 。BeanFactory有三个子类:ListableBeanFactory、HierarchicalBeanFactory和AutowireCapableBeanFactory。它们最终的默认实现类是DefaultListableBeanFactory,他实现了所有的接口。每个接口都有他使用的场合。例如ListableBeanFactory接口表示这些Bean是可列表的,而HierarchicalBeanFactory表示的是这些Bean是有继承关系的,也就是每个Bean有可能有父Bean。AutowireCapableBeanFactory接口定义Bean的自动装配规则。这四个接口共同定义了Bean的集合、Bean之间的关系、以及Bean行为12。Bean的定义主要有BeanDefinition描述,如下图说明了这些类的层次关系13:图3-2Bean定义的类层次关系图Bean的定义就是完整的描述了在Spring的配置文件中你定义的节点中所有的信息,包括各种子节点。当Spring成功解析你定义的一个节点后,在Spring的内部他就被转化成BeanDefinition对象。以后所有的操作都是对这个对象完成的。Bean的解析过程非常复杂,功能被分的很细,因为这里需要被扩展的地方很多,必须保证有足够的灵活性,以应对可能的变化。Bean的解析主要就是对Spring配置文件的解析。3.3.2 Context组件Context在Spring的org.springframework.context包下,前面已经讲解了Context组件在Spring中的作用,他实际上就是给Spring提供一个运行时的环境,用以保存各个对象的状态。下面看一下这个环境是如何构建的14。ApplicationContext是Context的顶级父类,ApplicationContext继承了BeanFactory,这也说明了Spring容器中运行的主体对象是Bean,另外ApplicationContext继承了ResourceLoader接口,使得ApplicationContext可以访问到任何外部资源,这将在Core中详细说明。ApplicationContext的子类主要包含两个方面:ConfigurableApplicationContext表示该Context是可修改的,也就是在构建Context中用户可以动态添加或修改已有的配置信息,它下面又有多个子类,其中最经常使用的是可更新的Context,即AbstractRefreshableApplicationContext类。WebApplicationContext顾名思义,就是为web准备的Context他可以直接访问到ServletContext,通常情况下,这个接口使用的少。再往下分就是按照构建Context的文件类型,接着就是访问Context的方式。这样一级一级构成了完整的Context等级层次。总体来说ApplicationContext必须要完成以下几件事: 标识一个应用环境 利用BeanFactory创建Bean对象 保存对象关系表 能够捕获各种事件Context作为Spring的Ioc容器,基本上整合了Spring的大部分功能,或者说是大部分功能的基础。3.3.3 Core组件Core组件作为Spring的核心组件,他其中包含了很多的关键类,其中一个重要组成部分就是定义了资源的访问方式。下图是Resource相关的类结构图15: 图3-3 Resource相关的类结构图3.4Spring的运行机制 Spring的核心机制是以BeanFactory为基础,管理Bean与Bean之间的依赖的。Spring以Bean防是组织管理java应用中的各组件,组件之间的依赖关系松耦合运行良好.这依赖与Spring的核心机制。依赖注入.Spring使用BeanFactory作为应用中富者生产和管理各种组件的工厂,同事也是组件运行的容器.BeanFactory根据配置的文件确定容器中bean的实现.管理Bean之间的关系。将Bean对Bean实现类的依赖解耦,变成对接口的依赖,程序从面向具体的类的编程,转向编程面向接口的编程,极大的降低应用中的组件的耦合。 将Bean对Bean实现类的依赖解耦,变成对接口的依赖,程序从面向具体的类的编程,转向编程面向接口的编程,极大的降低应用中的组件的耦合。Spring能有效的组织J2EE应用各层的对象,不管是控制层的Actiong对象,还是业务层的service对象,还是持久层的Dao对象,都可以在Spring的管理机制下有机协调的运行。依赖注入(Dependency Injection)和控制反转(Inversion of contro)是同一个概念,具体含义是:当某个角色(可能是一个Java实例,调用者)需要另一个角色(另一个java实例,被调用者)的协助的时候.在传统的程序设计过程中,通常由调用者来创建被调用者的实例,但在Spring里面,创建被调用者的工作不再有调用者来完成,因此称为控制反转。创建被调用者实力的工作通常由Spring容器来完成,然后注入调用者,因此也称为依赖注入16。原理代码简单重现: 设置注入: 设置注入是指通过setter方法传入被调用者的实例,这汇总注入方式简单,直观,因而在Spring的依赖注入里面大量使用。以下是一个Person接口:/定义Person接口Public interface Person public void useAxe();/person接口里面定义的一个使用斧子的方法public interface Axe public void chop();/Axe接口里面有个砍的方法public class Chinese implements Person private Axe axe;/面向Axe接口编程,而不是具体实现类。 public Chisese()/默认构造器 public void serAxe(Axe axe) this.axe = axe; /设置注入所需的setter方法 public void useAdxe()/实现person接口类的useAxe方法 System.out.pringln(axe.chop(); public class StoneAxe implements Axe/Axe的第一个实现类 StoneAxe public StoneAxe()/默认构造器 public Stirng chop()/实现Axe接口的chop方法 return 用势头斧子去砍柴; 配置下面是关键,是采用Spring的配置文件将Person实例和Axe实例组织在一起,配置如下: 主程序下面看主程序部分:public class BeanTest public static void main(Sting args) throws Exveption /因为是独立的应用程序,显式地市厉害spring的上下文。 ApplicationContext ctx = new FileSystemXmlApplicationContest(bean.xml) /通过Person Bean的id来获取bean实例,面向接口编程。因此,此处通过强制类型转换为接口类型。 Person p = (Person)ctx.getBean(chinese); p.useAxe();/直接执行Person的useAxe()方法。 3.5小结本文通过从Spring的几个核心组件入手,试图找出构建Spring框架的骨骼架构,进而分析Spring在设计的一些设计理念,是否从中找出一些好的设计思想,对我们以后程序设计能提供一些思路。接着再详细分析了Spring中是如何实现这些理念的,以及在设计模式上是如何使用的。 4 Struts框架4.1Struts简介随着对软件功能的要求越来越高,Web应用系统的开发也变得越来越复杂,如何在软件开发过程中,最大限度地实现重用已有资源,高质量地进行软件开发,快速设计出高质量的软件产品呢?作为战胜软件危机,提高软件质量的一种方式,设计模式充分的体现了重用的思想,设计模式就是对以往成功的解决方案的重复利用;对以往成功软件设计方式的重用;对专业软件开发人员技术和经验的重复利用。设计模式无疑有效地降低了软件开发的风险,提高了软件开发的效率。作为对经典的MVC设计模式的一种成熟的稳定的、实现方式,Struts是建立在JSP、Servlet和XML等相关开发技术基础之上的一种主流的、经典的MVC设计模式框架。作为MVC模式的一种典型实现,对控制器(controller)、模型(model)和视图(View)都提供了现成的实现组件,其实现方式如图4-1所示17。浏览器控制器Servelet业务逻辑Action视图JSPStruts-config.xml模型JavaBeans等HTTP请求HTTP响应转发分发图4-1 Struts MVC结构图 Controller控制器部分Struts中的控制器部分是通过Servlet实现的,是Struts API中ActionServlet类的实例。该类继承了javax.servlet.http.HttpServlet,其作用是接受客户端浏览器的请求,然后选择执行相应的业务逻辑,再把结果送回客户端。 Model模型部分 Model从概念上可以分为两类:系统的内部状态和改变系统状态的动作,一般由JavaBean或者EJB等组成,也可以使用其他开源框架组成。Struts架构中使用JavaBean来提供具体的业务逻辑,即“怎么做”。对于复杂的系统可以使用EJB等组件或者其他开源框架来实现系统状态的维护。 View视图部分视图部分可以用JSP来实现,Struts还提供了丰富的自定义标签库增强显示功能,减少或者避免在JSP中使用Java代码。184.2Struts核心组件及运行机制在Struts框架中,与控制器组件相关的类主要有:1) ActionServlet:Struts架构的中央控制器,用于接受浏览器客户端用于请求以及状态改变,并依据处理结果选择表示层不同视图的重定向。2) RequestProcessor:包含了Struts控制器在处理Servlet请求时所遵循的控制逻辑。3) Action:控制器的一部分,用于与模型进行交互,执行状态改变或者状态查询,以及告诉ActionServlet下一个要跳转的视图。4) ActionForm:用于保存与表单数据相关的状态数据的改变。5) ActionMapping:用于控制在状态数据改变后的事件处理方式。6) ActionForward:用于说明结果指向或者视图选择。在Struts框架中,视图组件基于JSP等技术实现,并提供了强大的标签库。常用的标签库有:1) Struts-html.tld标签库:扩展HTML Form的JSP标签。2) Struts-bean.tld标签库:扩展处理JavaBean的JSP标签。3) Struts-logic.tld标签库:扩展处理JSP页面逻辑结构的标签。图4-2显示了Struts框架从接受请求到返回响应的各个部件相互配合的完整工作流程。4.2.1控制器核心组件Struts框架的核心是一个MVC风格的控制器,是模型组件和视图组件之间的桥梁,是整个Web应用程序的控制中枢。其主要功能是:1) 接收浏览器客户端的请求。2) 根据用户的不同请求,调用对应的模型组件来执行相应的业务逻辑。3) 获取模型组件业务逻辑的处理结果。4) 根据当前的状态数据及业务逻辑的处理结果,选择合适的视图组件呈现在浏览器。 控制器的两个核心组成部分是ActionServlet和RequestProcessor。 ActionServlet 在Struts中直接接收用户请求的是一个Servlet。所有客户端提交的请求都先由它处理然后根据配置文件Struts-config.xml分发到相应的Action进行处理。ActionServlet继承了javax.servlet.http.HttpServlet类,并实现了包括init()、doGet()、doPost()以及destroy()等生命周期中要用到的方法。此外,还添加了一个特殊的process()方法,被doGet()和doPost()方法调用,统一处理Get和Post。ActionServlet接收来自客户端的请求后,其具体的处理步骤如下图4-2所示。 RequestProcessor RequestProcessor的完整名字是org.apche.struts.action.RequestProcessor,包含了Struts控制的主要控制逻辑,并提供了扩展机制。比如,对于包含多个应用模块的Struts应用,每个子模块都可以有各自的RequestProcessor对象。RequestProcessor类中定义了很多个processXXX()方法,例如processValidate()、processRoles()、processPath()等方法,process()方法正是通过调用这些方法来完成各种处理工作的。图4-2 Struts响应流程图4.2.2控制器扩展组件 ActionForm在Struts结构中,通常使用一种名为ActionForm的系统状态Bean,来实现应用系统的非持久性数据存储和维护功能。它主要用来保存用户请求表单中的数据,可以在不同的页面间传递数据。为实现自动填充属性和调用机制,自定义的ActionForm必须是Struts API中定义的抽象类org.apache.struts.action.ActionForm的子类,其中主要包含和用户表单数据同名的属性及相应的存取方法,而没有商业逻辑。还可以根据需要重写从父类继承的reset()方法和validate()方法,实现属性重置和表单数据验证。每个ActionForm Bean类,必须在配置文件Struts-config.xml文件中声明。格式如下: .元素的name属性,是Bean的名字,以后可以通过名字来访问这个Bean。type属性是Bean的包括包名字的完整类名。声明之后,还要指明ActionForm和要被处理的请求之间的关系,控制器才能开展工作,把请求表单的数据填充到ActionForm。 .元素给出了各种可能的客户端请求和处理方案间的映射关系,每个元素对应的是一种特定请求的URI的处理方法,其中不一定用到ActionForm,因为客户端不总是包含表单数据。 Action Action类是Struts框架中控制器的重要组成部分,是用户请求和业务逻辑之间的媒介。每个Action类型的对象实际上都在充当客户的业务代理。应用程序中创建的Action类是Struts API中org.apache.struts.action.Action类的子类,在子类中加入需要处理的逻辑代码,处理不同的页面请求。 ActionForwardAction类的execute()方法,其返回值为ActionForward类型,是一种配置对象,代表了Web资源,可以是JSP页面、Servlet以及Action。其映射的是配置文件中的元素,封装了目标响应页面的URI。一般ActionForward是由Action使用的,定义为的子元素,有些是多个Action使用的,可以定义为全局元素的子元素。 ActionServlet处理流程在Struts框架中,控制器ActionServlet接收到一个客户端请求后,会将该请求委托给一个RequestProcessor对象进行处理。RequestProcessor对象根据配置文件struts-config.xml中与该请求匹配的子元素的定义对请求进行处理。为了使ActionServlet能接收客户端的请求,需要在Web应用程序的配置文件web.xml中定义ActionServlet和Servlet请求映射。 action org.apche.struts.action.ActionServlet c

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论