阿里巴巴集团技术丛书前端
深刻分析Java Web技术内幕(修订版)(阿里巴巴集团技术丛书。技术大牛范禹、玉伯、毕玄联协力荐!大型互联网公司开发应用实践!)程序员
许令波 著 面试
ISBN 978-7-121-23293-0算法
2014年8月出版数据库
订价:79.00元 编程
464页设计模式
16开浏览器
编辑推荐缓存
让读者知其然,并知其因此然,是《深刻分析Java Web技术内幕(修订版)》一书最大的特点。安全
做者来自淘宝技术一线,亲历了淘宝网PV从1亿到10亿的发展历程,直接经历了在这个过程当中技术的不断突破、飞跃等变迁,并积累了丰富实践经验。
《深刻分析Java Web技术内幕(修订版)》正是分享了做者在面临种种技术问题、技术瓶颈时的思路、方法和技巧,具体的应用实践和直接的案例。
在此次的修订版中,做者补充了淘宝网近两年在无线端的最新的应用实践。在这个快速发展的移动互联的时代,这样直接的技术积累和分享尤为珍贵。
相信读者必定能从中获益匪浅。
阿里巴巴集团技术丛书是抱持着为工程师服务的理念诞生的。
阿里的快速发展,使咱们有机会见证技术变革的强大力量。在这过程当中,咱们经历了技术的变迁、兴衰、成败,既有收获也有教训。现在,阿里已成为一家使人瞩目的互联网公司,站在这样的时点上,回顾过去,放眼四周,咱们深入地以为有必要将沉淀下来的一线经验与智慧,结集出版,理由有三。
1.回报。咱们得到的种种经验与教训,只有在阿里这样快速成长、体量巨大的公司中才有机会亲历。这样的技术环境并非每一个工程师都有机缘遇到的。这些经历帮助了咱们我的能力的提高,也帮助阿里成为一家技术实力过硬的公司。咱们愿意把这些内容分享出来,帮助即将或已经面临相似问题的朋友们,若是他们能够从阅读中得到一些启发而少走弯路的话,将是咱们最大的欣慰。
2.交流。在这套丛书里,咱们一样会抛出咱们的困惑、问题,借助丛书的平台,扩大工程师沟通的圈子,以书会友,共同探索、学习、提升。
3.温故知新。以结集的形式,将以往的经验与知识固化下来,既可便于之后查阅,也能够帮助咱们系统地梳理思路,更为全面地审视、洞察、并理解过去发生的种种,为将来的变化作好更充分、扎实的准备。
基于以上的考虑,阿里巴巴集团技术丛书将立足于实践,着眼于问题,从工程师的视角解读技术的内涵。
让思考成为咱们生活的乐趣,让阅读成为咱们进步的阶梯!
内容提要
《深刻分析Java Web技术内幕(修订版)》新增了淘宝在无线端的应用实践,包括:CDN 动态加速、多终端化改造、 多终端Session 统一 ,以及在大流量的状况下,如何跨越性能、网络和一个地区的电力瓶颈等内容,并提供了比较完整的解决方案。
《深刻分析Java Web技术内幕(修订版)》主要围绕Java Web 相关技术从三方面全面、深刻地进行了阐述。首先介绍前端知识,即在JavaWeb 开发中涉及的一些基本知识,包括Web 请求过程、HTTP、DNS 技术和CDN 技术。其次深刻介绍了Java 技术,包括I/O 技术、中文编码问题、Javac 编译原理、class 文件结构解析、ClassLoader 工做机制及JVM 的内存管理等。最后介绍了Java 服务端技术,主要包括Servlet、Session 与Cookie、Tomcat 与Jetty服务器、Spring 容器、iBatis 框架和Velocity 框架等原理介绍,并介绍了服务端的一些优化技术。
《深刻分析Java Web技术内幕(修订版)》不只介绍这些技术和框架的工做原理,并且结合示例来说解,经过通俗易懂的文字和丰富、生动的配图,让读者充分并深刻理解它们的内部工做原理,同时还结合了设计模式来介绍这些技术背后的架构思惟。
目录
第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.5.3 CDN动态加速 24
1.6 总结 25
第2章 深刻分析Java I/O的工做机制 26
2.1 Java的I/O类库的基本架构 26
2.1.1 基于字节的I/O操做接口 27
2.1.2 基于字符的I/O操做接口 28
2.1.3 字节与字符的转化接口 29
2.2 磁盘I/O工做机制 30
2.2.1 几种访问文件的方式 30
2.2.2 Java访问磁盘文件 34
2.2.3 Java序列化技术 35
2.3 网络I/O工做机制 37
2.3.1 TCP状态转化 38
2.3.2 影响网络传输的因素 40
2.3.3 Java Socket的工做机制 40
2.3.4 创建通讯链路 41
2.3.5 数据传输 42
2.4 NIO的工做方式 42
2.4.1 BIO带来的挑战 42
2.4.2 NIO的工做机制 43
2.4.3 Buffer的工做方式 46
2.4.4 NIO的数据访问方式 48
2.5 I/O调优 50
2.5.1 磁盘I/O优化 50
2.5.2 TCP网络参数调优 51
2.5.3 网络I/O优化 53
2.6 设计模式解析之适配器模式 57
2.6.1 适配器模式的结构 57
2.6.2 Java I/O中的适配器模式 58
2.7 设计模式解析之装饰器模式 58
2.7.1 装饰器模式的结构 59
2.7.2 Java I/O中的装饰器模式 59
2.8 适配器模式与装饰器模式的区别 60
2.9 总结 60
第3章 深刻分析Java Web中的中文编码问题 61
3.1 几种常见的编码格式 61
3.1.1 为何要编码 61
3.1.2 如何“翻译” 62
3.2 在Java中须要编码的场景 64
3.2.1 在I/O操做中存在的编码 64
3.2.2 在内存操做中的编码 66
3.3 在Java中如何编解码 67
3.3.1 按照ISO-8859-1编码 69
3.3.2 按照GB2312编码 70
3.3.3 按照GBK编码 71
3.3.4 按照UTF-16编码 71
3.3.5 按照UTF-8编码 72
3.3.6 UTF-8编码代码片断 72
3.3.7 对几种编码格式的比较 74
3.4 在Java Web中涉及的编解码 74
3.4.1 URL的编解码 76
3.4.2 HTTP Header的编解码 79
3.4.3 POST表单的编解码 79
3.4.4 HTTP BODY的编解码 80
3.5 在JS中的编码问题 81
3.5.1 外部引入JS文件 81
3.5.2 JS的URL编码 82
3.5.3 其余须要编码的地方 84
3.6 常见问题分析 84
3.6.1 中文变成了看不懂的字符 84
3.6.2 一个汉字变成一个问号 85
3.6.3 一个汉字变成两个问号 85
3.6.4 一种不正常的正确编码 86
3.7 一种繁简转换的实现方式 87
3.8 总结 88
第4章 Javac编译原理 89
4.1 Javac是什么 90
4.2 Javac编译器的基本结构 90
4.3 Javac工做原理分析 92
4.3.1 词法分析器 93
4.3.2 语法分析器 100
4.3.3 语义分析器 105
4.3.4 代码生成器 115
4.4 设计模式解析之访问者模式 118
4.4.1 访问者模式的结构 119
4.4.2 Javac中访问者模式的实现 120
4.5 总结 121
第5章 深刻class文件结构 122
5.1 JVM指令集简介 122
5.1.1 与类相关的指令 124
5.1.2 方法的定义 125
5.1.3 属性的定义 126
5.1.4 其余指令集 127
5.2 class文件头的表示形式 135
5.3 常量池 139
5.3.1 UTF8常量类型 142
5.3.2 Fieldref、Methodref常量类型 143
5.3.3 Class常量类型 143
5.3.4 NameAndType常量类型 144
5.4 类信息 144
5.5 Fields和Methods定义 145
5.6 类属性描述 149
5.7 Javap生成的class文件结构 150
5.7.1 LineNumberTable 152
5.7.2 LocalVariableTable 153
5.8 总结 155
第6章 深刻分析ClassLoader工做机制 156
6.1 ClassLoader类结构分析 157
6.2 ClassLoader的等级加载机制 158
6.3 如何加载class文件 161
6.3.1 加载字节码到内存 161
6.3.2 验证与解析 163
6.3.3 初始化Class对象 163
6.4 常见加载类错误分析 163
6.4.1 ClassNotFoundException 163
6.4.2 NoClassDefFoundError 164
6.4.3 UnsatisfiedLinkError 165
6.4.4 ClassCastException 166
6.4.5 ExceptionInInitializerError 167
6.5 经常使用的ClassLoader分析 168
6.6 如何实现本身的ClassLoader 172
6.6.1 加载自定义路径下的class文件 172
6.6.2 加载自定义格式的class文件 174
6.7 实现类的热部署 176
6.8 Java应不该该动态加载类 178
6.9 总结 179
第7章 JVM体系结构与工做方式 180
7.1 JVM体系结构 180
7.1.1 何谓JVM 180
7.1.2 JVM体系结构详解 183
7.2 JVM工做机制 185
7.2.1 机器如何执行代码 185
7.2.2 JVM为什么选择基于栈的架构 186
7.2.3 执行引擎的架构设计 187
7.2.4 执行引擎的执行过程 188
7.2.5 JVM方法调用栈 193
7.3 总结 197
第8章 JVM内存管理 198
8.1 物理内存与虚拟内存 199
8.2 内核空间与用户空间 200
8.3 在Java中哪些组件须要使用内存 201
8.3.1 Java堆 201
8.3.2 线程 201
8.3.3 类和类加载器 202
8.3.4 NIO 202
8.3.5 JNI 203
8.4 JVM内存结构 203
8.4.1 PC寄存器 204
8.4.2 Java栈 204
8.4.3 堆 205
8.4.4 方法区 205
8.4.5 运行时常量池 206
8.4.6 本地方法栈 206
8.5 JVM内存分配策略 206
8.5.1 一般的内存分配策略 207
8.5.2 Java中的内存分配详解 207
8.6 JVM内存回收策略 212
8.6.1 静态内存分配和回收 212
8.6.2 动态内存分配和回收 213
8.6.3 如何检测垃圾 213
8.6.4 基于分代的垃圾收集算法 215
8.7 内存问题分析 224
8.7.1 GC日志分析 224
8.7.2 堆快照文件分析 227
8.7.3 JVM Crash日志分析 227
8.8 实例1 233
8.9 实例2 235
8.10 实例3 237
8.11 总结 242
第9章 Servlet工做原理解析 243
9.1 从Servlet容器提及 243
9.1.1 Servlet容器的启动过程 244
9.1.2 Web应用的初始化工做 247
9.2 建立Servlet实例 249
9.2.1 建立Servlet对象 250
9.2.2 初始化Servlet 250
9.3 Servlet体系结构 252
9.4 Servlet如何工做 255
9.5 Servlet中的Listener 257
9.6 Filter如何工做 259
9.7 Servlet中的url-pattern 261
9.8 总结 262
第10章 深刻理解Session与Cookie 263
10.1 理解Cookie 264
10.1.1 Cookie属性项 264
10.1.2 Cookie如何工做 265
10.1.3 使用Cookie的限制 268
10.2 理解Session 269
10.2.1 Session与Cookie 269
10.2.2 Session如何工做 270
10.3 Cookie安全问题 273
10.4 分布式Session框架 274
10.4.1 存在哪些问题 274
10.4.2 能够解决哪些问题 275
10.4.3 整体实现思路 275
10.5 Cookie压缩 280
10.6 表单重复提交问题 282
10.7 多终端Session统一 283
10.8 总结 285
第11章 Tomcat的系统架构与设计模式 286
11.1 Tomcat整体设计 286
11.1.1 Tomcat整体结构 287
11.1.2 Connector组件 293
11.1.3 Servlet容器Container 298
11.1.4 Tomcat中的其余组件 309
11.2 Tomcat中的设计模式 309
11.2.1 门面设计模式 309
11.2.2 观察者设计模式 311
11.2.3 命令设计模式 313
11.2.4 责任链设计模式 314
11.3 总结 316
第12章 Jetty的工做原理解析 317
12.1 Jetty的基本架构 317
12.1.1 Jetty基本架构简介 317
12.1.2 Handler的体系结构 319
12.2 Jetty的启动过程 320
12.3 接受请求 321
12.3.1 基于HTTP工做 321
12.3.2 基于AJP工做 323
12.3.3 基于NIO方式工做 326
12.4 处理请求 327
12.5 与JBoss集成 330
12.6 与Tomcat的比较 331
12.6.1 架构比较 331
12.6.2 性能比较 332
12.6.3 特性比较 332
12.7 总结 333
第13章 Spring框架的设计理念与设计模式分析 334
13.1 Spring的骨骼架构 334
13.1.1 Spring的设计理念 335
13.1.2 核心组件如何协同工做 336
13.2 核心组件详解 337
13.2.1 Bean组件 337
13.2.2 Context组件 339
13.2.3 Core组件 340
13.2.4 Ioc容器如何工做 342
13.3 Spring中AOP的特性详解 352
13.3.1 动态代理的实现原理 352
13.3.2 Spring AOP如何实现 355
13.4 设计模式解析之代理模式 358
13.4.1 代理模式原理 358
13.4.2 Spring中代理模式的实现 358
13.5 设计模式解析之策略模式 361
13.5.1 策略模式原理 361
13.5.2 Spring中策略模式的实现 362
13.6 总结 362
第14章 Spring MVC的工做机制与设计模式 364
14.1 Spring MVC的整体设计 364
14.2 Control设计 369
14.2.1 HandlerMapping初始化 370
14.2.2 HandlerAdapter初始化 372
14.2.3 Control的调用逻辑 373
14.3 Model设计 374
14.4 View设计 375
14.5 框架设计的思考 377
14.5.1 为何须要框架 377
14.5.2 须要什么样的框架 377
14.5.3 框架设计原则 378
14.5.4 “指航灯” 378
14.5.5 最基本的原则 378
14.6 设计模式解析之模板模式 379
14.6.1 模板模式的结构 379
14.6.2 Spring MVC中的模板模式示例 379
14.7 总结 380
第15章 深刻分析iBatis框架之系统架构与映射原理 381
15.1 iBatis框架主要的类层次结构 381
15.2 iBatis框架的设计策略 382
15.3 iBatis框架的运行原理 384
15.4 示例 386
15.5 iBatis对SQL语句的解析 388
15.6 数据库字段映射到Java对象 389
15.7 示例运行的结果 391
15.8 设计模式解析之简单工厂模式 391
15.8.1 简单工厂模式的实现原理 391
15.8.2 iBatis中的简单工厂模式示例 392
15.9 设计模式解析之工厂模式 393
15.9.1 工厂模式的实现原理 393
15.9.2 iBatis中的工厂模式示例 394
15.10 总结 395
第16章 Velocity工做原理解析 397
16.1 Velocity整体架构 398
16.2 JJTree渲染过程解析 401
16.2.1 #set语法 405
16.2.2 Velocity的方法调用 406
16.2.3 #if、#elseif和#else语法 409
16.2.4 #foreach语法 410
16.2.5 #parse语法 412
16.3 事件处理机制 413
16.4 经常使用优化技巧 416
16.4.1 减小树的总节点数量 416
16.4.2 减小渲染耗时的节点数量 416
16.5 与JSP比较 417
16.5.1 JSP渲染机制 417
16.5.2 Velocity与JSP 423
16.6 设计模式解析之合成模式 423
16.6.1 合成模式的结构 423
16.6.2 Velocity中合成模式的实现 424
16.7 设计模式解析之解释器模式 425
16.7.1 解释器模式的结构 425
16.7.2 Velocity中解释器模式的实现 426
16.8 总结 426
第17章 Velocity优化实践 427
17.1 现实存在的问题 427
17.2 优化的理论基础 428
17.2.1 程序语言的三角形结构 428
17.2.2 数据结构减小抽象化 429
17.2.3 简单的程序复杂化 429
17.2.4 减小翻译的代价 430
17.2.5 变的转化为不变的 430
17.3 一个高效的模板引擎实现思路 430
17.3.1 vm模板如何被编译 432
17.3.2 方法调用的无反射优化 439
17.3.3 将字符输出改为字节输出 442
17.4 优化的成果 443
17.4.1 将char转成byte 443
17.4.2 无反射执行 444
17.5 其余优化手段 445
17.6 总结 445
第18章 大浏览量系统的静态化架构设计 446
18.1 淘宝大浏览量商品详情系统简介 446
18.2 系统面临哪些挑战 447
18.3 淘宝前台系统的优化历程 449
18.4 大浏览量系统的静态改造 449
18.4.1 什么是静态化系统 449
18.4.2 为何要进行静态化架构设计 450
18.4.3 如何改造动态系统 451
18.4.4 几种静态化方案的设计及选择 453
18.4.5 如何解决失效问题 458
18.4.6 服务端静态化方案的演进:CDN化 459
18.5 总结 462
参考资料 463
媒体评论
《深刻分析Java Web技术内幕(修订版)》的内容涉及从HTTP、Servlet、模板渲染、数据层、容器到JVM 等Java Web开发的各个方面,这些问题是许令波在平常工做中常常遇到的,我想也是全部Java Web开发人员都会遇到的。《深刻分析Java Web技术内幕(修订版)》最大的特色就是让Java Web 开发人员对整个开发过程所涉及的技术能有一个完整的脉络图,从前端浏览器到Java 技术,再到Java 服务端技术,还介绍了实现这些技术用到的设计模式;不只详细总结了这些技术的工做原理,并且也结合了不少实际案例来进行阐述,将复杂、难懂的技术原理经过时序图和架构图的方式展示出来,更加便于读者理解。能够说若是你掌握了本书的知识,那么你就能够成为一个合格的JavaWeb开发人员。
《深刻分析Java Web技术内幕(修订版)》文笔流畅,图表清晰、易懂,值得推荐给Java Web 开发人员做为进阶学习的参考书。
——吴泽明(范禹),天猫产品技术部研究员
这是一本关于Java 的书,里面讲述的大量基础知识对前端开发工程师很是有帮助。好比中文编码章节,做者以一个实践者的身份详细阐述了编码问题的方方面面。总之,这是一本很用心的书,是实践者的思考和总结。目前在国内不多看到这类书籍,强烈推荐从事Web 开发工做的人员阅读并实践之。
——王保平(玉伯),开源前端类库KISSY、SeaJS做者
做者在淘宝作了不少Java Web 方面的改造项目,在Java Web 的相关技术上有深刻的掌握,并积累了丰富的经验。在这本书中做者不只向读者展现了这类大改造项目所需的知识,还展现了Java Web 更为全景的技术知识体系。本书值得Java Web 开发人员阅读。
——林昊(毕玄),淘宝资深技术专家
从第1 次拜读相关内容开始,就能够感受到做者并非在简简单单地讲述一门技术或者一个概念,他的分析和讲解十分深刻,而且能够很好地聚焦读者的思路,尤为是在Java Web 、Servlet 规范及字符串处理方面,都有很优秀的内容。在众多向developerWorks投稿的国内做者中,不管是从文章的质量看,仍是从内容的选题方向看,做者的文章均可称为上乘之做。同时,他的多篇文章还获得了广大网站读者的好评,其访问量、评分及评论的数量均名列前茅。
——刘达,developerWorks中国Java 专区编辑、技术工程师
前言
第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月
再版序
自《深刻分析Java Web技术内幕》一书出版以来,我收到了很多读者的反馈,也很感谢他们指出了书中的一些错误和不足。时隔两年,在电子工业出版社博文视点编辑的帮助下,《深刻分析Java Web技术内幕》有了修订再版的机会。
这两年来,一些技术也在发生着变化:无线技术愈来愈成熟,咱们的系统开始更多地支持无线,并衍生出系统要进行多终端化改造等问题;同时咱们也遇到了一些新的技术问题如大流量、网络瓶颈及机房的电力短缺等,这给系统的部署和系统架构带来新的挑战。因此我借此次再版的机会,将这方面的技术更新和实践尝试一并分享给读者。除了修正前版的一些错漏之处,本次修订还主要作了如下更新。
第1章增长了CDN动态加速的内容,介绍了咱们当前最新的想法和尝试。
第3章增长一种繁简转换的实现方式的内容,介绍了咱们在遇到多终端的状况下面临的多语言的问题,将咱们的思路和实践分享给你们。
第10章增长了多终端Session统一的内容,也介绍了在多终端的状况下如何解决Session统一的问题。
新增了第18章,重点介绍了咱们在近两年遇到大流量的状况下,如何跨越性能、网络和一个地区的电力瓶颈等问题,并提供了一个比较完整的解决方案。
感谢刘皎和张国霞两位编辑,感谢阿里巴巴的几位大牛范禹、黄眉等对修订版提供的一些有益建议,也感谢咱们技术发展部恬玉同窗的大力帮助。
许令波
2014.7