深入分析Java Web技术内幕(修订版)(txt+pdf+epub+mobi电子书下载)


发布时间:2020-07-01 01:24:58

点击下载

作者:许令波

出版社:电子工业出版社

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

深入分析Java Web技术内幕(修订版)

深入分析Java Web技术内幕(修订版)试读:

阿里巴巴集团技术丛书

深入分析Java Web技术内幕(修订版)

CIP号:第106866号

ISBN:978-7-121-23293-0

中图分类:TP312

关键词:JAVA语言-程序设计

北京,2014/08,电子工业出版社

版次:2

印次:1

价格:79.00

印数:4000册

印张:30.5

字数:600

开本:787×980 1/16

语种:中文摘要

本书围绕Java Web相关技术从三方面全面、深入地进行了阐述。首先介绍前端知识,主要介绍在Java Web开发中涉及的一些基本知识,包括Web请求过程、HTTP、DNS技术和CDN技术。其次深入介绍了Java技术,包括I/O技术、中文编码问题、Javac编译原理、class文件结构解析、ClassLoader工作机制及JVM的内存管理等。最后介绍了Java服务端技术,主要包括Servlet、Session与Cookie、Tomcat与Jetty服务器、Spring容器、iBatis框架和Velocity框架等原理介绍,并介绍了服务端的一些优化技术。本书不仅介绍这些技术和框架的工作原理,而且结合示例来讲解,通过通俗易懂的文字和丰富、生动的配图,让读者充分并深入理解它们的内部工作原理,同时还结合了设计模式来介绍这些技术背后的架构思维。许令波 著徐津平 责任编辑刘皎 其他贡献者读者热评

——摘自developerWorks上读者对作者文章的评价

相当不错,读完之后颇有顿悟的感觉。

——lnwazg

看过How Tomcat works一书,但是有些东西还是没有弄明白,看了你的这篇介绍,虽然不敢说弄明白了,但是至少让我对Tomcat的工作机制及内部实现有了更进一步的了解!

——android007

总结得非常好,以前看了很多遍源代码,也没这样易懂。

——birds

头一次看到这么全的编、解码分析,谢谢分享。

——chenxh

文章相当不错。对启动Servlet的重要步骤也讲得相当不错。

——RecallYatou

这篇对Spring进行分析的文章太经典了。

——BradyZhu

文章写得很深刻,一直在关注你写的东西。

——61WC_agan_tomsong

很详细,案例和图也解释得很到位,感谢分享。

——lyron

最近才读完了iBatis的源代码,也有很想写一篇文章的冲动,不过看了此篇,感觉没有必要了。作者的技术水平和写作水平很令人佩服。

——527*****@QQ.com推荐序

经过10多年的发展,Java Web从开发框架到社区都已经很成熟了。在这些成熟的框架、工具的帮助下,开发人员的效率得到了很大的提高,但也造成了在原理性、整体性上的相对欠缺,很多人往往知其然而不知其所以然,特别是在解决一些系统问题的时候,不能很好地举一反三。

举个例子,我看到一些开发人员在使用Web框架后,基于约定的方法进行业务的代码实现,但不清楚自己写的代码是如何被调用执行的。如果他们很清楚Servlet规范,并看过容器的大致实现过程,对解决问题是很有帮助的。

许令波是我认识的一位很关注原理细节的工程师,同时很乐于分享,会把在工作中使用到的技术进行分析并写成文章,分享给大家。他写的这本书中涉及的技术正是他自己在实际工作中遇到的问题的学习过程和解决过程的总结,是总结技术所涉及的知识,更是总结如何分析和解决问题的思路,以及这些技术背后的原理,让你知其所以然。

本书中的内容涉及从HTTP、Servlet、模板渲染、数据层、容器到JVM等Java Web开发的各个方面,这些问题是许令波在日常工作中经常遇到的,我想也是所有Java Web开发人员都会遇到的。本书最大的特点就是让Java Web开发人员对整个开发过程所涉及的技术能有一个完整的脉络图,从前端浏览器到Java技术,再到Java 服务端技术,还介绍了实现这些技术用到的设计模式;不仅详细总结了这些技术的工作原理,而且也结合了很多实际案例来进行阐述,将复杂、难懂的技术原理通过时序图和架构图的方式展现出来,更加便于读者理解。可以说如果你掌握了本书的知识,那么你就可以成为一个合格的Java Web开发人员。

