前言
Preface本书针对的是Java平台企业版7(Java Platform,Enterprise Edition 7),即Java EE 7,是开发企业应用的实用指南。全书将使用GlassFish服务器开源版(GlassFish Server Open Source Edition)来介绍。
GlassFish服务器开源版是目前业界领先的开源项目和开放社区平台,可用来构建和部署下一代应用和服务。GlassFish服务器开源版由GlassFish项目开源社区研发(https://glassfish.java.net/),是Java EE 7平台规范的第一个兼容实现。这个应用服务器具有轻量级、灵活和开源等特点,使得企业不仅可以充分利用Java EE 7规范引入的诸多新功能,还能通过更快捷、更优化的开发和部署流程扩展其已有功能。本书后面将把GlassFish服务器开源版简称为GlassFish服务器。
本书的读者对象本书面向有兴趣开发和部署Java EE 7应用的程序员,讨论构成Java EE平台的有关技术,另外还会介绍如何开发Java EE组件并部署到Java EE软件开发包(Software Development Kit,SDK)。
阅读须知学习本书之前,应当对Java编程语言有充分的了解。为此,建议大家仔细通读《The Java Tutorials》(http://docs.oracle.com/javase/tutorial/)。
相关文档第2卷会介绍本书(《The Java EE 7 Tutorial》第1卷)未涵盖的Java EE 7技术和主题,包括企业JavaBeans(Enterprise JavaBeans,EJB)、Java持久化、Java消息服务、安全性以及其他一些技术。第2卷的最后还提供了3个案例研究,其中综合使用了多项Java EE 7技术。
GlassFish服务器文档集介绍了部署计划和系统安装的有关内容。GlassFish服务器开源版的相关文档可以从https://glassfish.java.net/docs/得到。
可以在http://docs.oracle.com/javaee/7/api/查阅Java EE 7 API规范,另外Java EE 7 SDK也提供了这个规范。
此外,Java EE规范也很有用,参见http://www.oracle.com/technetwork/java/javaee/tech/。
要在NetBeans集成开发环境(Integrated Development Environment,IDE)创建企业应用,有关信息参见https://netbeans.org/kb/。
要了解GlassFish服务器使用的Java DB数据库,有关信息请访问http://www.oracle.com/technetwork/java/javadb/overview/。
GlassFish Samples项目提供了一组示例应用,展示了诸多Java EE技术。GlassFish Samples与Java EE软件开发包(SDK)捆绑发行,也可以从GlassFish Samples项目网页(https://glassfish-samples.java.net/)获得。
Oracle无障碍计划关于Oracle无障碍承诺的有关信息请访问Oracle无障碍计划网站(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc)。
默认路径和文件名下表描述了本书中使用的默认路径和文件名。
占位变量 描 述 默认值as-install 表示GlassFish服务器或SDK(包含GlassFish服务器)的安装主目录 Solaris操作系统、Linux操作系统和Mac操作系统上的安装目录为:
user's-home-directory/glassfish4/glassfishWindows上的安装目录为:
SystemDrive:glassfish4glassfishas-install-parent 表示GlassFish服务器安装主目录的父目录 Solaris操作系统、Linux操作系统和Mac操作系统上的父目录为:
user's-home-directory/glassfish4Windows上的父目录为:
SystemDrive:glassfish4tut-install 表示安装GlassFish服务器或SDK并运行更新工具(Update Tool)之后Java EE Tutorial的安装主目录 as-install-parent/docs/javaee-tutorialdomain-dir 表示存储一个域的配置文件的目录 as-install/domains/domain1致谢首先要感谢Java EE规范的各位领导者:Linda DeMichiel、Bill Shannon、Emmanuel Bernard、Ed Burns、Shing Wai Chan、Kin-Man Chung、Danny Coward、Nigel Deakin、Rod Johnson、Roger Kitain、Jitendra Kotamraju、Anthony Lai、Bob Lee、Ron Monzillo、Rajiv Mordani、Pete Muir、Paul Parkinson、Santiago Pericas-Geertsen、Marek Potociar、Sivakumar Thyagarajan、Marina Vatkina和Chris Vignola。
另外还要感谢Java EE 7 SDK团队,特别是Snjezana Sevo-Zenzerovic、Adam Leftik、Michael Chen和John Clingan。
Manfred Riem和JavaServer Faces规范领导者提出的建议对于有关JSF技术的各章有很大帮助。
要特别感谢我们的经理Alan Sommerer,感谢他一直以来的支持和影响。
还要感谢Jordan Douglas和Dawn Tyler制作并更新了本书的插图。感谢Edna Elle在工具方面提供了极大的帮助。感谢Sheila Cepero在很多方面帮助我们扫清障碍,使出版能够顺利进行。
最后,我们要向Greg Doench、Elizabeth Ryan、Caroline Senay和Addison-Wesley的制作团队致以最诚挚的谢意,感谢大家审阅我们的初稿,让本书得以顺利出版。
作者简介
埃里克·珍兆科(Eric Jendrock),Oracle的Java EE Tutorial团队负责人,编写了Java Servlet技术以及国际化和本地化有关章节。
里卡多·塞维拉 - 纳瓦罗(Ricardo Cervera-Navarro),编写了资源注入、WebSocket、JSON-P和JAX-RS有关章节,并提供了Java Servlet有关示例。
伊恩·埃文斯(Ian Evans),编写了bean验证、JAX-RS和JAX-WS有关章节。
金姆·哈泽 (Kim Haase),编写了JSF技术和CDI有关章节。
威廉·马基特(William Markito),曾是Oracle平台技术解决方案小组成员,创建开发了多项技术的示例。
目录
译者序
前 言
第一部分 引言
第1章 概述 2
1.1 Java EE 7平台新增特性 3
1.2 Java EE应用模型 3
1.3 分布式多层应用 4
1.3.1 安全 4
1.3.2 Java EE组件 5
1.3.3 Java EE客户端 6
1.3.4 Web组件 7
1.3.5 业务组件 8
1.3.6 企业信息系统层 8
1.4 Java EE容器 9
1.4.1 容器服务 9
1.4.2 容器类型 10
1.5 Web服务支持 11
1.5.1 XML 12
1.5.2 SOAP传输协议 12
1.5.3 WSDL标准格式 12
1.6 Java EE应用装配与部署 12
1.7 开发角色 13
1.7.1 Java EE产品提供商 13
1.7.2 工具提供商 13
1.7.3 应用组件提供商 13
1.7.4 应用装配人员 14
1.7.5 应用部署人员和管理员 14
1.8 Java EE 7 API 15
1.8.1 EJB技术 15
1.8.2 Java Servlet技术 17
1.8.3 JSF技术 18
1.8.4 JSP技术 19
1.8.5 JSP标准标记库 19
1.8.6 Java持久化API 19
1.8.7 Java事务API 20
1.8.8 RESTful Web服务Java API 20
1.8.9 托管bean 20
1.8.10 Java EE 的上下文和依赖注入 20
1.8.11 Java的依赖注入 21
1.8.12 bean验证 21
1.8.13 Java消息服务API 21
1.8.14 Java EE连接器架构 21
1.8.15 JavaMail API 22
1.8.16 Java容器授权契约 22
1.8.17 Java容器认证服务提供者接口 22
1.8.18 WebSocket Java API 22
1.8.19 JSON处理Java API 22
1.8.20 Java EE的并发工具 23
1.8.21 Java平台的批处理应用 23
1.9 Java平台标准版7的Java EE 7 API 23
1.9.1 Java数据库互连API 23
1.9.2 Java命名和目录接口API 23
1.9.3 JavaBeans激活框架 24
1.9.4 XML处理Java API 24
1.9.5 Java XML绑定架构 24
1.9.6 XML Web服务Java API 25
1.9.7 带附件SOAP Java API 25
1.9.8 Java认证和授权服务 25
1.9.9 Java平台的公共注解 25
1.10 GlassFish服务器工具 25
第2章 使用教程示例 27
2.1 必要软件 27
2.1.1 Java EE 7软件开发包 28
2.1.2 Java平台标准版 28
2.1.3 Java EE 7教程组件 28
2.1.4 NetBeans IDE 29
2.1.5 Apache Maven 30
2.2 启动和停止GlassFish服务器 30
2.2.1 使用NetBeans IDE启动GlassFish服务器 30
2.2.2 使用NetBeans IDE停止GlassFish服务器 30
2.2.3 使用命令行启动GlassFish服务器 30
2.2.4 使用命令行停止GlassFish服务器 31
2.3 启动管理控制台 31
2.3.1 使用NetBeans IDE启动管理控制台 31
2.4 启动和停止Java DB服务器 31
2.4.1 使用NetBeans IDE启动数据库服务器 32
2.5 构建示例 32
2.6 教程示例目录结构 32
2.7 教程中的Java EE 7 Maven原型 33
2.7.1 安装教程Maven原型 33
2.8 获取教程最新更新 33
2.8.1 使用NetBeans IDE更新教程 33
2.8.2 使用命令行更新教程 34
2.9 调试Java EE应用 34
2.9.1 使用服务器日志 34
2.9.2 使用调试器 35
第二部分 平台基础知识
第3章 资源创建 38
3.1 资源和JNDI命名 38
3.2 数据源对象和连接池 39
3.3 以管理方式创建资源 40
第4章 注入 41
4.1 资源注入 41
4.2 依赖注入 42
4.3 资源注入和依赖注入的主要区别 43
第5章 打包 44
5.1 打包应用 44
5.2 打包企业bean 46
5.2.1 企业bean打包到EJB JAR模块中 46
5.2.2 企业bean打包到WAR模块中 46
5.3 打包Web归档 47
5.4 打包资源适配器归档 48
第三部分 Web层
第6章 Web应用入门 50
6.1 Web应用 50
6.2 Web应用生命周期 51
6.3 使用JSF技术的Web模块:hello1示例 52
6.3.1 使用NetBeans IDE查看hello1 Web模块 52
6.3.2 打包和部署hello1 Web模块 56
6.3.3 查看已部署的Web模块 56
6.3.4 运行已部署的hello1 Web模块 57
6.3.5 取消部署hello1 Web模块 57
6.4 使用Java Servlet技术的Web模块:hello2示例 58
6.4.1 URL映射到Web组件 58
6.4.2 检查hello2 Web模块 59
6.4.3 运行hello2示例 60
6.5 配置Web应用 61
6.5.1 设置上下文参数 61
6.5.2 声明欢迎文件 62
6.5.3 将错误映射到错误屏幕 63
6.5.4 声明资源引用 64
6.6 关于Web应用的更多信息 65
第7章 JSF技术 66
7.1 什么是JSF应用 67
7.2 JSF技术优势 68
7.3 一个简单的JSF应用 68
7.4 用户界面组件模型 70
7.4.1 用户界面组件类 70
7.4.2 组件呈现模型 72
7.4.3 转换模型 72
7.4.4 事件和监听器模型 73
7.4.5 验证模型 74
7.5 导航模型 74
7.6 JSF应用的生命周期 77
7.6.1 JSF生命周期概述 77
7.6.2 恢复视图阶段 79
7.6.3 应用请求值阶段 80
7.6.4 处理验证阶段 80
7.6.5 更新模型值阶段 80
7.6.6 调用应用阶段 81
7.6.7 呈现响应阶段 81
7.7 部分处理和部分呈现 81
7.8 关于JSF技术的更多信息 82
第8章 Facelets介绍 83
8.1 什么是Facelets 83
8.2 Facelets应用的生命周期 85
8.3 开发一个简单的Facelets应用:guessnumber-jsf示例应用 85
8.3.1 创建Facelets应用 86
8.3.2 配置应用 89
8.3.3 运行guessnumber-jsf Facelets示例 90
8.4 使用Facelets模板 91
8.5 复合组件 93
8.6 Web资源 95
8.7 可重定位资源 96
8.8 资源库契约 96
8.8.1 hello1-rlc示例应用 97
8.9 HTML5友好的标记 99
8.9.1 使用直通元素 100
8.9.2 使用直通属性 101
8.9.3 reservation示例应用 102
第9章 表达式语言 105
9.1 EL概述 105
9.2 直接和延迟计算语法 106
9.2.1 直接计算 106
9.2.2 延迟计算 107
9.3 值表达式和方法表达式 107
9.3.1 值表达式 107
9.3.2 方法表达式 111
9.3.3 lambda表达式 112
9.4 集合对象操作 112
9.5 操作符 114
9.6 保留字 115
9.7 EL表达式示例 115
9.8 关于表达式语言的更多信息 116
第10章 在Web页面中使用JSF技术 117
10.1 建立页面 117
10.2 使用HTML标记库标记为页面增加组件 118
10.2.1 常用组件标记属性 120
10.2.2 增加HTML Head和Body标记 122
10.2.3 增加表单组件 123
10.2.4 使用文本组件 123
10.2.5 使用命令组件标记完成动作和导航 127
10.2.6 使用h:graphicImage标记增加图形图像 128
10.2.7 使用h:panelGrid和h:panelGroup标记放置组件 129
10.2.8 显示选择单个值的组件 131
10.2.9 显示选择多个值的组件 132
10.2.10 使用f:selectItem和f:selectItems标记 133
10.2.11 显示选择组件的结果 135
10.2.12 使用数据绑定表组件 135
10.2.13 使用h:message和h:messages标记显示错误消息 138
10.2.14 使用h:button和h:link标记创建书签式URL 139
10.2.15 使用视图参数配置书签式URL 139
10.2.16 bookmarks示例应用 140
10.2.17 使用h:outputScript和h:outputStylesheet标记实现资源重定位 141
10.3 使用核心标记 143
第11章 使用转换器、监听器和验证器 146
11.1 使用标准转换器 146
11.1.1 转换组件值 147
11.1.2 使用DateTimeConverter 148
11.1.3 使用NumberConverter 149
11.2 在组件上注册监听器 150
11.2.1 在组件上注册值改变监听器 151
11.2.2 在组件上注册动作监听器 151
11.3 使用标准验证器 153
11.3.1 验证组件值 154
11.3.2 使用验证器标记 154
11.4 引用托管bean方法 155
11.4.1 引用完成导航的方法 156
11.4.2 引用处理动作事件的方法 156
11.4.3 引用完成验证的方法 156
11.4.4 引用处理值改变事件的方法 157
第12章 使用JSF技术开发应用 158
12.1 JSF技术中的托管bean 158
12.1.1 创建托管bean 158
12.1.2 使用EL引用托管bean 159
12.2 编写bean属性 160
12.2.1 编写绑定到组件值的属性 161
12.2.2 编写绑定到组件实例的属性 166
12.2.3 编写绑定到转换器、监听器或验证器的属性 167
12.3 编写托管bean方法 168
12.3.1 编写处理导航的方法 168
12.3.2 编写处理动作事件的方法 169
12.3.3 编写完成验证的方法 170
12.3.4 编写处理值改变事件的方法 170
第13章 结合使用Ajax和JSF技术 172
13.1 Ajax概述 173
13.2 结合JSF技术使用Ajax功能 173
13.3 结合Facelets使用Ajax 174
13.3.1 使用f:ajax标记 174
13.4 发送Ajax请求 175
13.4.1 使用event属性 175
13.4.2 使用execute属性 176
13.4.3 使用immediate属性 176
13.4.4 使用listener属性 177
13.5 在客户端监视事件 177
13.6 处理错误 177
13.7 接收Ajax响应 178
13.8 Ajax请求生命周期 179
13.9 组件分组 179
13.10 加载JavaScript资源 180
13.10.1 在Facelets应用中使用 JavaScript API 180
13.10.2 bean类中使用@Resource-Dependency注解 181
13.11 ajaxguessnumber示例应用 181
13.11.1 ajaxguessnumber源文件 181
13.11.2 运行ajaxguessnumber示例 183
13.12 关于JSF技术中Ajax的更多信息 184
第14章 复合组件:高级主题与示例 185
14.1 复合组件的属性 185
14.2 调用托管bean 186
14.3 验证复合组件值 186
14.4 compositecomponentexample
???示例应用 187
14.4.1 复合组件文件 187
14.4.2 使用页面 188
14.4.3 托管bean 189
14.4.4 运行compositecomponen-texample示例 189
第15章 创建定制UI组件和其他定制对象 191
15.1 确定是否需要定制组件或呈现器 192
15.1.1 何时使用定制组件 192
15.1.2 何时使用定制呈现器 193
15.1.3 组件、呈现器和标记组合 194
15.2 了解图像地图示例 195
15.2.1 为什么使用JSF技术实现图像地图 195
15.2.2 了解呈现的HTML 195
15.2.3 了解Facelets页面 196
以下为对购买帮助不大的评价