第1篇 入门篇 2
第1章 Java Web开发概述 2
1.1 Web相关概念 2
1.1.1 胖客户端程序RCP 2
1.1.2 瘦客户端程序TCP 2
1.1.3 B/S与C/S结构 3
1.2 Web开发背景知识 3
1.2.1 Web访问基本原理 3
1.2.2 HTTP超文本传输协议 4
1.2.3 Web浏览器 5
1.2.4 Web服务器 5
1.3 Web开发技术发展历史 6
1.3.1 传统的Web服务器模式开发 6
1.3.2 动态展现页面技术 6
1.3.3 CGI实现页面的动态生成 6
1.3.4 Java Servlet:改进的CGI 7
1.3.5 JSP:Servlet的模板 8
1.3.6 JSP基本原理 9
1.4 本章小结 10
第2章 搭建Java Web开发环境 11
2.1 Java Web开发环境概述 11
2.1.1 开发工具包JDK 11
2.1.2 集成开发环境IDE 12
2.1.3 Java服务器 12
2.2 下载安装Java环境 13
2.2.1 下载JDK 13
2.2.2 安装JDK 15
2.2.3 配置环境变量 15
2.3 下载解压Eclipse 17
2.3.1 下载Eclipse 17
2.3.2 解压Eclipse 17
2.4 下载MyEclipse插件 18
2.4.1 下载MyEclipse插件 18
2.4.2 安装MyEclipse插件 19
2.4.3 启动MyEclipse 19
2.5 下载Tomcat服务器 20
2.5.1 下载Tomcat 20
2.5.2 解压配置Tomcat 21
2.5.3 设置端口号 22
2.5.4 设置临时域名 22
2.5.5 设置虚拟主机 23
2.6 第一个Java Web程序 24
2.6.1 新建Java Web项目 24
2.6.2 新建Servlet 25
2.7 部署到Tomcat 27
2.7.1 手工部署 27
2.7.2 MyEclipse自动部署 28
2.7.3 导出为WAR包 29
2.7.4 在MyEclipse中启动Tomcat 30
2.7.5 调试程序debug模式 31
2.8 本章小结 34
第2篇 基础篇 36
第3章 深入Servlet技术 36
3.1 HTTP协议 36
3.1.1 HTTP协议简介 36
3.1.2 Telnet演示HTTP协议 36
3.1.3 GET方式查询 37
3.1.4 HTTP头数据 38
3.1.5 POST方式提交数据 38
3.1.6 其他访问方式 38
3.2 Servlet概述 39
3.2.1 Servlet工作流程 39
3.2.2 Servlet接口 39
3.2.3 Java Web目录结构 40
3.3 编写Servlet 41
3.3.1 实现Servlet 41
3.3.2 配置<servlet> 43
3.3.3 配置<servlet-mapping> 44
3.3.4 部署Web程序 44
3.4 请求与响应 45
3.4.1 获取request的变量 45
3.4.2 response生成图片验证码 48
3.5 读取web.xml参数 51
3.5.1 初始化参数(init-param) 52
3.5.2 上下文参数(context-param) 54
3.5.3 资源注射(@Resource) 57
3.5.4 使用JNDI获取资源 59
3.5.5 注射数据源 59
3.6 提交表单信息 59
3.6.1 GET实现搜索引擎 60
3.6.2 POST提交个人信息 64
3.6.3 上传文件客户端 69
3.6.4 上传文件服务器端 70
3.7 带进度条的文件上传 72
3.7.1 工作原理 73
3.7.2 上传进度条 73
3.7.3 上传监听器 74
3.7.4 监听上传进度 75
3.7.5 读取上传进度 76
3.7.6 显示上传进度 77
3.8 Servlet生命周期 81
3.8.1 Servlet生命周期 81
3.8.2 个税计算器 82
3.8.3 注解@PostConstruct与注解@PreDestroy 85
3.9 Servlet之间的跳转 86
3.9.1 转向(Forward) 87
3.9.2 重定向(Redirect) 89
3.9.3 自动刷新(Refresh) 91
3.10 Servlet与线程安全 92
3.10.1 一个实例 92
3.10.2 线程不安全 93
3.11 本章小结 94
第4章 深入JSP技术 95
4.1 JSP简介 95
4.1.1 JSP概述 95
4.1.2 显示问候语 95
4.1.3 JSP工作原理 97
4.1.4 JSP生命周期 98
4.2 JSP语法 98
4.2.1 JSP元素与模板数据 98
4.2.2 JSP脚本 99
4.2.3 JSP输出 99
4.2.4 JSP注释 100
4.2.5 JSP方法:查询IP地址 100
4.2.6 JSP的if语句 102
4.2.7 JSP的for循环 104
4.2.8 while循环:显示邮件列表 105
4.2.9 JSP的return语句 106
4.2.10 JSP的break语句 107
4.3 JSP指令 108
4.3.1 page指令 109
4.3.2 include指令 110
4.3.3 taglib指令 113
4.4 JSP行为 113
4.4.1 <jsp:include/>行为 113
4.4.2 使用Java Bean(POJO) 114
4.4.3 scope实现各种计数器 117
4.4.4 <jsp:plugin/>嵌入Applet 119
4.4.5 <jsp:forward/>行为 122
4.4.6 <jsp:directive/>行为 123
4.5 JSP隐藏对象 123
4.5.1 out输出流对象 123
4.5.2 request请求对象 124
4.5.3 response响应对象 124
4.5.4 config配置对象 125
4.5.5 session会话对象 125
4.5.6 application应用程序对象 126
4.5.7 page页面对象 126
4.5.8 pageContext页面上下文对象 126
4.5.9 exception异常对象 127
4.6 JSP配置 128
4.6.1 JSP配置 128
4.6.2 <jsp-config>标签 128
4.7 EL表达式 129
4.7.1 EL表达式 129
4.7.2 隐藏对象 130
4.7.3 EL表达式运算 131
4.8 本章小结 133
第5章 会话跟踪 134
5.1 Cookie机制 134
5.1.1 什么是Cookie 134
5.1.2 记录用户访问次数 135
5.1.3 Cookie的不可跨域名性 138
5.1.4 Unicode编码:保存中文 139
5.1.5 BASE64编码:保存二进制图片 140
5.1.6 设置Cookie的所有属性 142
5.1.7 Cookie的有效期 144
5.1.8 Cookie的修改、删除 145
5.1.9 Cookie的域名 145
5.1.10 Cookie的路径 146
5.1.11 Cookie的安全属性 146
5.1.12 JavaScript操作Cookie 147
5.1.13 案例:永久登录 149
5.2 Session机制 152
5.2.1 什么是Session 152
5.2.2 实现用户登录 153
5.2.3 Session的生命周期 155
5.2.4 Session的有效期 155
5.2.5 Session的常用方法 156
5.2.6 Session对浏览器的要求 156
5.2.7 URL地址重写 157
5.2.8 Session中禁止使用Cookie 158
5.3 Session与Cookie的比较 158
5.3.1 从存取方式上比较 159
5.3.2 从隐私安全上比较 159
5.3.3 从有效期上比较 159
5.3.4 从对服务器的负担上比较 159
5.3.5 从浏览器支持上比较 160
5.3.6 从跨域名上比较 160
5.4 本章小结 160
第6章 过滤器Filter 161
6.1 Filter概述 161
6.1.1 Filter概述 161
6.1.2 Filter接口 162
6.1.3 Filter配置 163
6.2 Filter经典案例 164
6.2.1 防盗链Filter 164
6.2.2 字符编码Filter 165
6.2.3 日志记录Filter 167
6.2.4 异常捕捉Filter 169
6.2.5 权限验证Filter 172
6.2.6 内容替换Filter 174
6.2.7 GZIP压缩Filter 177
6.2.8 图像水印Filter 182
6.2.9 缓存Filter 186
6.2.10 XSLT转换Filter 191
6.2.11 文件上传Filter 194
6.3 本章小结 197
第7章 监听器Listener 198
7.1 Listener概述 198
7.1.1 Listener的概述 198
7.1.2 Listener的使用 198
7.2 Listener的分类 199
7.2.1 监听对象的创建与销毁 199
7.2.2 实例:监听Session、request与servletContext 200
7.2.3 监听对象的属性变化 201
7.2.4 监听Session内的对象 203
7.3 Listener使用案例 205
7.3.1 单态登录 205
7.3.2 显示在线用户 209
7.4 本章小结 214
第3篇 高级篇 216
第8章 JSTL标签库 216
8.1 JSTL概述 216
8.1.1 什么是标签 216
8.1.2 一个标签实例 216
8.1.3 为什么使用标签 217
8.1.4 JSTL标签库 218
8.2 JSTL的core标签库 218
8.2.1 <c:out/>标签 218
8.2.2 <c:if/>标签 219
8.2.3 <c:choose/>、<c:when/>、<c:otherwise/>标签 220
8.2.4 <c:forEach/>显示偶数 221
8.2.5 <c:forEach/>标签遍历List 222
8.2.6 <c:forEach/>标签遍历Map对象 223
8.2.7 <c:forEach/>标签的varStatus属性 224
8.2.8 <c:forTokens/>标签 225
8.2.9 <c:set/>实现计数器 226
8.2.10 <c:remove/>标签 228
8.2.11 <c:catch/>捕捉异常 228
8.2.12 <c:import/>导入网络资源 228
8.2.13 <c:url/>标签 230
8.2.14 <c:redirect/>标签 231
8.2.15 <c:param/>标签 231
8.3 JSTL的fmt标签库 231
8.3.1 <frnt:requestEncoding/>设置编码 232
8.3.2 <fmt:setLocale/>显示所有地区的数据格式 232
8.3.3 <fmt:timeZone/>显示全球时间 234
8.3.4 <fmt:setTimeZone/>设置时区 236
8.3.5 <fmt:bundle/>、<fmt:message/>、<fmt:param/>资源国际化 236
8.3.6 <fmt:setBundle/>标签 238
8.3.7 <fmt:formatNumber/>显示不同地区的各种数据格式 238
8.3.8 <fmt:parseNumber/>解析数字 240
8.3.9 <fmt:formatDate/>格式化日期 241
8.3.10 <fmt:parseDate/>解析日期 241
8.4 JSTL的向方法库 242
8.4.1 fn:contains()显示用户浏览器、操作系统 242
8.4.2 fn:containsIgnoreCase()方法 243
8.4.3 fn:endsWith()显示文件格式 243
8.4.4 fn:startsWith()方法 244
8.4.5 fn:escapeXml()实现HTML编码 245
8.4.6 fn:indexOf()方法 245
8.4.7 fn:split()分割字符 246
8.4.8 fn:join()联合字符 247
8.4.9 fn:length()方法 247
8.5 JSTL的SQL标签库 248
8.5.1 <sql:setDataSource/>设置数据源 248
8.5.2 <sql:query/>查询表数据 249
8.5.3 <sql:query/>分页显示 250
8.5.4 <sql:query/>结果集的动态遍历 251
8.5.5 <sql:update/>更新表数据 253
8.5.6 <sql:param/>,<sql:dateParam/>设置日期参数 254
8.5.7 <sql:transaction/>事务管理 255
8.6 JSTL的XML标签库 257
8.6.1 <x:parse/>获取新浪RSS新闻 257
8.6.2 <x:out/>输出指定元素 259
8.6.3 <x:forEach/>遍历新浪RSS新闻 260
8.6.4 <x:if/>标签 261
8.6.5 <x:choose/>、<x:when/>、<x:otherwise/>标签 261
8.6.6 <x:set/>标签 262
8.6.7 <x:transform/>转化XML为HTML 262
8.7 本章小结 264
第9章 自定义标签 265
9.1 编写自定义标签 265
9.1.1 版权标签 265
9.1.2 tld标签库描述文件 267
9.1.3 方法的调用顺序 268
9.1.4 使用TagSupport 269
9.1.5 带参数的标签 270
9.1.6 带多个参数的标签 271
9.1.7 带标签体的自定义标签 272
9.1.8 多次执行的循环标签 274
9.1.9 带动态属性的自定义标签 276
9.2 嵌套的自定义标签 277
9.2.1 实例:表格标签 277
9.2.2 嵌套标签的配置 278
9.2.3 table父标签 279
9.2.4 column子标签 281
9.2.5 运行效果 282
9.3 JSP 2.x标签 282
9.3.1 SimpleTag接口 282
9.3.2 带标签体的JSP 2.x标签 283
9.3.3 带多个标签体的JSP 2.x标签 285
9.4 编写自定义方法 287
9.4.1 自定义方法 287
9.4.2 方法描述文件 288
9.5 本章小结 290
第10章 资源国际化 291
10.1 资源国际化简介 291
10.1.1 I18N 291
10.1.2 I10N 291
10.2 资源国际化 291
10.2.1 资源国际化示例 292
10.2.2 资源文件编码 292
10.2.3 显示所有Locale代码 294
10.2.4 带参数的资源 297
10.2.5 ResourceBundle类 297
10.2.6 Servlet的资源国际化 298
10.2.7 显示所有Locale的数字格式 298
10.2.8 显示全球时间 301
10.3 本章小结 302
第11章 数据库概述 303
11.1 数据库简介 303
11.1.1 发展历史 303
11.1.2 数据库模型 304
11.1.3 SQL、DDL与DML 304
11.2 MySQL数据库 305
11.2.1 MySQL安装与配置 305
11.2.2 MySQL启动与关闭 305
11.2.3 bin目录下的程序 306
11.2.4 登录MySQL 306
11.2.5 MySQL控制台 307
11.2.6 控制台信息 307
11.3 DDL SQL语句 309
11.3.1 列出数据库模式 309
11.3.2 切换数据库模式 309
11.3.3 列出数据表 310
11.3.4 查看表结构 310
11.3.5 创建数据库模式 310
11.3.6 删除数据库模式 311
11.3.7 修改数据库模式 311
11.3.8 创建表 311
11.3.9 删除表 312
11.3.10 修改表 312
11.4 DML SQL语句 313
11.4.1 插入数据 313
11.4.2 查询数据 313
11.4.3 删除数据 314
11.4.4 修改数据 314
11.4.5 创建,删除,授权用户 315
11.4.6 批量执行SQL语句 315
11.5 MySQL客户端工具 316
11.5.1 MySQL图形界面工具 316
11.5.2 MyEclipse管理工具 318
11.6 Apache Derby 319
11.6.1 Derby概述 319
11.6.2 Derby的使用 320
11.6.3 使用嵌入式Derby记录日志 320
11.7 本章小结 322
第12章 JDBC详解 323
12.1 JDBC简介 323
12.1.1 查询实例:列出人员信息 323
12.1.2 各种数据库的连接 326
12.2 MySQL的乱码解决 327
12.2.1 MySQL的乱码解决 327
12.2.2 从控制台修改编码 327
12.2.3 从配置文件修改编码 328
12.2.4 利用图形界面工具修改 328
12.2.5 URL中指定编码方式 329
12.3 JDBC基本操作:CRUD 329
12.3.1 查询数据库 329
12.3.2 插入人员信息 329
12.3.3 注册数据库驱动 331
12.3.4 获取自动插入的ID 332
12.3.5 删除人员信息 333
12.3.6 修改人员数据 334
12.3.7 使用PreparedStatement 340
12.3.8 Statement批处理SQL 341
12.3.9 PreparedStament批处理SQL 342
12.4 处理结果集 344
12.4.1 查询多个结果集 344
12.4.2 可以滚动的结果集 344
12.4.3 Pagination分页显示 344
12.4.4 带条件的查询 350
12.4.5 ResultSetMetaData元数据 354
12.4.6 直接显示中文列名 355
12.5 JDBC高级应用 356
12.5.1 DAO模式与Java Bean 356
12.5.2 事务实例:转账 362
12.5.3 抛出异常自动回滚 364
12.5.4 存储二进制数据 365
12.5.5 读取二进制数据 368
12.5.6 数据源(连接池) 369
12.6 本章小结 371
第13章 XML概述 372
13.1 初识XML 372
13.1.1 什么是XML 372
13.1.2 XML的用途 373
13.1.3 XML的技术架构 374
13.1.4 XML开发工具 375
13.2 XML基本语法 375
13.2.1 XML文档的基本结构 375
13.2.2 标记必须闭合 376
13.2.3 必须合理地嵌套 376
13.2.4 XML元素 377
13.2.5 XML属性 377
13.2.6 只有一个根元素 378
13.2.7 大小写敏感 378
13.2.8 空白被保留 378
13.2.9 注释的写法 379
13.2.10 转义字符的使用 379
13.2.11 CDATA的使用 379
13.3 JDK中的XML API 380
13.4 XML解析模型 380
13.4.1 DOM解析 380
13.4.2 SAX解析 383
13.5 XML与Java类映射JAXB 385
13.5.1 什么是XML与Java类映射 385
13.5.2 JAXB的工作原理 386
13.5.3 Java对象转化成XML(marshal) 387
13.5.4 XML转化为Java对象(unmarshal) 389
13.5.5 更为复杂的映射 390
13.6 本章小结 392
第4篇 Struts框架篇第14章 Struts 1.x概述 394
14.1 Straats简介 394
14.1.1 Struts概述 394
14.1.2 MVC概述 395
14.2 第一个Struts 1.x实例 395
14.2.1 添加Struts特性 395
14.2.2 创建HelloAction 397
14.2.3 完成HelloAction 400
14.2.4 添加输入页JSP 400
14.2.5 添加输出页 402
14.3 Struts工作流程 403
14.4 Struts配置文件 404
14.4.1 Struts配置文件详解 404
14.4.2 多个struts-config.xml 405
14.4.3 配置命名空间 406
14.5 Form Bean实例:提交用户信息 406
14.5.1 用户信息对应的Form Bean 406
14.5.2 用户信息输入页面 407
14.5.3 用户信息校验 409
14.5.4 Form Bean中使用Person实体类 411
14.6 Action的配置 412
14.6.1 Action与ActionForward配置 412
14.6.2 把JSP配置为Action 413
14.7 Action实例:保存用户信息到数据库 414
14.7.1 在struts-config.xml中配置数据源 414
14.7.2 Person类代码 415
14.7.3 数据表设计 416
14.7.4 Action代码:保存用户信息 416
14.7.5 Form Bean代码:用户信息表单 418
14.7.6 Action代码:列出用户信息 418
14.7.7 DAO层代码:保存、列出用户信息 419
14.7.8 JSP代码:添加、列出用户信息 421
14.8 Struts 1.x的线程安全 423
14.8.1 Action是线程不安全的 424
14.8.2 Form Bean是线程安全的 424
14.9 本章小结 424
第15章 Struts 1.x高级应用 425
15.1 Struts 1.x标签库 425
15.1.1 html标签库 425
15.1.2 bean标签库 428
15.1.3 logic标签库 429
15.1.4 nested标签库 430
15.1.5 tiles标签库 433
15.2 DispatchAction 438
15.2.1 利用action参数分发 438
15.2.2 DispatchAction 438
15.2.3 配置DispatchAction 439
15.3 上传文件 439
15.3.1 FormFile类型 439
15.3.2 保存FormFile 440
15.4 Validator自动校验数据 442
15.4.1 支持自动校验的ValidatorForm 442
15.4.2 Validate规则配置 442
15.4.3 错误信息配置 443
15.4.4 配置到struts-config.xml中 444
15.4.5 配置客户端JavaScript校验 444
15.5 动态属性Form Bean 445
15.5.1 动态属性表单DynaActionForm 445
15.5.2 Action中获取动态属性 446
15.5.3 JSP中使用动态属性 446
15.6 异常处理 447
15.6.1 异常捕捉ExceptionHandler 447
15.6.2 配置ExceptionHandler 447
15.7 struts-config.xml中使用通配符 448
15.8 本章小结 448
第16章 Struts 2.x概述 450
16.1 Struts 2.x简介 450
16.1.1 Struts 2简介 450
16.1.2 Struts 2与WebWork 2的关系 450
16.2 第一个Struts 2实例 451
16.2.1 下载Struts 2类库 451
16.2.2 登录功能Action 451
16.2.3 Struts 2配置文件 452
16.2.4 JSP登录页面 453
16.2.5 配置web.xml 454
16.2.6 更改action后缀 455
16.3 Struts 2工作流程 455
16.3.1 Struts 2工作流程 456
16.3.2 Struts 2的线程安全 456
16.3.3 程序入口FilterDispatcher 456
16.4 Struts 2配置文件 457
16.4.1 struts.properties 457
16.4.2 struts.xml 457
16.4.3 配置package 458
16.4.4 配置命名空间 458
16.5 Action详解 459
16.5.1 AcfionSupport类 459
16.5.2 Action接口 459
16.5.3 不继承任何类的Action 460
16.5.4 Action的可执行方法 460
16.5.5 通过URL执行Action的方法 461
16.5.6 将执行方法配置到Action 461
16.6 Struts 2的零配置 462
16.6.1 通过@注解实现Action零配置 462
16.6.2 web.xml中指定Action目录 463
16.6.3 零配置的Action访问方式 463
16.7 Action中使用POJO 464
16.7.1 图书管理Action 464
16.7.2 图书实体Book类 465
16.7.3 通配符配置Action 465
16.7.4 JSP添加、列表页面 466
16.8 本章小结 467
第17章 Struts 2.x高级应用 469
17.1 数据类型转换器 469
17.1.1 实例:日期转换器 469
17.1.2 配置转换器 470
17.1.3 Action代码示例 471
17.1.4 为Action配置转换器 472
17.2 获取request、response 473
17.2.1 利用ServletActionContext的静态方法 473
17.2.2 利用相关的Aware接口 474
17.3 使用Validator校验数据 475
17.3.1 使用XML配置数据校验Validator 475
17.3.2 配置客户端Validator 476
17.3.3 常用的Validator 477
17.3.4 使用@Java注解配置Validator 477
17.4 本章小结 478
第18章 Struts 2.x标签 479
18.1 Struts 2.x标签 479
18.1.1 Struts 2标签与EL表达式 479
18.1.2 Struts 2标签tld文件 479
18.2 OGNL语言 479
18.2.1 OGNL概述 479
18.2.2 “#”声明OGNL表达式 480
18.2.3 “%”显式声明OGNL表达式 483
18.2.4 “$”在资源文件中引用OGNL表达式 483
18.3 控制标签 483
18.3.1 if、elseif、else标签控制流程 483
18.3.2 append标签连接多个List 485
18.3.3 generator标签将字符转化为List 486
18.3.4 iterator标签遍历集合 486
18.3.5 merge标签取集合的并集 487
18.3.6 subset标签过滤集合元素 487
18.4 数据标签 488
18.4.1 action标签包含action页面 489
18.4.2 bean标签引用Java Bean 489
18.4.3 date标签输出日期 489
18.4.4 i18n、text标签声明资源国际化 490
18.4.5 include标签包含JSP页面 491
18.4.6 param标签传递参数 491
18.4.7 set标签设置变量值 491
18.4.8 property标签输出变量值 492
18.5 表单UI标签 492
18.5.1 form标签输出表单 492
18.5.2 textfield、textarea、file、checkbox、radio标签 493
18.5.3 select、autocomplete标签下拉框 494
18.5.4 使用动态数据的autocomplete标签 495
18.5.5 checkboxlist标签多选框组 497
18.5.6 combobox标签复合框 498
18.5.7 datetimepicker标签日期选择器 498
18.5.8 doubleselect标签联动选择框 499
18.5.9 optiontransferselect标签 500
18.5.10 optgroup标签选项组 502
18.6 非表单UI标签 503
18.6.1 debug标签输出调试信息 503
18.6.2 fielderror、actionerror、actionmessage标签错误信息 504
18.6.3 div、submit、a标签实现无刷新获取数据 505
18.6.4 无刷新实现登录、注销 508
18.6.5 tabbedPanel标签页 510
18.6.6 tree标签输出树 512
18.6.7 使用tree显示文件结构 513
18.6.8 使用tree动态加载数据 515
18.7 本章小结 517
第19章 Struts 2.x拦截器与文件上传 519
19.1 使用拦截器 519
19.1.1 timer计时拦截器 519
19.1.2 token防重复提交拦截器 520
19.1.3 execAndWait执行等待拦截器 522
19.1.4 自定义的权限验证拦截器 524
19.2 上传文件 525
19.2.1 上传文件的Action 525
19.2.2 上传文件的JSP表单 527
19.2.3 上传文件相关的设置 528
19.2.4 错误信息设置 529
19.2.5 上传多个文件 529
19.3 本章小结 530
第5篇 Hibernate框架篇第20章 Hibernate入门 532
20.1 Hibernate简介 532
20.1.1 ORM概述 532
20.1.2 认识Hibernate 532
20.1.3 Hibernate的原理 533
20.2 第一个Hibernate程序 533
20.2.1 添加Hibernate特性 533
20.2.2 添加Hibernate的Jar 535
20.2.3 配置Cat实体类 535
20.2.4 修改Hibernate配置文件 536
20.2.5 修改Hibernate工具类 537
20.2.6 初始化MySQL数据库 538
20.2.7 配置Log4J 538
20.2.8 执行Hibernate程序 539
20.3 第一个Hibernate Web程序 541
20.3.1 DAO层代码 541
20.3.2 Servlet层代码 543
20.3.3 列出所有的Cat 544
20.3.4 添加Cat 546
20.3.5 修改Cat 548
20.3.6 删除Cat 549
20.4 本章小结 550
第21章 从宏观上把握Hibernate 551
21.1 Hibernate体系结构 551
21.2 Hibernate的相关概念 551
21.3 可持久化对象的状态 552
21.4 Hibernate配置参数 552
21.4.1 配置文件hibernate.properties、hibernate.cfg.xml 552
21.4.2 编程式配置、运行时配置 553
21.4.3 获取SessionFactory 554
21.4.4 获取、断开数据库连接 554
21.4.5 可选的配置参数 555
21.4.6 Hibernate日志 557
21.5 本章小结 558
第22章 Hibernate实体映射 559
22.1 实体类映射 559
22.1.1 @注解配置 559
22.1.2 XML文件配置 560
22.1.3 配置到hibernate.cfg.xml中 561
22.2 主键映射 561
22.2.1 @配置主键 561
22.2.2 XML配置主键 562
22.3 主键生成规则 562
22.3.1 @主键生成规则 562
22.3.2 XML主键生成规则 563
22.4 普通属性映射 564
22.4.1 @配置普通属性 564
22.4.2 XML配置普通属性 565
22.5 日期属性配置 565
22.5.1 @配置日期属性 565
22.5.2 XML配置日期属性 566
22.6 临时属性映射 566
22.7 版本属性配置 566
22.7.1 乐观锁与悲观锁 566
22.7.2 @配置乐观锁 567
22.7.3 XML配置乐观锁 567
22.8 本章小结 567
第23章 Hibernate实体关系映射 568
23.1 单边的一对多关系:电子邮件管理 568
23.1.1 UML、数据库关系 568
23.1.2 @配置Person2类 568
23.1.3 @配置Email类 569
23.1.4 配置到Hibernate.cfg.xml中 570
23.1.5 运行代码 570
23.1.6 延迟加载与即时加载 572
23.1.7 延迟加载异常 572
23.1.8 XML配置Person类 574
23.1.9 XML配置Email类 575
23.1.10 加载XML配置的实体 575
23.1.11 配置String类型的实体 576
23.2 单边的多对一关系:论文管理 578
23.2.1 UML、数据库关系 578
23.2.2 @配置Type类 578
23.2.3 @配置Article类 579
23.2.4 配置到Hibernate.cfg.xml 579
23.2.5 运行代码 580
23.2.6 XML配置Type类 581
23.2.7 XML配置Article类 581
23.3 双边的多对一、一对多关系:学生属性 582
23.3.1 UML、数据库关系 582
23.3.2 @配置Clazz类 583
23.3.3 @配置Student类 584
23.3.4 配置到Hibernate.cfg.xml 584
23.3.5 运行代码 585
23.3.6 XML配置Clazz类 586
23.3.7 XML配置Student类 587
23.4 单边的多对多关系:论坛文章管理 588
23.4.1 UML、数据库关系 588
23.4.2 @配置Tag类 588
23.4.3 @配置Post类 589
23.4.4 运行代码 590
23.4.5 XML配置Tag类 592
23.4.6 XML配置Post类 592
23.5 双边的多对多关系 593
23.5.1 @配置Tag类 593
23.5.2 XML配置Tag类 593
23.6 单边的一对一关系:舰船管理 594
23.6.1 UML、数据库关系 594
23.6.2 @配置Ship类 594
23.6.3 @配置Sailor类 595
23.6.4 运行代码 596
23.6.5 XML配置Ship类 597
23.6.6 XML配置Sailor类 598
23.7 双边的一对一关系 598
23.7.1 @配置Ship类 599
23.7.2 XML配置Ship类 599
23.8 主键相同的一对一关系:客户地址管理 599
23.8.1 UML、数据库关系 599
23.8.2 @配置Customer类 600
23.8.3 @配置Address类 600
23.8.4 运行代码 601
23.8.5 XML配置Customer类 603
23.8.6 XML配置Address类 603
23.9 Map映射 604
23.9.1 @MapKey配置Map 604
23.9.2 XML配置Map 604
23.10 本章小结 605
第24章 Hibernate查询语言HQL 606
24.1 HQL基础查询 606
24.1.1 HQL语法 606
24.1.2 HQL大小写不敏感 606
24.1.3 使用Package名 606
24.2 返回类型 607
24.2.1 查询单个的对象 607
24.2.2 返回集合属性 607
24.3 同时返回多个对象 608
24.3.1 返回Obiect口数组 608
24.3.2 返回List类型 608
24.3.3 返回Map类型 608
24.3.4 返回Java实体对象 609
24.4 条件查询 609
24.4.1 where子句语法 609
24.4.2 HQL支持的运算符 609
24.5 统计函数 610
24.6 HQL分页显示 611
24.7 HQL级联查询 611
24.7.1 跨表查询 611
24.7.2 级联查询 611
24.8 使用SQL数据库 612
24.8.1 使用SQLQuery 612
24.8.2 返回实体类型 612
24.9 命名常用的查询 612
24.9.1 @配置命名查询 613
24.9.2 设置查询扩展 613
24.9.3 设置多个命名查询 613
24.9.4 XML配置命名查询 614
24.10 本章小结 615
第25章 Hibernate高级查询 616
25.1 单一实体类的查询 616
25.1.1 员工实体类Employee查询 616
25.1.2 员工管理EmployeeServlet 619
25.1.3 查询员工的JSP代码 621
25.1.4 JSP显示页面 624
25.1.5 使用参数查询 626
25.2 实体间关系的查询 627
25.2.1 部门实体类Department类 628
25.2.2 部门管理DepartmentServlet 629
25.2.3 显示部门的JSP代码 631
25.2.4 添加部门代码(Ajax方式查询经理) 633
25.2.5 修改员工时选择部门 638
25.3 ioin级联查询 642
25.3.1 SQL中的join 643
25.3.2 Hibernate中的join 645
25.4 本章小结 648
第6篇 Spring框架篇第26章 Spring概述 650
26.1 Spring框架 650
26.1.1 Spring背景 650
26.1.2 Spring容器 650
26.2 一个依赖注入的例子 650
26.2.1 一个普通程序的例子 651
26.2.2 Dao接口及实现 652
26.2.3 Service接口及实现 652
26.2.4 组装DAO与Service 653
26.2.5 运行代码 654
26.2.6 反向控制的原理 654
26.2.7 面向切面编程的原理 654
26.3 一个切面编程的例子 655
26.3.1 实现拦截器接口 655
26.3.2 AOP配置拦截器 655
26.3.3 运行代码 656
26.4 Spring框架的组成 657
26.5 本章小结 658
第27章 Spring的Core模块 659
27.1 BeanFactory工厂 659
27.1.1 实例化BeanFactory 659
27.1.2 XmlBeanFactory配置格式 660
27.2 配置Java Bean 660
27.2.1 基本配置<bean> 660
27.2.2 工厂模式factory-method 661
27.2.3 构造函数<constructor-arg> 661
27.2.4 单态模式singleton 662
27.2.5 配置属性<property> 662
27.2.6 设置对象属性<ref> 663
27.2.7 配置List属性<list> 663
27.2.8 配置Set属性<set> 664
27.2.9 配置Map属性<map> 664
27.2.10 配置Properties属性<props> 664
27.2.11 <idref>与<ref>的区别 665
27.2.12 设置destroy-method销毁方法 665
27.2.13 设置depends-on依赖对象 665
27.2.14 初始化方法init-method 665
27.3 属性自动装配autowire 666
27.3.1 配置autowire自动装配 666
27.3.2 autowire取值范围 666
27.4 依赖检查dependency 667
27.4.1 配置dependency依赖检查 667
27.4.2 dependency属性取值范围 667
27.5 Bean的高级特性 667
27.5.1 BeanNameAware接口获取Bean的id 668
27.5.2 BeanFactoryAware接口获取BeanFactory 668
27.5.3 InitializingBean接口执行初始化方法 668
27.5.4 DisposableBean接口执行销毁方法 669
27.6 BeanFactory高级特性 669
27.7 属性覆盖器 669
27.7.1 配置PropertyOverrideConfigurer属性覆盖器 669
27.7.2 properties配置 670
27.8 本章小结 670
第28章 Spring的AOP模块 671
28.1 实例:使用拦截器拦截方法 671
28.1.1 Service接口 671
28.1.2 Service实现代码 671
28.1.3 方法前拦截器检查name是否为null 672
28.1.4 返回后拦截器输出返回值 673
28.1.5 异常拦截器捕获异常 673
28.1.6 拦截器配置 674
28.1.7 运行代码 675
28.2 拦截器与Filter的区别 676
28.3 AOP的相关概念 676
28.4 AOP的代理模式 677
28.4.1 ProxyFactoryBean代理工厂对象 677
28.4.2 TransactionProxyFactoryBean事务代理工厂对象 677
28.5 本章小结 678
第29章 Spring的DAO模块 679
29.1 实例:保存Person实体 679
29.1.1 实体类Person代码 679
29.1.2 DAO层接口 679
29.1.3 继承JdbcDaoSupport 680
29.1.4 Spring配置 681
29.1.5 运行代码 682
29.2 返回实体对象 683
29.2.1 MappingSqlQuery实现代码 683
29.2.2 使用MappingSqlQuery 683
29.2.3 SqlUpdate执行更新 684
29.2.4 SqlFunction返回单一结果 684
29.3 Spring事务管理 685
29.3.1 TransactionRun代码 685
29.3.2 配置事务 686
29.3.3 运行代码 687
29.4 本章小结 687
第30章 Spring的ORM模块 688
30.1 实例:保存Cat实体 688
30.1.1 Cat实体类代码 688
30.1.2 DAO层接口 689
30.1.3 继承HibernateDaoSupport 689
30.2 配置集成Hibernate 690
30.2.1 在Spring中配置Hibernate 690
30.2.2 运行代码 691
30.2.3 配置XML文件实体 692
30.3 管理Hibernate事务 693
30.3.1 Service接口 693
30.3.2 Service实现代码 693
30.3.3 在Service层配置事务 694
30.4 本章小结 695
第31章 Spring的Web模块 696
31.1 整合Struts 1.x:继承方式 696
31.1.1 CatForm代码 696
31.1.2 CatAction添加、列出所有Cat 697
31.1.3 Struts配置文件 698
31.1.4 异常处理页面 699
31.1.5 添加、显示Cat页面 699
31.1.6 在web.xml中配置Spring、Struts 700
31.1.7 添加OpenSessionInViewerFilter 702
31.1.8 其他方式加载Spring配置 702
31.2 整合Struts 1.x:代理方式 703
31.2.1 Cat2Action添加、列出所有Cat 703
31.2.2 Struts配置文件 704
31.2.3 Spring配置文件 705
31.3 整合Struts 2.x 706
31.3.1 CatAction添加、列出所有Cat 706
31.3.2 在Struts 2配置文件中配置Spring 707
31.3.3 在Spring配置文件中配置Action 708
31.3.4 在web.xml配置中配置Spring、Struts 2 708
31.3.5 JSP代码 709
31.4 本章小结 710
第32章 Spring的MVC模块 711
32.1 MVC的控制层 711
32.1.1 MVC的控制层 711
32.1.2 Spring MVC的优缺点 712
32.2 MVC的视图层 712
32.3 MVC配置 713
32.4 web.xml配置 714
32.5 多业务分发器 715
32.5.1 MultiActionController分发控制器 715
32.5.2 配置分发参数 716
32.6 本章小结 717
第33章 Spring开发实例(SSH、SSJ) 718
33.1 实例一:访问统计系统(结合Struts 1、Hibernate) 718
33.1.1 访问记录 718
33.1.2 在线用户 719
33.1.3 工作原理 719
33.1.4 系统构架 721
33.2 服务器端统计代码 721
33.2.1 实体类代码 721
33.2.2 DAO层代码 723
33.2.3 DAO层配置 725
33.2.4 数据源的附加配置 727
33.2.5 Action代码 727
33.2.6 计算IP地址、搜索关键词 731
33.2.7 配置Spring到web.xml中 732
33.3 访问信息列表 733
33.3.1 访问信息列表 733
33.3.2 在线用户列表 736
33.4 实例二:邮件发送系统(结合Struts 2、JPA) 737
33.4.1 实体类代码 737
33.4.2 DAO层代码 738
33.4.3 JPA的配置文件 739
33.4.4 Spring的邮件发送器 740
33.4.5 发送简单文本邮件 741
34.4.6 Struts 2的配置文件 744
34.4.7 Spring的配置文件 744
34.4.8 web.xml配置文件 746
33.4.9 发送HTML邮件 747
33.4.10 已发送邮件列表 751
33.5 Spring定时任务 753
33.5.1 JDK中的定时任务 754
33.5.2 Spring中的定时任务 755
33.5.3 定时任务配置 757
33.5.4 定时器触发时间配置 758
33.6 小结 760
第7篇 EJB与Web服务篇第34章 EJB 3概述 762
34.1 EJB技术概述 762
34.1.1 什么是EJB 762
34.1.2 EJB类型 763
34.2 下载和安装JBoss服务器 763
34.2.1 下载JBoss 764
34.2.2 JBoss的目录结构 764
34.2.3 MyEclipse中配置JBoss 765
34.2.4 启动JBoss服务器 767
34.3 实例:HelloEJBService 767
34.3.1 新建EJB工程 767
34.3.2 定义EJB业务接口 768
34.3.3 编写SessionBean 768
34.3.4 EJB的部署 769
34.4 运行EJB 771
34.4.1 客户端调用EJB 771
34.4.2 Web应用调用EJB 773
34.5 EJB其他的相关技术规范 775
34.6 本章小结 775
第35章 JPA规范 776
35.1 JPA概述 776
35.1.1 JPA的出现 776
35.1.2 JPA规范 776
35.1.3 JPA与EJB 3 777
35.1.4 Java EE容器 777
35.2 实例:保存Student实体类 777
35.2.1 Student代码 777
35.2.2 StudentServlet添加、列出所有Student 778
35.2.3 persistence.xml代码 780
35.2.4 配置JBoss服务器 781
35.2.5 运行JPA程序 782
35.3 JPA的API 783
35.3.1 实体类配置 783
35.3.2 获取EntityManager 783
35.3.3 实体类的状态 784
35.3.4 持久化persist() 784
35.3.5 查找find()与getReference() 784
35.3.6 保存merge() 785
35.3.7 删除remove() 785
35.3.8 刷新refresh()和包含contains() 785
35.3.9 查询createQuery() 785
35.3.10 本地查询createNativeQueryO 786
35.3.11 写入数据库flush() 786
35.3.12 设定写入模式setFlushModel() 786
35.3.13 返回实现者getDelegate() 786
35.3.14 清除对象clear() 786
35.4 本章小结 787
第36章 Web Service框架XFire 788
36.1 XFire概述 788
36.1.1 什么是XFire 788
36.1.2 下载XFire 789
36.1.3 XFire的目录结构 789
36.2 XFire开发起步 790
36.2.1 配置Web服务项目 790
36.2.2 配置文件清单 791
36.2.3 开发一个Web服务 792
36.2.4 发布Web服务 794
36.3 Web服务客户端 796
36.3.1 MyEclipse客户端 796
36.3.2 SDK方式的客户端 797
36.3.3 根据WSDL生成的客户端 799
36.4 Web服务安全 800
36.4.1 SOAP Header中进行身份验证 800
36.4.2 WS-Security进行身份验证 803
36.4.3 用户名/密码方式 805
36.4.4 数字签名(Signature) 807
36.4.5 加密(Encryption) 810
36.5 XFire与Spring集成 812
36.5.1 配置Spfing Bean 812
36.5.2 配置XFire Servlet 812
36.5.3 配置Web服务Bean 813
36.5.4 配置各种Handler 814
36.6 本章小结 816
第8篇 工具篇 818
第37章 版本管理工具SVN 818
37.1 Subversion概述 818
37.1.1 什么是版本控制 818
37.1.2 什么是Subversion 818
37.1.3 Subversion的历史 819
37.1.4 Subversion的优势 819
37.1.5 Subversion的技术架构 820
37.2 下载和安装Subversion 821
37.2.1 Subversion的版本 822
37.2.2 下载Subversion 823
37.2.3 安装Subversion 823
37.3 配置Subversion服务器 824
37.3.1 创建资源库 825
37.3.2 设置访问用户 826
37.3.3 启动Subversion服务 828
37.3.4 Subversion的常用命令 829
37.4 使用Subversion客户端TortoiseSVN 829
37.4.1 下载和安装TortoiseSVN 829
37.4.2 浏览资源库 830
37.4.3 在资源库中增加文件夹 831
37.4.4 导入文件到资源库(import) 833
37.4.5 从资源库中迁出(checkout) 835
37.4.6 更新(update)——修改——提交(commit) 836
37.4.7 锁定(lock)——修改——提交——解锁 839
37.4.8 解决冲突的办法 839
37.4.9 查看修改日志 842
37.4.10 历史版本的比较 844
37.4.11 恢复到之前的版本 845
37.4.12 TortoiseSVN的配置 846
37.5 与Eclipse集成 846
37.5.1 下载和安装Subclipse 846
37.5.2 在Eclipse中新建资源库 848
37.5.3 将Eclipse项目与资源库中的文件同步 849
37.5.4 在Eclipse中使用的其他功能 850
37.6 本章小结 850
第38章 日志工具commons-logging与Log4J 851
38.1 日志概述 851
38.1.1 日志的原理 851
38.1.2 JDK 1.4的Logging 852
38.1.3 Log4i控件 853
38.1.4 commons-logging控件 854
38.2 Log4i控件 855
38.2.1 Log4j概述 856
38.2.2 Log4j的执行效率 856
38.2.3 优化日志代码 856
38.2.4 Log4j.properties配置文件 857
38.2.5 使用其他配置文件 857
38.2.6 Log4j.xml配置文件 858
38.3 日志记录器Logger 858
38.3.1 日志记录器Logger 858
38.3.2 Logger的配置 858
38.3.3 rootLogger配置 859
38.3.4 类别category配置 859
38.4 输出地Appender 859
38.4.1 输出到控制台 860
38.4.2 输出到文件 860
38.4.3 输出到按大小滚动文件 861
38.4.4 输出到按日期滚动文件 861
38.4.5 输出到JDBC数据库 862
38.4.6 输出到SOCKET套接字 864
38.4.7 输出到SMTP邮件 864
38.4.8 自定义输出 865
38.5 日志格式化器Layout 867
38.5.1 PatternLayout布局 867
38.5.2 HTMLLayout布局 868
38.5.3 XMLLayout布局 868
38.6 本章小结 870
第39章 报表图形引擎JFreeChart 871
39.1 JFreeChart简介 871
39.1.1 下载JFreeChart 871
39.1.2 核心类包介绍 872
39.2 图形的输出方式 872
39.2.1 在SerVlet生成图片 872
39.2.2 直接生成图片文件 876
39.3 输出柱形图 877
39.3.1 使用DefaultCategoryDataset数据集绘制柱形图 877
39.3.2 使用XYDataset数据集绘制柱形图 879
39.4 输出折线图 882
39.5 输出区域图 884
39.6 输出时序图 887
39.7 输出组合图表 889
39.8 其他种类的图形 892
39.9 本章小结 892
第40章 PDF组件iText 894
40.1 下载iText组件 894
40.2 输出pdf的基本步骤 895
40.3 设置pdf文件属性 896
40.4 插入文本 898
40.5 文本的中文处理 899
40.6 插入表格 899
40.7 插入图像 900
40.8 在Servlet中输出pdf 902
40.9 本章小结 903
第9篇 实战篇 906
第41章 论坛系统(Spring+Struts+Hibernate) 906
41.1 功能概述 906
41.1.1 功能模块 906
41.1.2 运行效果 906
41.2 数据库设计 907
41.2.1 实体类设计 907
41.2.2 BaseBean基类代码 908
41.2.3 Person类代码 908
41.2.4 Category类代码 909
41.2.5 Board类代码 909
41.2.6 Thread类代码 910
41.2.7 Reply类代码 911
41.2.8 数据库与Hibernate配置 912
41.3 DAO层设计 913
41.3.1 IDao代码 913
41.3.2 DaoImpl代码 913
41.4 Service层设计 914
41.4.1 IService接口 915
41.4.2 ServiceImpl实现 915
41.5 Action层设计 916
41.5.1 ForumForm基类 916
41.5.2 ForumAction基类 917
41.5.3 JSP层代码 918
41.6 用户模块 919
41.6.1 IPersonService接口 919
41.6.2 PersonServiceImpl实现 920
41.6.3 MD5加密工具类 921
41.6.4 PersonForm代码 921
41.6.5 PersonAction代码 922
41.6.6 JSP注册页面 925
41.6.7 PersonAction配置 926
41.6.8 登录拦截器 929
41.6.9 异常捕捉 930
41.6.10 实现用户登录 931
41.6.11 实现用户资料查看 933
41.7 类别模块 935
41.7.1 ICategoryService接口 935
41.7.2 CategoryServiceImpl实现 936
41.7.3 CategoryForm代码 936
41.7.4 实现浏览类别 937
41.7.5 实现添加类别 940
41.8 版面模块 941
41.8.1 IBoardService接口 942
41.8.2 BoardServiceImpl实现 942
41.8.3 BoardForm代码 942
41.8.4 实现浏览版面 943
41.8.5 实现添加版面 946
41.8.6 实现设置版主 949
41.9 帖子模块 951
41.9.1 IThreadService接口 951
41.9.2 ThreadServiceImpl实现 952
41.9.3 ThreadForm代码 952
41.9.4 实现浏览帖子 953
41.9.5 实现发表帖子 955
41.10 回帖模块 958
41.10.1 IReplyService接口 958
41.10.2 ReplyServiceImpl实现 959
41.10.3 ReplyForm代码 960
41.10.4 实现发表回帖 960
41.11 本章小结 963
第42章 分布式宠物商店(EJB 3+JPA+Struts 2) 964
42.1 系统概述 964
42.1.1 需求描述 964
42.1.2 系统预览 965
42.2 系统构架 966
42.2.1 系统构架图 966
42.2.2 实体类设计 967
42.2.3 业务类实现 969
42.2.4 Session Bean查找 978
42.2.5 persistence.xml配置 980
42.2.6 EJB 3组件部署 980
42.3 Web层的设计 982
42.3.1 Struts 2项目的文件说明 982
42.3.2 配置Struts 2 984
42.3.3 配置Tiles 985
42.3.4 使用Tiles 986
42.4 用户注册与登录 989
42.4.1 用户注册页面 989
42.4.2 注册处理Action 990
42.4.3 所有Action的父类BaseAction 992
42.4.4 登录页面 994
42.5 类别与宠物管理 995
42.5.1 宠物类别列表 995
42.5.2 添加宠物类别 999
42.5.3 添加宠物 1000
42.5.4 删除宠物分类和宠物 1003
42.6 购物车管理 1004
42.6.1 购买宠物 1004
42.6.2 查看购物车 1006
42.6.3 付款结账 1009
42.7 本章小结 1010