Java EE架构设计与开发实践(txt+pdf+epub+mobi电子书下载)


发布时间:2021-02-17 05:05:51

点击下载

作者:方巍,冯志强

出版社:清华大学出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

Java EE架构设计与开发实践

Java EE架构设计与开发实践试读:

前言

Java EE平台就是一组技术的集合,包括Java语言基础、JSP、EJB、JDBC及三大框架(Struts 2、Spring和Hibernate)等,是专为开发企业级应用而推出的标准规范和体系架构。这个平台主要用来实现小型、中型及大型系统的开发,具有跨平台、安全性高和易移植等优点。Java EE平台现已经成为电信、金融、电子商务、保险和证券等各行业的大型应用系统的首选开发平台。Java EE开发大致可分为两种方式:以Spring为核心的轻量级Java EE企业开发平台;以EJB 3+JPA为核心的经典Java EE开发平台。无论使用哪种平台进行开发,应用的性能和稳定性都有很好的保证,开发人群也有很稳定的保证。

目前市场上关于Java EE的图书虽然很多,但大多要么只讲理论,要么只讲如何使用软件,或者大篇地讲一些在实际项目中用不到的知识,甚至大段粘贴代码,使读者无所适从,掌握不到Java EE的真正要领,也导致初学者对Java EE产生畏惧心理,难以入门。为了帮助广大初学者和高校学生更加容易地掌握最新的Java EE技术,笔者精心编写了本书,力求从读者的学习特点和认知规律出发,让读者在较短时间内入门并掌握本书内容。

本书介绍的开发平台主要是以Struts 2.x+Spring 4.x+Hibernate 4.x为核心的轻量级Java EE。这种组合在保留经典Java EE应用架构的高度可扩展性和高度可维护性的基础上,降低了Java EE应用的开发和部署成本,对于大部分中小型企业应用是首选。在一些需要具有高度伸缩性和高度稳定性的企业应用中(如银行系统和保险系统),以EJB 3+JPA为核心的经典Java EE应用则具有一定的占有率。

本书是在作者多年从事Java EE教学和开发的基础上编写而成,编写时还参考了多本同类教材。本书采用理论与实践相结合的方式,通过简洁轻松的文字,以及简短精练的示例代码,力求让读者能尽快掌握Java EE开发技术。本书内容全面、新颖,章节编排合理,讲解由浅入深,循序渐进,是不可多得的Java Web开发技术参考书。为了方便教学,本书每章都配有大量的示范性案例和运行结果,章末还提供了大量习题,并配有完整课程设计案例。另外,为了方便读者学习和老师教学,本书还专门配有专业的教学课件。本书特色

1.提供丰富的实例分析和实习指导,提高教与学的效率

为了便于读者理解本书内容,提高教师讲授和学生学习的效率,本书每章都有详细案例和实践练习。每章后都提供了课程的实验指导,以方便师生进行课堂实验,将每章的理论知识结合实践开发加以灵活运用。另外,每章涉及的习题参考答案读者可以自己下载。

2.内容丰富,实用性强

本书在对Java EE的理论和相关工具进行讲解后,通过实际案例对Java EE开发方法进行了详细讲解,从而使读者快速进入实践项目的开发。读者参考本书的架构,完全可以身临其境地感受企业实际开发。

3.提供Java EE开发与应用过程中的常用技巧

本书对Java EE开发过程中经常出现的问题及解决方案和一些常用技巧进行了介绍,并配以大量的示例对技术要点在实际工作中的应用进行了讲解。另外,书中还对初学者经常出现的一些问题进行了归纳和总结,便于让读者能尽快上手。

4.高屋建瓴,启发性强

本书介绍的几种架构模式是当前最流行的Java EE架构模式。这些架构模式可以直接提升读者对系统架构设计的把握。

5.项目案例典型,实战性强,有较高的应用价值

本书最后提供了一个项目实战案例,该案例来源于作者所开发的实际项目,具有很高的应用价值和参考性。而且该案例采用了最新的Java EE框架实现,便于读者融会贯通地理解本书中所介绍的技术。这些案例稍加修改,便可用于实际项目开发中。

6.提供完善的配套资源和售后服务

本书免费提供书中涉及的源代码、软件开发包、习题参考答案和教学课件(PPT)等教学资源。另外,本书还提供了专门的服务邮箱bookservice2008@163.com,读者在阅读本书的过程中有任何疑问都可以通过该邮箱获得帮助。本书内容介绍

第1章Java EE概述,对Java EE平台的新特性及其编程技术做了阐述,并介绍了Java EE应用分层架构、技术规范、流行框架及开发环境的安装和配置等内容。

第2章Java Web开发概述,介绍了Web开发基础、HTTP基本的格式及特点、JDBC基本概念和原理、常用Web开发工具及Web应用服务器的安装与配置。

第3章HTML、JavaScript简介,介绍了HTML 5技术,以及CSS、JSON、jQuery、DWR和AJAX等,还详细讲解了Web开发中最常见的HTML开发技术。对于没有学过HTML的读者,可通过本章学会HTML的主要内容,从而进行后续的Java EE实训,并对HTML语言的其他细节具备自己查找资料进行学习的能力。

第4章JSP应用基础,介绍了Java EE开发表示层所用关键技术JSP的运行原理和基本语法,包括JSP、Servlet、JavaBean及过滤器Filter编程技术。

第5章Struts 2开发,阐述了Struts 2的安装和配置及其工作原理,并通过Struts 2的一些具体实例对Struts 2的开发过程、拦截器、类型转换、标签、输入校验和国际化等知识进行讲解。

