序
回想起我第一次接触电脑的时间应该是在10年前了,记得当时连怎么开电脑都不会,当时感觉电脑真是一个让人着迷的东西,但是那时别说拥有一台电脑,就算是能玩上电脑也算是一件奢侈的事情了。人总是有好奇心的,而我也因为追随着这份好奇和电脑一起走过了将近10年的光阴,也是这份好奇让我接触了电脑,认识了电脑,到现在了解了电脑。但是到目前为止我仍然有很多好奇的东西,所以我将一直求解下去。
回想我开始学习编程的时候,在大学期间开始构建自己的第一个网页到第一个网站,其中的复杂程度真是难以想象,要构建一个网页,需要学习当时的“网页三剑客”,页面布局需要学习Dreamweaver、图片处理需要学习Fireworks、动画制作需要学习Flash。有时候为了一个导航栏甚至通宵达旦。还有要自己搭建一个本地服务器,要学习IIS、Apache等。当时的我竟然能够一个人完成这一系列的事情,现在想想还真是有点佩服自己。
现在回想一下当时自己的学习过程,真是走了很多弯路,浪费了很多时间。当时的学习就像是在一个陌生的城市找路一样,不知道如何才能到达目的地,只能边走边问别人,这个人告诉你一点,那个人告诉你一点,一点一点往前走。但是虽然在往前走,但走的路并不是最近的,甚至有人指的方向是错的。当时缺少一个总揽全局的地图,所以不能画出一条最优的路。虽然走了很多弯路,但是这种不断自学的过程还是大大地提升了我的学习能力,这种好的自学能力也在我以后的学习工作中起到了关键作用。
IT行业知识变化很快,需要不断地学习新东西,所以学习知识的能力比掌握知识本身更重要。这也是目前大公司招聘标准中很重要的一条。记得当时我的老大在招聘我进入淘宝时,面试时就问我如何学习一门新技术的问题。当你在学习的过程中碰到了很多难题,然后克服这些难题,很多这种过程积累起来就是你无形的宝贵财富。因为你遇到的问题肯定也是其他人遇到的问题,从发现问题、分析问题再到解决问题的过程远比这个问题本身更有价值。
爱因斯坦说过:“发现问题比解决问题更重要。”对IT人员来说,发现Bug和重现Bug比解决这个Bug更有难度。这就好比一个外国人问周总理中国有多少厕所,总理回答说只有两个厕所:男厕所和女厕所。但是,什么人在什么时间、什么地点需要上厕所,考虑这样的情形恐怕需要多少厕所就很难计算了。同样电脑中也只有0和1两个选择,电脑中的程序也同样如此,每写一行代码就能增加甚至一个数量级的出错的概率。但是我们还是要学习如何避免出现Bug,这就要求我们能有总理的看问题的思维,将复杂的问题简单化,发现问题背后的本质,找到解决问题的背后的一些通用逻辑,按照这种思路来解决问题可能会让你事半功倍。
如何让学习知识的过程事半功倍,尤其是我们程序员如何做到,从我这么多年的学习过程来说,有一些经验可以分享给大家,这也是我写这本书的初衷,我真正想分享的不是我掌握的知识,而更多的是我如何学习这个知识的过程,或者说我是如何学习这个知识的,以及我对这些知识的一些总结和提炼。
虽然要掌握整个Web开发中涉及的所有知识是一件非常困难的事情,尤其是要掌握这些知识的实现原理,不仅知其然还要知其所以然。所以掌握学习它们的方法至关重要。如何快速高效地阅读它们的源码,有很多同学看到我在developerWorks发表的文章时来信问我如何阅读各种框架的源码,很多同学都说不知道从哪里入手来看。其实,当你掌握了一些技巧,加上你的一点耐心,这并不是很难的。
本书虽然介绍了很多开源框架,但是始终都在告诉你如何才能更深入和简单地掌握这个框架,告诉你学习的方法,而并不是告诉你这个框架有哪些类、怎么用这些零碎的知识。打个比喻,本书并不是告诉你1+1=2,1+2=3,2+2=4这个结果,然后你可以根据这个方式得出1+1+2=4,你要计算其他数必须根据它给你的公式才能计算,而是告诉你加减乘除的算法规则,然后你就可以根据这个规则自己做运算了。
另外本书为什么要选择介绍Web开发中这些技术的实现原理,因为只有你掌握它们的实现原理,你就能够快速地解决一些意想不到的问题。例如,当你理解了ClassLoader的工作机制后,遇到ClassNotFoundException时,你就能快速地判断,到底为什么会报这个错误,可能是哪个地方出错导致的。
另外还有一个很重要的原因是,如果你很想进入淘宝、腾讯、百度这样的大型互联网企业工作,不掌握本书讲到的这些技术的实现原理,是很难通过技术面试的。因为面试官不仅希望你会用这些技术,还要求你说出个所以然来。所以掌握这些技术的实现原理可以为你的职业发展提供更好的机会。
本书组织结构
本书从结构上主要分为三个部分:第一部分为基础知识,主要介绍Java Web开发中涉及的一些基本知识,如一次HTTP请求是什么样的,HTTP协议本身是如何工作的;第二部分将深入介绍Java技术,帮助读者了解Java是如何工作的,在会用的基础上进一步理解Java;第三部分是Java服务端技术,主要介绍Web服务器的处理流程,包括Servlet容器的工作原理和Web框架是如何运转的,也就是从Web服务器接收到请求到返回请求这个过程中涉及的知识。
除了介绍在Java Web开发中用到的框架或系统外,本书还会在介绍这些框架的同时介绍这个框架用到的经典设计模式,因为只有掌握了这些设计模式才能更好地理解这些框架的设计原理。另外用具体的示例来讲解设计模式也能让我们更好地理解设计模式在框架设计中的作用。
目标读者
如果你是学校刚毕业的学生或者刚刚准备学习Web开发并且不知道如何入手的人,那么这本书比较适合你;如果你已经工作1~2年,已经熟悉了Java Web开发的基本流程并且想进一步提高自己,那么这本书更适合你。
如果你已经知道了如何去学习Java Web开发技术,正准备入门去实际开发,也就是说你是一个开发新手,那么这本书不太适合你。但是当你知道了如何去开发一个Web应用想知道它们如何工作时,欢迎你再回来看看本书,它能帮助你进一步提高。
总的来说,本书适合以下读者群:
◎ 对Web技术感觉迷茫,不知道如何开始学习,对整个B/S工作机制不了解的同学可以参考本书。
◎ Java技术爱好者,想深入学习Java技术内部实现细节的人。
◎ 有一定开发基础,但是不了解Web中一些容器和框架的内部工作原理的人。
◎ 大型互联网工程师,对性能优化和分布式数据管理有兴趣,这里介绍了淘宝的一些实践经验。
◎ 开源代码爱好者,喜欢研究开发代码的Coder可以从本书中找到一些如何分析源码的方法。
本书不会教你如何开发Web应用程序,也不会介绍Struts、Spring、iBatis等框架如何使用。我想这些框架的使用参考手册图书市场上有一大把,本书没有必要再重复介绍。但是如果你已经掌握如何使用并且不满足只会使用,想知道它们是如何工作的,想打开这些黑盒子,想以后告诉人家这些黑盒子里到底有些什么东西,对每种技术有强烈的好奇心,如果你是这样的人,本书值得你拥有。
本书特点
◎ 本书按照通常的学习习惯设计,为你展示从浏览器发起请求到浏览器最终显示出页面整个过程,让你对Web开发的整个过程有个总体的理解。
◎ 本书虽然讲解的都是比较深入的技术,但是实践示例和比较恰当的比喻将帮你更好地理解。
◎ 本书将结合淘宝网中真实使用示例应用程序来讲解技术,让读者有更好的直观认识。
读者讨论
在本书出版后的任何时间有任何问题,你都可以通过xulingbo0201@163.com发送邮件给我,或者到http://xulingbo.net上向我提交你的建议和想法,我会对所有问题给予回复。
致谢
感谢我的父母,在我高考失败后仍然给我机会让我选择自己想做的事,支持我选择了自己喜欢的电脑行业,在家庭并不富裕的情况下给我配置了第一台电脑,让我有机会继续追求自己的梦想,是你们的支持和鼓励让我在做自己一直喜欢做的事。
感谢我的莹,从大学就一直陪伴在我身边,有你在我身边是我一直不断努力的最大动力,在本书写作过程中,你完成初稿的审阅工作,同时也给了我很多鼓励和建议。
感谢电子工业出版社的策划编辑刘皎和责任编辑董英,你们严谨认真的工作态度让我非常敬佩。
感谢吴泽明(范禹)老大为本书写的序,不仅带我进入淘宝,而且也一直帮助我持续进步,感谢王保平、林昊和刘达在繁忙的工作中为我写推荐语。
感谢在本书写作过程中提出宝贵意见的同事们,他们的花名是:小凡、小邪、丹臣、哲别、景升、文通、向飞、凌弃、路奇、济城、大仁、常彬、旭天、韩章、小赌、雁声、索尼、凤豪、柳擎、华黎、空望、嗷嗷、渐飞、普智、胜衣、叔度、文景、撒迦、狄龙、祝幽、单通、承泽等。
感谢developerWorks上所有给我提出问题和建议的网友们。
许令波
2012.7