基本信息
【插图】

编辑推荐
通俗易懂的文字和丰富生动的配图的完美结合
充分阐述了Java web技术前端知识、Java技术以及java服务端技术等三大方面
内容简介
计算机书籍
本书围绕Java Web相关技术从三方面全面深入地进行阐述。首先介绍前端知识,主要介绍Java Web开发中涉及的一些基本知识,包括Web请求过程、HTTP协议、DNS技术和CDN技术。其次深入介绍Java技术,包括I/O技术、中文编码问题、Javac编译原理、class文件结构解析、ClassLoader工作机制及JVM的内存管理等。最后介绍Java服务端技术,主要包括Servlet、Session与Cookie、Tomcat与Jetty服务器、Spring容器、Ibatis框架和Velocity框架等原理介绍。本书不仅介绍这些技术和框架的工作原理,而且结合示例来讲解,通过通俗易懂的文字和丰富生动的配图,让读者充分并深入理解它们的内部工作原理,同时还结合了设计模式来介绍这些技术背后的架构思维。
作译者
个人博客:http://xulingbo.net
目录
第1章 深入Web请求过程 1
1.1 B/S网络架构概述 2
1.2 如何发起一个请求 4
1.3 HTTP协议解析 6
1.3.1 查看HTTP信息的工具 8
1.3.2 浏览器缓存机制 9
1.4 DNS域名解析 12
1.4.1 DNS域名解析过程 12
1.4.2 跟踪域名解析过程 15
1.4.3 清除缓存的域名 18
1.4.4 几种域名解析方式 19
1.5 CDN工作机制 20
1.5.1 CDN架构 20
1.5.2 负载均衡 21
1.6 总结 24
第2章 深入分析Java I/O的工作机制 25
2.1 Java的I/O类库的基本架构 25
2.1.1 基于字节的I/O操作接口 26
2.1.2 基于字符的I/O操作接口 27
序言
经过10多年的发展,Java Web从开发框架到社区都已经很成熟,在这些成熟的框架、工具的帮助下,开发人员的效率得到了很大的提高,但也造成了在原理性、整体性上的相对欠缺,很多人往往知其然、不知其所以然,特别是在解决一些系统问题的时候,不能很好地举一反三。
举个例子,我看到一些开发人员在使用Web框架后,基于约定的方法进行业务的代码实现,但不清楚自己写的代码是如何被调用执行的,如果他很清楚Servlet规范,以及看过容器的大致实现过程,对解决问题是很有帮助的。
许令波是我认识的一位很关注原理细节的工程师,同时很乐于分享,会把工作中使用到的技术进行分析并写成文章,分享给大家。他写的这本书中涉及的技术正是他自己在实际工作中遇到的问题的学习过程和解决过程的总结。是总结技术所涉及的知识,更是总结如何分析和解决问题的思路,以及这些技术背后的原理,让你知其所以然。
本书中的内容涉及从HTTP、Servlet、模板渲染、数据层到容器、JVM等Java Web开发的各个方面,这些问题是许令波在日常工作中经常遇到的,我想也是所有Java Web开发人员都会遇到的。本书最大的特点就是让Java Web开发人员对整个开发过程所涉及技术能有一个完整的脉络图,从前端浏览器到Java技术再到Java 服务端技术,还介绍了实现这些技术用到的设计模式。不仅详细总结了这些技术的工作原理,而且也结合了很多实际案例来进行阐述,将复杂难懂的技术原理通过时序图和架构图的方式展现出来,更加便于读者理解。可以说掌握了本书的知识,就可以成为一个合格的Java Web开发人员。
本书文笔流畅,图表清晰易懂,值得推荐给Java Web开发人员作为进阶学习的参考书。
吴泽明
淘宝网产品技术部研究员
序
回想起我第一次接触电脑的时间应该是在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 开发工作的人员购买阅读并实践之。
——王保平,开源前端类库KISSY、SeaJS作者
作者在淘宝做了很多Java Web方面的改造项目,在Java Web的相关技术上有深入的掌握,并积累了丰富的经验。在这本书中作者不仅向读者展示了这类大改造项目所需的知识,还展示了Java Web更为全景的技术知识体系,值得Java Web开发人员阅读。
——林昊,淘宝资深技术专家、China OSGi User Group 总监
从第一次拜读相关内容开始,就可以感觉到作者并不是简简单单地讲述一个技术或者概念,他的分析和讲解十分深入,并且可以很好地聚焦读者的思路,尤其是在 Java Web、Servlet 规范及字符串处理方面,都有很优秀的内容。在众多向 developerWorks 投稿的国内作者中,无论从文章的质量看,还是从内容的选题方向看,作者的文章都可称是上乘之作。同时,他的多篇文章还得到了广大网站读者的好评,其访问量、评分及评论的数量均名列前茅。
——刘达,developerWorks中国Java专区编辑 、技术工程师
读者热评
——摘自developerWorks上读者对作者文章的评价
相当不错,读完之后颇有顿悟的感觉~~
——lnwazg
看过how tomcat works,但是有些东西还是没有弄明白,看了你的这篇介绍,虽然不敢说弄明白了,但是至少让我对tomcat 工作机制及内部实现有了更进一步的了解!
——android007
总结得非常好,以前看了很多遍源代码,也没这样讲的易懂。
——birds
头一次看着这么全的编解码分析,谢谢分享。
——chenxh
文章相当不错。启动Servlet的重要的步骤相当不错。
——RecallYatou
这篇对Spring分析的文章太经典了。