第6章Hibernate基础,通过MyEclipse 2014中实现了3个具体案例来讨论Hibernate的入门知识。本章例子虽简单,但却涵盖了Hibernate 3和Hibernate 4的大部分基础内容,包括Hibernate应用的开发步骤、Hibernate开发过程的配置文件与映射文件、MySQL 5.7与SQL Server 2012数据库的连接配置及核心接口的使用,另外还讲解了Hibernate的JDCB事务编程和JTA事务的相关知识,并对事务概念等相关知识进行了回顾。

第7章Spring基础与应用,介绍了Spring框架的技术核心,如IoC容器、DI和AOP功能等。Spring是一个可高度重用的MVC框架,涵盖了应用系统开发所涉及的大多数技术范畴,提供了很多独立的控件可供选择。

第8章SSH整合架构开发,结合MyEclipse 2014开发工具,图文并茂地阐述了将三大框架整合开发的过程,即由Spring的配置文件管理Hibernate的配置,由Bean实现与数据库的连接,同时Struts 2把Action类的生成交给了Spring,并利用Spring的依赖注入完成业务逻辑对象的生成。

第9章Java EE课程设计案例,结合一个实际项目开发案例,讲解Java EE完整软件开发过程,该案例可以作为课程设计、综合实践、毕业设计等工程实践参考。

附录,提供了Java EE常见问题及解决方案,以及Java EE常见面试题和解答,以方便相关读者学习。本书读者对象● □ Java Web开发入门人员;● □ 高校Java EE课程教学人员;● □ 学习Java EE开发技术的人员;● □ 广大Java EE开发程序员;● □ Java应用程序开发人员;● □ 希望提高项目开发水平的人员;● □ 专业Java培训机构的学员;● □ Java EE测试人员;● □ 需要一本案头必备查询手册的人员。本书配套资源获取方式

本书涉及的源代码、软件开发包、习题参考答案和教学PPT等教学资源,需要读者自行下载。请登录清华大学出版社网站www.tup.com.cn,然后搜索到本书页面,在页面上找到“资源下载”栏目,然后单击“课件下载”或者“网络资源”按钮即可。本书作者

本书由方巍主笔编写,其他参与编写的人员还有刘琦、王秀芬、朱节中、徐江、文学志、郑玉、方春德、黄青青、王云金、王丽华、黄铄、袁文俊、韩立栋、姜丹丹、殷超凡、单滢滢、张俊杰、杨求龙。对于帮助完成编写工作的各位人士在此表示感谢!

本书的顺利出版,要感谢南京信息工程大学教材基金的资助,还要感谢清华大学出版社各位编辑的辛勤劳动和付出,另外对网络上提供有益资料的众多作者也在此表示感谢。

虽然我们对本书中所述内容都尽量核实,并多次进行文字校对,但因时间有限,加之水平所限,书中疏漏和错误在所难免,敬请广大师生和读者批评指正。编著者Java EE学习参考路线第1章 Java EE概述

Java EE(Java Platform,Enterprise Edition),即Java平台企业版。主要用于快速设计、开发、部署和管理企业级的软件系统。Java EE是J2EE的一个新的名称,之所以改名,目的还是让大家清楚J2EE只是Java企业应用,随着Web和EJB容器概念出现而诞生的。

本书将着重介绍Java EE的基本概念、原理、轻量级框架技术及实际案例应用开发等。

本章涉及Java EE简介、应用分层架构、Java EE技术规范、流行框架以及开发环境安装配置的介绍,Java EE各个框架的使用方法和工作流程是需要重点学习的内容。

本章要点:● □ 了解Java EE技术基本内容及新特性;● □ 掌握Java EE的应用分层框架;● □ 了解Java EE的技术规范;● □ 熟悉Java EE常见轻型框架;● □ 掌握Java EE开发环境的搭建。1.1 Java EE简介

我们知道,Java是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台的总称。用Java实现的HotJava浏览器(支持Java Applet)显示了Java的魅力:跨平台、动态的Web、Internet计算。从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器现在均支持Java Applet。Java 2平台包括标准版(J2SE)、企业版(J2EE)和小型版(J2ME)3个版本,如表1-1所示。每个版本名称中都带有一个数字“2”,这个“2”是指Java 2,自从Java 1.2发布后,Java改名为Java 2(不过人们平时仍然称为Java)。表1-1 Java的3种版本

Java 5.0版本后,J2EE、J2SE、J2ME分别更名为Java EE、Java SE、Java ME。本书主要是面向Java EE 5.0以上版本进行详细介绍。1.1.1 什么是Java EE

Java EE是Sun公司(2009年4月20日Oracle公司将其收购)为企业级应用推出的标准平台。它为应用程序组件定义了4种容器:Web、Enterprise JavaBean(EJB)、应用程序客户机和Applet,能够帮助开发和部署可移植、健壮、可伸缩且安全的服务器端Java应用程序。Java EE是在Java SE的基础上构建的,提供Web服务、组件模型、管理和通信API,可以用来实现企业级的面向服务体系结构(Service-Oriented Architecture,SOA)和Web 2.0应用程序。

与Java不同,Java是一门编程语言,而Java EE是一个标准中间体系结构,旨在简化和规范分布式多层企业应用系统的开发和部署。Java EE将企业应用程序划分为多个不同的层,并在每一个层上定义对应的组件来实现它。典型的Java EE结构的应用程序包括4层:客户层、表示逻辑层(Web层)、业务逻辑层和企业信息系统层。

客户层可以是网络浏览器或者是桌面应用程序。

