本文为原创,如需转载,请注明作者和出处,谢谢!
作者:李宁 图书详细信息:
ISBN:9787302195757
定价:79.8元
印次:1-1
装帧:平装
印刷日期:2009-4-23
图书简介:
SSH是目前最流行的Java Web开发技术。本书通过对SSH中的各种技术循序渐进地讲解,使读者尽快掌握开发基于SSH的Web程序的方法。本书内 容包括Web客户端技术、JSP/Servlet技术、Struts 2(拦截器、类型转换、输入校验、上传和下载文件、Struts 2的各种标签、对 AJAX的支持等)、Spring(Ioc容器、装配Java Bean、Jdbc和Hibernate模板、事务管理、Spring AOP等)以及 Hibernate(会话、映射、标准查询API、HQL、事务管理、锁等)。除此之外,本书还提供了两个完整的实例来讲解开发SSH的详细步骤和方法。 通过对这两个实例的学习,读者可以对SSH开发模式有更透彻地理解和认识。
本书适合广大从事Java Web开发工作的技术人员、对SSH开发感兴趣的人员以及大专院校学生阅读,尤其是具有一定的Web开发经验的技术人员。
前 言
现在MVC模式已经成为Web应用的主流开发模式。而Struts框架几乎可以和MVC模式划等号,因为Struts框架已经成为了MVC模式的事实标准。随着Struts 1.x的应用浪潮席卷全球数年后,Struts 2又以崭新的姿态与世人见面了。
Struts 2仍然可以继承Struts 1.x的应用模式(Struts + Spring + Hibernate),但关于 Struts 2+Spring+Hibernate整合的书却并不多。为了使读者尽快了解和掌握如何使用 Struts 2、Spring和Hibernate 3个框架整合的方式来开发Web应用系统,笔者花费了大量的时间来完成这本关于Struts 2 + Spring +Hibernate 整合的书。为了尽可能保证内容的准确和权威性,笔者查阅了大量的官方文档,并针对关键部分阅读了相应的源代码。
本书的写作目标就是力争让读者尽可能地掌握Struts 2、Spring和Hibernate,以及这3个框架整合的相关知识。并通过两个完整实例的讲解使读者尽快融入SSH(Struts+Spring+ Hibernate)大家庭。
本书有何特色
1.从基础开始,由浅入深
JSP/Servlet技术是Java Web技术的基础,很多初学者在学习SSH之前并没有很好地掌握该技术,因此,本书考虑到这个原因,在第一篇讲解了JSP/Servlet以及Web客户 端技术的基础知识。除此之外,在第二~四篇的头一章都以一个简单的例子开始,以使读者在学习每一篇所讲的技术之前,对这种技术有一个初步的了解。并且每一 篇的章节是按照由浅入深、循序渐进的顺序编排的,从而可以使读者渐进式地学习本书的知识。
2.各篇独立,内容完整
本书的每一篇都是相对独立的。如第二篇讲解了Struts 2的各种技术;第三篇讲解了Hibernate的主要技术,而且每一篇讲解的技术比较完整。这样就会给想学习SSH整合技术,但却未掌握SSH中的一项或 几项技术的读者带来方便,至少不需要同时准备几本书,从而给读者节省了大量的时间和金钱。
3.各章实例丰富,使读者更容易理解书中的知识
本书几乎在每一章都提供了大量的实例。这些实例充分展现了相关知识点的实现细节。读者可以在学习相关知识点后,通过上机实践这些例子来更深入地了解并掌握这些知识点。
4.提供了完整的实例,使读者更进一步体会SSH开发模式的精髓
在本章的最后还提供了两个完整的实例(网络硬盘和论坛系统)。这两个实例都采用了SSH模式进行开发。通过对这两个实例的深入研究,读者可以比较全面地掌握基于SSH模式的Web应用程序的开发步骤和开发方法,并可将实例中所采用的技术应用到自己的项目中。
5.使用最新版本的开发工具和框架
本书所使用的开发工具和相关的框架在笔者写作本书时都是最新版本,如MyEclipse 6.5、Struts 2.0.11.2等。读者可以在学习SSH开发技术的同时,接触到目前最新版本的开发工具和框架。就算读者目前所使用的软件版本低于本书所使用的软件版 本,也可以为未来的工作奠定基础。
6.配有源代码与视频光盘,方便读者使用
为了方便读者实验本书提供的实例程序,特将所有的源代码都收录到了配书光盘中,以方便读者使用。另外,作者特别为本书录制了一些多媒体视频演示,将本书中的一些相关操作直观地展示给读者,以达到更好的学习效果。
本书内容
第1章:为了使读者尽快搭建本书所使用的开发环境。在这一章将详细介绍本书所使用的开发工具、框架的版本号以及下载、安装和配置的过程。
第2章:本章介绍了Web技术的发展历史,以及Java Web技术的基本组成。最后详细描述了Java Web技术中常用的两种开发模式:JSP模型1和JSP模型2(MVC模式),以及目前常用的MVC框架。
第3章:本章介绍了在Web系统中常用的客户端技术,这些技术包括JavaScript、CSS和AJAX。在本章的开始部分还介绍了一些开发JavaScript的常用IDE。
第4章:本章介绍了Servlet的基础知识,如处理请求消息、响应消息、Cookie和Session等,最后还详细讲解了Web开发中所遇到的中文乱码问题的解决方案。
第5章:本章介绍了JSP的运行原理、基本语法、JSP指令、JSP的内置对象、JSP标签和JSTL。
第6章:本章以一个用户注册登录系统为例,演示了如何综合运用JSP/Servlet技术开发一个完整的Web应用程序。
第7章:本章介绍了Struts 2中的MVC模式,以及Struts 2的体系结构。最后给出了一个简单的例子来演示开发基于Struts 2的Web应用程序的步骤和方法。
第8章:本章介绍了如何配置Struts 2框架、Struts 2 Action、处理结果、模型驱动和异常处理。
第9章:本章介绍了Struts 2的拦截器技术,其中包括拦截器的实现原理、拦截器的配置、实现自定义拦截器以及内建拦截器等内容。
第10章:本章介绍了Struts 2中的各种类型转换技术。如OGNL表达式、数组和集合类型转换器、类型转换的错误处理等。
第11章:本章介绍了传统的输入校验和Struts 2中的输入校验。
第12章:本章首先介绍了文件上传的原理,以及如何使用Commons-FileUpload组件上传文件。本章的重头戏是讲解Struts 2的上传功能,其中包括上传单个文件和上传任意多个文件的方法。在最后介绍了如何使用Struts 2框架下载文件,主要包括使用stream结果下载文件以及下载文件的权限控制。
第13章:本章介绍了Struts 2在国际化方面的技术。为了更深入地理解Struts 2的国际化功能,在本章的开始部分首先介绍了Java对国际化的支持。然后逐步深入介绍Struts 2的国际化技术,主要包括访问资源文件、资源文件的加载顺序等,最后给出了一个例子来演示如何将国际化功能加载到Web应用程序中。
第14章:本章详细讲解了Struts 2框架中的标签。这些标签包括控制标签、数据标签、表单标签、非表单标签。
第15章:本章着重介绍了Struts 2框架对AJAX的支持,主要内容包括支持AJAX的标签、基于AJAX的校验、发布-订阅事件模型、JSON插件等。
第16章:本章使用了Struts 2技术重新实现了第6章的用户注册登录系统。在本章实现的用户注册登录系统的功能和第6章实现的该系统的功能相同,只是使用了Struts 2框架来实现相关的部分。读者可以从中体会到使用JSP/Servlet和Struts 2在开发Web应用程序中的不同。
第17章:本章介绍了ORM的概念以及Hibernate和EJB的关系。最后给出一个例子来演示在MyEclipse中开发基于Hibernate的系统的步骤和方法。
第18章:本章介绍了Hibernate的两种配置方式:配置文件和注释。在最后给出了一个例子重新实现了第17章的例子,只不过这个例子使用了注释来配置Hibernate。
第19章:本章介绍了Hibernate会话的基本操作和O/R映射。其中O/R映射主要介绍了映射主键、映射复合主键、映射普通属性、组件映射、基于注释的组件映射、多对一、一对多、一对一的关系。
第20章:本章的第1节介绍了Hibernate的标准(Criteria)查询API技术,主要内容包括约束条件、分页、排序、聚合和分组以及QBE。 在第2节介绍了Hibernate中的另外两种查询技术:HQL和SQL。其中HQL主要介绍了From、Select、Where、Update、 Insert以及Delete语句,还介绍了命名参数、排序和分组、关联查询、命名查询等。
第21章:本章介绍了Hibernate的一些高级技术,主要包括事务管理、锁机制、查询缓存、拦截器和事件与过滤器。
第22章:本章介绍了Spring的主要特性和核心技术,在最后还给出了一个例子来演示使用Spring框架开发程序的过程。
第23章:本章介绍了Spring框架的核心思想,反向控制(Ioc),同时还详细讲解了Spring框架中最常用的装配Java Bean技术以及分散配置和定制属性编辑器。
第24章:本章介绍了Spring中的数据库技术,主要包括在Spring中使用数据源连接数据库、操作JDBC的JdbcTemplate;操作Hibernate的HibernateTemplate以及自增键和异常的处理。
第25章:本章主要介绍了Spring AOP技术的基础知识以及事务管理。除此之外,还介绍了Spring的其他一些高级属性,如建立和访问RMI服务、发送Email、调度任务等。
第26章:从本章开始逐渐涉及到了SSH开发的全过程。在本章主要介绍了Struts 2、Spring和Hibernate 3个框架整合的思路,以及基于SSH的系统的层次结构。
第27、28章:在这两章给出了两个完整的使用SSH开发的例子(网络硬盘和论坛系统)。在这两个例子中详细描述了开发基于SSH的系统的步骤和其中所涉 及到的技术。开发这两个例子的基本步骤类似,不过它们所涉及到的技术有一定的区别,如在论坛系统中涉及到了一个Web编辑器(FCKEditor)的安装 和使用。
适合阅读本书的读者
* 初步掌握Java技术,想进一步学习SSH整合开发的读者
* 对SSH整合技术有了一定的了解,想进一步提高的读者
* 正在使用SSH整合技术开发项目,想查阅相关技术的读者
* 大中专院校的学生
* 社会培训学生
目 录
第1篇 Web开发基础篇
第1章 搭建开发环境 2
1.1 本书使用的软件和框架的版本 2
1.2 JDK6的下载与安装 2
1.3 Eclipse 3.4的下载与安装 3
1.4 MyEclipse 6.5的下载与安装 3
1.5 Eclipse IDE for Java EE Developers的下载与安装 4
1.6 Tomcat 6的下载与安装 5
1.7 在MyEclipse中配置Tomcat 6
1.8 在Eclipse IDE for Java EE Developers中配置Tomcat 6
1.9 小结 7
第2章 Java Web应用开发基础 8
2.1 Web技术的发展 8
2.2 Java Web技术 10
2.2.1 Java Web程序的基本组成 11
2.2.2 Java Web程序的目录结构 11
2.2.3 Java Web程序的配置文件 11
2.3 MVC模式与MVC框架 12
2.3.1 JSP模型1和JSP模型2 12
2.3.2 Web应用程序需要的基础服务 13
2.3.3 MVC模式概述 14
2.3.4 常用的MVC框架 15
2.4 小结 16
第3章 Web开发中的客户端技术 17
3.1 常用的JavaScript IDE简介 17
3.1.1 在MyEclipse中使用JavaScript 17
3.1.2 在Eclipse IDE for Java EE中使用JavaScript 18
3.1.3 在NetBeans中使用JavaScript 19
3.1.4 其他的JavaScript IDE 20
3.2 JavaScript语法基础 20
3.2.1 实例:编写第一个JavaScript程序:Greet 21
3.2.2 变量 22
3.2.3 原始类型 22
3.2.4 类型转换 26
3.2.5 函数与函数调用 28
3.2.6 类和对象 30
3.3 JavaScript高级技术 32
3.3.1 DOM技术概述 32
3.3.2 获得HTML元素的3种方法 34
3.3.3 实例:图像自动切换 36
3.3.4 正则表达式 37
3.3.5 实例:表格排序 38
3.4 CSS基础 41
3.4.1 CSS的基本语法 41
3.4.2 在Style属性中定义样式 42
3.4.3 在HTML中定义样式 42
3.4.4 在外部文件中定义样式 43
3.4.5 样式的继承 43
3.5 AJAX基础 44
3.5.1 AJAX概述 44
3.5.2 实例:使用XMLHttpRequest获得Web资源 45
3.5.3 实例:使用XMLHttpRequest跨域访问Web资源 46
3.5.4 实例:AJAX的3种交换数据方法 47
3.6 小结 49
第4章 Servlet技术 50
4.1 Servlet的Helloworld程序 50
4.1.1 实例:在MyEclipse中编写Helloworld程序 50
4.1.2 实例:手工编写Helloworld程序 53
4.2 Servlet基础 54
4.2.1 配置数据库连接池 55
4.2.2 数据库连接池的应用 56
4.2.3 实例:用doGet方法处理客户端请求 58
4.2.4 实例:用doPost方法处理客户端请求 60
4.2.5 实例:用service方法处理客户端请求 60
4.2.6 实例:初始化(init)和销毁(destroy)Servlet 62
4.2.7 实例:使用PrintWriter输出响应消息 64
4.2.8 实例:用ServletOutputStream显示图像 65
4.2.9 实例:使用RequestDispatcher包含Web资源 66
4.2.10 实例:使用RequestDispatcher转发Web资源 68
4.3 HttpServletResponse类的其他功能 69
4.3.1 产生状态响应码 70
4.3.2 设置响应消息头 71
4.3.3 实例:验证响应头设置情况 73
4..4 使用HttpServletRequest获得请求消息 73
4.4.1 获取请求行消息 74
4.4.2 获取网络连接消息 74
4.4.3 获取请求头消息 75
4.5 处理Cookie 76
4.5.1 什么是Cookie 76
4.5.2 Cookie类中的方法 76
4.5.3 实例:用Cookie读写客户端信息 77
4.5.4 实例:用Cookie读写复杂数据 79
4.6 处理Session 81
4.6.1 什么是Session 81
4.6.2 HttpSession接口中的方法 81
4.6.3 HttpServletRequest接口中的Session方法 83
4.6.4 实例:通过Cookie跟踪Session 83
4.6.5 实例:通过重写URL跟踪Session 85
4.7 Web开发的中文问题 87
4.7.1 Java的编码原理 87
4.7.2 实例:解决输出中文乱码问题 89
4.7.3 实例:解决服务端程序读取中文请求消息的乱码问题 90
4.7.4 实例:用AJAX技术发送和接收中文信息 92
4.7.5 实例:在请求消息头和响应消息头中转输中文 95
4.8 小结 97
第5章 JSP技术 98
5.1 用MyEclipse编写第一个JSP程序 98
5.1.1 实例:编写显示服务器当前时间的JSP程序 98
5.1.2 调试JSP程序 100
5.1.3 改变JSP的访问路径和扩展名 101
5.1.4 手动发布JSP程序 102
5.2 JSP的运行原理 102
5.2.1 Tomcat如何处理JSP页 103
5.2.2 分析由JSP生成的Servlet代码 104
5.3 JSP基本语法 108
5.3.1 JSP表达式 109
5.3.2 在JSP中嵌入Java代码 109
5.3.3 JSP声明 111
5.3.4 JSP表达式语言(EL) 113
5.3.5 实例:用EL函数替换HTML中的特殊字符 115
5.3.6 JSP页面中的注释 117
5.4 JSP指令 118
5.4.1 JSP指令简介 118
5.4.2 page页面指令 119
5.4.3 include加入指令 125
5.5 JSP的9个内置对象 126
5.5.1 out输出对象 126
5.5.2 pageContext封装对象 128
5.5.3 其他的JSP内置对象 129
5.6 JSP标签 132
5.6.1 <jsp:include>插入标签 132
5.6.2 <jsp:forward>转发标签 134
5.6.3 <jsp:param>传参标签 135
5.6.4 <jsp:useBean>创建Bean标签 136
5.6.5 <jsp:setProperty>设置属性值标签 138
5.6.6 <jsp:getProperty>获取属性值标签 140
5.7 JSP的标准标签库(JSTL) 140
5.7.1 如何使用JSTL 141
5.7.2 条件标签 142
5.7.3 循环标签 144
5.8 小结 147
第6章 用Servlet和JSP实现注册登录系统 148
6.1 系统概述 148
6.1.1 系统功能简介 148
6.1.2 系统总体结构 149
6.2 设计数据库 149
6.3 实现系统的基础类 150
6.3.1 实现访问数据库的DBServlet类 150
6.3.2 实现MD5加密 152
6.3.3 实现图形验证码 152
6.4 实现注册系统 155
6.4.1 实现注册Servlet类 155
6.4.2 实现注册系统的主页面 157
6.4.3 实现结果JSP页面 159
6.5 实现登录系统 160
6.5.1 实现登录Servlet 160
6.5.2 实现登录系统主页面 162
6.6 小结 163
第2篇 Struts 2篇
第7章 编写Struts 2的第一个程序 166
7.1 Struts 2中的MVC模式 166
7.2 Struts 2的体系结构 167
7.2.1 Struts 2的工作流程 167
7.2.2 Struts 2的配置文件 167
7.2.3 Struts 2的控制器 169
7.3 实例:图书查询系统 170
7.3.1 下载和安装Struts 2 170
7.3.2 编写数据处理类 171
7.3.3 编写和配置Action类 172
7.3.4 编写显示查询结果的JSP页面 174
7.3.5 编写输入查询信息的JSP页面 176
7.4 小结 177
第8章 Struts 2进阶 178
8.1 Struts 2的基本配置 178
8.1.1 配置web.xml 178
8.1.2 配置struts.xml 179
8.1.3 配置struts.properties 183
8.1.4 Struts 2的DTD 186
8.2 深入理解Struts 2的配置元素 188
8.2.1 配置Bean 188
8.2.2 配置常量(constant) 190
8.2.3 配置包含(include) 191
8.2.4 配置包(package) 192
8.2.5 配置命名空间 193
8.2.6 配置拦截器 194
8.3 Struts 2注释(Annotation) 195
8.3.1 ParentPackage注释:设置当前包的父包 195
8.3.2 Namespace注释:指定当前包的命名空间 196
8.3.3 Results与Result注释:指定当前Action结果 197
8.3.4 实例:用注释配置Action 197
8.4 Struts 2的Action 200
8.4.1 Action类的getter和setter方法 200
8.4.2 实现Action接口 202
8.4.3 继承ActionSupport类 203
8.4.4 实例:用ActionContext访问Servlet API 205
8.4.5 实例:通过aware拦截器访问Servlet API 209
8.4.6 实例:利用动态方法处理多个提交请求 211
8.4.7 实例:利用method属性处理多个提交请求 213
8.4.8 使用通配符 214
8.4.9 默认Action 218
8.5 处理结果 218
8.5.1 配置结果 218
8.5.2 Struts 2支持的处理结果类型 219
8.5.3 用通配符指定结果 222
8.5.4 用请求参数指定结果 223
8.6 模型驱动 224
8.6.1 ModelDriven概述 224
8.6.2 实例:使用模型驱动改进登录程序 226
8.7 处理异常 228
8.7.1 Struts 2处理异常的原理 229
8.7.2 实例:登录系统的异常处理 230
8.8 小结 233
第9章 Struts 2的拦截器 234
9.1 理解拦截器 234
9.1.1 拦截器的实现原理 234
9.1.2 实例:模拟Struts 2实现一个拦截器系统 237
9.2 配置Struts 2拦截器 242
9.2.1 配置拦截器 242
9.2.2 使用拦截器 244
9.2.3 默认拦截器 245
9.3 实例:自定义拦截器 247
9.3.1 编写拦截器类 247
9.3.2 配置自定义拦截器 249
9.4 拦截器的高级技术 251
9.4.1 过滤指定的方法 251
9.4.2 拦截器执行顺序 254
9.4.3 拦截器结果监听器 255
9.5 Struts 2内建的拦截器 258
9.5.1 内建拦截器 258
9.5.2 内建拦截器的配置 260
9.6 实例:编写权限验证拦截器 262
9.6.1 编写权限验证拦截器类 263
9.6.2 配置权限控制拦截器 263
9.7 小结 265
第10章 Struts 2的类型转换 266
10.1 为什么要进行类型转换 266
10.1.1 客户端和服务端之间的数据处理过程 266
10.1.2 传统的类型转换 267
10.2 使用Struts 2类型转换器 270
10.2.1 Struts 2内建的类型转换器 271
10.2.2 实例:实现基于OGNL的类型转换器 274
10.2.3 配置全局类型转换器 278
10.2.4 实例:实现基于Struts 2的类型转换器 280
10.2.5 实例:实现数组类型转换器 282
10.2.6 实例:实现集合类型转换器 284
10.3 实例:使用OGNL表达式进行类型转换 287
10.4 Struts 2对Collection和Map的支持 289
10.4.1 指定集合元素的类型 289
10.4.2 Set和索引属性 291
10.5 类型转换的错误处理 292
10.6 小结 294
第11章 Struts 2的输入校验 295
11.1 传统的数据校验方法 295
11.1.1 用JavaScript进行客户端校验 295
11.1.2 手工进行服务端校验 300
11.2 Struts 2的数据校验 303
11.2.1 Struts 2使用validate方法校验数据的原理 303
11.2.2 实例:使用validate方法进行输入校验 305
11.2.3 实例:使用validateXxx方法进行输入校验 308
11.2.4 Struts 2的输入校验流程 311
11.3 使用Validation框架进行输入校验 312
11.3.1 实例:服务端校验 313
11.3.2 字段校验器和非字段校验器 315
11.3.3 国际化错误提示信息 317
11.3.4 实例:客户端校验 319
11.3.5 校验文件的命名规则 323
11.3.6 短路校验器 325
11.4 Validation框架的内建校验器 327
11.4.1 注册和引用校验器 327
11.4.2 转换(conversion)校验器 328
11.4.3 日期(date)校验器 329
11.4.4 双精度浮点数(double)校验器 330
11.4.5 邮件地址(email)校验器 331
11.4.6 表达式(expression)校验器 332
11.4.7 字段表达式(fieldexpression)校验器 332
11.4.8 整数(int)校验器 333
11.4.9 正则表达式(regex)校验器 334
11.4.10 必填(required)校验器 335
11.4.11 必填字符串(requiredstring)校验器 335
11.4.12 字符串长度(stringlength)校验器 336
11.4.13 网址(url)校验器 337
11.4.14 visitor校验器 337
11.5 小结 341
第12章 文件的上传和下载 342
12.1 文件上传原理 342
12.1.1 表单数据的编码方式 342
12.1.2 applicaiton/x-www.form-urlencoded编码方式 343
12.1.3 multipart/form-data编码方式 345
12.2 使用Commons-FileUpload上传文件 348
12.2.1 下载和安装Commons-FileUpload组件 348
12.2.2 实例:上传单个文件 349
12.2.3 实例:上传任意多个文件 352
12.3 实例:Struts 2的文件上传 355
12.3.1 Struts 2对上传文件的支持 355
12.3.2 编写上传文件的JSP页 355
12.3.3 编写上传文件的Action类 356
12.3.4 配置上传文件的Action类 358
12.3.5 手工过滤上传文件的类型 359
12.3.6 用fileUpload拦截器过滤上传文件的类型 361
12.4 在Struts 2中上传多个文件 363
12.4.1 实例:用数组上传固定数目的文件 363
12.4.2 实例:用List上传任意数目的文件 366
12.5 文件下载 368
12.5.1 下载文件的中文问题 368
12.5.2 用stream结果下载文件 369
12.5.3 下载文件的授权控制 371
12.6 小结 372
第13章 国际化 373
13.1 国际化基础 373
13.1.1 程序为什么需要国际化 373
13.1.2 Java国际化中的资源文件 374
13.1.3 Java支持的语言和国家 375
13.1.4 资源文件的中文支持 376
13.1.5 编写国际化程序 377
13.1.6 带占位符的国际化信息 379
13.1.7 实例:使用资源文件编写国际化程序 380
13.1.8 Java国际化中的资源类 383
13.1.9 实例:使用资源类编写国际化程序 384
13.2 Struts 2的国际化基础 385
13.2.1 Struts 2中的全局资源文件 386
13.2.2 在Struts 2中访问国际化信息 386
13.2.3 在Struts 2中输出带占位符的国际化信息 389
13.3 资源文件的作用范围和加载顺序 391
13.3.1 包范围资源文件 391
13.3.2 接口范围资源文件 393
13.3.3 Action基类范围资源文件 395
13.3.3 Action范围资源文件 396
13.3.5 临时资源文件 397
13.3.6 加载资源文件的顺序 398
13.4 实例:编写支持多国语言的Web应用程序 399
13.4.1 通过i18n拦截器实现国际化 400
13.4.2 为register.jsp页面增加语言选择列表 401
13.4.3 将register.jsp页面映射成Action 402
13.5 小结 404
第14章 Struts 2的标签库 405
14.1 Struts 2标签基础 405
14.1.1 Struts 2标签的分类 405
14.1.2 使用Struts 2标签 406
14.1.3 Struts 2中的OGNL表达式 408
14.1.4 用OGNL表达式访问内置对象 411
14.1.5 用OGNL表达式操作集合 412
14.1.6 Lamdba(λ)表达式 414
14.2 控制标签 415
14.2.1 if/elseif/else标签:条件逻辑控制 415
14.2.2 iterator标签:数组、集合迭代 418
14.2.3 append标签:将集合以追加方式合并为新集合 422
14.2.4 generator标签:将字符串分割成多个子串 424
14.2.5 merge标签:将集合以交替方式合并为新集合 427
14.2.6 subset标签:获得集合的子集 428
14.2.7 sort标签:对集合进行排序 430
14.3 数据标签 432
14.3.1 action标签:在JSP页面中直接访问Action 432
14.3.2 bean标签:创建JavaBean的对象实例 434
14.3.3 date标签:格式化日期/时间 436
14.3.4 debug标签:显示调试信息 438
14.3.5 include标签:包含Web资源 439
14.3.6 param标签:为其他的标签提供参数 440
14.3.7 property标签:输出指定的值 440
14.3.8 push标签:将指定值放到ValueStack栈顶 441
14.3.9 set标签:将某个值保存在指定的范围 442
14.3.10 url标签:生成URL地址 444
14.4 表单标签 446
14.4.1 表单标签的通用属性 446
14.4.2 表单标签的name和value属性 447
14.4.3 form、submit和reset标签:表单、提交和重置 449
14.4.4 checkboxlist标签:生成多个复选框 449
14.4.5 combobox标签:组合单行文本框和下拉列表框 452
14.4.6 datetimespicker标签:组合文本框和日期、时间选择框 454
14.4.7 doubleselect标签:生成级联列表框 457
14.4.8 head标签:添加CSS和JavaScript 458
14.4.9 optiontransferselect 标签:生成可交互的两个列表框 459
14.4.10 select标签:生成列表框 461
14.4.11 optgroup标签:生成下拉列表框选项组 462
14.4.12 radio标签:生成多个单选框 463
14.4.13 token标签:防止多次提交表单 464
14.4.14 updownselect标签:生成高级列表框 465
14.4.15 其他的表单标签 467
14.5 非表单标签 467
14.5.1 fielderror标签:显示字段错误信息 467
14.5.2 actionerror和actionmessage标签:显示动作错误和动作消息 468
14.5.3 component标签:使用模板 469
14.6 小结 471
第15章 Struts 2对AJAX的支持 472
15.1 Struts 2的AJAX主题 472
15.2 基于AJAX的输入校验 474
15.2.1 下载和安装DWR框架 474
15.2.2 编写具有AJAX校验功能的注册页面 475
15.2.3 编写Action类 476
15.2.4 设置校验规则 477
15.3 在表单中使用AJAX 479
15.3.1 实现可异步提交的表单 479
15.3.2 实现Action类 479
15.3.3 实现结果处理页面 480
15.3.4 执行JavaScript代码 481
15.4 发布-订阅(pub-sub)事件模型 483
15.4.1 pub-sub事件模型的原理 483
15.4.2 pub-sub事件模型演示 484
15.4.3 阻止请求服务端资源 487
15.5 使用Struts 2中的AJAX标签 488
15.5.1 div标签的基本应用 488
15.5.2 使用div标签执行JavaScript 491
15.5.3 手动控制div标签的更新 493
15.5.4 submit标签:发送异步请求 496
15.5.5 a标签:可异步提交请求的链接 498
15.5.6 autocompleter标签:带自运完成功能的文本框 501
15.5.7 tabbedPanel标签:生成Tab页 507
15.5.8 treenode和tree标签:树节点和树组件 511
15.6 使用JSON插件实现AJAX 513
15.6.1 下载和安装JSON插件 513
15.6.2 下载和安装prototype.js 513
15.6.3 实现Action类 514
15.6.4 在JSP页面中通过Prototype请求Action 515
15.7 小结 517
第16章 用Struts 2实现注册登录系统 518
16.1 系统总体结构 518
16.2 实现DAO层 518
16.2.1 实现DAOSupport类 519
16.2.2 实现UserDAO接口 520
16.2.3 实现UserDAOImpl类 520
16.3 实现Action类 522
16.3.1 实现模型类(User) 522
16.3.2 实现LoginAction类 523
16.3.3 实现RegisterAction类 525
16.4 输入校验 526
16.4.1 校验登录页面 526
16.4.2 校验注册页面 527
16.5 实现表现层页面 528
16.5.1 实现登录页面(login.jsp) 528
16.5.2 实现注册页面(register.jsp) 530
16.5.3 实现主页面(main.jsp) 531
16.6 实现其他的功能 532
16.6.1 使用Action类生成验证码图像 532
16.6.2 使用拦截器验证页面访问权限 534
16.7 小结 536
第3篇 Hibernate篇
第17章 Hibernate的Helloworld程序 538
17.1 Hibernate概述 538
17.1.1 为什么要使用ORM 538
17.1.2 Hibernate和EJB的关系 539
17.2 在应用程序中使用Hibernate 3 539
17.2.1 MyEclipse对Hibernate 3的支持 540
17.2.2 下载和安装新版本的Hibernate 3 542
17.3 第1个Hibernate程序 543
17.3.1 开发Hibernate程序的基本步骤 543
17.3.2 建立数据表 543
17.3.3 建立Hibernate配置文件 543
17.3.4 建立会话工厂(SessionFactory)类 544
17.3.5 建立实体Bean和Struts 2的模型类 547
17.3.6 建立映射文件 548
17.3.7 建立添加记录的Action类 548
17.3.8 建立录入信息的JSP页面 550
17.4 小结 552
第18章 配置Hibernate 553
18.1 用传统的方法配置Hibernate 553
18.1.1 用XML文件配置Hibernate 553
18.1.2 用属性文件配置Hibernate 556
18.1.3 用编程的方式配置Hibernate 556
18.1.4 Hibernate框架的配置属性 557
18.1.5 SQL方言(Dialect) 561
18.1.6 使用JNDI数据源 562
18.1.7 配置映射文件 563
18.2 使用注释(Annotations)配置Hibernate 564
18.2.1 Hibernate注释简介 564
18.2.2 安装Hibernate注释 564
18.2.3 使用@Entity注释实体Bean 565
18.2.4 使用@Table注释实体Bean 565
18.2.5 使用@Id注释主键 566
18.2.6 使用@GenericGenerator注释产生主键值 567
18.2.7 使用@Basic和@Transient注释 568
18.2.8 更高级的Hibernate注释 568
18.3 使用注释重新实现Helloworld程序 569
18.3.1 使用注释配置实体Bean 569
18.3.2 在Hibernate配置文件中指定实体Bean的位置 570
18.3.3 使用AnnotationConfiguration类处理annotation.cfg.xml文件 570
18.3.4 通过AnnotationSessionFactory类获得Session对象 571
18.4 小结 572
第19章 Hibernate的会话与O/R映射 573
19.1 会话(Session)的基本应用 573
19.1.1 保存持久化对象 573
19.1.2 判断持久化对象之间的关系 574
19.1.3 装载持久化对象 575
19.1.4 刷新持久化对象 577
19.1.5 更新持久化对象 578
19.1.6 删除持久化对象 579
19.2 建立O/R映射 579
19.2.1 映射主键 579
19.2.2 映射复合主键 580
19.2.3 实例:主键和复合主键的查询和更新 581
19.2.4 映射普通属性 586
19.2.5 建立组件(Component)映射 587
19.2.6 实例:组件映射的应用 588
19.2.7 基于注释的组件映射 592
19.2.8 建立多对一(many-to-one)单向关联关系 593
19.2.9 实例:多对一关系的演示 593
19.2.10 基于注释的多对一关系映射 597
19.2.11 建立一对多(one-to-many)的双向关联关系 598
19.2.12 实例:一对多双向关联的演示 598
19.2.13 基于注释的一对多映射 601
19.2.14 建立基于外键的一对一(one-to-one)的关系映射 602
19.2.15 实例:基于外键的一对一关系演示 603
19.2.16 建立基于主键的一对一的关系映射 606
19.2.17 实例:基于主键的一对一关系映射 607
19.3 小结 610
第20章 Hibernate的查询与更新技术 612
20.1 标准(Criteria)查询API 612
20.1.1 实例:一个简单的例子 612
20.1.2 查询的约束条件 613
20.1.3 对查询结果进行分页 615
20.1.4 实例:实现Web分页功能 617
20.1.5 只获得一个持久化对象 620
20.1.6 对查询结果进行排序 621
20.1.7 多个Criteria之间的关联 621
20.1.8 聚合和分组 622
20.1.9 使用QBE(Query By Example) 624
20.2 HQL和SQL技术 625
20.2.1 实例:使用HQL的第一个例子 625
20.2.2 From子句:简化实体Bean类名 626
20.2.3 Select子句:选择返回属性 628
20.2.4 Where子句:指定条件 629
20.2.5 使用命名参数 630
20.2.6 使用Query进行分页 631
20.2.7 实例:使用HQL实现Web分页功能 631
20.2.8 使用HQL进行排序和分组 632
20.2.9 关联查询 633
20.2.10 聚合函数 635
20.2.11 Update和Delete语句:更新持久化对象 636
20.2.12 Insert语句:插入记录 637
20.2.13 命名查询 638
20.2.14 使用SQL 639
20.3 小结 640
第21章 Hibernate的高级技术 641
21.1 事务管理 641
21.1.1 事务概述 641
21.1.2 事务的隔离等级 642
21.1.3 Hibernate的事务管理 643
21.1.4 基于JDBC的事务管理 643
21.1.5 基于JTA的事务管理 644
21.2 锁(Locking) 644
21.2.1 悲观锁(Pessimistic Locking) 644
21.2.2 乐观锁(Optimistic Locking) 646
21.3 查询缓存(Query Cache) 648
21.4 拦截器和事件 649
21.4.1 拦截器(Interceptors)概述 649
21.4.2 实例:编写一个Hibernate拦截器 649
21.4.3 事件(Events)概述 653
21.4.4 实例:编写和注册事件类 654
21.5 过滤器 656
21.6 小结 657
第4篇 Spring篇
第22章 Spring的Helloworld程序 660
22.1 Spring简介 660
22.1.1 Spring的主要特性 660
22.1.2 Spring的核心技术 661
22.2 在应用程序中使用Spring 662
22.2.1 MyEclipse 6.5对Spring的支持 662
22.2.2 下载和安装Spring 663
22.3 实例:开发一个Helloworld程序 664
22.3.1 编写HelloService接口 664
22.3.2 编写HelloServiceImpl类 664
22.3.3 装配HelloServiceImpl类 665
22.3.4 通过装配Bean的方式获得HelloService对象 665
22.4 小结 666
第23章 反向控制(Ioc)与装配JavaBean 667
23.1 反向控制(Ioc) 667
23.1.1 什么是依赖注入 667
23.1.2 传统解决方案的缺陷 668
23.1.3 用Ioc降低耦合度 669
23.2 手动装配JavaBean 670
23.2.1 装配Bean的方法 670
23.2.2 与Bean相关的接口 671
23.2.3 <bean>标签的常用属性 672
23.2.4 装配普通属性 673
23.2.5 装配集合属性 676
23.2.6 设置属性值为null 680
23.2.7 装配构造方法 680
23.3 自动装配JavaBean 683
23.4 分散配置 685
23.5 定制属性编辑器 687
23.6 小结 690
第24章 Spring中的数据库技术 691
24.1 获得DataSource 691
24.1.1 通过JNDI获得DataSource 691
24.1.2 从第三方的连接池获得DataSource 692
24.1.3 使用DriverManagerDataSource 693
24.2 在Spring中使用JDBC 693
24.2.1 装配JdbcTemplate类 693
24.2.2 向数据库中写数据 694
24.2.3 从数据库中读数据 696
24.2.4 调用存储过程 699
24.3 自增键 700
24.4 异常处理 701
24.5 在Spring中使用Hibernate 702
24.5.1 集成Spring和Hibernate 702
24.5.2 使用HibernateTemplate 703
24.6 小结 705
第25章 Spring的其他高级技术 706
25.1 Spring AOP 706
25.1.1 AOP概述 706
25.1.2 AOP术语简介 707
25.1.3 4种通知(Advice)的作用 708
25.1.4 通过Advisor指定切入点 714
25.1.5 使用控制流切入点 716
25.2 Spring 的事务管理 718
25.2.1 实例:使用程序控制事务 718
25.2.2 声明式事务 720
25.2.3 事务属性的种类 722
25.2.4 设置事务属性 724
25.2.5 设置特定方法的事务属性 725
25.3 实例:建立和访问RMI服务 727
25.4 实例:发送E-mail 729
25.5 调度任务 731
25.6 小结 732
第5篇 综合实例篇
第26章 Struts 2与Hibernate、Spring的整合 734
26.1 整合Struts 2和Hibernate框架 734
26.1.1 整合的思路 734
26.1.2 整合后的系统层次 735
26.1.3 实现数据访问层 735
26.1.4 实现业务逻辑层 737
26.1.5 Struts 2和Hibernate共享实体Bean 739
26.2 整合Spring框架 740
26.2.1 装配数据访问层 740
26.2.2 装配业务逻辑层 742
26.2.3 使用Struts 2的Spring插件 742
26.3 小结 743
第27章 网络硬盘 744
27.1 系统概述 744
27.1.1 系统功能简介 744
27.1.2 系统架构设计 746
27.2 数据库设计 746
27.3 实现持久对象层 748
27.3.1 实现用户实体Bean 749
27.3.2 实现目录实体Bean 750
27.3.3 实现文件实体Bean 751
27.3.4 映射MySQL存储过程 752
27.3.5 配置hibernate.cfg.xml 753
27.4 实现数据访问层 754
27.4.1 实现DAOSupport类 754
27.4.2 实现UserDAO接口和UserDAOImpl类 754
27.4.3 实现DirectoryDAO接口和DirectoryDAOImpl类 755
27.4.4 实现FileDAO接口和FileDAOImpl类 757
27.5 实现业务逻辑层 758
27.5.1 实现UserService接口和UserServiceImpl类 758
27.5.2 实现DirectoryService接口和DirectoryServiceImpl类 760
27.5.3 实现FileService接口和FileServiceImpl类 762
27.5.4 实现服务管理类 764
27.5.5 配置Spring 765
27.6 实现Web表现层 767
27.6.1 实现基础动作类(BaseAction) 768
27.6.2 实现用户登录页面和处理登录的Action类 769
27.6.3 实现注册登录页面和处理注册的Action类 771
27.6.4 实现网络硬盘主页面 771
27.6.5 建立目录 773
27.6.6 实现文件上传 774
27.6.7 实现文件和目录下载 775
27.6.8 使用拦截器控制页面访问权限 779
27.6.9 其他功能的实现 780
27.7 小结 780
第28章 论坛系统 782
28.1 系统功能简介 782
28.2 数据库设计 783
28.3 实现持久对象层 785
28.3.1 实现主题实体Bean 785
28.3.2 实现回复实体Bean 787
28.3.3 配置hibernate.cfg.xml 788
28.4 实现数据访问层 788
28.4.1 实现TopicDAO接口和TopicDAOImpl类 789
28.4.2 实现ReviewDAO接口和ReviewDAOImpl类 790
28.5 实现业务逻辑层 791
28.5.1 实现TopicService接口和TopicServiceImpl类 791
28.5.2 实现ReviewService接口和ReviewServiceImpl类 793
28.5.3 实现服务管理类 795
28.5.4 配置Spring 795
28.6 整合FCKEditor组件 796
28.6.1 安装FCKEditor 796
28.6.2 配置FCKEditor 797
28.6.3 修改FCKEditor自带的Servlet 800
28.6.4 产生FCKEditor的客户端脚本 800
28.7 实现Web表现层 801
28.7.1 浏览论坛的主题列表 801
28.7.2 发布新主题 804
28.7.3 浏览主题和回复内容 805
28.7.4 回复主题 806
28.8 小结 807