轻量级Java EE企业应用实战(第3版)的前言
经过多年沉淀,Java EE平台已经成为电信、金融、电子商务、保险、证券等各行业的大型应用系统的首选开发平台。目前Java行业的软件开发已经基本稳定,这两三年内基本没有出现什么具有广泛影响
力的新技术。Java EE开发大致可分为两种方式:以Spring为核心轻量级Java EE企业开发平台;以EJB 3+JPA为核心的经典Java EE开发平台。无论使用哪种平台进行开发,应用的性能、稳定性都有很好的保证,开发人群也有很稳定的保证。
《轻量级Java EE企业应用实战(第3版)—Struts 2+Spring 3+Hibernate整合开发》介绍的开发平台,就是以Struts 2.2+Spring 3.0+Hibernate 3.6(实际项目中可能以JPA来代替Hibernate )为核心的轻量级Java EE,这种组合在保留经典Java EE应用架构、高度可扩展性、高度可维护性的基础上,降低了Java EE应用的开发、部署成本,对于大部分中小型企业应用是首选。在一些需要具有高度伸缩性、高度稳定性的企业应用(比如银行系统、保险系统)里,以EJB 3+JPA为核心的经典Java EE应用则具有广泛的占有率。本书的姊妹篇《经典Java EE企业应用实战》主要介绍了后一种Java EE开发平台。
《轻量级Java EE企业应用实战(第3版)—Struts 2+Spring 3+Hibernate整合开发》主要升级了《轻量级Java EE企业应用实战》的知识,采用最新的Tomcat 7作为Web服务器,全面而细致地介绍了Servlet 3.0的新特性,并将Struts升级到Struts 2.2.1,Spring升级到3.0.5,Hibernate升级到3.6.0。书中详细介绍了Spring和Hibernate的“零配置”特性,并充分介绍了Struts 2的Convention(约定)支持。本书不仅介绍了Spring 2.x的AOP支持,详细介绍了Spring 2.x中Schema配置所支持的util、aop、tx等命名空间,还简要讲解了AspectJ的相关内容。本书也重点介绍了Spring 3.0的新功能:SpEL,SpEL不仅可以作为表达式语言单独使用,也可与Spring容器结合来扩展Spring容器的功能。
《轻量级Java EE企业应用实战(第3版)—Struts 2+Spring 3+Hibernate整合开发》创作感言
笔者首先要感谢广大读者对本书第2版的认同,在将近2年的时间内,本书第2版的销量高达178万码洋,得到无数Java学习者的认同,成为Java EE开发者首选的经典图书。考虑到目前技术的升级,笔者现将本书的全部技术升级到最新版、最前沿,以飨读者。
还有一个值得介绍的消息:本书姊妹篇《经典Java EE企业应用实战》(由电子工业出版社出版,ISBN 978-7-121-11534-9)现已上市。学习本书时可以采用“轻经合参”的方式来学习:“轻”指的是以“SSH”整合的轻量级Java EE开发平台,“经”指的是以“EJB 3+JPA”整合的经典Java EE开发平台;这两种平台本身具有很大的相似性,将两种Java EE开发平台结构放在一起参考、对照着学习,能更好地理解Spring、Hibernate框架的设计思想,从而更深入地掌握它们。与此同时,也可以深入理解EJB 3与Spring容器中的Bean、EJB容器与Spring容器之间的联系和区别,从而融会贯通地掌握EJB 3+JPA整合的开发方式。
经常有读者写邮件来问笔者,为何你能快而且全面地掌握各种Java开发技术?笔者以前做过一些零散的回复。这里简单地介绍笔者学习Java的一些历史与方法,希望广大读者从中借鉴值得学习的地方,避开一些弯路。
笔者大约是1999年开始接触Java,开始主要做点Applet玩(当时笔者对Applet做出来的动画十分倾心)。后来开始流行ASP、JSP,笔者再次喜欢上ASP、JSP那种极其简单的语法、短期内的快速上手,后来断断续续用ASP、JSP写了多个小型企业网站、BBS、OA系统之类——不知道其他人是什么经历,笔者选择编程一方面是因为个人爱好和“自豪感”(觉得能做出各种软件,有点成就感),另一方面是因为编写软件可以轻易地卖点钱(是不是很俗?),但这个目的笔者无法回避——由于出生在湖北一个贫穷的乡下,所以在同济念书时笔者常常为了开饭而写代码,或许有一些程序员和笔者会有相同的感触。
在后来的开发过程中,笔者发现纯粹的JSP开发虽然前期很方便,但由于开发时代码重复得厉害,所以后期升级、维护很痛苦,于是开始大规模地修改自己写的一堆“垃圾”代码,不断地思考怎样对JSP脚本进行提取、封装到Java Bean中,这个过程并不顺利,经常遭遇各种性能问题、并发问题。原本可以运行良好的应用,反而被改得经常出现问题。
大约到了2000年,笔者接触到EJB,对EJB许下的“承诺”无比欣羡,于是义无反顾地投入EJB的怀抱,不过EJB的学习并不顺利,当时用的好像是WebLogic 5的服务器,那时候觉得WebLogic 5所报的错误晦涩、难以阅读,动辄几屏的错误信息,让人感觉很有压力。
不过笔者是一个顽固的人,遇到错误总是不断地修改、不断地尝试,在这样的尝试中,不知不觉中,天色已经发白。说来惭愧,第一个Hello World级的Entity EJB居然花了将近一个月的时间才弄完(绝不建议读者从EJB 1.1或EJB 2开始学习,这只会给学习徒增难度,而且现在EJB 1.1、EJB 2都已被淘汰)。在那段时间内,笔者连最心爱的C几乎完全没碰过。
在接下来的2年多时间内,笔者一直沉浸在EJB中,不断地搜寻各种关于EJB的资料、不断地深入钻研着关于EJB规范、EJB的运行、EJB容器的运行机制。随着时间的流逝,EJB、EJB容器的运行原理逐渐明朗起来。
那是一段让人怀念的、“神话”般的岁月,年轻的人,似乎拥有无穷的精力,那也是笔者Java技术增长最迅速的3年,笔者的Java EE功底也是在那3年内打下的,后来接触的各种“新”技术只是在那个基础上“修修补补”,或者“温故而知新”。
2004年初,笔者开始接触到Spring框架,从接触Spring的第一天开始,直到今天,笔者一直觉得Spring和EJB之间有很大的相似性:
Spring本身也是一个容器,只是EJB容器管理的是EJB,Spring容器管理的是普通Java对象。
Spring对Bean类的要求很少,EJB容器对EJB的要求略多一些——所以初学者学习EJB上手较难,但学习Spring就简单得多。
因为找到这种类比性,笔者学习Spring时,总是不断地将EJB与Spring进行类比,然后再找出它们之间的不同之处。由于采用了这种“温故而知新”的学习方式,所以笔者很容易就理解了Spring的设计,而且更加透彻。
很多Java学习者在学习过程中往往容易感觉Java开发内容纷繁芜杂,造成这种感觉的原因就是因为没有进行很好的归纳、总结、类比。为了避免“知识越学越多”的混乱感,读者应该充分利用已掌握的知识,温故而知新——一方面对已有的知识进行归纳、总结,另一方面将新的内容与已掌握的知识进行类比,这样既能把已有的知识掌握得更有条理、更系统,也能更快、更透彻地掌握新的知识。
出于以上理由,笔者在介绍非常专业的编程知识之时,总会通过一些浅显的类比来帮助读者更好地理解。“简单、易读”成为笔者一贯坚持的创作风格,也是疯狂Java体系丛书的特色。另一方面,疯狂Java体系图书的知识也很全面、实用。笔者希望读者在看完疯狂Java体系的图书之后,可以较为轻松地理解书中所介绍的知识,并切实学会一种实用的开发技术,进而将之应用到实际开发中。如果读者在学习过程中遇到无法理解的问题,可以登录疯狂Java联盟(http://www.crazyit. org)与广大Java学习者交流,笔者也会通过该平台与大家一起交流、学习。