表示逻辑层(Web层)、业务逻辑层都位于应用服务器上,它们都是由一些Java EE标准组件JSP(Java Server Page)、JSF(Java Server Face)、Servlet、EJB(Enterprise JavaBeans)和Entity等来实现,这些组件运行在Java EE标准的应用服务器上,以实现特定的表现逻辑和业务逻辑。

企业信息系统层主要用于企业信息的存储管理,主要包括数据库系统、电子邮件系统、目录服务等。Java EE应用程序组件经常需要访问企业信息系统层来获取所需的数据信息。

Java EE体系架构的实施可显著提高企业应用系统的可移植性、安全性、可伸缩性、负载平衡和可重用性。1.1.2 Java EE的新特性

目前最新版本Java EE 7扩展了Java EE 6,利用更加透明的JCP和社区参与来引入新的功能,如图1-1所示,主要包括加强对HTML 5动态可伸缩应用程序的支持、提高开发人员的生产力和满足苛刻的企业需求。

Java EE 7新特性如下。图1-1 Java EE新特性1.提高开发人员的生产

从Java EE 5开始,重心就一直放在提高开发人员的生产力上。这对于Java开发者来说非常重要,因为这使得使用Java EE进行开发更加便捷,更重要的是能够满足快速管理和生产的需求。鉴于此,Java EE 7大大提高了开发人员的生产力。首先,减少了编写大量核心业务逻辑所需要的样板代码。其次,该平台引入更多的注释POJOS来降低XML配置的复杂性。最后,Java EE 7使用更紧密集成的技术,提供一个更加无缝的开发体验。2.加强对HTML 5动态可伸缩应用程序的支持

HTML 5是包括HTML、JavaScript和CSS3在内的一套技术组合,其加快了开发人员创建高度互动的应用程序的步伐。开发出的应用程序都是以高度互动的方式提供实时的数据,如聊天应用程序、比赛实况报导等,并且这些应用程序只需要编写一次,就可以应用在桌面、移动客户端等不同设备上,具有非常好的跨平台性。这些高度动态的应用程序,使得用户可以在任何地点任何时间进行访问,从而对服务器端向客户端传送数据的规模提出了更高的要求。Java EE 7在更新现有技术如JAX-RS 2.0、Java Server Faces 2.2和Servlet 3.1 NIO基础上,又借助新的应用技术WebSockets和JSON处理,为支持动态应用程序HTML 5奠定了坚实的基础。3.满足苛刻的企业需求

为更好地满足企业的需求,Java EE 7提供了许多新功能:● □ 细化批处理作业,形成可管理的区块,以实现不间断的

OLTP性能。● □ 简化多线程并发任务的定义,以提高可扩展性。● □ 提供具有选择性和灵活性的事务应用程序等。

Java EE 7开发的开放性,使得Java社区、供应商、组织和个人都能参与其中。19个来自世界各地的用户组,包括来自北美、南美、欧洲和亚洲,都参与了“采用JSR”计划,提供了宝贵的反馈意见和代码示例以验证Java规范(JSR)的API。在最新发布的Java EE平台中都大大简化了访问集装箱服务的API,同时大大拓宽了服务范围。Java EE 7继续秉承了简化性和高效性的趋势,并进一步拓宽了平台范围。4.减少冗余代码

Java EE 7一直在致力于减少在核心业务逻辑代码运行前必须执行的样板代码。减少样板代码的3大核心区域是默认资源、JMS 2.0和JAX-RS客户端API。默认资源是一个新的功能,要求平台提供商预配置一个默认的数据源和一个默认的JMS连接工厂。这可以让开发人员直接使用默认的资源而无须进行额外的定义。JMS 2.0在可伸缩性和可移植性上经历了重大的改进,减少了冗余代码,已运用在无数的产品部署上,事实证明其是一个良好的规范,能够较好地满足企业的需求。5.更多带注释的POJO

通过注释Java EE使开发人员更专注于Java对象的编程而无须关注烦琐的配置。

CDI现在默认情况下已不需要使用beans.xml文件就可以直接使用。开发人员可以不需要任何配置而是简单的使用@Inject来注入任何Java对象。包括新的资源注释@JMSDestinationDefinition和@MailSessionDefinition ,使得开发人员在源代码中就可以指定元数据资源,简化了DevOps体验。6.更紧密集成的平台

Java EE 6引入了Managed Beans 1.0 ,第一步朝着EJBs、JSF Managed Beans和CDI beans发展。Java EE 7继承了这一点,例如,对JSF Managed Beans进行了改进以更好支持CDI Beans。Java EE 7为平台引入了易用的EJB容器管理事物,使用基于CDI拦截器的解决方案来保证事务可用在CDI managed beans和其他Java EE组件中,把注释@Transactional应用到任何CDI bean或者任何支持事务的方法中。

Bean Validation在Java EE 7中使用广泛,现在可以用于方法级别的验证,包括内置和自定义的约束。约束可被应用于方法的参数以及返回值。约束也可以使用灵活渲染和违反约束的字符串格式的Java EE的表达语言。

Bean Validation也延伸到JAX-RS 2.0。注释约束可以应用到公共构造函数的参数、方法参数、字段和bean的属性。此外,它们还可以修饰资源类、实体参数和资源的方法。例如,约束可以通过@ POST和@ PUT应用于JAX-RS方法参数来验证表单提交的数据。7.通过精简现有技术来简化Java EE

Java EE 7中新增加了许多新的特性,有些老的特性和功能已经被更简单的特性所替代或直接弃用。Java EE 6为过时技术的弃用和功能的修剪引入了一个正式的流程,以下的API在Java EE 7中已成可选,但在Java EE 8中将会被移除。● □ Java EE Management(JSR-77),原本是用于为应用服务器

