论坛首页 Java企业应用论坛

新书预告 :《Struts2技术内幕》 —— Struts2源码研究和Web开发研究

浏览 45082 次
该帖已经被评为精华帖
作者 正文
   发表时间:2011-10-26   最后修改:2011-12-23
来自编辑的确认,本书已经印出来了。下周就能上市。

现在china-pub有预定:http://product.china-pub.com/198891

当当网的地址:http://product.dangdang.com/product.aspx?product_id=22577578

谢谢关注。



简单做一个新书预告,我写的《Struts2技术内幕》将在下个月问世。

这本书应该是国内比较少见的以研究Struts2的源码为主要目标的技术书籍。源码研究类的书不好写,因为这是一个吃力不讨好的工作。而且这类书写不好就很容易误入歧途,把读者引入大段的毫无章法的源码循环中去,从而使得整个书都显得非常枯燥。所以这本书从策划到完成,前后大约有1年半的时间,先后大改了4次。

这本书的源头要追溯到2008年底,我因为无意中参与到论坛上一个有关技术书籍的争议贴中,从而萌发了写一个Struts2学习教程的想法。与此同时,网站的“专栏”功能也给了我足够的发挥空间,继而形成了一系列的文章。时过境迁,新版的iteye的专栏功能已经取消,所以要看原稿的同学可以参考我的博客:http://downpour.iteye.com。应该说,当时我写的这一系列文章还是深受读者好评的。不过后来,因为种种原因,专栏没有写完,成为了一个“虎头蛇尾”的工程。

2010年初,杨福川编辑找到我,希望我能够把这个半吊子的工程重新整理一下,对广大读者有一个交代,这也重新燃起了我的创作热情。不过热情归热情,实际创作起来却又是另外一回事。因为使用源码解读的方式来讲述一个框架的来龙去脉,不仅需要对整个框架的知识体系有足够深刻的认识,还要能够从源码中总结归纳出真正对读者有意义的“读书笔记”,这个过程实属不易。

直到整本书的最后一个字完成,我才发现这本书中不仅包含了对Struts2源码的解读,更主要的是包含了我对整个Web开发的理解。因而,在书中所涉及到的有关面向对象的分析、有关请求-响应模式的实现分析都非常值得读者细细品味。

希望我的书大家能够喜欢。

PS. 样章和导读已经另开新帖:http://www.iteye.com/topic/1117142
   发表时间:2011-10-26  
下面是这本书的目录,供读者参考:

