主编推荐语
直面大型互联网公司的真实案例,一网打尽Java Web技术实践精髓。
内容简介
《深入分析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技术内幕(修订版)》不仅介绍这些技术和框架的工作原理,而且结合示例来讲解,通过通俗易懂的文字和丰富、生动的配图,让读者充分并深入理解它们的内部工作原理,同时还结合了设计模式来介绍这些技术背后的架构思维。
目录
- 版权信息
- 摘要
- 读者热评 ——摘自developerWorks上读者对作者文章的评价
- 推荐序
- 专家点评
- 再版序言
- 第1版序
- 第1章 深入Web请求过程
- 1.1 B/S网络架构概述
- 1.2 如何发起一个请求
- 1.3 HTTP解析
- 1.3.1 查看HTTP信息的工具
- 1.3.2 浏览器缓存机制
- 1.4 DNS域名解析
- 1.4.1 DNS域名解析过程
- 1.4.2 跟踪域名解析过程
- 1.4.3 清除缓存的域名
- 1.4.4 几种域名解析方式
- 1.5 CDN工作机制
- 1.5.1 CDN架构
- 1.5.2 负载均衡
- 1.5.3 CDN动态加速
- 1.6 总结
- 第2章 深入分析Java I/O的工作机制
- 2.1 Java的I/O类库的基本架构
- 2.1.1 基于字节的I/O操作接口
- 2.1.2 基于字符的I/O操作接口
- 2.1.3 字节与字符的转化接口
- 2.2 磁盘I/O工作机制
- 2.2.1 几种访问文件的方式
- 2.2.2 Java访问磁盘文件
- 2.2.3 Java序列化技术
- 2.3 网络I/O工作机制
- 2.3.1 TCP状态转化
- 2.3.2 影响网络传输的因素
- 2.3.3 Java Socket的工作机制
- 2.3.4 建立通信链路
- 2.3.5 数据传输
- 2.4 NIO的工作方式
- 2.4.1 BIO带来的挑战
- 2.4.2 NIO的工作机制
- 2.4.3 Buffer的工作方式
- 2.4.4 NIO的数据访问方式
- 2.5 I/O调优
- 2.5.1 磁盘I/O优化
- 2.5.2 TCP网络参数调优
- 2.5.3 网络I/O优化
- 2.6 设计模式解析之适配器模式
- 2.6.1 适配器模式的结构
- 2.6.2 Java I/O中的适配器模式
- 2.7 设计模式解析之装饰器模式
- 2.7.1 装饰器模式的结构
- 2.7.2 Java I/O中的装饰器模式
- 2.8 适配器模式与装饰器模式的区别
- 2.9 总结
- 第3章 深入分析Java Web中的中文编码问题
- 3.1 几种常见的编码格式
- 3.1.1 为什么要编码
- 3.1.2 如何“翻译”
- 3.2 在Java中需要编码的场景
- 3.2.1 在I/O操作中存在的编码
- 3.2.2 在内存操作中的编码
- 3.3 在Java中如何编解码
- 3.3.1 按照ISO-8859-1编码
- 3.3.2 按照GB2312编码
- 3.3.3 按照GBK编码
- 3.3.4 按照UTF-16编码
- 3.3.5 按照UTF-8编码
- 3.3.6 UTF-8编码代码片段
- 3.3.7 对几种编码格式的比较
- 3.4 在Java Web中涉及的编解码
- 3.4.1 URL的编解码
- 3.4.2 HTTP Header的编解码
- 3.4.3 POST表单的编解码
- 3.4.4 HTTP BODY的编解码
- 3.5 在JS中的编码问题
- 3.5.1 外部引入JS文件
- 3.5.2 JS的URL编码
- 3.5.3 其他需要编码的地方
- 3.6 常见问题分析
- 3.6.1 中文变成了看不懂的字符
- 3.6.2 一个汉字变成一个问号
- 3.6.3 一个汉字变成两个问号
- 3.6.4 一种不正常的正确编码
- 3.7 一种繁简转换的实现方式
- 3.8 总结
- 第4章 Javac编译原理
- 4.1 Javac是什么
- 4.2 Javac编译器的基本结构
- 4.3 Javac工作原理分析
- 4.3.1 词法分析器
- 4.3.2 语法分析器
- 4.3.3 语义分析器
- 4.3.4 代码生成器
- 4.4 设计模式解析之访问者模式
- 4.4.1 访问者模式的结构
- 4.4.2 Javac中访问者模式的实现
- 4.5 总结
- 第5章 深入class文件结构
- 5.1 JVM指令集简介
- 5.1.1 与类相关的指令
- 5.1.2 方法的定义
- 5.1.3 属性的定义
- 5.1.4 其他指令集
- 5.2 class文件头的表示形式
- 5.3 常量池
- 5.3.1 UTF8常量类型
- 5.3.2 Fieldref、Methodref常量类型
- 5.3.3 Class常量类型
- 5.3.4 NameAndType常量类型
- 5.4 类信息
- 5.5 Fields和Methods定义
- 5.6 类属性描述
- 5.7 Javap生成的class文件结构
- 5.7.1 LineNumberTable
- 5.7.2 LocalVariableTable
- 5.8 总结
- 第6章 深入分析ClassLoader工作机制
- 6.1 ClassLoader类结构分析
- 6.2 ClassLoader的等级加载机制
- 6.3 如何加载class文件
- 6.3.1 加载字节码到内存
- 6.3.2 验证与解析
- 6.3.3 初始化Class对象
- 6.4 常见加载类错误分析
- 6.4.1 ClassNotFoundException
- 6.4.2 NoClassDefFoundError
- 6.4.3 UnsatisfiedLinkError
- 6.4.4 ClassCastException
- 6.4.5 ExceptionInInitializerError
- 6.5 常用的ClassLoader分析
- 6.6 如何实现自己的ClassLoader
- 6.6.1 加载自定义路径下的class文件
- 6.6.2 加载自定义格式的class文件
- 6.7 实现类的热部署
- 6.8 Java应不应该动态加载类
- 6.9 总结
- 第7章 JVM体系结构与工作方式
- 7.1 JVM体系结构
- 7.1.1 何谓JVM
- 7.1.2 JVM体系结构详解
- 7.2 JVM工作机制
- 7.2.1 机器如何执行代码
- 7.2.2 JVM为何选择基于栈的架构
- 7.2.3 执行引擎的架构设计
- 7.2.4 执行引擎的执行过程
- 7.2.5 JVM方法调用栈
- 7.3 总结
- 第8章 JVM内存管理
- 8.1 物理内存与虚拟内存
- 8.2 内核空间与用户空间
- 8.3 在Java中哪些组件需要使用内存
- 8.3.1 Java堆
- 8.3.2 线程
- 8.3.3 类和类加载器
- 8.3.4 NIO
- 8.3.5 JNI
- 8.4 JVM内存结构
- 8.4.1 PC寄存器
- 8.4.2 Java栈
- 8.4.3 堆
- 8.4.4 方法区
- 8.4.5 运行时常量池
- 8.4.6 本地方法栈
- 8.5 JVM内存分配策略
- 8.5.1 通常的内存分配策略
- 8.5.2 Java中的内存分配详解
- 8.6 JVM内存回收策略
- 8.6.1 静态内存分配和回收
- 8.6.2 动态内存分配和回收
- 8.6.3 如何检测垃圾
- 8.6.4 基于分代的垃圾收集算法
- 8.7 内存问题分析
- 8.7.1 GC日志分析
- 8.7.2 堆快照文件分析
- 8.7.3 JVM Crash日志分析
- 8.8 实例1
- 8.9 实例2
- 8.10 实例3
- 8.11 总结
- 第9章 Servlet工作原理解析
- 9.1 从Servlet容器说起
- 9.1.1 Servlet容器的启动过程
- 9.1.2 Web应用的初始化工作
- 9.2 创建Servlet实例
- 9.2.1 创建Servlet对象
- 9.2.2 初始化Servlet
- 9.3 Servlet体系结构
- 9.4 Servlet如何工作
- 9.5 Servlet中的Listener
- 9.6 Filter如何工作
- 9.7 Servlet中的url-pattern
- 9.8 总结
- 第10章 深入理解Session与Cookie
- 10.1 理解Cookie
- 10.1.1 Cookie属性项
- 10.1.2 Cookie如何工作
- 10.1.3 使用Cookie的限制
- 10.2 理解Session
- 10.2.1 Session与Cookie
- 10.2.2 Session如何工作
- 10.3 Cookie安全问题
- 10.4 分布式Session框架
- 10.4.1 存在哪些问题
- 10.4.2 可以解决哪些问题
- 10.4.3 总体实现思路
- 10.5 Cookie压缩
- 10.6 表单重复提交问题
- 10.7 多终端Session统一
- 10.8 总结
- 第11章 Tomcat的系统架构与设计模式
- 11.1 Tomcat总体设计
- 11.1.1 Tomcat总体结构
- 11.1.2 Connector组件
- 11.1.3 Servlet容器Container
- 11.1.4 Tomcat中的其他组件
- 11.2 Tomcat中的设计模式
- 11.2.1 门面设计模式
- 11.2.2 观察者设计模式
- 11.2.3 命令设计模式
- 11.2.4 责任链设计模式
- 11.3 总结
- 第12章 Jetty的工作原理解析
- 12.1 Jetty的基本架构
- 12.1.1 Jetty基本架构简介
- 12.1.2 Handler的体系结构
- 12.2 Jetty的启动过程
- 12.3 接受请求
- 12.3.1 基于HTTP工作
- 12.3.2 基于AJP工作
- 12.3.3 基于NIO方式工作
- 12.4 处理请求
- 12.5 与JBoss集成
- 12.6 与Tomcat的比较
- 12.6.1 架构比较
- 12.6.2 性能比较
- 12.6.3 特性比较
- 12.7 总结
- 第13章 Spring框架的设计理念与设计模式分析
- 13.1 Spring的骨骼架构
- 13.1.1 Spring的设计理念
- 13.1.2 核心组件如何协同工作
- 13.2 核心组件详解
- 13.2.1 Bean组件
- 13.2.2 Context组件
- 13.2.3 Core组件
- 13.2.4 Ioc容器如何工作
- 13.3 Spring中AOP的特性详解
- 13.3.1 动态代理的实现原理
- 13.3.2 Spring AOP如何实现
- 13.4 设计模式解析之代理模式
- 13.4.1 代理模式原理
- 13.4.2 Spring中代理模式的实现
- 13.5 设计模式解析之策略模式
- 13.5.1 策略模式原理
- 13.5.2 Spring中策略模式的实现
- 13.6 总结
- 第14章 SpringMVC的工作机制与设计模式
- 14.1 SpringMVC的总体设计
- 14.2 Control设计
- 14.2.1 HandlerMapping初始化
- 14.2.2 HandlerAdapter初始化
- 14.2.3 Control的调用逻辑
- 14.3 Model设计
- 14.4 View设计
- 14.5 框架设计的思考
- 14.5.1 为什么需要框架
- 14.5.2 需要什么样的框架
- 14.5.3 框架设计原则
- 14.5.4“指航灯”
- 14.5.5 最基本的原则
- 14.6 设计模式解析之模板模式
- 14.6.1 模板模式的结构
- 14.6.2 Spring MVC中的模板模式示例
- 14.7 总结
- 第15章 深入分析iBatis框架之系统架构与映射原理
- 15.1 iBatis框架主要的类层次结构
- 15.2 iBatis框架的设计策略
- 15.3 iBatis框架的运行原理
- 15.4 示例
- 15.5 iBatis对SQL语句的解析
- 15.6 数据库字段映射到Java对象
- 15.7 示例运行的结果
- 15.8 设计模式解析之简单工厂模式
- 15.8.1 简单工厂模式的实现原理
- 15.8.2 iBatis中的简单工厂模式示例
- 15.9 设计模式解析之工厂模式
- 15.9.1 工厂模式的实现原理
- 15.9.2 iBatis中的工厂模式示例
- 15.10 总结
- 第16章 Velocity工作原理解析
- 16.1 Velocity总体架构
- 16.2 JJTree渲染过程解析
- 16.2.1#set语法
- 16.2.2 Velocity的方法调用
- 16.2.3#if、#elseif和#else语法
- 16.2.4#foreach语法
- 16.2.5#parse语法
- 16.3 事件处理机制
- 16.4 常用优化技巧
- 16.4.1 减少树的总节点数量
- 16.4.2 减少渲染耗时的节点数量
- 16.5 与JSP比较
- 16.5.1 JSP渲染机制
- 16.5.2 Velocity与JSP
- 16.6 设计模式解析之合成模式
- 16.6.1 合成模式的结构
- 16.6.2 Velocity中合成模式的实现
- 16.7 设计模式解析之解释器模式
- 16.7.1 解释器模式的结构
- 16.7.2 Velocity中解释器模式的实现
- 16.8 总结
- 第17章 Velocity优化实践
- 17.1 现实存在的问题
- 17.2 优化的理论基础
- 17.2.1 程序语言的三角形结构
- 17.2.2 数据结构减少抽象化
- 17.2.3 简单的程序复杂化
- 17.2.4 减少翻译的代价
- 17.2.5 变的转化为不变的
- 17.3 一个高效的模板引擎实现思路
- 17.3.1 vm模板如何被编译
- 17.3.2 方法调用的无反射优化
- 17.3.3 将字符输出改成字节输出
- 17.4 优化的成果
- 17.4.1 将char转成byte
- 17.4.2 无反射执行
- 17.5 其他优化手段
- 17.6 总结
- 第18章 大浏览量系统的静态化架构设计
- 18.1 淘宝大浏览量商品详情系统简介
- 18.2 系统面临哪些挑战
- 18.3 淘宝前台系统的优化历程
- 18.4 大浏览量系统的静态改造
- 18.4.1 什么是静态化系统
- 18.4.2 为什么要进行静态化架构设计
- 18.4.3 如何改造动态系统
- 18.4.4 几种静态化方案的设计及选择
- 18.4.5 如何解决失效问题
- 18.4.6 服务端静态化方案的演进:CDN化
- 18.5 总结
- 参考资料
出版方
电子工业出版社
电子工业出版社成立于1982年10月,是国务院独资、工信部直属的中央级科技与教育出版社,是专业的信息技术知识集成和服务提供商。经过三十多年的建设与发展,已成为一家以科技和教育出版、期刊、网络、行业支撑服务、数字出版、软件研发、软科学研究、职业培训和教育为核心业务的现代知识服务集团。出版物内容涵盖了电子信息技术的各个分支及工业技术、经济管理、科普与少儿、社科人文等领域,综合出版能力位居全国出版行业前列。