创建监控管理的API,可各大供应商对此API热情并不高涨。● □ Java EE Application Deployment(JSR-88),JSR 88是当初

用于J2EE应用程序在应用服务器上进行配置和部署的标准API。

可是该API始终没有得到众多供应商的支持。● □ JAX-RPC,是早期通过RPC调用和SOAP Web Services进行

交互的编程模型。由于Web Services成熟后从RPC模型中分离出

来,被更加健壮和具备更多特性的JAX-WS API所替代。● □ EJB 2.x Entity Beans CMP,复杂、笨重、过度复杂的EJB2.*

的Entity Bean模型已经被Java EE 5基于POJO的流行轻量级JPA

持久层模型所代替。8.低延迟数据交换:Java API for WebSocket 1.0

越来越多的Web应用程序依赖于从中央服务器及时获取并更新数据。基于HTTP的WebSockets为解决低延迟和双向通信提供了一种解决方案。在WebSocket API的最基层是一个带注释的Java对象(POJO),代码如下:

通过注释@ServerEndpoint来指定一个URI,如客户端连接、接收消息和客户端断开这样的回调函数都可以用注释来指定。WebSocket API的最基层支持发送和接收简单文本和二进制信息。API的简单性也使得开发人员可以快速入门。

当然,功能丰富的应用拥有更复杂的需求,因此需要支持对最基础的网络协议进行控制和自定义,而WebSocket API正好能够满足以上需求。另外,WebSocket利用现有Web容器的安全特性,开发人员只需付出较少的代价就可以建立良好的保密通信。9.简化应用数据分析和处理:Java API for JSON Processing 1.0

JSON作为一个轻量级的数据交换格式,被应用在许多流行的Web服务中用来调用和返回数据。许多流行的在线服务都是使用基于JSON的RESTful服务。在Java EE 7之前,Java应用程序使用了不同的类库去生成和解析RESTful服务中的JSON对象。然而,现在这个功能已被标准化。

通过Java API中的JSON Processing 1.0,JSON处理过程标准化为一个单一的API,应用程序不需要使用第三方的类库。这样使得应用程序更小更简便。同时API包括了支持任何转换器和生成器实现的插件,使得开发人员可以选择最好的实现方式去完成工作。10.可扩展的RESTful服务:JAX-RS 2.0

JAX-RS 2.0增加了异步响应处理,这对于支持对数据有着高要求的HTML 5客户端的扩展是至关重要的。异步处理是一种更好更有效利用线程处理的技术。在服务器端,处理请求的线程在等待外部任务去完成时应该避免阻塞,从而保证在这一时间段内到达的其他请求能够得到响应。

同样,在客户端,一个发出请求的线程在等待响应的时候也会发生阻塞,这影响了应用程序的性能。新的JAX-RS 2.0异步客户端API使得客户端调用RESTful可以和其他客户端活动并行执行。异步的好处是使得一个客户端可以同时调用多个后台服务,对于一个使用者来说减少了总体的延迟时间。

同时为增强RESTful服务,JAX-RS 2.0开发人员可以使用过滤器和实体拦截器。这样开发人员就可以使用标准的API实现过滤和拦截功能,使开发过程变得更加便捷和高效。11.增强开发的易用性:JSF 2.2

Java Server Faces(JSF)是一种用于构建Web应用程序的Java新标准框架。其提供了一种以组件为中心来开发Java Web用户界面的方法,从而简化了开发。在这个版本中,JSF增加了对HTML 5的支持。JSF 2.2增加了一个叫pass-through elements的新功能,并为现有的元素增加了一系列的新属性,如输入元素tel、range和date等。不幸的是,现有的JSF组件不能识别这些新的属性,因此JSF应用程序会忽略这些属性不能进行使用,直到创建专有的解决方案。对于pass-through elements,JSF渲染器将会忽略这些元素,只是把它们传给支持HTML 5的浏览器,这使得可以利用现有的JSF组件来利用HTML 5的特性来正常渲染。

JSF引入了一个新的pass-through命名空间http://xmlns.jcp.org/jsf/passthrough映射到“p:”,任何组件的name/value对都可以以“p:”开始,然后传给浏览器。HTML 5 "type=color"不需要JSF组件的任何解析就可以传递给浏览器。代码如下:

HTML 5的动态性使得服务器端处理信息更新的请求不断增多。在Java EE 6,Servlet异步I/O通过移除“一个请求需要一个线程”的限制,使一个线程可以处理多个并发请求。这可以使HTML 5客户端快速得到响应。但是,如果服务器端读取数据的速度比客户端发送的速度要快,那么可能会由于缓慢的客户端连接而不能提供更多的数据导致线程阻塞,这样就限制了扩展性。在Java EE 7中使用新的事件驱动API Servlet 3.1从客户端读取数据将不会造成阻塞。如果有数据可用时,Servlet线程将会读取和处理这些数据,否则就去处理其他请求。12.提高批处理应用程序的效率使开发过程变得更加便捷和高效

绝大部分的Java EE应用都是在线用户驱动的系统,但同时有一些需要进行批处理的服务器端应用程序,尤其是离线分析和ETL等。这些面向批处理的应用程序是非交互式的、需要长时间运行,这些任务通常需要大量计算,同时可以按顺序或者并行执行,并可以通过特定的事件启动或者定时调度。批处理较适合选择闲置的时间进行处理,这样可以有效利用计算机资源。

以前,对于批处理程序没有标准的Java编程模型。现在,批处理应用程序为Java平台提供了如图1-2所示的非常容易理解的模型。批处理过程包括任务、步骤、存储库、读取—处理—写入模式和工作流等。图1-2 用步骤描述工作