《Struts2技术内幕》目录
前言
为什么写这本书
本书所面向的读者
联系作者
致谢
第一部分  知识准备篇
第1章 厉兵秣马 —— 开发环境准备
1.1准备源代码阅读环境
1.1.1 安装与配置JDK
1.1.2 安装Eclipse与源码调试
1.1.3 安装与配置Web服务器
1.1.4 在Eclipse中使用Jetty搭建Web开发环境
1.1.4.1 构建项目的基本目录结构
1.1.4.2 引入Jetty服务器
1.1.4.3 启动Jetty进行开发调试
1.2 获取Struts2
1.2.1 Struts2的相关资源下载
1.2.2 Struts2项目的目录组织结构
1.3 Struts2源码的初步研究
1.3.1源码的组织形式
1.3.2调试Struts2源码
1.4 小结
第2章 固本清源 —— Web开发浅谈
2.1 面向对象浅谈
2.1.1 对象构成模型
2.1.1.1 对象的构成分析
2.1.1.2 属性对象模式
2.1.1.3 行为对象模式
2.1.2 对象关系模型
2.1.2.1 对象的从属关系
2.1.2.2 对象的协作关系
2.2 框架的本质
2.3 最佳实践
2.4 Web开发的基本模式
2.4.1 分层开发模式
2.4.2 MVC模式
2.5 表示层的困惑
2.6 如何学习开源框架
2.7 小结
第3章 提纲挈领—— Struts2概览
3.1 Struts2的来世今生
3.2 Struts2面面观
3.2.1 Struts2的运行环境
3.2.2 Struts2的应用场景
3.2.3 Struts2的核心技术
3.2.3.1 Struts2与表示层技术
3.2.3.2 Struts2与设计模式
3.2.3.3 Struts2与OGNL
3.2.3.4 Struts2与XWork
3.3 多角度透析Struts2
3.3.1透视镜 —— Struts2的宏观视图
3.3.1.1 Struts2的核心入口程序
3.3.1.2 Struts2的初始化主线
3.3.1.3 Struts2的Http请求处理主线
3.3.2显微镜 —— Struts2的微观元素
3.3.2.1第一条主线 —— Struts2的初始化
3.3.2.2第二条主线 —— 第一阶段 —— Http请求预处理
3.3.2.3第二条主线 —— 第二阶段 —— XWork执行业务逻辑
3.4 Struts2的配置元素
3.4.1 Struts2配置的表现形式
3.4.1.1 配置概览
3.4.1.2 配置的表现形式
3.4.1.3 配置的作用范围
3.4.1.4 配置文件的必要性
3.4.1.5配置元素的逻辑意义
3.4.2 Struts2配置元素定义
3.4.2.1 include节点
3.4.2.2 bean节点
3.4.2.3 constant节点
3.4.2.4 package节点
3.4.3 Struts2配置元素的分类
3.5 小结
第二部分  核心技术篇
第4章 源头活水 —— Struts2中的设计模式
4.1 ThreadLocal模式
4.1.1线程安全问题的由来
4.1.2 ThreadLocal模式的实现机理
4.1.3 ThreadLocal模式的应用场景
4.1.4 ThreadLocal模式的核心元素
4.2装饰(Decorator)模式
4.2.1装饰(Decorator)模式的定义
4.2.2装饰(Decorator)模式的构成要素
4.2.3装饰(Decorator)模式的应用案例
4.3策略(Strategy)模式
4.3.1策略(Strategy)模式的定义
4.3.2策略(Strategy)模式的应用场景
4.3.3策略(Strategy)模式的深入思考
4.4构造(Builder)模式
4.4.1构造(Builder)模式的核心要素
4.4.2构造(Builder)模式的应用场景
4.4.3 对象构建步骤
4.5责任链(Chain Of Responsibility)模式
4.5.1责任链(Chain Of Responsibility)模式的定义
4.5.2责任链(Chain Of Responsibility)模式的逻辑意义
4.6 小结
第5章 生命之源 —— XWork中的容器
5.1 容器,对象生命周期管理的基石
5.1.1对象的生命周期管理
5.1.2容器的引入
5.1.3容器(Container),不是容器(Collection)
5.2 XWork容器概览
5.2.1 XWork容器的定义
5.2.2 XWork容器的管辖范围
5.2.2.1 获取对象实例
5.2.2.2 对象的依赖注入
5.2.3 XWork容器操作详解
5.2.3.1 通过容器(Container)接口进行对象操作
5.2.3.2 通过Annotation获取容器对象实例
5.3 深入浅出XWork容器
5.3.1 XWork容器的存储结构
5.3.1.1 对象制造工厂(factory)
5.3.1.2 注入器(Injector)
5.3.2 XWork容器的实现机理
5.3.2.1 统一操作 —— 模板方法的运用
5.3.2.2 获取对象的实现
5.3.2.3 依赖注入的实现

5.4统一的容器操作接口 —— ObjectFactory
5.5 小结
第6章 灵丹妙药 —— OGNL,数据流转的催化剂
6.1 架起数据沟通的桥梁 —— 表达式引擎
6.1.1数据流转的困境
6.1.2数据访问的困境
6.1.3表达式引擎
6.2 强大的OGNL
6.2.1深入OGNL的API
6.2.2 OGNL三要素
6.2.2.1表达式(Expression)
6.2.2.2 Root对象(Root Object)
6.2.2.3上下文环境(Context)
6.2.3 OGNL的基本操作
6.2.3.1 对Root对象(Root Object)的访问
6.2.3.2 对上下文环境(Context)的访问
6.2.3.3 对静态变量的访问
6.2.3.4方法调用
6.2.3.5使用操作符进行简单计算
6.2.3.6 对数组和容器的访问
6.2.3.7投影与选择
6.2.3.8构造对象
6.2.4深入this指针
6.2.5有关#符号的三种用途
6.3深入OGNL内部
6.3.1深入OgnlContext
6.3.2深入OGNL的计算规则
6.3.2.1 类的寻址方式 —— ClassResolver
6.3.2.2 类型转化方式 —— TypeConverter
6.3.2.3 方法/属性访问策略 —— MemberAccess
6.3.2.4 方法/属性访问机制 —— MethodAccessor & PropertyAccessor
6.3.2.5 空值处理机制 —— NullHandler