本书文笔流畅,图表清晰、易懂,值得推荐给Java Web开发人员作为进阶学习的参考书。

吴泽明

天猫产品技术部研究员专家点评

这是一本关于Java的书,里面讲述的大量基础知识对前端开发工程师非常有帮助。比如中文编码章节,作者以一个实践者的身份详细阐述了编码问题的方方面面。总之,这是一本很用心的书,是实践者的思考和总结。目前在国内很少看到这类书籍,强烈推荐从事Web开发工作的人员阅读并实践之。

——王保平,开源前端类库KISSY、SeaJS作者

作者在淘宝做了很多JavaWeb方面的改造项目,在JavaWeb的相关技术上有深入的掌握,并积累了丰富的经验。在这本书中作者不仅向读者展示了这类大改造项目所需的知识,还展示了JavaWeb更为全景的技术知识体系。本书值得JavaWeb开发人员阅读。

——林昊,淘宝资深技术专家

从第1次拜读相关内容开始,就可以感觉到作者并不是在简简单单地讲述一门技术或者一个概念,他的分析和讲解十分深入,并且可以很好地聚焦读者的思路,尤其是在JavaWeb、Servlet规范及字符串处理方面,都有很优秀的内容。在众多向developerWorks投稿的国内作者中,无论是从文章的质量看,还是从内容的选题方向看,作者的文章都可称为上乘之作。同时,他的多篇文章还得到了广大网站读者的好评,其访问量、评分及评论的数量均名列前茅。

——刘达,developerWorks中国Java专区编辑、技术工程师再版序言

自《深入分析Java Web技术内幕》一书出版以来,我收到了不少读者的反馈,也很感谢他们指出了书中的一些错误和不足。时隔两年,在电子工业出版社博文视点编辑的帮助下,《深入分析Java Web技术内幕》有了修订再版的机会。

这两年来,一些技术也在发生着变化:无线技术越来越成熟,我们的系统开始更多地支持无线,并衍生出系统要进行多终端化改造等问题;同时我们也遇到了一些新的技术问题如大流量、网络瓶颈及机房的电力短缺等,这给系统的部署和系统架构带来新的挑战。所以我借这次再版的机会,将这方面的技术更新和实践尝试一并分享给读者。除了修正前版的一些错漏之处,本次修订还主要做了以下更新。

第1章增加了CDN动态加速的内容,介绍了我们当前最新的想法和尝试。

第3章增加一种繁简转换的实现方式的内容,介绍了我们在遇到多终端的情况下面临的多语言的问题,将我们的思路和实践分享给大家。

第10章增加了多终端Session统一的内容,也介绍了在多终端的情况下如何解决Session统一的问题。

新增了第18章,重点介绍了我们在近两年遇到大流量的情况下,如何跨越性能、网络和一个地区的电力瓶颈等问题,并提供了一个比较完整的解决方案。

感谢刘皎和张国霞两位编辑,感谢阿里巴巴的几位大牛范禹、黄眉等对修订版提供的一些有益建议,也感谢我们技术发展部恬玉同学的大力帮助。

许令波

2014.7第1版序

我第1次接触计算机应该是在10年前,记得当时连怎么开计算机都不会,当时感觉计算机真是一个让人着迷的东西,但是那时别说拥有一台计算机,就算是能玩上计算机也是一件奢侈的事情了。人总是有好奇心的,而我也因为追随着这份好奇和计算机一起走过了将近10年的光阴,也是这份好奇让我接触了计算机,认识了计算机,到现在了解了计算机。但是到目前为止我仍然有很多好奇的东西,所以我将一直求解下去。

回想我开始学习编程的时候,那是在大学期间开始构建自己的第1个网页,然后是第1个网站之时,其中的复杂程度真是让人难以想象。要构建一个网页,需要学习当时的“网页三剑客”,页面布局需要学习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时,你就能快速地判断,到底为什么会报这个错误,可能是哪个地方出错导致的。