如图1-2所示,一个任务job代表一系列执行离散业务流程但又密切相关的步骤。步骤可以按顺序或者并行执行。同时,在同一个工作流中,当前步骤是可选的,基于前一步骤的运行结果决定当前步骤将被执行或者跳过。另外,步骤可以根据实际的需要被重新执行。存储库(repository)存储了当前任务的信息,如任务的最后执行时间。通过操作员(operator)可以对任务进行排序、开始、停止、暂停和取消操作。1.2 Java EE应用分层架构

对程序员来说很常见的一种情况是在没有合理的程序架构时就开始编程,没有一个清晰的和定义好的架构的时候,大多数开发者和架构师通常会使用标准式的传统分层架构模式(也被称为多层架构)——通过将源码模块分割为几个不同的层到不同的包中。不幸的是,这种编码方式会导致一系列没有组织性的代码模块,这些模块缺乏明确的规则、职责和同其他模块之间的关联。这通常被称为架构大泥球。

应用程序缺乏合理的架构一般会导致程序过度耦合、容易被破坏、难以应对变化,同时很难有一个清晰的版本或者方向性。这样的结果是,如果没有充分理解程序系统里每个组件和模块,就很难定义这个程序的结构特征,有关于程序的部署和维护的基本问题都难以回答,例如:程序架构是什么规模?应用程序有什么性能特点?应用程序有多容易应对变化?应用程序的部署特点是什么?架构是如何反应的?

好的架构模式能帮助程序员定义应用程序的基本特征和行为。例如,一些架构模式会让程序自然而然地朝着具有良好伸缩性的方向发展,而其他架构模式会让程序朝着高度灵活的方向发展。知道了这些特点,了解架构模式的优点和缺点是非常必要的,它能帮助程序员选择一个适合自己特定的业务需求和目标的程序。1.2.1 分层模式概述

层(layer)体系架构模式就是把应用系统分解成子任务组,其中每个子任务组处于一个特定的抽象层次上。1.层模式概述

层模式组织成一个层次结构,每一层为上层服务(Service Provider),同时也作为下层的客户端。在一些层次系统中,除了包含一些输出函数外,内部的层只对相邻的层可见。这样的系统中构件在一些层实现了虚拟机(在另一些层次系统中层是部分不透明的)机制。层的调用通过决定层间如何交互的协议来定义。这种风格支持基于可增加抽象层的设计。这样,允许将一个复杂问题分解成一个层堆栈的实现。由于每一层最多只影响两层,同时只要给相邻层提供接口,允许每层用不同的方法实现,因此为软件重用提供了强大的支持。2.考虑的因素

层模式是最成熟的软件体系架构模式,起源于早期的系统设计,由开始的函数调用,作为函数库,供其他程序进行调用,一般在系统设计时,由一系列高层模块和底层模块处理构成,并且高层的模块依赖于底层。因此为了完成系统的设计必须要考虑以下因素:● □ 源码的修改会影响整个系统,应该被限定在一个部件内部而

不影响其他模块。● □ 接口应当稳定,甚至应被规范化。● □ 系统的架构应该灵活,可以更换。● □ 系统的开发需要被划分为多个部分,如团队开发或者异地开

发。3.模式结构

从系统高层的观点来看设计方案比较简单,它把系统分为几个层次并且把它们叠加起来,最下面的抽象层称为第一层,是系统基础。依次类推,把n层放在第n-1层上,其结构如图1-3所示。4.非软件描述

层模式在现实生活中很常见,如古代中国的封建社会等级森严的制度下,把人分为几个等级,其实就是分层,上层可以指示下层。不过现有企业管理制度中,与这种管理理念相适应的管理体制是垂直的自上而下的泛官僚体制结构。其结构设置表现为自上而下的单向层级制,这种结构有利于政令的传达和执行,保证管理的效率,但是官僚特性也很明显,如图1-4所示。图1-3 模式结构图1-4 官僚体制结构

层模式在现代物流也很常见,如图1-5所示,自行车在运输的过程中,首先在自行车厂进行出厂,由工作人员进行打包,再进行装运,最后通过相应的分销商,进行组装销售。图1-5 自行车运输过程5.优点与缺点

层模式是最常用的一种软件体系架构模式。从其实现和结构图中可以总结出该模式的优点和缺点如下。● □ 层次的复用性。如果每个层次有很好的抽象接口,那么可以

被其他环境复用。● □ 支持基于抽象程度递增的系统设计。使设计者可以把一个复

杂系统按递增的步骤进行分解,使系统更容易模块化。● □ 支持功能增强。因为每一层至多和相邻的上下层交互,因此

功能的改变最多影响相邻的上下层。● □ 可替换性。因为独立的层次设计很容易被功能相同的模块替

换但是在实际的项目中,该模式也有相应的不足缺点。● □ 低效率。分层结构通常要比单层结构的效率低。因为有时高

层过分依赖底层的服务,因此必须穿过许多中间层进行数据的传

送,甚至多次改变行为的连锁反应。1.2.2 Java EE的结构1.J2EE层模式的背景

如图1-6所示的架构大家都比较熟悉,为软件从两层体系架构方式到三层的转变。

由于两层的架构方式存在以下缺点:● □ 软件部署开销很大。每个客户端数据库驱动都需要进行安装

和设置,一旦程序发生改变就需要重新部署,这意味着巨大的开

销。● □ 改变数据结构的开销很大。客户端应用程序一般通过

JDBC、ODBC、ADO等直接访问数据库,这表明客户程序直接

