当前位置:首页 > 网络编程 > 编程语言与程序设计 > 深入分析Java Web技术内幕
出版社:电子工业出版社
出版日期:2012-9
ISBN:9787121179907
作者:许令波
页数:442页
章节摘录
版权页: 插图: 1.类加载器 在深入分析ClassLoader时我们详细分析了ClassLoader的工作机制,这里需要说明的是,每一个被JVM装载的类型都有一个对应的java.lang.Class类的实例来表示该类型,该实例可以唯一表示被JVM装载的class类,要求这个实例和其他类实例一样都存放在Java的堆中。 2.执行引擎 执行引擎是JVM的核心部分,执行引擎的作用就是解析JVM字节码指令,得到执行结果。在《Java虚拟机规范》中详细地定义了执行引擎遇到每条字节码指令时应该处理什么,并且应该得到什么结果。但是并没有规定执行引擎应该如何或采取什么方式处理而得到这个结果。因为执行引擎具体采取什么方式由JVM的实现厂家自己去实现,是直接解释执行还是采用JIT技术转成本地代码去执行,还是采用寄存器这个芯片模式去执行都可以。所以执行引擎的具体实现有很大的发挥空间,如SUN的hotspot是基于栈的执行引擎,而Google的Dalvik是基于寄存器的执行引擎。 执行引擎也就是执行一条条代码的一个流程,而代码都是包含在方法体内的,所以执行引擎本质上就是执行一个个方法所串起来的流程,对应到操作系统中一个执行流程是一个Java进程还是一个Java线程呢?很显然是后者,因为一个Java进程可以有多个同时执行的执行流程。这样说来每一个Java线程就是一个执行引擎的实例,那么一个JVM实例中就会同时有多个执行引擎在工作,这些执行引擎有的在执行用户的程序,而有的在执行JVM内部的程序(如Java垃圾收集器)。 3.Java内存管理 执行引擎在执行一段程序时需要存储一些东西,如操作码需要的操作数,操作码的执行结果需要保存。class类的字节码还有类的对象等这些信息都需要在执行引擎执行之前就准备好。从图7—2中可以看出一个JVM实例会有一个方法区、Java堆、Java栈、PC寄存器和本地方法区。其中方法区和Java堆是所有线程共享的,也就是可以被所有的执行引擎实例访问。每一个新的执行引擎实例被创建时会为这个执行引擎创建一个Java栈和一个PC寄存器,如果当前正在执行一个Java方法,那么当前的这个Java栈中保存的是该线程中方法调用的状态,包括方法的参数、方法的局部变量、方法的返回值以及运算的中间结果等。而PC寄存器会指向即将执行的下一条指令。
名人推荐
这是一本有关Java的书,里面讲述的大量基础知识对前端开发工程师也非常有帮助。比如中文编码章节,作者以一个实践者的身份详细阐述了编码问题的方方面面。总之,这是一本用心的书,是实践者的思考和总结。国内目前很少看到这类书籍,强烈推荐从事Web开发工作的人员购买阅读并实践之。 ——王保平,开源前端类库KISSY、SeaJS作者 作者在淘宝做了很:多Java Web方面的改造项目,在Java Web的相关技术上有深入的掌握,并积累了丰富的经验。在这本书中作者不仅向读者展示了这类大改造项目所需的知识。还展示了Java Web更为全景的技术知识体系,值得Java Web开发人员阅读。 ——林昊,淘宝资探深技术专家、China OSGi User Group总监 从第一次拜读相关内容开始,就可以感觉到作者并不是简简单单地讲述一个技术或者概念,他的分析和讲解十分深入,并且可以很好地聚焦读者的思路,尤其是在Java Web、Servlet规范及字符串处理方面,都有很优秀的内容。在众多向developerWorks投稿的国内作者中,无论从文章的质量看,还是从内容的选题方向看,作者的文章都可称是上乘之作。同时,他的多篇文章还得到了广大网站读者的好评,其访问量、评分及评论的数量均名列前茅。 ——刘达
内容概要
许令波,毕业于合肥工业大学,获计算机硕士学位。热爱Java Web技术,关注服务端性能优化,热衷开源技术的研究和分享,曾获developerWorks最佳作者称号。2009年进入淘宝工作,目前从事模板渲染框架与MVC框架的开发与应用、Java Web的性能优化、高访问量系统静态化和商品详情系统的业务改造等工作。
个人博客: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
2.1.3 字节与字符的转化接口
28
2.2 磁盘I/O工作机制
29
2.2.1 几种访问文件的方式
29
2.2.2 Java访问磁盘文件
33
2.2.3 Java序列化技术
34
2.3 网络I/O工作机制
36
2.3.1 TCP状态转化
37
2.3.2 影响网络传输的因素
39
2.3.3 Java Socket的工作机制
39
2.3.4 建立通信链路
40
2.3.5 数据传输
41
2.4 NIO的工作方式
41
2.4.1 BIO带来的挑战
41
2.4.2 NIO的工作机制
42
2.4.3 Buffer的工作方式
45
2.4.4 NIO的数据访问方式
47
2.5 I/O调优
49
2.5.1 磁盘I/O优化
49
2.5.2 TCP网络参数调优
50
2.5.3 网络I/O优化
52
2.6 设计模式解析之适配器模式
56
2.6.1 适配器模式的结构
56
2.6.2 Java I/O中的适配器模式
57
2.7 设计模式解析之装饰器模式
57
2.7.1 装饰器模式的结构
58
2.7.2 Java I/O中的装饰器模式
58
2.8 适配器模式与装饰器模式的区别
59
2.9 总结
59
第3章 深入分析Java Web中的中文编码问题
60
3.1 几种常见的编码格式
60
3.1.1 为什么要编码
60
3.1.2 如何“翻译”
61
3.2 Java中需要编码的场景
63
3.2.1 I/O操作中存在的编码
63
3.2.2 内存操作中的编码
65
3.3 Java中如何编解码
66
3.3.1 按照ISO-8859-1编码
68
3.3.2 按照GB2312编码
69
3.3.3 按照GBK编码
70
3.3.4 按照UTF-16编码
70
3.3.5 按照UTF-8编码
71
3.3.6 UTF-8编码代码片段
71
3.3.7 几种编码格式的比较
73
3.4 Java Web中涉及的编解码
73
3.4.1 URL的编解码
75
3.4.2 HTTP Header的编解码
78
3.4.3 POST表单的编解码
78
3.4.4 HTTP BODY的编解码
79
3.5 JS中的编码问题
80
3.5.1 外部引入JS文件
80
3.5.2 JS的URL编码
81
3.5.3 其他需要编码的地方
83
3.6 常见问题分析
83
3.6.1 中文变成了看不懂的字符
83
3.6.2 一个汉字变成一个问号
84
3.6.3 一个汉字变成两个问号
84
3.6.4 一种不正常的正确编码
85
3.7 总结
86
第4章 Javac编译原理
87
4.1 Javac是什么
88
4.2 Javac编译器的基本结构
88
4.3 Javac工作原理分析
90
4.3.1 词法分析器
91
4.3.2 语法分析器
98
4.3.3 语义分析器
103
4.3.4 代码生成器
113
4.4 设计模式解析之访问者模式
116
4.4.1 访问者模式的结构
117
4.4.2 Javac中访问者模式的实现
118
4.5 总结
119
第5章 深入class文件结构
120
5.1 JVM指令集简介
120
5.1.1 类相关的指令
122
5.1.2 方法的定义
123
5.1.3 属性的定义
124
5.1.4 其他指令集
125
5.2 class文件头的表示形式
133
5.3 常量池
137
5.3.1 UTF8常量类型
140
5.3.2 Fieldref、Methodref常量类型
141
5.3.3 Class常量类型
141
5.3.4 NameAndType常量类型
142
5.4 类信息
142
5.5 Fields和Methods定义
143
5.6 类属性描述
147
5.7 Javap生成的class文件结构
148
5.7.1 LineNumberTable
150
5.7.2 LocalVariableTable
151
5.8 总结
153
第6章 深入分析ClassLoader 工作机制
154
6.1 ClassLoader类结构分析
155
6.2 ClassLoader的等级加载机制
156
6.3 如何加载class文件
159
6.3.1 加载字节码到内存
159
6.3.2 验证与解析
161
6.3.3 初始化Class对象
161
6.4 常见加载类错误分析
161
6.4.1 ClassNotFoundException
161
6.4.2 NoClassDefFoundError
162
6.4.3 UnsatisfiedLinkError
163
6.4.4 ClassCastException
164
6.4.5 ExceptionInInitializerError
165
6.5 常用的ClassLoader分析
166
6.6 如何实现自己的ClassLoader
170
6.6.1 加载自定义路径下的class文件
170
6.6.2 加载自定义格式的class文件
172
6.7 实现类的热部署
174
6.8 Java应不应该动态加载类
176
6.9 总结
177
第7章 JVM体系结构与工作方式
178
7.1 JVM体系结构
178
7.1.1 何谓JVM
178
7.1.2 JVM体系结构详解
181
7.2 JVM工作机制
183
7.2.1 机器如何执行代码
183
7.2.2 JVM为何选择基于栈的架构
184
7.2.3 执行引擎的架构设计
185
7.2.4 执行引擎的执行过程
186
7.2.5 JVM方法调用栈
191
7.3 总结
195
第8章 JVM内存管理
196
8.1 物理内存与虚拟内存
197
8.2 内核空间与用户空间
198
8.3 Java中哪些组件需要使用内存
199
8.3.1 Java堆
199
8.3.2 线程
199
8.3.3 类和类加载器
200
8.3.4 NIO
200
8.3.5 JNI
201
8.4 JVM内存结构
201
8.4.1 PC寄存器
202
8.4.2 Java栈
202
8.4.3 堆
203
8.4.4 方法区
203
8.4.5 运行时常量池
204
8.4.6 本地方法栈
204
8.5 JVM内存分配策略
204
8.5.1 通常的内存分配策略
205
8.5.2 Java中内存分配详解
205
8.6 JVM内存回收策略
210
8.6.1 静态内存分配和回收
210
8.6.2 动态内存分配和回收
211
8.6.3 如何检测垃圾
211
8.6.4 基于分代的垃圾收集算法
213
8.7 内存问题分析
222
8.7.1 GC日志分析
222
8.7.2 堆快照文件分析
225
8.7.3 JVM Crash日志分析
225
8.8 实例1
231
8.9 实例2
233
8.10 实例3
235
8.11 总结
240
第9章 Servlet工作原理解析
241
9.1 从Servlet容器说起
241
9.1.1 Servlet容器的启动过程
242
9.1.2 Web应用的初始化工作
245
9.2 创建Servlet实例
247
9.2.1 创建Servlet对象
248
9.2.2 初始化Servlet
248
9.3 Servlet体系结构
250
9.4 Servlet如何工作
253
9.5 Servlet中的Listener
255
9.6 Filter如何工作
257
9.7 Servlet中的url-pattern
259
9.8 总结
260
第10章 深入理解Session与Cookie
261
10.1 理解Cookie
262
10.1.1 Cookie属性项
262
10.1.2 Cookie如何工作
263
10.1.3 使用Cookie的限制
266
10.2 理解Session
267
10.2.1 Session与Cookie
267
10.2.2 Session如何工作
268
10.3 Cookie安全问题
271
10.4 分布式Session框架
272
10.4.1 存在哪些问题
272
10.4.2 可以解决哪些问题
273
10.4.3 总体实现思路
273
10.5 Cookie压缩
278
10.6 表单重复提交问题
280
10.7 总结
281
第11章 Tomcat的系统架构与 设计模式
282
11.1 Tomcat总体设计
282
11.1.1 Tomcat总体结构
283
11.1.2 Connector组件
289
11.1.3 Servlet容器Container
294
11.1.4 Tomcat中的其他组件
305
11.2 Tomcat中的设计模式
305
11.2.1 门面设计模式
305
11.2.2 观察者设计模式
307
11.2.3 命令设计模式
309
11.2.4 责任链设计模式
310
11.3 总结
312
第12章 Jetty的工作原理解析
313
12.1 Jetty的基本架构
313
12.1.1 Jetty的基本架构简介
313
12.1.2 Handler的体系结构
315
12.2 Jetty的启动过程
316
12.3 接受请求
317
12.3.1 基于HTTP协议工作
317
12.3.2 基于AJP工作
319
12.3.3 基于NIO方式工作
322
12.4 处理请求
323
12.5 与Jboss集成
326
12.6 与Tomcat的比较
327
12.6.1 架构比较
327
12.6.2 性能比较
328
12.6.3 特性比较
328
12.7 总结
329
第13章 Spring框架的设计理念与 设计模式分析
330
13.1 Spring的骨骼架构
330
13.1.1 Spring的设计理念
331
13.1.2 核心组件如何协同工作
332
13.2 核心组件详解
333
13.2.1 Bean组件
333
13.2.2 Context组件
335
13.2.3 Core组件
336
13.2.4 Ioc容器如何工作
338
13.3 Spring中AOP特性详解
348
13.3.1 动态代理的实现原理
348
13.3.2 Spring AOP如何实现
351
13.4 设计模式解析之代理模式
354
13.4.1 代理模式原理
354
13.4.2 Spring中代理模式的实现
354
13.5 设计模式解析之策略模式
357
13.5.1 策略模式原理
357
13.5.2 Spring中策略模式的实现
358
13.6 总结
358
第14章 Spring MVC工作机制与 设计模式
360
14.1 Spring MVC的总体设计
360
14.2 Control设计
365
14.2.1 HandlerMapping初始化
366
14.2.2 HandlerAdapter初始化
368
14.2.3 Control的调用逻辑
369
14.3 Model设计
370
14.4 View设计
371
14.5 框架设计的思考
373
14.5.1 为什么需要框架
373
14.5.2 需要什么样的框架
373
14.5.3 框架设计的原则
374
14.5.4 “指航灯”
374
14.5.5 最基本的原则
374
14.6 设计模式解析之模板模式
375
14.6.1 模板模式的结构
375
14.6.2 Spring MVC中的模板模式示例
376
14.7 总结
377
第15章 深入分析Ibatis框架之系统 架构与映射原理
378
15.1 Ibatis框架主要的类层次结构
378
15.2 Ibatis框架的设计策略
379
15.3 Ibatis框架的运行原理
381
15.4 示例
383
15.5 Ibatis对SQL语句的解析
385
15.6 数据库字段映射到Java对象
386
15.7 示例运行的结果
388
15.8 设计模式解析之简单工厂模式
388
15.8.1 简单工厂模式的实现原理
388
15.8.2 Ibatis中的简单工厂模式示例
389
15.9 设计模式解析之工厂模式
390
15.9.1 工厂模式的实现原理
390
15.9.2 Ibatis中的工厂模式示例
391
15.10 总结
392
第16章 Velocity工作原理解析
394
16.1 Velocity总体架构
395
16.2 JJTree渲染过程解析
398
16.2.1 #set语法
402
16.2.2 Velocity的方法调用
403
16.2.3 #if、#elseif和#else语法
406
16.2.4 #foreach语法
407
16.2.5 #parse语法
409
16.3 事件处理机制
410
16.4 常用优化技巧
413
16.4.1 减少树的总节点数量
413
16.4.2 减少渲染耗时的节点数量
413
16.5 与JSP比较
414
16.5.1 JSP渲染机制
414
16.5.2 Velocity与JSP
420
16.6 设计模式解析之合成模式
420
16.6.1 合成模式的结构
420
16.6.2 Velocity中合成模式的实现
421
16.7 设计模式解析之解释器模式
422
16.7.1 解释器模式的结构
422
16.7.2 Velocity中解释器模式的实现
423
16.8 总结
423
第17章 Velocity优化实践
424
17.1 现实存在的问题
424
17.2 优化的理论基础
425
17.2.1 程序语言的三角形结构
425
17.2.2 数据结构减少抽象化
426
17.2.3 简单的程序复杂化
426
17.2.4 减少翻译的代价
427
17.2.5 变的转化为不变
427
17.3 一个高效的模板引擎的实现思路
427
17.3.1 vm模板如何被编译
429
17.3.2 方法调用的无反射优化
436
17.3.3 字符输出改成字节输出
439
17.4 优化的成果
440
17.4.1 char转成byte
440
17.4.2 无反射执行
441
17.5 其他优化手段
442
17.6 总结
442
编辑推荐
《深入分析Java Web技术内幕》不仅介绍这些技术和框架的工作原理,而且结合示例来讲解,通过通俗易懂的文字和丰富生动的配图,让读者充分并深入理解它们的内部工作原理,同时还结合了设计模式来介绍这些技术背后的架构思维。
作者简介
《深入分析Java Web技术内幕》围绕JavaWeb相关技术从三方面全面深入地进行阐述。首先介绍前端知识,主要介绍JavaWeb开发中涉及的一些基本知识,包括Web请求过程、HTTP协议、DNS技术和CDN技术。其次深入介绍Java技术,包括I/O技术、中文编码问题、Javac编译原理、class文件结构解析、ClassLoader工作机制及JVM的内存管理等。最后介绍Java服务端技术,主要包括Servlet、Session与Cookie、Tomcat与Jetty服务器、Spring容器、Ibatis框架和Velocity框架等原理介绍。
图书封面
深入分析Java Web技术内幕下载 精选章节试读 更多精彩书评