另外还有一个很重要的原因是,如果你很想进入淘宝、腾讯、百度这样的大型互联网企业工作,不掌握本书讲到的这些技术的实现原理,是很难通过技术面试的。因为面试官不仅希望你会用这些技术,还要求你说出个所以然来,所以,掌握这些技术的实现原理可以为你的职业发展提供更好的机会。

本书的组织结构

本书从结构上主要分为3部分:第1部分为基础知识,主要介绍在Java Web开发中涉及的一些基本知识,例如一次HTTP请求是什么样的,HTTP本身是如何工作的;第2部分将深入介绍Java技术,帮助读者了解Java是如何工作的,在会用的基础上进一步理解Java;第3部分是Java服务端技术,主要介绍Web服务器的处理流程,包括Servlet容器的工作原理和Web框架是如何运转的,也就是从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上向我提交你的建议和想法,我会对所有问题给予回复。

致谢

感谢我的父母,在我高考失败后仍然给我机会让我选择做自己想做的事,支持我选择了自己喜欢的计算机行业,并在家庭并不富裕的情况下给我配置了第1台计算机,让我有机会继续追求自己的梦想,是你们的支持和鼓励让我在做自己一直喜欢做的事。

感谢我的老婆,从大学你就一直陪伴在我身边,有你在我身边是我不断努力的最大动力,在本书的写作过程中,你完成初稿的审阅工作,同时也给了我很多鼓励和建议。

感谢电子工业出版社的刘皎和张国霞编辑,你们严谨认真的工作态度让我非常敬佩。

感谢吴泽明(范禹)老大为本书写序,你不仅带我进入淘宝,而且一直帮助我持续进步。感谢王保平、林昊和刘达在繁忙的工作中为我写推荐语。

感谢在本书写作过程中提出宝贵意见的同事们,他们的花名是:小凡、小邪、丹臣、哲别、景升、文通、向飞、凌弃、路奇、济城、大仁、常彬、旭天、韩章、小赌、雁声、索尼、凤豪、柳擎、华黎、空望、嗷嗷、渐飞、普智、胜衣、叔度、文景、撒迦、狄龙、祝幽、单通、承泽等。

感谢developerWorks上所有向我提出问题和建议的网友们。

许令波

2012年7月第1章 深入Web请求过程

随着Web 2.0时代的到来,互联网的网络架构已经从传统的C/S架构转变为更加方便、快捷的B/S架构,B/S架构大大简化了用户使用网络应用的难度,这种人人都能上网、人人都能使用网络上提供的服务的方法也进一步推动了互联网的繁荣。

B/S架构带来了以下两方面的好处。

◎ 客户端使用统一的浏览器(Browser)。由于浏览器具有统一性,它不需要特殊的配置和网络连接,有效地屏蔽了不同服务提供商提供给用户使用服务的差异性。另外,最重要的一点是,浏览器的交互特性使得用户使用它非常简便,且用户行为的可继承性非常强,也就是用户只要学会了上网,不管使用的是哪个应用,一旦学会了,在使用其他互联网服务时同样具有了使用经验,因为它们都基于同样的浏览器操作界面。

◎ 服务端(Server)基于统一的 HTTP。和传统的 C/S 架构使用自定义的应用层协议不同,B/S 架构使用的都是统一的 HTTP。使用统一的 HTTP 也为服务提供商简化了开发模式,使得服务器开发者可以采用相对规范的开发模式,这样可以大大节省开发成本。由于使用统一的 HTTP,所以基于 HTTP的服务器就有很多,如 Apache、IIS、Nginx、Tomcat、JBoss 等,这些服务器可以直接拿来使用,不需要服务开发者单独来开发。不仅如此,连开发服务的通用框架都不需要单独开发,服务开发者只需要关注提供服务的应用逻辑,其他一切平台和框架都可以直接拿来使用,所以B/S架构同样简化了服务器提供者的开发,从而出现了越来越多的互联网服务。

B/S网络架构不管对普通用户的使用还是对服务的开发都带来了好处,为互联网的主要参与者、服务使用者和服务开发者降低了学习成本。但是作为互联网应用的开发者,我们还是要清楚,从用户在浏览器里单击某个链接开始,到我们的服务返回结果给浏览器为止,在这个过程中到底发生了什么、这其中还需要哪些技术来配合。