6.3.3深入OGNL的扩展方式
6.3.3.1扩展ClassResolver
6.3.3.2扩展TypeConverter
6.3.3.3扩展MethodAccessor和PropertyAccessor
6.4 小结
第7章 别具匠心 —— XWork设计原理
7.1 请求-响应的哲学
7.1.1请求-响应的基本概念
7.1.2请求-响应的实现模式
7.1.2.1参数-返回值(Param-Return)模式
7.1.2.2参数-参数(Param-Param)模式
7.1.2.3 POJO模式
7.1.3分歧和职责
7.1.3.1分歧何来?
7.1.3.2 责任何在?
7.2 数据流和控制流
7.2.1再谈MVC
7.2.1.1数据与模型(Model)
7.2.1.2控制(Controller)和流
7.2.2数据载体的战争
7.2.2.1使用Map作为数据载体
7.2.2.2使用FormBean作为数据载体
7.2.2.3使用POJO作为数据载体
7.2.3 控制流的细节
7.3 XWork概览
7.3.1 XWork的宏观视图
7.3.2 XWork的微观视图
7.3.2.1数据流元素
7.3.2.2控制流元素
7.4 小结
第8章 庖丁解牛 —— XWork元素详解
8.1深入XWork宏观视图
8.1.1 数据流体系
8.1.2 控制流体系
8.1.2.1事件处理节点与驱动元素
8.1.2.2主力部队与策应部队
8.2数据流体系 —— 相互依存
8.2.1 ActionContext —— 一个平行世界
8.2.1.1 数据存储空间
8.2.1.2 数据共享空间
8.2.1.1 数据存储内容
8.2.2 ValueStack —— 对OGNL的扩展
8.2.2.1 ValueStack的基本概念
8.2.2.2 ValueStack的数据结构
8.2.2.3 ValueStack对OGNL计算规则的影响
8.2.2.4 栈顶元素(top)和子栈(Substack)
8.2.3深入ValueStack的实现
8.2.3.1 CompoundRoot详解
8.2.3.2 CompoundRootAccessor详解

