第1章 Spring概述 2
1.1 Spring的历史 2
1.2 Spring简介 2
1.2.1 Spring框架介绍 2
第1篇 Spring入门 2
1.2.2 Spring的特点 4
1.3 如何学习Spring 4
1.4 网络上的资源 5
1.5 小结 5
第2章 开始Spring之旅 6
2.1 建立Spring开发环境 6
2.1.1 下载JDK 6
2.1.3 设定Path与CLASSPATH 7
2.1.2 安装JDK 7
2.1.4 下载Eclipse 8
2.1.5 配置Eclipse 8
2.1.6 下载Tomcat 8
2.1.7 设定TOMCAT_HOME 9
2.1.8 下载Eclipse的Tomcat插件 9
2.1.9 为Eclipse配置Tomcat插件 10
2.1.10 下载Spring 12
2.1.11 简单介绍Spring包 12
2.1.12 在Eclipse中配置Spring 13
2.2 第一个使用Spring实现HelloWorld的例子 15
2.2.1 编写存放HelloWorld的Java文件HelloWorld.java 16
2.2.2 配置Spring的config.xml 16
2.2.3 编写测试程序TestHelloWorld.java 17
2.2.4 运行测试程序并查看输出结果 18
2.3 改写第一个Spring例子实现中英文输出 19
2.3.1 编写接口文件Hello.java 19
2.3.2 编写实现接口的两个类(ChHello、EnHello) 19
2.3.3 修改Spring的config.xml 20
2.3.4 修改测试程序TestHelloWorld.java 21
2.3.5 运行测试程序并查看输出结果 21
2.4 小结 22
第2篇 Spring技术详解 24
第3章 Spring基础概念 24
3.1 反向控制/依赖注入 24
3.1.1 反向控制(IoC) 24
3.2.1 接口注入(interface injection) 29
3.1.2 依赖注入(DI) 29
3.2 依赖注入的3种实现方式 29
3.2.2 Set注入(setter iniection) 30
3.2.3 构造注入(constructor iniection) 31
3.3 将HelloWorld实例改为构造注入方式实现 31
3.3.1 修改HelloWorld.java 31
3.3.2 修改config.xml 32
3.3.3 编写测试程序TestHelloWorld.java 32
3.3.4 运行测试程序并查看输出结果 33
3.4 使用哪种注入方式 33
3.5 小结 33
4.2.1 Bean的标识(id和name) 34
4.2 Bean的基础知识 34
4.1 什么是Bean 34
第4章 Spring的核心容器 34
4.2.2 Bean的类(class) 35
4.2.3 Singleton的使用 36
4.2.4 Bean的属性 37
4.2.5 对于null值的处理 40
4.2.6 使用依赖depends-on 41
4.2.7 一个较为完整的Bean配置文档 41
4.3 Bean的生命周期 42
4.3.1 Bean的定义 42
4.3.2 Bean的初始化 43
4.3.3 Bean的使用 46
4.3.4 Bean的销毁 47
4.4 用ref的属性指定依赖的3种模式 50
4.4.1 用local属性指定 50
4.4.2 用Bean属性指定 51
4.4.3 用parent属性指定 51
4.4.4 用local属性与Bean属性指定依赖的比较 52
4.5 Bean自动装配的5种模式 52
4.5.1 使用byName模式 52
4.5.2 使用byType模式 53
4.5.3 使用constructor模式 54
4.5.4 使用autodetect模式 55
4.5.5 使用no模式 56
4.6.2 使用simple模式 57
4.6.1 为什么要使用依赖检查 57
4.6 Bean依赖检查的4种模式 57
4.5.6 对5种模式进行总结 57
4.6.3 使用object模式 58
4.6.4 使用all模式 58
4.6.5 使用none模式 58
4.6.6 对4种模式进行总结 59
4.7 集合的注入方式 59
4.7.1 List 59
4.7.2 Set 60
4.7.3 Map 61
4.7.4 Properties 61
4.7.5 对集合的注入方式进行总结 62
4.8 管理Bean 62
4.8.1 使用BeanWrapper管理Bean 63
4.8.2 使用BeanFactory管理Bean 64
4.8.3 使用ApplicationContext管理Bean 65
4.8.4 3种管理Bean的方式的比较 66
4.9 ApplicationContext更强的功能 66
4.9.1 国际化支持 66
4.9.2 资源访问 69
4.9.3 事件传递 70
4.10 小结 73
第5章 Spring的AOP 74
5.1 AOP基本思想 74
5.1.1 认识AOP 74
5.1.2 AOP与OOP对比分析 74
5.2.1 通用的日志输出方法 75
5.1.3 AOP与Java的代理机制 75
5.2 从一个输出日志的实例分析Java的代理机制 75
5.2.2 通过面向接口编程实现日志输出 77
5.2.3 使用Java的代理机制进行日志输出 78
5.2.4 对这3种实现方式进行总结 80
5.3 AOP的3个关键概念 81
5.3.1 切入点(Pointcut) 81
5.3.2 通知(Advice) 82
5.3.3 Advisor 82
5.4 Spring的3种切入点(Pointcut)实现 82
5.4.1 静态切入点 82
5.5.1 Interception Around通知 83
5.5 Spring的通知(Advice) 83
5.4.3 自定义切入点 83
5.4.2 动态切入点 83
5.5.2 Before通知 84
5.5.3 After Returning通知 84
5.5.4 Throw通知 84
5.5.5 Introduction通知 84
5.6 Spring的Advisor 84
5.7 用ProxyFactoryBean创建AOP代理 85
5.7.1 使用ProxyFactoryBean代理目标类的所有方法 85
5.7.2 使用ProxyFactoryBean代理目标类的指定方法 86
5.7.3 正则表达式简介 87
5.8 把输出日志的实例改成用Spring的AOP来实现 89
5.8.1 采用Interception Around通知的形式实现 89
5.8.2 采用Before通知的形式实现 94
5.8.3 采用After Returning通知的形式实现 97
5.8.4 采用Throw通知的形式实现 101
5.9 Spring中AOP的两种代理方式 105
5.9.1 Java动态代理 105
5.9.2 CGLIB代理 106
5.10 Spring中的自动代理 108
5.11 一个用Spring AOP实现异常处理和记录程序执行时间的实例 114
5.11.1 异常处理和记录程序执行时间的实例简介 114
5.11.2 定义负责异常处理的Advice为ExceptionHandler.java 114
5.11.3 定义记录程序执行时间的Advice为TimeHandler.java 115
5.11.4 定义业务逻辑接口LogicInterface.java 116
5.11.5 编写实现业务逻辑接口的类Logicl.java 116
5.11.6 编写一个不实现业务逻辑接口的类Logic2.java 117
5.11.7 使用自动代理定义配置文件config.xml 118
5.11.8 编写测试类Logicl的程序TestAop.java 119
5.11.9 输出自动代理时类Logicl异常处理和记录程序执行时间的信息 119
5.11.10 编写测试类Logic2的程序TestAop.java 120
5.11.11 输出自动代理时类Logic2异常处理和记录程序执行时间的信息 120
5.11.12 使用ProxyFactoryBean代理定义配置文件config.xml 121
511.13 编写测试类Logicl的程序TestAop.java 122
5.11.14 输出ProxyFactoryBean代理时类Logicl记录程序执行时间的信息 123
5.11.15 编写测试类Logic2的程序TestAop.java 123
5.11.16 输出ProxyFactoryBean代理时类Logic2异常处理的信息 124
5.12 小结 124
6.1.2 事务处理的特性 125
6.1.1 事务处理的基本概念 125
6.1 简述事务处理 125
第6章 Spring的事务处理 125
6.1.3 对事务处理特性的总结 126
6.2 事务处理的3种方式 127
6.2.1 关系型数据库的事务处理 127
6.2.2 传统的JDBC事务处理 128
6.2.3 分布式事务处理 129
6.3 Spring的事务处理 129
6.3.1 Spring事务处理概述 129
6.3.2 编程式事务处理 131
6.3.3 声明式事务处理 136
6.5 小结 140
6.4 使用编程式还是声明式事务处理 140
第7章 Spring的持久层封装 141
7.1 传统的JDBC数据访问技术 141
7.2 通过XML实现DataSource(数据源)注入 142
7.2.1 使用Spring自带的DriverManagerDataSource 142
7.2.2 使用DBCP连接池 144
7.2.3 使用Tomcat提供的JNDI 145
7.3 使用JdbcTemplate访问数据 146
7.3.1 Template模式简介 146
7.3.2 回顾事务处理中TransactionTemplate的实现方式 148
7.3.3 JdbcTemplate的实现方式 150
7.3.4 使用JdbcTemplate查询数据库 158
7.3.5 使用JdbcTemplate更改数据库 158
7.4.1 ORM简述 159
7.4 使用ORM工具访问数据 159
7.4.2 使用Hibernate 160
7.4.3 使用iBatis 164
7.5 小结 167
第8章 Spring的Web框架 168
8.1 Web框架介绍 168
8.1.1 MVC模式简介 168
8.1.2 MVC模式的结构图 169
8.1.3 MVC模式的功能示意图 169
8.1.4 使用MVC模式的好处 169
8.1.5 Model1规范 170
8.1.6 Model2规范 171
8.1.7 Spring MVC的特点 171
8.2 一个在JSP页面输出“HelloWorld”的Spring MVC实例 172
8.2.1 配置web.xml 173
8.2.2 编写实现输出的JSP页面index.jsp 174
8.2.3 编写控制器HelloWorldAction.java 174
8.2.4 配置Spring文档dispatcherServlet-servlet.xml 175
8.2.5 启动Tomcat 176
8.2.6 运行程序 177
8.2.7 把index.jsp改为使用Jstl 177
8.2.8 修改配置文档dispatcherServlet-servlet.xml 178
8.2.9 运行修改后的程序 179
8.2.10 使用Log4j时应该注意的问题 179
8.3 Spring MVC的模型和视图(ModelAndView) 180
8.3.1 模型和视图 180
8.3.2 Jstl简介 182
8.4 Spring MVC的控制器(Controller) 184
8.3.3 视图解析 184
8.4.1 Controller架构 185
8.4.2 表单控制器(SimpleFormController) 185
8.4.3 多动作控制器(MultiActionController) 189
8.5 Spring MVC的分发器(DispatcherServlet) 196
8.5.1 分发器的定义方式 196
8.5.2 分发器的初始化参数 197
8.5.3 分发器的工作流程 198
8.5.4 分发器与视图解析器的结合 199
8.5.5 在一个Web应用中使用不同的视图层技术 200
8.5.6 在DispatcherServlet中指定处理异常的页面 201
8.6.1 映射示例 202
8.6 处理器映射 202
8.6.2 映射原理 204
8.6.3 添加拦截器 205
8.7 数据绑定 209
8.7.1 绑定原理 209
8.7.2 使用自定义标签 210
8.7.3 Validator应用 214
8.8 本地化支持 218
8.8.1 在头信息中包含客户端的本地化信息 219
8.8.2 根据cookie获取本地化信息 219
8.8.3 从会话中获取本地化信息 221
8.8.4 根据参数修改本地化信息 222
8.9 一个用Spring MVC实现用户登录的完整示例 224
8.9.1 在Eclipse中建立Tomcat工程项目myMVC 224
8.9.2 编写日志文件放在myMVC/WEB-INF/src下 225
8.9.3 配置web.xml 226
8.9.4 编写登录页面login.jsp 227
8.9.5 编写显示成功登录的页面success.jsp 227
8.9.6 编写存放用户登录信息的Bean 228
8.9.7 编写用户输入信息验证UserValidator.java 228
8.9.8 编写用户登录逻辑Login.java 229
8.9.9 编写配置文件dispatcherServlet-servlet.xml 230
8.9.10 运行程序 231
8.9.11 国际化支持 231
8.9.12 运行国际化后的程序 236
8.10 小结 237
9.1 定时器简述 238
9.2 定时器的两种实现方式 238
第9章 Spring的定时器 238
9.2.1 Timer 239
9.2.2 Quartz 240
9.2.3 两种方式的比较 243
9.3 利用Spring简化定时任务的开发 243
9.3.1 在Spring中使用Timer实现定时器 243
9.3.2 在Spring中使用Quartz实现定时器 245
9.4 小结 246
第3篇 Spring与其他工具整合应用 248
第10章 Spring与Struts的整合 248
10.1 Struts介绍 248
10.1.1 Struts的历史 248
10.1.2 Struts的体系结构 248
10.2.2 配置Struts 249
10.2 Struts的下载和配置 249
10.2.1 下载Struts 249
10.3 一个在JSP页面输出“HelloWorld”的Struts实例 252
10.3.1 配置web.xml 252
10.3.2 编写实现输出的JSP页面index.jsp 253
10.3.3 编写控制器HelloWorldAction.java 254
10.3.4 配置Struts文档struts-config.xml 255
10.3.5 启动Tomcat 255
10.3.6 运行程序 256
10.4 Struts的几个主要类简介 256
10.4.1 ActionServlet(控制器) 256
10.4.2 Action(适配器) 259
10.4.3 ActionMapping(映射) 260
10.4.4 ActionForm(数据存储) 263
10.4.5 DispatchAction(多动作控制器) 266
10.5 国际化支持 269
10.6 Struts的自定义标签 273
10.6.1 Bean标签 274
10.6.2 Logic标签 275
10.6.3 Html标签 277
10.7 Spring与Struts整合的3种方式 278
10.7.1 通过Spring的ActionSupport类 279
10.7.2 通过Spring的DelegatingRequestProcessor类 282
10.7.3 通过Spring的DelegatingActionProxy类 286
10.7.4 比较3种整合方式 289
10.8.1 Spring与Struts整合环境的配置 290
10.8 采用第3种整合方式编写一个用户注册的例子 290
10.8.2 编写web.xml 293
10.8.3 编写用户注册页面regedit.jsp 293
10.8.4 编写用户注册成功页面success.jsp 294
10.8.5 编写用户类User.java 294
10.8.6 编写Struts的配置文件struts-config.xml 295
10.8.7 编写Spring的配置文件config.xml 296
10.8.8 编写控制器RegeditAction.java 296
10.8.9 编写业务逻辑接口Regedit.java 297
10.8.10 编写具体的业务逻辑类RegeditImpl.java 297
10.8.11 运行用户注册的例子 298
10.9 小结 299
11.2 Hibernate的下载和配置 300
11.2.1 下载Hibernate 300
11.1 Hibernate介绍 300
第11章 Spring与Hibernate的整合 300
11.2.2 配置Hibernate 301
11.3 一个实现数据新增的Hibernate示例 302
11.3.1 建立数据库表 303
11.3.2 编写表对应的POJO 304
11.3.3 编写POJO对应的XML 305
11.3.4 编写Hibernate的配置文件 306
11.3.5 编写测试案例 306
11.3.6 运行测试程序 307
11.4 Hibernate的配置 308
11.5 Hibernate的映射 310
11.5.1 集合映射 311
11.5.2 组件映射 321
11.5.3 关联映射 323
11.5.4 继承映射 346
11.6 Hibernate的工具 350
11.6.1 从数据库到映射 350
11.6.2 从映射到POJO 358
11.7 Hibernate的几个主要类简介 360
11.7.1 Configuration(管理Hibernate) 360
11.7.2 SessionFactory(创建Session) 361
11.7.3 Session(提供Connection) 361
11.8 通过XML来整合Spring和Hibernate 363
11.9 整合Struts、Spring和Hibernate实现用户注册的示例 364
11.9.1 Spring、Struts和Hibernate整合环境的配置 365
11.9.2 编写webxml 368
11.9.3 编写用户注册页面regedit.jsp 369
11.9.4 编写用户注册成功页面success.jsp 369
11.9.5 建立数据库表结构 369
11.9.6 生成映射文件User.hbm.xml和POJO 370
11.9.7 编写接口UserDAO.java和实现类UserDAOImpl.java 372
11.9.8 编写Struts的配置文件struts-config.xml 373
11.9.9 编写Spring的配置文件config.xml 374
11.9.10 编写控制器RegeditAction.java 376
11.9.11 编写业务逻辑接口Regedit.java 376
11.9.12 编写具体的业务逻辑类RegeditImpl.java 377
11.9.13 运行用户注册的例子 377
11.10 小结 379
12.2.1 下载Ant 380
12.2 Ant的下载和安装 380
第12章 在Spring中使用Ant 380
12.1 Ant介绍 380
12.2.2 安装Ant 381
12.3 在Spring中使用Ant 382
12.3.1 在Eclipse中配置Ant 382
12.3.2 建立build.xml 382
12.3.3 运行Ant 384
12.4 小结 384
第13章 在Spring中使用Junit 385
13.1 Junit介绍 385
13.3 在Spring中使用Junit 386
13.2.2 安装Junit 386
13.2.1 下载Junit 386
13.2 Junit的下载和安装 386
13.3.1 在Eclipse中配置Junit 387
13.3.2 扩展TestCase类 387
13.3.3 运行Junit 388
13.4 使用Junit时常用的一些判定方法 389
13.5 利用Ant和Junit进行自动化测试 389
13.5.1 修改build.xml 389
13.5.2 运行Ant 391
13.5.3 自动生成测试报告 392
13.6 小结 393
14.2.2 检查Tomcat配置 396
14.2.1 检查JDK配置 396
14.2 检查环境配置 396
第14章 用Spring实现新闻发布系统实例 396
第4篇 Spring实例 396
14.1 新闻发布系统的介绍 396
14.2.3 检查Ant配置 397
14.3 在Eclipse下建立项目myNews 398
14.3.1 在Eclipse下建立项目 398
14.3.2 编写Ant build文件 401
14.3.3 配置web.xml文件 402
14.4 设计新闻发布系统 403
14.4.1 设计页面 403
14.4.2 设计持久化类 410
14.4.3 设计数据库 415
14.5.1 新闻发布的展示页面show.jsp 416
14.4.4 新闻发布系统在持久层的整体UML图 416
14.5 编写新闻发布系统的JSP页面 416
14.5.2 发布新闻页面release.jsp 418
14.5.3 用户注册页面regedit.jsp 419
14.5.4 管理员登录页面login.jsp 420
14.5.5 错误处理页面error.jsp 421
14.6 建立数据库表并生成XML和POJO 422
14.6.1 存放用户信息的数据库表 423
14.6.2 存放新闻的数据库表 424
14.6.3 存放新闻类别的数据库表 426
14.6.4 存放用户权限的数据库表 427
14.6.5 建立表之间的关系 429
14.6.6 生成对应的XML 432
14.6.7 生成POJO 443
14.7.1 用户类User.java 450
14.7 编写新闻发布系统的VO和DAO 450
14.7.2 用户权限类UsersAuthor.java 452
14.7.3 新闻类News.java 452
14.7.4 新闻类别类NewsType.java 454
14.7.5 用户DAO接口UserDAO.java 454
14.7.6 新闻DAO接口NewsDAO.java 455
14.7.7 新闻类别DAO接口NewsTypeDAO.java 455
14.7.8 用户DAO实现类UserDAOImpl.java 456
14.7.9 新闻DAO实现类NewsDAOImpl.java 457
14.7.10 新闻类别DAO实现类NewsTypeDAOImpl.java 458
14.8 编写新闻发布系统的业务逻辑类 459
14.8.1 登录接口Login.java 459
14.8.4 登录实现类LoginImpl.java 460
14.8.2 注册接口Regedit.java 460
14.8.3 发布接口Release.java 460
14.8.5 注册实现类RegeditImpl.java 461
14.8.6 发布实现类ReleaseImpl.java 462
14.9 编写新闻发布系统的控制器类 464
14.9.1 登录控制器类LoginController.java 464
14.9.2 注册控制器类RegeditController.java 466
14.9.3 发布控制器类ReleaseController.java 467
14.9.4 显示控制器类ShowController.java 469
14.10 编写辅助类NewsUtil.java 471
14.11 编写配置文件dispatcherServlet-servlet.xml 475
14.12 运行验证程序 480
14.13 小结 484