所以本章将为你描述这一过程的工作原理,它将涉及浏览器的基本行为和HTTP的解析过程、DNS如何解析到对应的IP地址、CDN又是如何工作和设计的,以及浏览器如何渲染出返回的结果等。1.1 B/S网络架构概述

B/S网络架构从前端到后端都得到了简化,都基于统一的应用层协议HTTP来交互数据,与大多数传统C/S互联网应用程序采用的长连接的交互模式不同,HTTP采用无状态的短连接的通信方式,通常情况下,一次请求就完成了一次数据交互,通常也对应一个业务逻辑,然后这次通信连接就断开了。采用这种方式是为了能够同时服务更多的用户,因为当前互联网应用每天都会处理上亿的用户请求,不可能每个用户访问一次后就一直保持这个连接。

基于HTTP本身的特点,目前的B/S网络架构大多采用如图1-1所示的架构设计,既要满足海量用户的访问请求,又要保持用户请求的快速响应,所以现在的网络架构也越来越复杂。

当一个用户在浏览器里输入www.taobao.com 这个URL时,将会发生很多操作。首先它会请求DNS把这个域名解析成对应的IP地址,然后根据这个IP地址在互联网上找到对应的服务器,向这个服务器发起一个get请求,由这个服务器决定返回默认的数据资源给访问的用户。在服务器端实际上还有很复杂的业务逻辑:服务器可能有很多台,到底指定哪台服务器来处理请求,这需要一个负载均衡设备来平均分配所有用户的请求;还有请求的数据是存储在分布式缓存里还是一个静态文件中,或是在数据库里;当数据返回浏览器时,浏览器解析数据发现还有一些静态资源(如CSS、JS或者图片)时又会发起另外的HTTP请求,而这些请求很可能会在CDN上,那么CDN服务器又会处理这个用户的请求,大体上一个用户请求会涉及这么多的操作。每一个细节都会影响这个请求最终是否会成功。图1-1 CDN架构图

不管网络架构如何变化,始终有一些固定不变的原则需要遵守。

◎ 互联网上所有资源都要用一个 URL来表示。URL就是统一资源定位符,如果你要发布一个服务或者一个资源到互联网上,让别人能够访问到,那么你首先必须要有一个在世界上独一无二的 URL。不要小看这个 URL,它几乎包含了整个互联网的架构精髓。

◎ 必须基于HTTP与服务端交互。不管你要访问的是国内的还是国外的数据,是文本数据还是流媒体,都必须按照套路出牌,也就是都得采用统一打招呼的方式,这样人家才会明白你要的是什么。

◎ 数据展示必须在浏览器中进行。当你获取到数据资源后,必须在浏览器上才能恢复它的容貌。

只要满足上面的几点,一个互联网应用基本上就能正确地运转起来了,当然这里面还有好多细节,这些细节在后面将分别进行详细讲解。1.2 如何发起一个请求

如何发起一个HTTP请求?这个问题似乎既简单又复杂,简单是指当你在浏览器里输入一个URL时,按回车键后这个HTTP请求就发起了,很快你就会看到这个请求的返回结果。复杂是指能否不借助浏览器也能发起请求,这里的“不借助”有两层含义,一是指能不能自己组装一个符合HTTP的数据包,二是处理浏览器还有哪些方式也能简单地发起一个HTTP请求。下面就按照这两层含义来解释如何发起一个HTTP请求。

如何发起一个HTTP请求和如何建立一个Socket连接区别不大,只不过outputStream.write写的二进制字节数据格式要符合HTTP。浏览器在建立Socket连接之前,必须根据地址栏里输入的URL的域名DNS解析出IP地址,再根据这个IP地址和默认的80端口与远程服务器建立Socket连接,然后浏览器根据这个URL组装成一个get类型的HTTP请求头,通过outputStream.write发送到目标服务器,服务器等待inputStream.read返回数据,最后断开这个连接。

当然,不同浏览器在如何使用这个已经建立好的连接以及根据什么规则来管理连接上,有各种不同的实现方法。一句话,发起一个HTTP请求的过程就是建立一个Socket通信的过程。

既然发起一个HTTP连接本质上就是建立一个Socket连接,那么我们完全可以模拟浏览器来发起HTTP请求,这很好实现,也有很多

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

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载