标题：轻量级Web应用开发宝典
图书信息
书名：轻量级Web应用开发宝典—Struts 2.1+Hibernate 3.5+Spring 3.0整合开发
作者：陈天河  等编著     
ISBN：978-7-121-11953-8
出版日期：2011年1月
定价：79.00元（含光盘1张）
开本：16开
页码：644页
宣传语
以入门级的实例为起点，充分考虑初学者的需要
以实例讲解为基础，探索组件的设计思想
书中实例都来源于真实的项目开发，力争与实际工作紧密结合
内容讲解由浅入深、循序渐进，可以满足不同层次读者的需求
内 容 简 介
本书详细讲解了Struts 2.1，Hibernate 3.5和Spring 3.0这三个组件的基础知识和基本使用方法，并通过一系列集成开发实例讲解了这三个组件在J2EE项目中的应用。
本书对每一个组件的讲解都是以入门级实例开始的，然后对组件的架构以及各方面的功能进行了深入的探讨。这样安排的好处是使读者在具备了初步知识的基础上对组件进行更深入的理解，并通过一系列贴近实际的实例来提高读者对组件的把握能力以及迅速丰富开发经验。本书的配套光盘中包含了本书所有实例的完整源代码以及开发中需要使用到的辅助工具。
本书适合于使用基于Struts，Hibernate，Spring的Java应用程序进行开发的技术人员，同时也非常适合对这三种技术感兴趣的读者进行学习和提高。
序
Java开发是现在软件开发中最大的热点，而轻量级的J2EE由于其开发容易、应用方便无疑成为了热点中的热点。本书正是围绕目前炙手可热的轻量级J2EE组件——Struts，Hibernate和Spring为核心进行讲解的。在本书中使用了目前最流行的集成开发环境Eclipse，并对其基本配置、使用方法以及在软件开发中常用的功能进行了详细的讲解。
Struts 2.1是一个实现了MVC模式的Web应用组件，是由WebWork组件发展而来的，因此是一个非常成熟的Web组件，被广泛地应用于各种Web应用系统的表示层实现中。
Hibernate是一个成熟的ORM组件，主要用于实现数据的持久化功能。它的最大作用在于构筑了面向对象的Java语言与关系型数据库之间的桥梁，这样就使开发人员可以直接通过对Java对象的持久化操作来完成对数据的持久化操作。
Spring作为一个轻量级的J2EE框架，其核心是一个功能强大的IoC容器，在此容器的基础上又提供了对AOP的支持，以及对持久层和表示层的封装实现。同时，它也提供了对常用持久层组件和表示层组件的支持。
任何编程语言和技术的学习都应该以实践为基础，也就是说只有通过具体的练习实现了所要完成的功能，才能说对于这个知识点有了一定的了解。
就像所有的编程书籍都会以类似“Hello World！”的实例开始进行讲解一样，本书每个组件的讲解都是以最基础的实例进行讲解的。在这些实例中，读者可以了解到组件的基本用法和主要功能，为后面深入的学习打下坚实的基础。
在入门实例之后进行了组件的框架以及更深入的讲解，目的是使读者在具备了初步知识的基础上对组件进行更深入的理解，并通过一系列贴近实际的实例来提高读者对组件的把握能力以及丰富开发经验。
本书的最后一章是一个使用Struts 2，Hibernate和Spring集成开发的实例，目的是增强读者对这三个组件整体的把握能力。对这三个组件的集成使用是最终目标，对每一个组件都能做到融会贯通才是本书的核心目的。
本书在内容的安排和知识的讲解上具有以下特点。
适用范围广
本书不但适用具有一定Java经验的开发人员使用，也同样适用于刚刚步入软件领域的初级程序员或者大中专院校的学生。本书对于组件都是以最基本的入门知识讲起，注意了知识层次的安排，希望读者在练习中逐步掌握各个组件的使用方法。
知识全面
现在的软件开发工作已经不再是只依赖于单一组件就可以完成的了，本书以Struts 2.1，Hibernate 3.5和Spring 3.0为核心，同时还介绍了一些相关组件的使用方法。
通俗易懂
本书语言平实，讲解详细。对每一个专业的术语都进行了详细的讲解，并辅助以各种实例和练习来加强读者对知识的理解。
实用性强
本书所介绍的开发方法是被目前大多数软件开发小组所采用的，并且具体的开发实例也是软件开发人员所经常遇到的。通过对本书的学习，读者可以掌握处理和解决开发中所面临的各种问题的方法。
经验总结
本书的作者具有多年的Java项目开发经验，在讲解的过程中包含了很多开发中的注意事项和经验总结，使读者可以在软件开发过程中少走弯路，从而迅速提高自己的开发经验和开发水平。
本书主要由陈天河编著，参与本书写作的还有陈光利、刘书琴、刘秀文、马连杰、陈君、马连和、张明才、赵燕侠、康国光、马红军、康克磊、刘博、杨淑华、于淼等。由于作者水平有限，书中疏漏和不足之处在所难免，敬请广大读者批评指正。
编  者
目  录
第1章  配置开发环境 1
1.1  安装JDK 1
1.1.1  获得JDK安装软件 1
1.1.2  安装JDK 2
1.1.3  检查JDK的安装结果 2
1.2  Eclipse初探 4
1.2.1  Eclipse的发布版本 5
1.2.2  安装和配置Eclipse 6
1.2.3  运行Eclipse 6
1.2.4  Eclipse集成环境概述 7
1.2.5  使用Eclipse开发第一个Java程序 8
1.3  Tomcat 12
1.3.1  获得Tomcat 12
1.3.2  安装和配置Tomcat 13
1.3.3  启动Tomcat 13
1.3.4  在Eclipse中配置Tomcat 14
1.4  安装Oracle 16
1.5  小结 19
第2章  Struts 2入门 20
2.1  Struts 2简介 20
2.1.1  了解Struts 2 21
2.1.2  获得Struts 2 23
2.1.3  运行Struts 2的样例程序 25
2.2  Struts 2的第一个应用 26
2.2.1  构建Hello World程序 26
2.2.2  实现用户登录功能 37
2.3  小结 44
第3章  深入Struts 2 45
3.1  Struts 2的处理流程 45
3.2  StrutsPrepareAndExecuteFilter 48
3.2.1  StrutsPrepareAndExecuteFilter的作用 48
3.2.2  StrutsPrepareAndExecuteFilter的配置 50
3.3  Struts 2的配置文件 51
3.3.1  package元素 54
3.3.2  include元素 55
3.3.3  bean元素 56
3.3.4  constant元素 60
3.4  Struts 2中常量的配置 60
3.4.1  Struts 2中常量配置的优先级 60
3.4.2  Struts 2中常量的配置方法 61
3.4.3  Struts 2中的可配置参数 62
3.5  Struts 2中的ValueStack 67
3.5.1  OGNL 67
3.5.2  OgnlValueStack的基本应用 77
3.6  Struts 2中的类型转换 84
3.6.1  转换器的定义 85
3.6.2  Struts 2中的类型转换机制 86
3.6.3  转换器的注册 86
3.6.4  Struts 2所提供的类型转换器 96
3.6.5  Struts 2对Collection和Map的类型转换 97
3.6.6  为集合对象建立索引 101
3.6.7  类型转换中的错误处理 101
3.7  小结 103
第4章  Struts 2的视图核心技术 104
4.1  Struts 2的标签库 104
4.1.1  Struts 2标签库概述 104
4.1.2  Struts 2标签的配置 105
4.1.3  Struts 2标签的语法 106
4.1.4  Struts 2标签的功能 109
4.2  Struts 2的主题和模板 136
4.2.1  Struts 2的主题 136
4.2.2  Struts 2的模板 139
4.3  Ajax在Struts 2中的应用 141
4.3.1  Ajax的核心技术 142
4.3.2  Struts 2对于Ajax的支持 153
4.4  小结 157
第5章  Struts 2的后台核心技术 158
5.1  Action的开发 158
5.1.1  Action介绍 158
5.1.2  Action的基本开发技巧 162
5.2  Action的配置 167
5.2.1  Action的基本配置 167
5.2.2  Action的高级配置 172
5.3  Struts 2中的拦截器 174
5.3.1  Struts 2所提供的拦截器 175
5.3.2  拦截器的配置 177
5.3.3  使用自己的拦截器 180
5.3.4  拦截器的使用技巧 180
5.4  Action的处理结果 181
5.4.1  Struts 2所提供的处理结果 182
5.4.2  扩展的处理结果 186
5.4.3  处理结果的定义 186
5.4.4  定义自己的处理结果 187
5.4.5  处理结果的使用技巧 192
5.5  小结 193
第6章  Struts 2的其他核心技术 194
6.1  文件的上传和下载 194
6.1.1  文件的上传 194
6.1.2  文件的下载 203
6.2  Struts 2的国际化 207
6.2.1  资源文件概述 208
6.2.2  资源文件的使用 209
6.2.3  Struts 2中的多语言 210
6.2.4  如何实现用户语言的切换 213
6.3  Struts 2的输入校验 214
6.3.1  输入校验的方法 215
6.3.2  Struts 2的内建校验器 216
6.3.3  校验器的注册 217
6.3.4  校验规则的定义 218
6.4  Struts 2的扩展 224
6.5  小结 224
第7章  Hibernate简介 225
7.1  持久化技术 225
7.2  持久层技术 225
7.3  持久层技术的实现 228
7.4  ORM概述 230
7.5  Hibernate简介 230
7.6  获得Hibernate 231
7.6.1  Hibernate Core 231
7.6.2  Hibernate Shards 232
7.6.3  Hibernate Search 232
7.6.4  Hibernate Tools 233
7.6.5  Hibernate Metamodel Generator 233
7.7  Hibernate Core软件包的组成 233
7.8  小结 234
第8章  Hibernate入门 235
8.1  项目的体系结构 235
8.2  项目开发概述 236
8.2.1  功能介绍 237
8.2.2  应用的主要技术 239
8.2.3  开发步骤和方法 240
8.3  开发博客管理系统 240
8.3.1  创建一个新项目 241
8.3.2  分析和建模 241
8.3.3  实现域模型 245
8.3.4  编写数据库脚本 257
8.3.5  定义映射文件 259
8.3.6  编写Hibernate的配置文件 262
8.3.7  Hibernate工具类的实现 269
8.3.8  Hibernate Filter的实现 280
8.3.9  定义和实现系统的异常 285
8.3.10  定义和实现DAO 287
8.3.11  完成用户注册和登录功能 317
8.3.12  博客管理功能的实现 328
8.3.13  博客主页的实现 340
8.4  小结 347
第9章  深入Hibernate 348
9.1  Hibernate的体系结构 348
9.1.1  Hibernate在应用程序中的位置 348
9.1.2  Hibernate运行时的体系结构 349
9.2  Hibernate实体对象的生命周期 351
9.2.1  Transient（瞬态） 351
9.2.2  Persistent（持久态） 352
9.2.3  Detached（游离态） 353
9.2.4  实体对象的状态转换 354
9.3  Hibernate API简介 361
9.3.1  Configuration类 361
9.3.2  SessionFactory接口 362
9.3.3  Session接口 362
9.3.4  Transaction接口 367
9.3.5  Query接口 368
9.3.6  Criteria接口 377
9.4  小结 381
第10章  Hibernate映射技巧 382
10.1  映射文件的配置 382
10.1.1  <hibernate-mapping> 382
10.1.2  <class> 384
10.1.3  <id> 387
10.1.4  <property> 389
10.2  集合类的映射 391
10.2.1  Java的集合类 391
10.2.2  集合类的使用 395
10.3  实体对象关联关系的映射 399
10.3.1  一对一关联关系的映射 400
10.3.2  一对多关联关系的映射 404
10.3.3  多对一关联关系的映射 405
10.3.4  多对多关联关系的映射 405
10.4  实体对象继承的映射 407
10.4.1  每个具体类一张表 407
10.4.2  每个类分层结构一张表 410
10.4.3  每个子类一张表 411
10.4.4  对象继承的映射方法总结 413
10.5  映射中的inverse和cascade 414
10.5.1  inverse属性 414
10.5.2  cascade属性 417
10.5.3  inverse与cascade的区别 418
10.6  小结 418
第11章  Hibernate高级技巧 419
11.1  Hibernate的事务处理 419
11.1.1  事务的基本概念 419
11.1.2  数据库的隔离级别 420
11.1.3  Hibernate中的事务处理 421
11.1.4  并发控制 422
11.2  Hibernate的缓存 430
11.2.1  什么是缓存 430
11.2.2  一级缓存 430
11.2.3  二级缓存 431
11.2.4  Hibernate查询方法与缓存的关系 439
11.3  Hibernate的性能优化 440
11.3.1  设计阶段考虑的问题 440
11.3.2  批量插入、更新和删除数据 441
11.3.3  提升数据库查询的性能 443
11.4  小结 446
第12章  Spring简介 447
12.1  Spring简介 447
12.1.1  容器 447
12.1.2  何谓“轻量级” 448
12.1.3  轻量级容器的现状 449
12.2  控制反转 449
12.3  依赖注入 450
12.4  面向切面的编程 451
12.5  Spring框架简介 453
12.6  获得Spring 455
12.7  小结 455
第13章  Spring的核心技术 456
13.1  IoC容器 456
13.1.1  IoC容器和Bean 456
13.1.2  Bean的基本配置 462
13.1.3  Bean的其他特性 484
13.2  资源 489
13.2.1  Resource接口 490
13.2.2  Resource的实现 490
13.2.3  ResourceLoader接口 491
13.2.4  资源小结 492
13.3  数据绑定功能 492
13.3.1  数据绑定对象 492
13.3.2  数据绑定中的类型转换 496
13.3.3  实现自定义的PropertyEditor 497
13.3.4  数据绑定功能小结 501
13.4  面向切面的编程 501
13.4.1  AOP的思想和本质 501
13.4.2  AOP的基本概念 502
13.4.3  Spring AOP的功能 503
13.4.4  基于配置的AOP 504
13.4.5  基于@AspectJ的AOP 511
13.5  小结 517
第14章  基于Spring的数据访问 518
14.1  事务管理 518
14.1.1  事务管理的框架 518
14.1.2  声明式事务管理 520
14.1.3  注解式事务管理 522
14.2  使用JDBC访问数据库 523
14.2.1  Spring JDBC简介 524
14.2.2  Spring JDBC核心包的使用 524
14.2.3  Spring JDBC数据源包 532
14.2.4  Spring JDBC对象包 532
14.2.5  Spring JDBC支持包 532
14.3  使用Hibernate访问数据库 534
14.3.1  Hibernate数据库访问流程 534
14.3.2  利用Spring的IoC容器创建SessionFactory 535
14.3.3  DAO的开发 538
14.3.4  Hibernate的事务管理 540
14.3.5  OpenSessionInView模式 541
14.4  小结 542
第15章  Spring MVC入门 543
15.1  简介 543
15.2  构建项目 543
15.3  使用Spring的MVC 544
15.3.1  Spring MVC简介 545
15.3.2  配置DispatcherServlet 546
15.3.3  创建自己的控制器 547
15.3.4  页面视图的实现 548
15.3.5  配置控制器的映射 549
15.3.6  增加业务逻辑 552
15.3.7  增加前台提交数据的处理功能 559
15.3.8  数据保存功能的实现 575
15.4  小结 581
第16章  Spring的Web集成 582
16.1  视图集成技术 582
16.1.1  视图和视图解析器 582
16.1.2  集成前的准备工作 582
16.1.3  JSP和JSTL的使用 585
16.1.4  XSLT的使用 586
16.1.5  PDF的输出 588
16.1.6  Excel文件的输出 590
16.1.7  视图集成技术小结 592
16.2  Web框架集成技术 592
16.2.1  通用配置 592
16.2.2  Struts 2.x集成 593
16.3  小结 594
第17章  使用Struts 2+Spring+Hibernate架构开发订货系统 595
17.1  Web应用的体系结构 596
17.1.1  表示层 596
17.1.2  持久层 597
17.1.3  业务层 597
17.1.4  域模型层 598
17.2  项目初始化 598
17.3  开发订货系统 599
17.3.1  域模型层的开发 599
17.3.2  持久层的配置 603
17.3.3  业务层的开发和配置 605
17.3.4  UI层的实现 615
17.4  小结 629