Struts 2框架是Struts 1.X的替代版本,Struts 2框架整合了Struts 1.X框架和WebWork框架的优点。相对Struts 1.X,Struts 2已经有了非常大的改变,去掉了ActionForm,降低了框架组件之间的耦合性,Struts 2的Action只是普通的Java类(POJO),给模块测试工作带来了极大的方便。Struts 2提供了强大的整合能力,支持多种返回结果类型,改进了Struts 1.X的标签库,引入OGNL表达式和值栈的概念,给开发者带来了更好的体验。
本书结合Struts 2框架的技术特点,从最基础的框架处理机制讲起。介绍了Struts 2框架的核心组件和核心处理机制,并介绍了拦截器、国际化、输入校验、类型转换等Struts 2关键技术,同时介绍了如何在Struts 2框架中整合其他开源技术。
本书非常适合有过Struts 1.X和WebWork开发经验的读者,以及Java Web开发的初学者,对于Web高级开发者,也是一本非常好的参考书。
目 录
第一篇 Struts 2零基础详解
第1章 Struts 2概述 2
Struts 1是一个开放源码的框架,用来开发Java Web应用。Struts 1最初由程序员Craig R. McClanahan发布,Apache软件基金会于2002年接手该项目。Struts 1提供了一个极好的框架,可以容易地整合JSP、Servlet和Java代码。随着Java的发展,Struts 1已经成为MVC设计模式的常用架构,并被广大的程序员所接受,在Web开发应用中获得了巨大成功,成为使用最早、应用最广的MVC架构。
1.1 MVC介绍 3
1.1.1 Web技术发展 4
1.1.2 MVC设计模式 6
1.1.3 MVC的处理过程 7
1.1.4 MVC的优点 8
1.1.5 MVC的适用范围 8
1.1.6 Model 1和Model 2体系介绍 9
1.2 Struts 1简介 10
1.2.1 Struts 1框架介绍 10
1.2.2 web.xml配置文件 11
1.2.3 struts-config.xml配置文件 12
1.2.4 Action和ActionForm 12
1.2.5 Struts 1处理过程 13
1.2.6 Struts 1的优点 14
1.2.7 Struts 1的缺点 14
1.3 WebWork简介 15
1.3.1 WebWork框架 15
1.3.2 WebWork的特性 18
1.4 Struts 2概述 18
1.4.1 Struts 2框架 19
1.4.2 Struts 2配置文件 20
1.4.3 Struts 2控制器 24
1.4.4 Struts 2标签库 26
1.4.5 Struts 2与Struts 1比较 28
1.4.6 Struts 2与WebWork比较 29
1.5 为什么使用Struts 2 30
1.6 本章小结 30
第2章 Struts 2的HelloWorld 32
HelloWorld例程已经成为学习软件开发技术的默认入门标准步骤,笔者也不能免俗,在本章内容中,将会引导读者逐步进入Struts 2的开发世界。本章将详细介绍Struts 2的下载安装、开发环境的搭建和使用,并且以一个HelloWorld例程,体验Struts 2带来的设计风格。为了避免读者对枯燥乏味的技术描述产生厌倦情绪,笔者将一步一步引导读者学习Struts 2,希望能给读者一个轻松愉快的学习氛围。
2.1 搭建Struts开发环境 33
2.1.1 安装JDK 33
2.1.2 安装Eclipse 35
2.1.3 安装Tomcat 36
2.1.4 安装Struts 2 37
2.1.5 Eclipse安装Struts 2 40
2.2 一个简单的HelloWorld 43
2.2.1 配置web.xml文件 43
2.2.2 配置struts.xml文件 44
2.2.3 Action业务控制器 45
2.2.4 视图资源 46
2.2.5 运行HelloWorld 48
2.2.6 HelloWorld小结 49
2.3 Struts 2特性演示 49
2.3.1 基本实现 49
2.3.2 标签库 54
2.3.3 改进Action 56
2.3.4 国际化 58
2.3.5 数据校验:使用validate()方法校验 62
2.3.6 数据校验:使用框架校验 64
2.4 本章小结 66
第3章 Struts 2核心剖析 67
上一章介绍了一个HelloWorld应用和一个用户注册应用,读者通过自己编写代码,对Struts 2有了一个基本的了解。在介绍用户注册应用时,突出展示了Struts 2的特点,读者可能对有些方面是比较迷惑的。那么Struts 2是如何工作的?配置文件、Action又有哪些具体的要求呢?笔者在本章里面将试图说明这些问题。通过本章的学习,读者会对Struts 2有更深层次的理解。
3.1 Struts 2工作流程 68
3.1.1 核心控制器FilterDispatcher 68
3.1.2 业务控制器Action 73
3.1.3 业务模型组件 73
3.1.4 视图组件 76
3.2 Struts 2配置文件 76
3.2.1 配置web.xml文件 77
3.2.2 配置struts.xml文件 81
3.2.3 常量配置 89
3.2.4 包配置 92
3.2.5 命名空间配置 94
3.2.6 包含配置 96
3.2.7 Bean配置 99
3.2.8 拦截器配置 101
3.2.9 配置struts.properties文件 103
3.2.10 配置通配符 106
3.2.11 Struts 2的零配置 107
3.3 Struts 2的Action 109
3.3.1 Action实现类 109
3.3.2 实例验证:Action属性和用户参数之间的关系 114
3.3.3 Action访问ActionContext 118
3.3.4 值栈(ValueStack) 122
3.3.5 Action直接访问Servlet API 127
3.3.6 Action的配置 131
3.3.7 Action的动态方法调用 134
3.3.8 通配符配置 139
3.4 处理结果 145
3.4.1 处理结果流程 145
3.4.2 配置result 146
3.4.3 result的类型 147
3.4.4 action-chain类型示例 150
3.4.5 Freemarker类型示例 155
3.4.6 redirect类型示例 155
3.4.7 redirect-action类型示例 156
3.4.8 Stream类型示例 157
3.4.9 使用通配符动态配置result 158
3.4.10 使用OGNL动态配置result 161
3.5 模型驱动 164
3.5.1 模型驱动的意义 164
3.5.2 模型驱动示例 167
3.6 异常处理 172
3.6.1 Java的异常处理 172
3.6.2 Struts 2框架的异常处理 175
3.6.3 异常的配置 177
3.7 如何提高Struts 2性能 181
3.8 支持Struts 2框架的应用服务器 181
3.9 本章小结 182
第二篇 Struts 2框架技术
第4章 国际化 184
互联网的出现,给整个世界范围内的交流和沟通提供了方便快捷的方式,人们之间开始用电子邮件来代替传统的纸质信件,各种各样的网站和工具使得人们在不同的国度或者区域成为交谈的对象。
而这些技术都离不开软件技术的发展,一个软件或者系统要让全世界用户都能接受和使用成了广大软件公司梦寐以求的事情。由于世界各国和地区使用的语言和其他表达形式的不同,制约了一个单一语种界面的软件的应用,所以,软件的国际化已经成为了软件开发技术中重要的一个部分。
4.1 软件的国际化 185
4.2 Java的国际化支持 186
4.2.1 使用资源文件 189
4.2.2 使用资源类文件 191
4.2.3 MessageFormat类 193
4.3 Struts 2的国际化支持 197
4.3.1 配置资源文件 197
4.3.2 Struts 2国际化应用 199
4.3.3 使用占位符 204
4.3.4 包范围资源文件 208
4.3.5 Action范围资源文件 210
4.3.6 临时资源文件 211
4.3.7 加载资源文件的顺序 213
4.4 动态访问国际化资源文件 214
4.4.1 动态访问国际化资源文件原理 214
4.4.2 建立资源文件和配置文件 215
4.4.3 建立Action和JSP 216
4.4.4 动态访问资源文件示例 217
4.5 Eclipse编写资源文件的插件 218
4.6 本章小结 218
第5章 Struts 2进阶——拦截器 219
拦截器(Interceptor)是Struts 2的核心组成部分。很多功能(Feature)都是构建在拦截器基础之上的,例如文件的上传和下载、国际化、转换器和数据校验等,Struts 2利用内建的拦截器,完成了框架内的大部分操作。
在Struts 2文档中对拦截器的解释为——拦截器是动态拦截Action调用的对象。它提供了一种机制,使开发者可以定义一个特定的功能模块,这个模块可以在Action执行之前或者之后运行,也可以在一个Action执行之前阻止Action执行。同时也提供了一种可以提取Action中可重用的部分的方式。
5.1 拦截器介绍 220
5.1.1 AOP介绍 220
5.1.2 拦截的实现原理 223
5.1.3 拦截的意义 225
5.2 Struts 2拦截器 226
5.2.1 Struts 2拦截器原理 226
5.2.2 HelloWorld拦截器 228
5.2.3 定义拦截器 231
5.2.4 使用拦截器 234
5.2.5 默认拦截器 235
5.3 自定义拦截器 238
5.3.1 自定义拦截器实现类 238
5.3.2 使用自定义拦截器 240
5.4 拦截器深度剖析 243
5.4.1 拦截器的方法过滤 243
5.4.2 拦截器的执行顺序 248
5.4.3 拦截结果监听器 251
5.4.4 设置拦截器栈中拦截器参数 254
5.4.5 Struts 2框架的系统拦截器 256
5.5 拦截器应用示例 261
5.5.1 权限拦截器 261
5.5.2 配置拦截器 263
5.5.3 业务控制器Action 265
5.5.4 JSP视图 266
5.5.5 运行示例 267
5.6 本章小结 268
第6章 Struts 2的类型转换 270
在MVC模型中,视图层一般用于用户输入参数或者输出数据信息,而控制层将视图层和模型层联系起来,将视图层输入的数据传递给模型层,或者是将模型层处理结果返回给视图层。数据在三个层间传递的时候,会涉及数据类型的转换,因为Java是强制类型的语言,所以使用的变量和属性必须强制指定其类型。
一般Web应用中,视图层用户输入的都是字符串,例如生日、金额等数据都是以字符串类型输入的,业务逻辑模块要处理用户输入的数据,就必须对输入的字符串进行转换,转换为相应的Java类型。
6.1 类型转换 271
6.2 编写一个类型转换器 274
6.2.1 类型转换需求 274
6.2.2 编写自定义类型转换器 276
6.2.3 视图资源文件 277
6.2.4 运行示例 278
6.3 自定义类型转换器 278
6.3.1 基于OGNL的类型转换器 278
6.3.2 基于Struts 2的类型转换器 279
6.3.3 注册自定义类型转换器 281
6.3.4 数组属性类型转换器 284
6.3.5 集合属性类型转换器 287
6.4 使用Struts 2的类型转换 289
6.4.1 Struts 2系统内建的类型转换器 290
6.4.2 项目应用中常见的类型转换 290
6.4.3 使用OGNL表达式 292
6.4.4 使用集合类型属性 294
6.4.5 使用Set类型属性 297
6.5 类型转换中的异常处理 300
6.5.1 类型转换异常拦截器 300
6.5.2 一个简单的类型转换异常处理 301
6.5.3 改进类型转换异常显示信息 303
6.5.4 处理复合类型转换异常 304
6.6 本章小结 305
第7章 输入校验 307
几乎每一个Web开发者都会遇到输入校验的问题,输入校验直接影响了系统的抗破坏性能和稳定性。由于采用B/S结构,用户使用浏览器同系统进行交互,由于浏览器的限制,不能保证用户按照开发者的意图来输入正确的数据。而往往有的用户喜欢恶意地输入非法数据进行测试和破坏,所以必须对用户输入的信息进行输入校验。良好的输入校验功能是一个成熟项目应用的必备条件。
实际上,输入校验往往同类型转换联系在一起,都是对用户输入数据的规范化检查和处理,Struts 2框架为开发者的输入校验提供了良好的支持。
7.1 输入校验介绍 308
7.1.1 输入校验的原因 308
7.1.2 使用JavaScript完成客户端校验 309
7.2 使用validate方法进行输入校验 311
7.2.1 validate()方法输入校验 311
7.2.2 validateXxx()方法输入校验 316
7.2.3 输入校验流程 318
7.3 基于框架的输入校验 318
7.3.1 使用字段校验的输入校验 319
7.3.2 使用客户端的输入校验 321
7.3.3 使用非字段校验的输入校验 324
7.3.4 输入校验的国际化信息 326
7.3.5 校验的搜索顺序 329
7.4 AJAX输入校验 333
7.4.1 配置AJAX环境 334
7.4.2 建立业务控制器 336
7.4.3 建立校验规则文件 336
7.4.4 建立JSP视图 337
7.4.5 运行AJAX校验示例 338
7.5 复合类型属性的输入校验 338
7.5.1 复合属性的校验 339
7.5.2 集合属性的校验 342
7.6 Struts 2框架的校验器 343
7.6.1 内建校验器 343
7.6.2 类型转换校验器 345
7.6.3 日期校验器 345
7.6.4 浮点数值校验器 346
7.6.5 邮件地址校验器 346
7.6.6 表达式校验器 347
7.6.7 字段表达式校验器 347
7.6.8 整数校验器 348
7.6.9 正则表达式校验器 348
7.6.10 必填校验器 349
7.6.11 必填字符串校验器 349
7.6.12 字符串长度校验器 350
7.6.13 网址校验器 350
7.6.14 visitor校验器 351
7.7 本章小结 351
第8章 OGNL 352
OGNL是Object GraphicNavigation Language(对象图导航语言)的缩写,OGNL是一个开源项目,读者可以访问其官方站点www.ognl.org以获得源代码和相关资料。OGNL是一种功能强大的EL(Expression Language,表达式语言),可以通过简单的表达式来访问Java对象中的属性。
OGNL先在WebWork项目中得到应用,也是Struts 2框架视图默认的表达式语言,可以说,OGNL表达式是Struts 2框架的特点之一。
8.1 OGNL基础知识 353
8.1.1 OGNL的优势 353
8.1.2 OGNL语法 353
8.1.3 一个使用OGNL的示例 354
8.2 Struts 2的OGNL 356
8.2.1 Struts 2的OGNL表达式 357
8.2.2 OGNL的集合操作 358
8.2.3 Lambda表达式 359
8.3 Struts 2中使用OGNL 360
8.3.1 业务控制器 360
8.3.2 JSP视图 361
8.3.3 运行示例 362
8.3.4 OGNL中的#、%和$符号 363
8.4 本章小结 364
第9章 Struts 2标签库 365
在早期的Web开发中,JSP的视图控制和显示技术主要依靠Java脚本来实现,这样一来,JSP页面重新嵌入了大量的Java脚本代码,给开发带来了极大的不便。
从JSP 1.1规范以后,JSP增加了自定义标签库的支持。标签库是一种组件技术,通过标签库,可以将复杂的Java脚本代码封装在组件中,开发者只需要使用简单的代码就可以实现复杂的Java脚本功能。提供了Java脚本的复用性,提高了开发者的开发效率。
Struts 2标签库相对Struts 1.x进行了巨大的改进,支持OGNL表达式,不再依赖于任何表现层技术。
9.1 Struts 2标签库概述 366
9.1.1 标签库简介 366
9.1.2 Struts 2标签库组成 367
9.1.3 Struts 2标签库的使用 368
9.1.4 Struts 2同Struts 1标签库的比较 370
9.2 控制标签 370
9.2.1 if/elseif/else标签 371
9.2.2 iterator标签 372
9.2.3 append标签 375
9.2.4 generator标签 377
9.2.5 merge标签 379
9.2.6 subset标签 381
9.2.7 sort标签 383
9.3 数据标签 385
9.3.1 action标签 386
9.3.2 bean标签 388
9.3.3 date标签 390
9.3.4 debug标签 393
9.3.5 include标签 393
9.3.6 param标签 395
9.3.7 push标签 395
9.3.8 set标签 396
9.3.9 url标签 397
9.3.10 property标签 399
9.4 主题与模板 399
9.4.1 主题 399
9.4.2 模板 400
9.5 表单标签 401
9.5.1 表单标签通用属性 401
9.5.2 checkbox标签 403
9.5.3 checkboxlist标签 404
9.5.4 combobox标签 406
9.5.5 doubleselect标签 407
9.5.6 datetimepicker标签 409
9.5.7 head标签 411
9.5.8 file标签 411
9.5.9 hidden标签 412
9.5.10 select标签 412
9.5.11 optiontransferselect标签 414
9.5.12 radio标签 415
9.5.13 optgroup标签 416
9.5.14 token标签 417
9.5.15 textarea标签 418
9.5.16 updownselct标签 419
9.5.17 password标签 420
9.5.18 textfield标签 420
9.6 非表单标签 420
9.6.1 actionerror和actionmessage标签 421
9.6.2 component标签 422
9.6.3 tree和treenode标签 423
9.7 本章小结 424
第10章 AJAX技术支持 425
AJAX技术是目前流行的技术,备受开发者和相关人员的关注。传统B/S结构的Web应用,都是采用了请求-等待-响应的交互流程,同C/S(客户端/服务器端)的应用相比较,存在着许多不足。AJAX技术的出现,改变了B/S结构应用的用户体验,该技术使用异步方式同服务器端进行交互,用户不用等待服务器的响应,极大地改善了用户体验。
Struts 1.x并不支持AJAX技术,而Struts 2框架提供了完善而简洁的AJAX支持,Struts 2框架提供了ajax主题的标签库,本章笔者将会介绍相关内容。
10.1 AJAX介绍 426
10.1.1 为什么使用AJAX 426
10.1.2 AJAX技术 427
10.1.3 常见的浏览器端AJAX框架 429
10.1.4 常见的服务器端AJAX框架 431
10.2 Struts 2的AJAX支持 432
10.2.1 ajax主题 433
10.2.2 AJAX输入校验 435
10.2.3 div标签 439
10.2.4 a标签 444
10.2.5 submit标签 446
10.2.6 autocompleter标签 448
10.2.7 tabbedPanel标签 452
10.2.8 AJAX表单 455
10.2.9 widgets 456
10.3 本章小结 458
第11章 文件的上传与下载 459
目前大部分Web应用都需要用到文件的上传与下载功能。最简单的文件上传例如修改用户自定义显示的图标,以及复杂的办公文档处理,都需要系统提供文件的上传服务。Struts 2框架中内置了文件上传组件,开发者可以很容易地开发出文件上传功能。笔者在本章将介绍Struts 2框架提供的文件上传与下载控制功能。
11.1 Struts 2框架的文件上传 460
11.1.1 Common-fileUpload组件 460
11.1.2 文件上传的JSP 461
11.1.3 文件上传的Action 462
11.1.4 配置文件和success视图 464
11.1.5 运行文件上传示例 465
11.1.6 上传文件的过滤 465
11.1.7 文件上传的常量 467
11.2 多个文件上传 468
11.2.1 使用数组上传多个文件 468
11.2.2 使用List上传多个文件 472
11.3 Struts 2控制文件下载 475
11.3.1 在配置文件中指定下载资源 475
11.3.2 在Action中指定下载资源 476
11.3.3 文件下载的权限控制 478
11.4 本章小结 480
第三篇 Struts 2框架中整合其他技术
第12章 使用FreeMarker技术 482
FreeMarker是一个模板引擎,一个基于文本的模板输出工具(生成任意的HTML表单代码)。它是一个Java package,面向Java程序员的class library。它本身并不是针对最终用户的应用,而是允许程序员将其嵌入到其产品中。
12.1 FreeMarker介绍 483
12.1.1 FreeMarker基础 483
12.1.2 FreeMarker简单示例 483
12.2 Struts 2中使用FreeMarker 485
12.2.1 FreeMarker使用Struts 2标签库 485
12.2.2 FreeMarker访问Servlet和JSP对象 487
12.2.3 使用FreeMarker示例 488
12.3 本章小结 490
第13章 整合Spring 491
Spring和Struts一样都是一种轻量级的J2EE应用程序框架,Struts注重的是降低表现和逻辑耦合程度,主要是把业务逻辑和表现层分开,但是不涉及业务层与持久层的关联。Spring主要是对业务层的细化,也就是更深层次地降低了耦合程度,核心是一个轻量级的容器container,实现了IoC模式的容器。Spring的目标是实现一个全方位的整合框架。
13.1 Spring介绍 492
13.1.1 IoC和DI 492
13.1.2 Spring优点 495
13.2 Struts 2整合Spring 495
13.2.1 整合步骤 495
13.2.2 整合原理 497
13.3 整合开发示例 498
13.4 本章小结 501
第14章 整合JSF 502
JavaServer Faces(JSF)是一种刚刚发展起来的技术,是用来构建Web应用程序的新标准Java框架。它提供了一种以组件为中心来开发Java Web用户界面的方法,从而简化了开发过程,提高了开发效率。JavaServer Faces还引起了广大Java/Web开发人员的兴趣。“企业开发人员”和Web设计人员将发现JSF开发可以简单到只需将用户界面(UI)组件拖放到页面上,而“系统开发人员”将发现丰富而强健的JSF API为他们提供了无与伦比的功能和编程灵活性。JSF还通过将良好构建的模型-视图-控制器(MVC)设计模式集成到它的体系结构中,确保了应用程序具有更高的可维护性。最后,由于JSF是通过Java Community Process(JCP)开发的一种Java标准,因此开发工具供应者完全能够为JavaServer Faces提供易于使用的、高效的可视化开发环境。
14.1 JSF介绍 503
14.1.1 JSF体系结构 503
14.1.2 JSF同Struts 2的比较 504
14.1.3 MyFaces 504
14.2 Struts 2整合MyFaces 505
14.2.1 整合步骤 505
14.2.2 整合原理 506
14.3 整合MyFaces示例 508
14.3.1 JSP视图 508
14.3.2 配置文件 511
14.3.3 业务控制器Action 512
14.3.4 运行示例 515
14.4 本章小结 515
第15章 Struts 2访问MySQL数据库 516
MySQL数据库是一个真正的多用户、多线程SQL数据库服务器,它是一个客户机/服务器结构的实现。MySQL是现在流行的关系数据库中的一种,相比其他的数据库管理系统(DBMS)来说,MySQL具有小巧、功能齐全、查询迅捷等优点。MySQL主要目标是快速、健壮和易用。关键它是免费的,可以在网上免费下载到,并可免费使用。MySQL对于一般中小型甚至大型应用都能够胜任。
Struts 2框架访问MySQL数据库非常方便,笔者在本章将会详细介绍如何在Struts 2框架应用中访问MySQL数据库。
15.1 MySQL下载和安装 517
15.1.1 下载MySQL数据库 517
15.1.2 安装MySQL数据库服务器 517
15.1.3 安装MySQL数据库的JDBC驱动 519
15.2 访问MySQL数据库示例 519
15.2.1 创建一个数据库 519
15.2.2 建立JDBC连接 520
15.2.3 使用Tomcat数据源 522
15.2.4 建立一个数据库连接组件 524
15.3 本章小结 525
第16章 整合Log4j 526
在强调组件重用性的今天,除了自己从头到尾开发一个可重用的日志操作工具外,Apache为开发者提供了一个强有力的日志操作包Log4j。本章将向读者介绍Log4j的简单用法,以供在Struts 2应用中使用。
16.1 Log4j概述 527
16.2 配置和使用Log4j 527
16.2.1 一个简单的例子 527
16.2.2 Log4j的配置文件 530
16.2.3 在代码中使用记录日志 533
16.3 本章小结 533
第17章 整合ant 534
Java应用开发要经历编译、部署、测试等步骤。一般来说这些步骤需要借助特定的集成开发工具来实现。而不同的开发者选择的开发工具不尽相同,这就造成了应用在不同环境下迁移共享的困难。Apache的ant工具将这些步骤独立出来用定义良好的XML文件作为脚本描述,使得后续的开发者在针对某个应用的修改后能够重用定义好的编译、部署、测试等过程。本章通过HelloWorld实例和简单的Web应用结构实例演示了ant的基本使用方法和ant的buildfile的结构与语法内容,同时简单地介绍了在目前流行的两款Java集成开发工具中使用ant的方法。
17.1 概述 535
17.2 安装运行 536
17.2.1 ant安装配置 536
17.2.2 HelloWorld实例 536
17.2.3 Web应用结构 537
17.2.4 ant运行命令 538
17.3 build.xml的基本结构 539
17.4 ant任务 541
17.4.1 常用内置任务 541
17.4.2 扩展可选任务 543
17.5 完整的build.xml例子 544
17.6 深入build.xml 546
17.6.1 project 546
17.6.2 target 547
17.6.3 task 547
17.6.4 properties 548
17.6.5 token filters 548
17.6.6 path-like structure 549
17.6.7 命令行变量 550
17.6.8 references 550
17.7 Eclipse 3.x中使用ant 551
17.8 JBuilder 2005中使用ant 553
17.9 本章小结 555
第18章 整合JUnit 556
测试是Java应用开发过程中非常重要的一个步骤,JUnit为Java应用的规范化测试提供了有力的支持。结合ant还可以方便地实现可复用的自动化测试过程。
本章通过HelloWorld实例和简单的Struts 2应用测试实例演示了JUnit的基本使用方法,同时简单地介绍了在目前流行的两款Java集成开发工具中使用JUnit的方法。
18.1 JUnit概述 557
18.2 JUnit安装运行 557
18.2.1 安装配置 557
18.2.2 基本测试HelloWorld 557
18.2.3 JUnit的3种结果界面 558
18.3 测试Struts 2应用 560
18.3.1 Struts 2测试概述 560
18.3.2 创建测试类 560
18.4 在Eclipse 3.x中执行测试 562
18.5 在JBuilder 2005中执行测试 563
18.6 本章小结 565
第19章 整合Hibernate 566
Struts 2作为一款优秀的基于MVC的Java Web框架,已经得到了广大的企业和Java Web开发人员的认可,成为Java Web开发的首选框架。Struts 2框架在控制器层和视图层提供了丰富的支持,对于模型层,并没有作出过多的约束,这也使得开发人员在模型层的处理上有了更多的自由。本章将介绍Struts 2框架与另一种流行的轻量级对象持久化技术Hibernate的结合。
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了轻量级的对象封装,使Java程序员可以随心所欲地使用对象编程思维来操纵数据库。Hibernate是现在最流行的轻量级持久化框架之一,Struts 2作为一款优秀的基于MVC的Java Web框架,已经得到了广大企业和Java Web开发人员的认可,在应用开发中结合Struts 2和Hibernate可谓强强联合。本章首先简要介绍Hibernate框架的基础知识,然后介绍了Struts 2与Hibernate在实际开发中的结合应用。
19.1 Hibernate简介 567
19.1.1 Hibernate Hello World应用 567
19.1.2 理解Hibernate架构 571
19.1.3 Hibernate的核心接口 572
19.1.4 Hiebernate基本配置 573
19.1.5 对象标识符号 575
19.1.6 Hibernate映射类型 575
19.1.7 高级映射 576
19.1.8 Hibernate检索方式 580
19.2 Struts 2整合Hibernate 581
19.2.1 下载安装Hibernate 581
19.2.2 建立示例数据库表 581
19.2.3 hibernate.cfg.xml配置文件 582
19.2.4 Hibernate相关代码 582
19.2.5 DAO代码 584
19.2.6 Action代码 584
19.2.7 相关视图 585
19.2.8 运行示例 586
19.3 本章小结 586
第四篇 Struts 2实例验证
第20章 一个示例论坛应用 588
前面笔者已经对Struts 2框架技术进行了深入的讲解,相信读者通过前面章节的阅读和示例练习,对Struts 2框架应该有了深刻的理解。本章笔者将会展示一个使用Struts 2框架开发的论坛示例。
该论坛示例除了使用Struts 2框架技术,还需要整合JSF技术、Spring框架技术和AJAX技术,另外还需要用到MySQL数据库服务器。
读者通过该论坛示例的学习,不但可以将前面学到的知识加以巩固,更加重要的是会了解如何设计一个应用项目、如何建模以及开发团队或者是软件公司各个角色之间如何分工和合作。
20.1 项目需求与系统架构 589
20.1.1 项目需求 589
20.1.2 系统架构 589
20.2 数据库设计 591
20.2.1 数据模型 591
20.2.2 建立数据库表 592
20.3 建立开发环境 593
20.3.1 配置Tomcat数据源 593
20.3.2 web.xml配置文件 594
20.3.3 applicationContext.xml配置文件 595
20.3.4 其他配置文件 596
20.4 建立数据库连接组件 596
20.5 建立业务实体对象 598
20.6 建立数据库访问组件 600
20.7 建立业务处理模块 608
20.7.1 权限检查模块 608
20.7.2 发表文章模块 609
20.7.3 文章列表导航模块 612
20.7.4 显示文章内容模块 612
20.7.5 用户登录模块 613
20.7.6 用户注册模块 615
20.8 建立业务控制器 615
20.8.1 文章处理业务控制器 615
20.8.2 用户注册业务控制器 617
20.8.3 用户登录业务控制器 619
20.9 国际化和输入校验 620
20.9.1 国际化 620
20.9.2 输入校验规则文件 621
20.10 建立视图 623
20.10.1 论坛列表视图 623
20.10.2 用户登录视图 625
20.10.3 用户注册视图 625
20.10.4 发表文章视图 626
20.10.5 显示文章视图 627
20.11 Struts 2配置文件 627
20.12 运行示例论坛 629
20.13 本章小结 630
Struts 2框架作为Struts 1.X框架的替代技术,相对Struts 1.X来说,有着本质上的改变,Struts 2框架是从WebWork框架发展而来的。Struts 1.X已经成为Java Web开发中应用最广泛的MVC框架,被广大的程序员所接受。随着Web技术的发展,Struts 1.X越来越难以适应,主要体现在支持视图技术单一、难于测试性、庞大的配置文件和大量的ActionForm类,给项目开发的管理维护带来了困难。
Struts 2框架技术整合了Struts 1.X和WebWork的优点,Struts 2框架最大的特点就是其简单性,引入了OGNL表达式和值栈的概念,可以使开发者使用简单的代码实现复杂的数据访问;Action实现类就是一个标准的Java类(POJO),这使得测试工作变得简单。同时,Struts 2框架取消了ActionForm,支持多种返回类型和Ajax技术,简化了同其他技术的整合。从Apache官方的宣传来看,Struts 2不久将会替代Struts 1.X。
目前,国内关于Struts 2框架介绍方面的书籍比较少,本书从最基本的处理机制和核心组件讲起,全面介绍Struts 2框架技术,由浅入深地引导读者掌握Struts 2技术,书中的示例简单易懂,重点突出,给读者提供一个良好的学习参考。
由于作者水平有限,如果读者发现问题或者错误之处,欢迎相互交流和探讨。
本书的内容安排
本书共分为3个部分,从最基础的Struts 2框架处理机制讲起,接着深入讲述整合JSF、Spring等技术,最后给出一个完整的论坛代码示例。读者通过这三个部分的学习,能够全面掌握Struts 2框架的精髓。
第一部分(第1~11章)讲述了Struts 2框架的核心处理机制,介绍了Struts 2的核心组件、国际化、输入校验、类型转换、拦截器和Ajax支持。每个章节都提供了详细的示例代码,供读者学习参考。
第二部分(第12~19章)重点讲述了如何在Struts 2框架中整合其他流行技术,如JSF、Spring和Hibernate等。在第15章介绍了在Struts 2框架中如何访问MySQL数据库服务器,每个知识点笔者都提供了详细的示例代码供读者参考。
第三部分(第20章)是对前面所有章节的一个总结和提高,笔者引导读者通过一个示例论坛的开发来巩固前面所学到的知识。更加重要的是该部分介绍了一个完整的应用项目开发组织和开发管理过程,在读者学习体会Struts 2精彩之处的同时了解项目开发模式,对初学者尤其重要。
读者可以遵循本书的写作顺序,参考下面流程图阅读本书。
本书的特点
笔者试图通过本书的讲解,使读者能够理解Struts 2框架技术的精髓,为了避免教科书式的枯燥,在书中加入了许多重点标注和小结,每个代码示例均紧扣知识点,简单易懂。
本书具有如下特点:
本书的编排采用循序渐进的方式,适合初级、中级学者逐步掌握Struts 2框架技术。
本书重点讲解Struts 2框架核心组件,帮助读者真正理解Struts 2的精髓。
本书采用了大量的实例,讲述Struts 2框架的知识点。
所有实例都具有代表性和实际意义,着重解决工作中的实际问题。
对于有特点的实例进行详细的解释和分析,帮助读者理解和模拟实践。
引导读者理解规范的代码开发,对软件开发初学者尤其有用。
按递进关系进行案例组织,使用新旧的知识点时相互关联,对比分析易于理解。
本书采用技术要点、详细介绍、运行效果等多种方式进行讲解,系统性强、可用性强。
本书配有学习论坛:论坛网址是http://www.rzchina.net,读者可以在上面讨论技术,笔者会及时回答读者提问,并提供各种技术文章,帮助你提高开发水平。
适合阅读本书的读者
Java初学者;
Struts 1.X开发者;
J2EE开发者;
Java Web开发的项目管理者;
将要使用MVC设计的程序员;
想了解Struts 2框架技术的其他人员。
作者
2008年4月
无封面