与底层数据结构交互。如果改变数据结构来处理新的过程,就需

要重新部署每个客户端。图1-6 两层架构模式到三层架构模式● □ 改变数据库类型的开销很大。由于客户端直接使用特定数据

库的API和特定的存输过程、触发器等,因此数据库类型的改变

会引起很多的修改。

因而,可以通过把业务逻辑从存储过程和本地的业务逻辑分离出来,独立为一层,这样就是应用层架构模式最经典的三层架构(3-tier architecture)。(1)表现层(Presentation layer,PL)

主要负责数据的输入接口和输出。输入指在Web、客户端或为外界提供的API的数据请求接口;输出则是Web界面、客户端输出、API的数据输出。页面模版、对外API数据格式化、Request接受、Output推送、Commander操作都在这一层。(2)业务逻辑层(Business Logic Layer,BLL)

主要负责从原始数据到结果数据的中间过程。系统中最关键、最重要的一层。也被称作领域层(Domain Layer),领域中所有对象的逻辑关系和功能实现算法都在这一层中。业务逻辑、服务等处于这一层。(3)数据访问层(Data Access Layer,DAL)

主要是对原始数据的操作层(CRUD操作),为业务逻辑层或表示层提供数据服务。数据源包括,数据库、文件、网络存储系统、其他系统开放的API、程序运行上下文环境等。许多框架中的ORM、Active Record、Dao类或库都处于这一层。

三层架构能较好地满足大部分的业务场景,实现高内聚、低耦合。不同层次之间逻辑解耦或者隔离,变为弱依赖,每层的逻辑内聚。从层次角度看,使系统有了较好的可扩展性。但三层架构也有以下不足:

业务逻辑复杂度高的系统,业务逻辑层将变得庞大臃肿,为了解决这个问题,四层架构/多层架构被人提出。不关注表现层实现的四层架构(4-tier architecture),和三层架构极为类似,分为表示层、服务层、业务逻辑层、数据访问层。除了服务层,其他三层和三层架构的三层几乎一致,而服务层是对三层架构中业务逻辑层的再细分,以解决业务逻辑层经常出现的臃肿问题。

四层架构是Java EE推荐的分层架构,尤其是Spring+Struts+Hibernate(SSH)组合的框架将Dao层、Service层做了明确的定义和规范。由于SSH框架被广泛使用,其他框架,包括其他语言的框架(如PHP)也都借鉴SSH,因此在这些框架里能看到Dao类、Service类的抽象定义。

在三层架构中,把业务逻辑层的上层逻辑分离出来,组成服务层(Service Layer)。服务层往往是逻辑的表示层,即向上层(表示层)提供逻辑的外观。事务控制、安全检查、事务脚本等可以置入业务层。四层架构是三层架构的发展或进化。服务层的出现让三层架构的业务逻辑层不再变得臃肿。同样再进一步细分就是五层架构了。

这样,Java EE应用架构大致上可分为如图1-7所示情况。图1-7 Java EE应用架构(1)Domain Object(领域对象)层

此层由系列的POJO(Plain Old Java Object,普通的、传统的Java对象)组成,这些对象是该系统的Domain Object,往往包含了各自所需要实现的业务逻辑方法。与业务逻辑层可同在一层。(2)DAO(Data Access Object,数据访问对象)层

此层由系列的DAO组件组成,这些DAO实现了对数据库的创建、查询、更新和删除(CRUD)等原子操作。在经典Java EE应用中,DAO层也被改称为EAO层,EAO层组件的作用与DAO层组件的作用基本相似,只是EAO层主要完成对实体(Entity)的CRUD操作,因此简称为EAO层。(3)业务逻辑层

此层由系列的业务逻辑对象组成,这些业务逻辑对象实现了系统所需要的业务逻辑方法。这些业务逻辑方法可能仅仅用于暴露Domain Object对象所实现的业务逻辑方法,也可能是依赖DAO组件实现的业务逻辑方法。(4)MVC控制层

此层由系列控制器组成,这些控制器用于拦截用户请求,并调用业务逻辑组件的业务逻辑方法,处理用户请求,并根据处理结果转发到不同的表现层组件。(5)表现层

此层由系列的JSP页面、Velocity页面、PDF文档视图组件组成。此层负责收集用户请求,并将显示处理结果。

以上各层的Java EE组件之间以松耦合的方式耦合在一起,各组件并不以硬编码方式耦合,这种方式是为了应用以后的扩展性。从上向下,上面组件的实现依赖于下面组件的功能;从下向上,下面组件支持上面组件的实现。

当然,四层架构和三层架构都存在一个不足,就是不强调前端的实现。当面对需要个性化定制界面、复杂用户交互、页面之间有依赖关系时,需要更好的解决方案。

另外,还有一种MVC模式,其主要包括三部分,Model-View-Controller(模型-视图-控制器)。相比于三层架构或者四层架构,MVC最突出的优点是前端控制的灵活性。如果MVC的两部分View和Controller剥离出来,实际上是一种叫前端控制器模式的设计模式。

MVC的缺点很明显,将前端以外逻辑都放到Model里,随着业务增多,Model将越来越难以维护。MVC并不适合称为一种分层架构,更适合称为一种复合的设计模式。有人还将MVC模式归类为前端架构。MVC模式最适合新闻门户网站、展示类网站,此类网站业务逻辑往往较为简单。MVC模式最适合产品初创时被使用,因为项目初期逻辑简单,使用MVC模式产品能快速成型,可以尽早投放市场进行试验(多数可能会被淘汰),这样就降低了试验成本。MVC模式最适合产品原型的实现(注重前端)。