8.2.4形影不离、相互依存
8.3控制流体系 —— 有条不紊
8.3.1 Action —— 革命性突破
8.3.1.1 Action的定义
8.3.1.2 孰优孰劣?
8.3.1.3状态与动作的合体
8.3.2 Interceptor —— 腾飞的翅膀
8.3.2.1 Interceptor的基本概念
8.3.2.2 Interceptor的定义
8.3.2.3 是AOP还是IoC?
8.3.2.4 Interceptor的逻辑意义
8.3.3 ActionInvocation —— 核心调度
8.3.3.1 ActionInvocation全景图
8.3.3.2 ActionInvocation调度分析
8.3.4 ActionProxy —— 执行窗口
8.3.4.1 ActionProxy的定义
8.3.4.2 ActionProxy的初始化
8.3.4.3 XWork的执行窗口
8.4交互体系 —— 水-乳-交-融
8.4.1 数据环境的生命周期
8.4.2三军会师之地
8.4.3 Action交互体系
8.4.3.1 外部环境交互体系
8.4.3.2 数据交互体系
8.4.3.3 协作交互体系
8.5小结
第三部分  运行主线篇
第9章 包罗万象 —— Struts2初始化主线
9.1配置元素与初始化主线
9.1.1 从入口程序开始
9.1.2 初始化主线的核心驱动力
9.1.3 初始化主线的构成元素
9.2核心分发器 —— Dispatcher
9.2.1核心分发器(Dispatcher)的核心驱动作用
9.2.1.1起 —— 负责系统的初始化
9.2.1.2承 —— 接收并预处理Http请求
9.2.1.3转 —— 将Struts2转入XWork
9.2.1.4合 —— 垃圾清理
9.2.2核心分发器(Dispatcher)的数据结构
9.3配置元素的加载器(Provider)
9.3.1配置元素加载器的作用
9.3.2容器加载器 —— ContainerProvider
9.3.3事件映射加载器 —— PackageProvider
9.4配置元素的构造器(Builder)
9.4.1容器构造器 —— ContainerBuilder
9.4.2 事件映射构造器 —— PackageConfig.Builder
9.5配置元素的管理类
9.5.1配置管理元素 —— Configuration
9.5.1.1 Configuration的职责概述
9.5.1.2 Configuration的实现
9.5.2配置操作接口 —— ConfigurationManager
9.6 Struts2初始化主线详解
9.6.1核心分发器(Dispatcher)的初始化
9.6.1.1步骤1 —— 创建ConfigurationManager
9.6.1.2步骤2 —— 初始化各种配置加载器(Provider)
9.6.1.3步骤3 —— 初始化容器
9.6.1.4步骤4 —— 执行额外的初始化工作
9.6.2容器(Container)的初始化
9.6.2.1步骤1 —— 定义容器构造器
9.6.2.2步骤2 —— ContainerBuilder进行参数搜集
9.6.2.3步骤3 —— ContainerBuilder进行容器创建
9.6.2.4步骤4 —— 初始化事件映射元素PackageConfig
9.6.2.4步骤5 —— 对PackageConfig进行运行期改造
9.7小结
第10章 井然有序 ——与Http请求的战斗
10.1制定作战计划
10.1.1 战斗资源
10.1.2 战斗进程
10.2第一战场 —— Http请求的预处理阶段
10.2.1三探入口程序
10.2.2 Http请求预处理类 —— PrepareOperations
10.2.2.1步骤1 —— 设置Encoding和Locale
10.2.2.2步骤2 —— 创建ActionContext
10.2.2.3步骤3 —— 将核心分发器Dispatcher绑定至当前线程
10.2.2.4步骤4 —— 对HttpServletRequest进行一定的封装
10.2.2.5步骤5 —— 根据Http请求查找ActionMapping
10.2.3 Http请求的执行类 —— ExecuteOperations
10.3第二战场 —— XWork处理阶段
10.3.1执行控制权的移交
10.3.1.1 ActionProxy的数据源
10.3.1.2 ActionInvocation的初始化
10.3.2 ActionInvocation调度的再分析
10.4小结
第11章 展翅高飞 —— 让视图放开手脚
11.1视图(View)的思考
11.1.1视图表现技术
11.1.1.1 JSP技术
11.1.1.2 Servlet技术
11.1.2视图的本质
11.1.3视图的职责
11.2深入Result机制
11.2.1 Result的不同视角
11.2.1.1 XWork视角 —— 事件处理节点
11.2.1.2 Struts2视角 —— 视图的操作窗口
11.2.2 Result职责分析
11.3标签库,永远的争论话题
11.3.1标签产生的初衷
11.3.2标签,毒药还是解药
11.3.3标签的发展趋势
11.3.4标签的分类
11.3.4.1 逻辑控制类
11.3.4.2 数据输出类
11.3.4.3 页面组件类
11.4数据访问的哲学
11.4.1不要问我从哪里来
11.4.1.1 不是问题的问题
11.4.1.2 隐形的力量 —— ValueStack
11.4.2不要问我长什么样
11.5小结
第12章 三头六臂 —— Struts2的扩展机制
12.1程序扩展机制的深入思考
12.1.1插件(Plugin)模式的基本概念
12.1.1.1软件功能模块化
12.1.1.2核心程序与功能模块
12.1.2常见的插件(Plugin)模式
12.1.2.1浏览器 —— Firefox
12.1.2.2编程IDE—— Eclipse
12.1.3插件模式的利弊分析
12.1.3.1正面因素
12.1.3.2反面因素
12.2 Struts2的插件(Plugin)模式
12.2.1深入Struts2插件
12.2.1.1表现形式
12.2.1.2安装使用
12.2.1.3依赖关系
12.2.1.4扩展点
12.2.2 Struts2插件分类
12.2.2.1框架整合类
12.2.2.2简化配置类
12.2.2.3页面装饰类
12.2.2.4功能扩展类
12.2.3 Struts2的插件加载机制
12.2.3.1插件加载概述
12.2.3.1插件加载接口的定义
12.2.3.1插件加载接口的使用
12.3小结
后记
0 请登录后投票
   发表时间:2011-10-26  
原来股神忙着写书
0 请登录后投票
   发表时间:2011-10-26  
看起来不错,何时出版,买一本
0 请登录后投票
   发表时间:2011-10-26  
全是精华啊!非常期待!有了样书送我一本吧!哈哈!
0 请登录后投票
   发表时间:2011-10-26  
luolonghao 写道
原来股神忙着写书


今年一般时间在休息,呵呵。
0 请登录后投票
   发表时间:2011-10-26  
期待,当年的“忘掉李刚”系列对我帮助很大
0 请登录后投票
   发表时间:2011-10-26  
很值得期待,有机会得好好拜读
0 请登录后投票
   发表时间:2011-10-26  
如果是spring3mvc技术内幕就好了
0 请登录后投票
   发表时间:2011-10-26   最后修改:2011-10-26
前10有书送不
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics