第1篇 Web开发基础篇 2
第1章 搭建开发环境 2
本书使用的软件和框架的版本 2
JDK6的下载与安装 2
Eclipse 3.4的下载与安装 3
MyEclipse 6.5的下载与安装 3
Eclipse IDE for Java EE Developers的下载与安装 4
Tomcat 6的下载与安装 5
在MyEclipse中配置Tomcat 6
在Eclipse IDE for Java EE Developers中配置Tomcat 6
小结 7
第2章Java Web应用开发基础 8
Web技术的发展 8
Java Web技术 10
Java Web程序的基本组成 11
Java Web程序的目录结构 11
Java Web程序的配置文件 11
MVC模式与MVC框架 12
JSP模型1和JSP模型2 12
Web应用程序需要的基础服务 13
MVC模式概述 14
常用的MVC框架 15
小结 16
第3章Web开发中的客户端技术 17
常用的JavaScript IDE简介 17
在MyEclipse中使用JavaScript 17
在Eclipse IDE for Java EE中使用JavaScript 18
在NetBeans中使用JavaScript 19
其他的JavaScript IDE 20
JavaScript语法基础 20
实例:编写第一个JavaScript程序:Greet 21
变量 22
原始类型 22
类型转换 26
函数与函数调用 28
类和对象 30
JavaScript高级技术 32
DOM技术概述 32
获得HTML元素的3种方法 34
实例:图像自动切换 36
正则表达式 37
实例:表格排序 38
CSS基础 41
CSS的基本语法 41
在Style属性中定义样式 42
在HTML中定义样式 42
在外部文件中定义样式 43
样式的继承 43
AJAX基础 44
AJAX概述 44
实例:使用XMLHttpRequest获得Web资源 45
实例:使用XMLHttpRequest跨域访问Web资源 46
实例:AJAX的3种交换数据方法 47
小结 49
第4章Servlet技术 50
Servlet的Helloworld程序 50
实例:在MyEclipse中编写Helloworld程序 50
实例:手工编写Helloworld程序 53
Servlet基础 54
配置数据库连接池 55
数据库连接池的应用 56
实例:用doGet方法处理客户端请求 58
实例:用doPost方法处理客户端请求 60
实例:用service方法处理客户端请求 60
实例:初始化(init)和销毁(destroy)Servlet 62
实例:使用PrintWriter输出响应消息 64
实例:用ServletOutputStream显示图像 65
实例:使用RequestDispatcher包含Web资源 66
实例:使用RequestDispatcher转发Web资源 68
HttpServletResponse类的其他功能 69
产生状态响应码 70
设置响应消息头 71
实例:验证响应头设置情况 73
使用HttpServletRequest获得请求消息 73
获取请求行消息 74
获取网络连接消息 74
获取请求头消息 75
处理Cookie 76
什么是Cookie 76
Cookie类中的方法 76
实例:用Cookie读写客户端信息 77
实例:用Cookie读写复杂数据 79
处理Session 81
什么是Session 81
HttpSession接口中的方法 81
HttpServletRequest接口中的Session方法 83
实例:通过Cookie跟踪Session 83
实例:通过重写URL跟踪Session 85
Web开发的中文问题 87
Java的编码原理 87
实例:解决输出中文乱码问题 89
实例:解决服务端程序读取中文请求消息的乱码问题 90
实例:用AJAX技术发送和接收中文信息 92
实例:在请求消息头和响应消息头中转输中文 95
小结 97
第5章JSP技术 98
用MyEclipse编写第一个JSP程序 98
实例:编写显示服务器当前时间的JSP程序 98
调试JSP程序 100
改变JSP的访问路径和扩展名 101
手动发布JSP程序 102
JSP的运行原理 102
Tomcat如何处理JSP页 103
分析由JSP生成的Servlet代码 104
JSP基本语法 108
JSP表达式 109
在JSP中嵌入Java代码 109
JSP声明 111
JSP表达式语言(EL) 113
实例:用EL函数替换HTML中的特殊字符 115
JSP页面中的注释 117
JSP指令 118
JSP指令简介 118
page页面指令 119
include加入指令 125
JSP的9个内置对象 126
out输出对象 126
pageContext封装对象 128
其他的JSP内置对象 129
JSP标签 132
<jsp:include>插入标签 132
<jsp:forward>转发标签 134
<jsp:param>传参标签 135
<jsp:useBean>创建Bean标签 136
<jsp:setProperty>设置属性值标签 138
<jsp:getProperty>获取属性值标签 140
JSP的标准标签库(JSTL) 140
如何使用JSTL 141
条件标签 142
循环标签 144
小结 147
第6章用Servlet和JSP实现注册登录系统 148
系统概述 148
系统功能简介 148
系统总体结构 149
设计数据库 149
实现系统的基础类 150
实现访问数据库的DBServlet类 150
实现MD5加密 152
实现图形验证码 152
实现注册系统 155
实现注册Servlet类 155
实现注册系统的主页面 157
实现结果JSP页面 159
实现登录系统 160
实现登录Servlet 160
实现登录系统主页面 162
小结 163
第2篇 Struts 2篇 166
第7章 编写Struts 2的第一个程序 166
Struts 2中的MVC模式 166
Struts 2的体系结构 167
Struts 2的工作流程 167
Struts 2的配置文件 167
Struts 2的控制器 169
实例:图书查询系统 170
下载和安装Struts 2 170
编写数据处理类 171
编写和配置Action类 172
编写显示查询结果的JSP页面 174
编写输入查询信息的JSP页面 176
小结 177
第8章Struts 2进阶 178
Struts 2的基本配置 178
配置web.xml 178
配置struts.xml 179
配置struts.properties 183
Struts 2的DTD 186
深入理解Struts 2的配置元素 188
配置Bean 188
配置常量(constant) 190
配置包含(include) 191
配置包(package) 192
配置命名空间 193
配置拦截器 194
Struts 2注释(Annotation) 195
ParentPackage注释:设置当前包的父包 195
Namespace注释:指定当前包的命名空间 196
Results与Result注释:指定当前Action结果 197
实例:用注释配置Action 197
Struts 2的Action 200
Action类的getter和setter方法 200
实现Action接口 202
继承ActionSupport类 203
实例:用ActionContext访问Servlet API 205
实例:通过aware拦截器访问Servlet API 209
实例:利用动态方法处理多个提交请求 211
实例:利用method属性处理多个提交请求 213
使用通配符 214
默认Action 218
处理结果 218
配置结果 218
Struts 2支持的处理结果类型 219
用通配符指定结果 222
用请求参数指定结果 223
模型驱动 224
ModelDriven概述 224
实例:使用模型驱动改进登录程序 226
处理异常 228
Struts 2处理异常的原理 229
实例:登录系统的异常处理 230
小结 233
第9章Struts 2的拦截器 234
理解拦截器 234
拦截器的实现原理 234
实例:模拟Struts 2实现一个拦截器系统 237
配置Struts 2拦截器 242
配置拦截器 242
使用拦截器 244
默认拦截器 245
实例:自定义拦截器 247
编写拦截器类 247
配置自定义拦截器 249
拦截器的高级技术 251
过滤指定的方法 251
拦截器执行顺序 254
拦截器结果监听器 255
Struts 2内建的拦截器 258
内建拦截器 258
内建拦截器的配置 260
实例:编写权限验证拦截器 262
编写权限验证拦截器类 263
配置权限控制拦截器 263
小结 265
第10章Struts 2的类型转换 266
为什么要进行类型转换 266
客户端和服务端之间的数据处理过程 266
传统的类型转换 267
使用Struts 2类型转换器 270
Struts 2内建的类型转换器 271
实例:实现基于OGNL的类型转换器 274
配置全局类型转换器 278
实例:实现基于Struts 2的类型转换器 280
实例:实现数组类型转换器 282
实例:实现集合类型转换器 284
实例:使用OGNL表达式进行类型转换 287
Struts 2对Collection和Map的支持 289
指定集合元素的类型 289
Set和索引属性 291
类型转换的错误处理 292
小结 294
第11章Struts 2的输入校验 295
传统的数据校验方法 295
用JavaScript进行客户端校验 295
手工进行服务端校验 300
Struts 2的数据校验 303
Struts 2使用validate方法校验数据的原理 303
实例:使用validate方法进行输入校验 305
实例:使用validateXxx方法进行输入校验 308
Struts 2的输入校验流程 311
使用Validation框架进行输入校验 312
实例:服务端校验 313
字段校验器和非字段校验器 315
国际化错误提示信息 317
实例:客户端校验 319
校验文件的命名规则 323
短路校验器 325
Validation框架的内建校验器 327
注册和引用校验器 327
转换(conversion)校验器 328
日期(date)校验器 329
双精度浮点数(double)校验器 330
邮件地址(email)校验器 331
表达式(expression)校验器 332
字段表达式(fieldexpression)校验器 332
整数(int)校验器 333
正则表达式(regex)校验器 334
必填(required)校验器 335
必填字符串(requiredstring)校验器 335
字符串长度(stringlength)校验器 336
网址(url)校验器 337
visitor校验器 337
小结 341
第12章 文件的上传和下载 342
文件上传原理 342
表单数据的编码方式 342
applicaiton/x-www.form-urlencoded编码方式 343
multipart/form-data编码方式 345
使用Commons-FileUpload上传文件 348
下载和安装Commons-FileUpload组件 348
实例:上传单个文件 349
实例:上传任意多个文件 352
实例:Struts 2的文件上传 355
Struts 2对上传文件的支持 355
编写上传文件的JSP页 355
编写上传文件的Action类 356
配置上传文件的Action类 358
手工过滤上传文件的类型 359
用fileUpload拦截器过滤上传文件的类型 361
在Struts 2中上传多个文件 363
实例:用数组上传固定数目的文件 363
实例:用List上传任意数目的文件 366
文件下载 368
下载文件的中文问题 368
用stream结果下载文件 369
下载文件的授权控制 371
小结 372
第13章 国际化 373
国际化基础 373
程序为什么需要国际化 373
Java国际化中的资源文件 374
Java支持的语言和国家 375
资源文件的中文支持 376
编写国际化程序 377
带占位符的国际化信息 379
实例:使用资源文件编写国际化程序 380
Java国际化中的资源类 383
实例:使用资源类编写国际化程序 384
Struts 2的国际化基础 385
Struts 2中的全局资源文件 386
在Struts 2中访问国际化信息 386
在Struts 2中输出带占位符的国际化信息 389
资源文件的作用范围和加载顺序 391
包范围资源文件 391
接口范围资源文件 393
Action基类范围资源文件 395
Action范围资源文件 396
临时资源文件 397
加载资源文件的顺序 398
实例:编写支持多国语言的Web应用程序 399
通过i 18n拦截器实现国际化 400
为register jsp页面增加语言选择列表 401
将register.jsp页面映射成Action 402
小结 404
第14章Struts 2的标签库 405
Struts 2标签基础 405
Struts 2标签的分类 405
使用Struts 2标签 406
Struts 2中的OGNL表达式 408
用OGNL表达式访问内置对象 411
用OGNL表达式操作集合 412
Lamdba(λ)表达式 414
控制标签 415
if/elseif/else标签:条件逻辑控制 415
iterator标签:数组、集合迭代 418
append标签:将集合以追加方式合并为新集合 422
generator标签:将字符串分割成多个子串 424
merge标签:将集合以交替方式合并为新集合 427
subset标签:获得集合的子集 428
sort标签:对集合进行排序 430
数据标签 432
action标签:在JSP页面中直接访问Action 432
bean标签:创建JavaBean的对象实例 434
date标签:格式化日期/时间 436
debug标签:显示调试信息 438
include标签:包含Web资源 439
param标签:为其他的标签提供参数 440
property标签:输出指定的值 440
push标签:将指定值放到 ValueStack栈顶 441
set标签:将某个值保存在指定的范围 442
url标签:生成URL地址 444
表单标签 446
表单标签的通用属性 446
表单标签的name和value属性 447
form、 submit和reset标签:表单、提交和重置 449
checkboxlist标签:生成多个复选框 449
combobox标签:组合单行文本框和下拉列表框 452
datetimespicker标签:组合文本框和日期、时间选择框 454
doubleselect标签:生成级联列表框 457
head标签:添加CSS和JavaScript 458
optiontransferselect标签:生成可交互的两个列表框 459
select标签:生成列表框 461
optgroup标签:生成下拉列表框选项组 462
radio标签:生成多个单选框 463
token标签:防止多次提交表单 464
updownselect标签:生成高级列表框 465
其他的表单标签 467
非表单标签 467
fielderror标签:显示字段错误信息 467
actionerror和actionmessage标签:显示动作错误和动作消息 468
component标签:使用模板 469
小结 471
第15章Struts 2对AJAX的支持 472
Struts 2的AJAX主题 472
基于AJAX的输入校验 474
下载和安装DWR框架 474
编写具有AJAX校验功能的注册页面 475
编写Action类 476
设置校验规则 477
在表单中使用AJAX 479
实现可异步提交的表单 479
实现Action类 479
实现结果处理页面 480
执行JavaScript代码 481
发布-订阅(pub-sub)事件模型 483
pub-sub事件模型的原理 483
pub-sub事件模型演示 484
阻止请求服务端资源 487
使用Struts 2中的AJAX标签 488
div标签的基本应用 488
使用div标签执行JavaScript 491
手动控制div标签的更新 493
submit标签:发送异步请求 496
a标签:可异步提交请求的链接 498
autocompleter标签:带自运完成功能的文本框 501
tabbedPanel标签:生成Tab页 507
treenode和tree标签:树节点和树组件 511
使用JSON插件实现AJAX 513
下载和安装JSON插件 513
下载和安装prototype.js 513
实现Action类 514
在JSP页面中通过Prototype请求Action 515
小结 517
第16章用Struts 2实现注册登录系统 518
系统总体结构 518
实现DAO层 518
实现DAOSupport类 519
实现UserDAO接口 520
实现UserDAOImpl类 520
实现Action类 522
实现模型类(User) 522
实现LoginAction类 523
实现RegisterAction类 525
输入校验 526
校验登录页面 526
校验注册页面 527
实现表现层页面 528
实现登录页面(login.jsp) 528
实现注册页面(register.jsp) 530
实现主页面(main.jsp) 531
实现其他的功能 532
使用Action类生成验证码图像 532
使用拦截器验证页面访问权限 534
小结 536
第3篇 Hibernate篇 538
第17章Hibernate的Helloworld程序 538
Hibernate概述 538
为什么要使用ORM 538
Hibernate和EJB的关系 539
在应用程序中使用Hibernate 3 539
MyEclipse对Hibernate 3的支持 540
下载和安装新版本的Hibernate 3 542
第1个Hibernate程序 543
开发Hibernate程序的基本步骤 543
建立数据表 543
建立Hibernate配置文件 543
建立会话工厂(SessionFactory)类 544
建立实体Bean和Struts 2的模型类 547
建立映射文件 548
建立添加记录的Action类 548
建立录入信息的JSP页面 550
小结 552
第18章 配置Hibernate 553
用传统的方法配置Hibernate 553
用XML文件配置Hibernate 553
用属性文件配置Hibernate 556
用编程的方式配置Hibernate 556
Hibernate框架的配置属性 557
SQL方言(Dialect) 561
使用JNDI数据源 562
配置映射文件 563
使用注释(Annotations)配置Hibernate 564
Hibernate注释简介 564
安装Hibernate注释 564
使用@Entity注释实体Bean 565
使用@Table注释实体Bean 565
使用@Id注释主键 566
使用@GenericGenerator注释产生主键值 567
使用@Basic和@Transient注释 568
更高级的Hibernate注释 568
使用注释重新实现Helloworld程序 569
使用注释配置实体Bean 569
在Hibernate配置文件中指定实体Bean的位置 570
使用AnnotationConfiguration类处理annotation.cfg.xml文件 570
通过AnnotationSessionFactory类获得Session对象 571
小结 572
第19章Hibernate的会话与O/R映射 573
会话(Session)的基本应用 573
保存持久化对象 573
判断持久化对象之间的关系 574
装载持久化对象 575
刷新持久化对象 577
更新持久化对象 578
删除持久化对象 579
建立O/R映射 579
映射主键 579
映射复合主键 580
实例:主键和复合主键的查询和更新 581
映射普通属性 586
建立组件(Component)映射 587
实例:组件映射的应用 588
基于注释的组件映射 592
建立多对一(many-to-one)单向关联关系 593
实例:多对一关系的演示 593
基于注释的多对一关系映射 597
建立一对多(one-to-many)的双向关联关系 598
实例:一对多双向关联的演示 598
基于注释的一对多映射 601
建立基于外键的一对一(one-to-one)的关系映射 602
实例:基于外键的一对一关系演示 603
建立基于主键的一对一的关系映射 606
实例:基于主键的一对一关系映射 607
小结 610
第20章Hibernate的查询与更新技术 612
标准(Criteria)查询API 612
实例:一个简单的例子 612
查询的约束条件 613
对查询结果进行分页 615
实例:实现Web分页功能 617
只获得一个持久化对象 620
对查询结果进行排序 621
多个Criteria之间的关联 621
聚合和分组 622
使用QBE (Query By Example) 624
HQL和SQL技术 625
实例:使用HQL的第一个例子 625
From子句:简化实体Bean类名 626
Select子句:选择返回属性 628
Where子句:指定条件 629
使用命名参数 630
使用Query进行分页 631
实例:使用HQL实现Web分页功能 631
使用HQL进行排序和分组 632
关联查询 633
聚合函数 635
Update和Delete语句:更新持久化对象 636
Insert语句:插入记录 637
命名查询 638
使用SQL 639
小结 640
第21章Hibernate的高级技术 641
事务管理 641
事务概述 641
事务的隔离等级 642
Hibernate的事务管理 643
基于JDBC的事务管理 643
基于JTA的事务管理 644
锁(Locking) 644
悲观锁(Pessimistic Locking) 644
乐观锁(Optimistic Locking) 646
查询缓存(Query Cache) 648
拦截器和事件 649
拦截器(Interceptors)概述 649
实例:编写一个Hibernate拦截器 649
事件(Events)概述 653
实例:编写和注册事件类 654
过滤器 656
小结 657
第4篇 Spring篇 660
第22章Spring的Helloworld程序 660
Spring简介 660
Spring的主要特性 660
Spring的核心技术 661
在应用程序中使用Spring 662
MyEclipse 6.5对Spring的支持 662
下载和安装Spring 663
实例:开发一个Helloworld程序 664
编写HelloService接口 664
编写HelloServiceImpl类 664
装配HelloServiceImpl类 665
通过装配Bean的方式获得HelloService对象 665
小结 666
第23章 反向控制(loc)与装配JavaBean 667
反向控制(Ioc) 667
什么是依赖注入 667
传统解决方案的缺陷 668
用Ioc降低耦合度 669
手动装配JavaBean 670
装配Bean的方法 670
与Bean相关的接口 671
<bean>标签的常用属性 672
装配普通属性 673
装配集合属性 676
设置属性值为null 680
装配构造方法 680
自动装配JavaBean 683
分散配置 685
定制属性编辑器 687
小结 690
第24章Spring中的数据库技术 691
获得DataSource 691
通过JNDI获得DataSource 691
从第三方的连接池获得DataSource 692
使用DriverManagerDataSource 693
在Spring中使用JDBC 693
装配JdbcTemplate类 693
向数据库中写数据 694
从数据库中读数据 696
调用存储过程 699
自增键 700
异常处理 701
在Spring中使用Hibernate 702
集成Spring和Hibernate 702
使用HibernateTemplate 703
小结 705
第25章Spring的其他高级技术 706
Spring AOP 706
AOP概述 706
AOP术语简介 707
4种通知(Advice)的作用 708
通过Advisor指定切入点 714
使用控制流切入点 716
Spring的事务管理 718
实例:使用程序控制事务 718
声明式事务 720
事务属性的种类 722
设置事务属性 724
设置特定方法的事务属性 725
实例:建立和访问RMI服务 727
实例:发送E-mail 729
调度任务 731
小结 732
第5篇 综合实例篇 734
第26章Struts 2与Hibernate、Spring的整合 734
整合Struts 2和Hibernate框架 734
整合的思路 734
整合后的系统层次 735
实现数据访问层 735
实现业务逻辑层 737
Struts 2和Hibernate共享实体Bean 739
整合Spring框架 740
装配数据访问层 740
装配业务逻辑层 742
使用Struts 2的Spring插件 742
小结 743
第27章 网络硬盘 744
系统概述 744
系统功能简介 744
系统架构设计 746
数据库设计 746
实现持久对象层 748
实现用户实体Bean 749
实现目录实体Bean 750
实现文件实体Bean 751
映射MySQL存储过程 752
配置hibernate.cfg.xml 753
实现数据访问层 754
实现DAOSupport类 754
实现UserDAO接口和UserDAOImpl类 754
实现DirectoryDAO接口和DirectoryDAOImpl类 755
实现FileDAO接口和FileDAOImpl类 757
实现业务逻辑层 758
实现UserService接口和UserServiceImpl类 758
实现DirectoryService接口和DirectoryServiceImpl类 760
实现FileService接口和FileServicelmpl类 762
实现服务管理类 764
配置Spring 765
实现Web表现层 767
实现基础动作类(BaseAction) 768
实现用户登录页面和处理登录的Action类 769
实现注册登录页面和处理注册的Action类 771
实现网络硬盘主页面 771
建立目录 773
实现文件上传 774
实现文件和目录下载 775
使用拦截器控制页面访问权限 779
其他功能的实现 780
小结 780
第28章 论坛系统 782
系统功能简介 782
数据库设计 783
实现持久对象层 785
实现主题实体Bean 785
实现回复实体Bean 787
配置hibernate.cfg.xml 788
实现数据访问层 788
实现TopicDAO接口和TopicDAOImpl类 789
实现ReviewDAO接口和ReviewDAOImpl类 790
实现业务逻辑层 791
实现TopicService接口和TopicServiceImpl类 791
实现ReviewService接口和ReviewServiceImpl类 793
实现服务管理类 795
配置Spring 795
整合FCKEditor组件 796
安装FCKEditor 796
配置FCKEditor 797
修改FCKEditor自带的Servlet 800
产生FCKEditor的客户端脚本 800
实现Web表现层 801
浏览论坛的主题列表 801
发布新主题 804
浏览主题和回复内容 805
回复主题 806
小结 807