总之,分层的选择要平衡成本和风险,使收益最大化。业务逻辑不要局限于四层架构或三层架构,依据领域业务特点可更细地划分层次。2.J2EE分层应用概述

J2EE平台为设计、开发、集成和部署企业应用提供基于组件的方法。这种方法不但能降低成本,还能对整个设计和实施过程进行快速跟踪。J2EE平台能提供多层分布式应用模型,能重用组件,能为用户提供统一安全模型和灵活的事务处理控制。在J2EE规范中进行了以下的分层,不同的组件可以在逻辑上分为三层:后端层、中间层和网络层。这只是一个逻辑表示,根据应用程序的要求,组件可以被限制到不同的层。Java EE 7体系结构及其提供的主要服务如图1-8所示。● □ JPA(Java Persistence API,Java持久化API)和

JMS(Java Message Service,Java信息服务),JPA是在数据库

中存储对象的ORM(Object/relational mapping,对象关系表)定

义提供基本的服务,如数据库访问。JMS这个API保证服务器和

应用在网络上的通信可靠、异步。如ActiveMQ实现了JMS。● □ JCA(Java EE Connector Architecture,J2EE连接器架构)

允许连接到原有系统,批量处理非交互、块状任务。通过此服务

可以连接不同开发架构的应用程序。● □ Managed beans和EJB(Enterprise Java Beans,企业级Java

Beans)使用POJO基本服务,提供一种简化的编程模型。

Managed Beans可以执行嵌入代码的Java对象。在Spring框架中,

这是一些添加了@Autowired注释的对象。图1-8 Java EE 7体系结构● □ CDI(Contexts And Dependency Injection,上下文和依赖注

入),提供适用于各种组件的概念拦截和注释,如类型安全的依

赖注入,使用拦截器和一套共同的注释表示横切关注点。JTA事

务拦截器实现,可以应用于任何POJO。● □ CDI是Java EE整个下一代类型安全的依赖注入的事实上的

API。在Spring框架中,应用程序可以设计应用的上下文,控制

反转(IoC)和依赖注入功能(DI)CDI扩展允许以标准的方式

超出现有能力来扩展平台。● □ 应用客户端组件Servlets和Java Server Pages(JSP)组件(也称为Web组件),Enterprise JavaBeans组件。● □ Web Services使用JAX-RS(定义REST含状态传输之类服务

的API)、JAX-WS、JSF、JSP和EL定义编程模型的Web应用。

Web Fragments允许以自然方式自动注册第三方Web框架。

JSON提供了一种方法来解析和Web层的生成JSON结构。Web

Socket可以通过一个TCP连接建立双向、全双工的通信信道。● □ Bean Validation标准化了Java平台的约束定义、描述和验

证,即使用注释的方式对Java Bean进行约束验证。

提示:● 微软的.NET开发架构也是由Java EE而来。● 著名的.NET架构在推出时,也大量参考了Java EE中各个组成部

分,并提出了与之类似的企业开发架构。也就是两种架构之间相

互学习、互相取长补短,为程序开发人员提供更多更好的程序开

发支持。1.3 Java EE技术规范

Java EE平台由一整套服务(Services)、应用程序接口(APIs)和协议构成,对开发基于Web的多层应用提供了功能支持,为进一步了解Java EE 7.0框架和其提供的核心API及组件,下面对Java EE中的常用技术规范进行简单的描述。

多层式应用(Multitier Application):多层式应用(或者多层式架构)分成多个逻辑部分,大多在多层服务器上实现。例如,三层应用模型:用户和浏览器,应用服务器,数据库服务器,其中应用服务器和数据库服务器就是分别在不同的服务器上来处理应用的请求。

多层式服务(Multitier Service):以三层架构模型的服务为例,应用服务器响应用户的请求,数据库服务器响应应用服务器的查询求情。

部署描述符(Deployment Descriptor ):这是一个为打包好的应用提供部署信息的XML文件。

JavaBean Component:Java Bean的同义词,主要用在JSP范例中。Java Bean则是由一些包含私有属性的Java类组成,对外提供get和set方法。从技术上讲,这些类必须保证有一个不含参数的构造器并且实现Serializable接口。

JDBC(Java Database Connectivity):JDBC API为访问不同的数据库提供了一种统一的途径,ODBC一样,JDBC对开发者屏蔽了一些细节问题,另外,JDCB对数据库的访问也具有平台无关性。

JNDI(Java Name and Directory Interface):JNDI API被用于执行名字和目录服务。一种能存储和检索资源或者通过名字查找信息的方式。

EJB(Enterprise JavaBean):J2EE技术之所以赢得媒体广泛重视的原因之一就是EJB。它们提供了一个框架来开发和实施分布式商务逻辑,由此很显著地简化了具有可伸缩性和高度复杂的企业级应用的开发。EJB与传统的Java Beans无关,主要试图从多重应用的后端(也就是服务器端)来压缩事务逻辑,其中一个试图解决的问题是确保数据库中事务处理的完整性。注意:EJB有多个版本,并且3.0版本已经从早期的版本分离出来。

RMI(Remote Method Invoke):正如其名字所表示的那样,RMI协议调用远程对象上的方法。它使用了序列化方式在客户端和服务器端传递数据。RMI是一种被EJB使用的更底层的协议。

XML(Extensible Markup Language):XML是一种可以用来定义其他标记语言的语言,被用来在不同的商务过程中共享数据。XML的发展和Java是相互独立的,但是,它和Java具有的相同目标正是平台独立性。通过将Java和XML的组合,可以得到一个完美的具有平台独立性的解决方案。

Java EE容器(Java EE Container):这是部署组装Java EE组件的地方(也就是应用程序服务器)。它定义了Web容器(包含servlets和JSP),还定义了EJB容器(包含的企业级Java Bean)以及应用客户端容器(运行独立的应用程序)和在浏览器上运行的小程序容器。

Java IDL/CORBA:在Java IDL的支持下,开发人员可以将Java和CORBA集成在一起。它们可以创建Java对象并使之可在CORBA ORB中展开,或者还可以创建Java类并作为和其他ORB一起展开的CORBA对象的客户。后一种方法提供了另外一种途径,通过它Java可以被用于将新的应用和旧的系统相集成。

JSP(Java Server Pages):JSP页面由HTML代码和嵌入其中的Java代码所组成。服务器在页面被客户端所请求以后对这些Java代码进行处理,然后将生成的HTML页面返回给客户端的浏览器。

Java Servlet:是用Java写的一个服务器端小程序,可以处理用户的HTTP请求,返回结果。它扩展了Web服务器的功能,作为一种服务器端的应用,当被请求时开始执行,这和CGI Perl脚本很相似。Servlet提供的功能大多与JSP类似,不过实现的方式不同。JSP通常是大多数HTML代码中嵌入少量的Java代码,而servlets全部由Java写成并且生成HTML。

JavaMail:JavaMail是通过应用程序发送邮件方式的API,它提供了一套邮件服务器的抽象类,不仅支持SMTP服务器,也支持IMAP服务器。

JMS(Java Message Service):Message Service是用于和面向消息的中间件相互通信的应用程序接口(API)。它既支持点对点的域,又支持发布/订阅(publish/subscribe)类型的域,并且提供对下列类型的支持:经认可的消息传递,事务型消息的传递,一致性消息和具有持久性的订阅者支持。JMS还提供了另一种方式来将开发者的应用与旧的后台系统相集成。

JTA(Java Transaction Architecture):JTA定义了一种标准的API,应用系统由此可以访问各种事务监控,划清数据库中上行和下行的通信界限。

JTS(Java Transaction Service):JTS是CORBA OTS事务监控的基本的实现。JTS规定了事务管理器的实现方式。该事务管理器是在高层支持Java Transaction API(JTA)规范,并且在较底层实现OMG OTS specification的Java映像。JTS事务管理器为应用服务器、资源管理器、独立的应用以及通信资源管理器提供了事务服务。

JCA(Java EE Connector Architecture,J2EE连接器架构):使应用程序能和信息系统(通常是数据库)通信。

JPA(Java Persistence API,Java持久化API):这是一个在数据库中存储对象的ORM(Object/Relational Mapping,对象关系表)定义。

JAAS(Java Authentication and Authorization Service,Java鉴别与授权服务):识别并控制服务权限的一张方式。

JAXP(Java API for XML Processing,加工XML文件的API):提供了处理XML文件的方式。

JAXR(Java API for XML Registries,提供XML注册的API):一个可以注册包含了元数据的XML的API。

JAX-RS:定义REST(含状态传输)之类服务的API。

JACC(Java Authorization Contract for Containers):在J2EE应用服务器和特定的授权认证服务器之间定义的一个连接的协约。

JASPIC(Java Authentication Service Provider Interface,Java认证服务提供者接口):这是与JACC互补认证的SPI(也就是服务API,Service API)。它定义了应用程序如何通过传统的认证服务。

Managed Beans:一个可以执行嵌入代码的Java对象。在Spring框架中,这是一些添加了@Autowired注释的对象。

CDI(Contexts and Dependency Injection for Java EE,上下文和依赖注入):CDI是Java EE整个下一代类型安全的依赖注入的事实上的API。在Spring框架中,应用程序可以设计应用的上下文,控制反转(IoC)和依赖注入功能(DI)。

Bean确认:通过设定好的规则判断Java Beans的状态是有效的。1.4 敏捷轻型框架

Java EE是Sun公司开发的一组技术规范与指南,其中包含的各类组件、服务架构及技术层次,均有共同的标准及规格,让各种依循Java EE架构的不同平台之间,存在良好的兼容性,解决过去企业后端使用的信息产品彼此之间无法兼容,企业内部或外部难以互通的窘境。Java EE开发过程经常使用的轻型框架主要有:Hibernate、Struts、Spring、ibatis、JSF、Tapestry和WebWork等,本书重点介绍其中的Struts、Spring、Hibernate(简称SSH)框架。1.4.1 Hibernate简介

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲地使用对象编程思维来操纵数据库。Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。Hibernate的核心接口一共有5个,分别为:Session 、SessionFactory、Transaction 、Query和Configuration 。这5个核心接口在任何开发中都会用到。通过这些接口,不仅可以对持久化对象进行存取,还能够进行事务控制。

Hibernate版本更新比较快,现在的版本已经更新到了4.x,功能非常强大。跟3.x相比,有了一些改进,主要存在以下区别。(1)4.x版本中buildSessionFactory()已经被buildSessionFactory(ServiceRegistry ServiceRegistry)取代,不过有解决办法,如下代码所示。(2)Annotation:org.hibernate.cfg.AnnotationConfiguration;Deprecated. All functionality has been moved to Configuration。这个注解读取配置的class已经废弃,现在读取配置不需要特别注明是注解,直接用Configuration cfg = new Configuration();就可以读取注解。Hibernate 4.x版本中推荐使用annotation配置,所以在引进jar包时把requested里面的包全部引进来就已经包含了annotation必须包了。(3)Hibernate 4.x跟Hibernate 3.x以上版本一样,可以自动创建表。

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载