标题：Struts 2.1权威指南
图书信息
出版社: 电子工业出版社; 第1版 (2009年5月1日)
丛书名: Java技术大系
平装: 770页
正文语种: 简体中文
开本: 16
ISBN: 9787121085925
条形码: 9787121085925
尺寸: 25.8 x 18.8 x 3.8 cm
重量: 1.4 Kg
作者简介
李刚，从事近10年的Java EE应用开发。曾任LITEON公司的J2EE技术主管，负责该公司的企业信息平台的架构设计。曾任广州电信、广东龙泉科技等公司的技术培训导师。2007年3月26日的《电脑报》专访人物。疯狂Java实训营创立人，疯狂Java体系图书作者，曾兼任广东技术师范学院计算机科学系的兼职副教授。培训的学生已在华为、立信、普信，网易、电信盈科、中企动力等公司就职。 国内知名的高端IT技术作家，已出版《疯狂Java讲义》、《轻量级Java EE企业应用实战》、《疯狂Ajax讲义》、《Struts 2权威指南》、《Ruby On Rails敏捷开发最佳实践》、《Sprin9 2.0宝典》等著作。
内容简介
《Struts 2.1权威指南》是《Struts 2权威指南》的第二版，《Struts 2.1权威指南》介绍的Struts 2是最新的Struts 2.1。相对于2007年发布的Struts 2.0，Struts 2.1改变较大，Struts 2.1不仅修正了Struts 2.0中少量Bug(这些Bug在《Struts 2.1权威指南》第一版中已经指出)。而且新增了REST、Convention和Java Templates，这些都是Struts 2未来的发展方向。不仅如此，Struts 2.1不再支持Ajax主题，而是改为使用Dojo插件来提供对Ajax的支持。Struts 2.1抛弃了Codebehind插件提供的“零配置”支持，改为使用Convention插件提供“零配置”，Struts 2.1新增了Portlet支持……为了让众多Struts学习者、工作者快速从Struts 2.0的开发升级到Struts 2.1，笔者升级了《Struts 2权威指南》，第二版改写了第一版中所有程序，将它们改为基于Struts 2.1运行。第二版删除了第一版中第18章的内容(Struts 2和Struts 1整合部分)，全面介绍了Struts 2.1新增的Convention和REST支持。《Struts 2.1权威指南》最后配备的两个常用的实例也都升级为基于Struts 2.1运行，读者可通过这两个实例触类旁通，解决日常开发中的问题。
《Struts 2.1权威指南》第二版保留了第一版通俗易懂的写作风格：按Struts 2.1的架构体系，细致地介绍了Struts 2.1各个知识点。在介绍过程中，笔者依照读者的学习规律，首先介绍基本概念和基本操作，然后对内容进行深入讲解。笔者在介绍Struts 2.1框架时，既照顾到了Struts 2.1初学者的能力，对每个知识点都给出简单的快速上手的示例；同时也考虑到开发者在日后开发中可能遇到的问题，详细讲解了每个知识点的各种用法，《Struts 2.1权威指南》覆盖了Struts 2.1近80%的API。因此，《Struts 2.1权威指南》完全可以作为Struts 2框架的权威手册，以供开发者在实际开发过程中参考。
《Struts 2.1权威指南》适用于有较好的Java编程基础，有一定JSP、Servlet等Web编程基础或具备初步Java EE编程基础的读者。《Struts 2.1权威指南》既给出了Struts 2入门级的示范实例，也详细讲解了Struts 2各个知识点及各个选项的详细用法，可以作为Struts 2框架的权威参考。
目录
第1章  Struts 2概述1
1.1  MVC思想概述2
1.1.1  Web技术的发展2
1.1.2  Model 1和Model 24
1.1.3  MVC思想及其优势6
1.1.4  常用的MVC框架7
1.2  Struts 2的起源和背景8
1.2.1  Struts 1简介及存在的问题9
1.2.2  WebWork简介12
1.2.3  Struts 2起源15
1.3  Struts 2体系介绍16
1.3.1  Struts 2框架架构16
1.3.2  Struts 2的配置文件17
1.3.3  Strut 2的标签库18
1.3.4  Struts 2的控制器组件19
1.4  Struts 2与Struts 1的对比20
1.5  WebWork和Struts 2对比21
1.6  本章小结22
第2章  Struts 2下的HelloWorld23
2.1  下载和安装Struts 2框架23
2.2  从用户请求开始25
2.3  创建Struts 2的Web应用27
2.3.1  创建Web应用27
2.3.2  增加Struts 2功能28
2.4  实现控制器28
2.4.1  实现控制器类29
2.4.2  配置Action30
2.4.3  增加视图资源完成应用30
2.5  改进控制器32
2.5.1  实现Action接口32
2.5.2  跟踪用户状态33
2.5.3  添加处理信息35
2.5.4  输出处理信息37
2.6  改进视图组件39
2.6.1  改善输出页面39
2.6.2  使用UI标签简化表单页面40
2.7  完成程序国际化42
2.7.1  定义国际化资源文件42
2.7.2  加载资源文件43
2.7.3  输出国际化信息44
2.8  增加数据校验46
2.8.1  继承ActionSupport46
2.8.2  使用Struts 2的校验框架49
2.9  本章小结51
第3章  Struts 2基础52
3.1  WebWork的MVC实现52
3.1.1  WebWork的下载和安装53
3.1.2  实现Action53
3.1.3  配置Action56
3.1.4  完成数据校验58
3.1.5  完成应用流程59
3.2  在Eclipse中开发Struts 260
3.2.1  创建Web应用61
3.2.2  增加Struts 2支持63
3.2.3  部署Struts 2应用64
3.2.4  增加应用的Action65
3.3  Struts 2的基本流程66
3.3.1  核心控制器：FilterDispatcher66
3.3.2  业务控制器67
3.3.3  Struts 2的模型组件67
3.3.4  Struts 2的视图组件68
3.3.5  Struts 2的运行流程68
3.4  Struts 2的基本配置69
3.4.1  配置web.xml文件69
3.4.2  struts.xml配置文件71
3.4.3  struts.properties配置文件74
3.4.4  struts.xml文件结构78
3.5  本章小结82
第4章  深入Struts 283
4.1  深入Struts 2的配置文件83
4.1.1  Bean配置84
4.1.2  常量配置85
4.1.3  包配置87
4.1.4  命名空间配置89
4.1.5  包含配置91
4.1.6  拦截器配置91
4.2  Struts 2的Action92
4.2.1  实现Action处理类92
4.2.2  Action访问Servlet API97
4.2.3  Action直接访问Servlet API100
4.2.4  配置Action103
4.2.5  配置Action的默认处理类104
4.2.6  动态方法调用105
4.2.7  为action元素指定method
4.2.7  属性107
4.2.8  使用通配符109
4.2.9  配置默认Action115
4.3  管理处理结果116
4.3.1  处理结果的改进116
4.3.2  配置结果117
4.3.3  Struts 2支持的处理结果
4.2.7  类型118
4.3.4  plainText结果类型120
4.3.5  redirect结果类型123
4.3.6  redirectAction结果类型124
4.3.7  动态结果125
4.3.8  请求参数决定结果126
4.3.9  全局结果129
4.4  属性驱动和模型驱动130
4.4.1  模型的作用130
4.4.2  使用模型驱动131
4.5  Struts 2的异常机制134
4.5.1  Struts 2的异常处理哲学135
4.5.2  声明式异常捕捉136
4.5.3  输出异常信息139
4.6  未知处理器141
4.7  本章小结143
第5章  Struts 2的类型转换144
5.1  类型转换的意义145
5.1.1  表现层数据处理145
5.1.2  类型转换145
5.2  Struts 2内建的类型转换器149
5.3  基于OGNL的类型转换151
5.4  自定义类型转换器155
5.4.1  系统需求155
5.4.2  实现类型转换器157
5.4.3  局部类型转换器159
5.4.4  全局类型转换器161
5.4.5  基于Struts 2的类型转换器163
5.4.6  数组属性的类型转换器165
5.4.7  集合属性的类型转换器168
5.5  集合类型转换的高级特性170
5.5.1  指定集合元素的类型170
5.5.2  为Set集合的元素指定
4.2.7  索引属性172
5.6  类型转换中错误处理174
5.6.1  类型转换的错误处理流程174
5.6.2  处理类型转换错误176
5.6.3  输出类型转换错误176
5.6.4  处理集合属性的转换错误179
5.7  本章小结182
第6章  Struts 2的输入校验183
6.1  输入校验概述184
6.1.1  为什么需要输入校验184
6.1.2  客户端校验185
6.1.3  服务器端校验187
6.1.4  类型转换和输入校验191
6.2  基本输入校验192
6.2.1  编写校验规则文件192
6.2.2  国际化提示信息195
6.2.3  使用客户端校验197
6.3  校验器的配置风格200
6.3.1  字段校验器配置风格201
6.3.2  非字段校验器配置风格201
6.3.3  短路校验器203
6.3.4  校验顺序和短路205
6.4  校验文件的搜索规则205
6.5  内建校验器208
6.5.1  注册校验器208
6.5.2  必填校验器210
6.5.3  必填字符串校验器210
6.5.4  整数校验器211
6.5.5  日期校验器212
6.5.6  表达式校验器213
6.5.7  字段表达式校验器213
6.5.8  邮件地址校验器214
6.5.9  网址校验器215
6.5.10  Visitor校验器216
6.5.11  转换校验器219
6.5.12  字符串长度校验器220
6.5.13  正则表达式校验器221
6.6  基于Annotation的输入校验221
6.7  手动完成输入校验223
6.7.1  重写validate()方法223
6.7.2  重写validateXxx()方法225
6.7.3  Struts 2的输入校验流程227
6.8  本章小结228
第7章  上传和下载文件229
7.1  文件上传的原理230
7.1.1  表单元素的enctype属性230
7.1.2  手动上传233
7.1.3  使用上传框架完成上传235
7.2  Struts 2的文件上传241
7.2.1  Struts 2的文件上传支持241
7.2.2  实现文件上传的Action242
7.2.3  配置文件上传的Action244
7.2.4  手动实现文件过滤246
7.2.5  拦截器实现文件过滤249
7.2.6  输出错误提示250
7.2.7  文件上传的常量配置252
7.3  使用Pell上传252
7.4  同时上传多个文件253
7.4.1  使用数组同时上传多个文件254
7.4.2  使用List同时上传多个文件257
7.5  使用Struts 2控制文件下载258
7.5.1  实现文件下载的Action259
7.5.2  配置Action260
7.5.3  下载前的授权控制261
7.6  本章小结263
第8章  Struts 2的国际化264
8.1  程序国际化简介265
8.1.1  程序国际化的意义265
8.1.2  Java国际化的思路265
8.1.3  Java支持的语言和国家266
8.1.4  完成程序国际化267
8.1.5  使用MessageFormat处理
8.1.5  带占位符的消息269
8.1.6  使用类文件代替资源文件270
8.2  Struts 2的国际化入门271
8.2.1  加载全局资源文件271
8.2.2  访问国际化消息272
8.2.3  输出带占位符的国际化消息275
8.3  加载资源文件的不同方式277
8.3.1  包范围资源文件277
8.3.2  Action范围资源文件279
8.3.3  临时指定资源文件279
8.3.4  加载资源文件的顺序281
8.4  允许用户自行选择程序语言282
8.4.1  Struts 2国际化的运行机制282
8.4.2  创建下拉列表框283
8.4.3  选择程序语言286
8.5  本章小结287
第9章  Struts 2的标签库288
9.1  Struts 2标签库概述289
9.1.1  标签的优势289
9.1.2  Struts 2的标签分类290
9.2  Struts 2标签入门291
9.2.1  使用Struts 2标签的准备291
9.2.2  Struts 2的OGNL表达式
9.2.2  语言292
9.2.3  OGNL中的集合操作295
9.2.4  访问静态成员296
9.2.5  Lambda（λ）表达式296
9.3  控制标签297
9.3.1  if/elseif/else标签297
9.3.2  iterator标签298
9.3.3  append标签300
9.3.4  generator标签302
9.3.5  merge标签304
9.3.6  subset标签304
9.3.7  sort标签307
9.4  数据标签309
9.4.1  action标签309
9.4.2  bean标签311
9.4.3  date标签313
9.4.4  debug标签314
9.4.5  include标签315
9.4.6  param标签316
9.4.7  push标签316
9.4.8  set标签317
9.4.9  url标签319
9.4.10  property标签320
9.5  主题和模板321
9.5.1  选择主题321
9.5.2  自定义主题323
9.6  表单标签325
9.6.1  表单标签的通用属性325
9.6.2  表单标签的name和
9.6.2  value属性328
9.6.3  checkboxlist标签328
9.6.4  combobox标签331
9.6.5  doubleselect标签331
9.6.6  head标签334
9.6.7  optiontransferselect标签334
9.6.8  select标签336
9.6.9  radio标签337
9.6.10  optgroup标签338
9.6.11  token标签340
9.6.12  updownselect标签341
9.7  非表单标签343
9.7.1  actionerror和actionmessage
9.7.1  标签343
9.7.2  component标签344
9.8  本章小结347
第10章  Struts 2的拦截器348
10.1  理解拦截器349
10.1.1  理解DRY规则349
10.1.2  拦截器的意义350
10.1.3  拦截器的实现原理352
10.1.4  拦截器和AOP的关系356
10.1.5  拦截器在Struts 2中的作用357
10.2  拦截器配置初步359
10.2.1  配置拦截器359
10.2.2  使用拦截器361
10.2.3  配置默认拦截器362
10.3  Struts 2内建的拦截器365
10.3.1  Struts 2内建的拦截器365
10.3.2  struts-default.properties里
10.3.2  配置的拦截器366
10.4  开发自己的拦截器370
10.4.1  实现拦截器类371
10.4.2  使用拦截器372
10.4.3  拦截器和Struts 2插件的
10.4.3  关系374
10.5  深入拦截器编程375
10.5.1  拦截方法的拦截器375
10.5.2  拦截器的执行顺序378
10.5.3  拦截结果的监听器380
10.5.4  覆盖拦截器栈里特定
10.5.4  拦截器的参数381
10.6  拦截器示例：实现权限控制383
10.6.1  实现拦截器类383
10.6.2  配置权限控制拦截器384
10.7  本章小结386
第11章  Struts 2的Ajax支持387
11.1  Ajax概述388
11.1.1  Ajax的起源和变革388
11.1.2  Ajax的核心技术391
11.2  Struts 2提供的Ajax支持393
11.3  基于Dojo的异步表单397
11.3.1  安装Dojo插件398
11.3.2  定义异步表单398
11.3.3  实现Action400
11.3.4  实现服务器响应页面402
11.4  基于Dojo的pub-sub事件
11.4  模型403
11.4.1  pub-sub的原理404
11.4.2  pub-sub的示例405
11.4.3  阻止请求407
11.5  基于Dojo的Ajax标签407
11.5.1  div标签407
11.5.2  submit和a标签414
11.5.3  autocompleter标签419
11.5.4  tabbedpanel标签426
11.5.5  datetimepicker430
11.5.6  tree和treenode432
11.5.7  textarea435
11.5.8  bind436
11.6  基于JSON插件的Ajax
11.6  实现438
11.6.1  JSON的基本知识438
11.6.2  安装Struts 2的JSON插件441
11.6.3  实现Action逻辑441
11.6.4  实现JSP页面443
11.7  本章小结446
第12章  Struts 2的REST支持447
12.1  Codebehind插件和零配置448
12.1.1  自动搜索Action448
12.1.2  使用Annotation指定命名
12.1.2  空间、父包和结果映射449
12.2  Convention插件和零配置452
12.2.1  搜索Action453
12.2.2  按约定映射Action454
12.2.3  按约定映射Result456
12.2.4  Action链的约定459
12.2.5  自动重加载映射461
12.3  Convention插件的相关常量461
12.4  Convention的Annotation462
12.4.1  Action配置相关的
12.4.1  Annotation463
12.4.2  Result配置相关的
12.4.1  Annotation464
12.4.3  包和命名空间相关的
12.4.1  Annotation466
12.4.4  异常处理相关的Annotation466
12.4.5  拦截器配置相关的
12.4.1  Annotation468
12.5  REST简介468
12.5.1  资源和标识符469
12.5.2  操作资源的方式470
12.6  Struts 2的REST支持471
12.6.1  RestActionMapper简介471
12.6.2  安装REST插件472
12.6.3  实现支持REST的
12.6.3  Action类473
12.6.4  实现视图层478
12.7  本章小结481
第13章  使用FreeMarker作为
第13章  表现层482
13.1  体验FreeMarker483
13.1.1  下载和安装FreeMarker483
13.1.2  在Java程序中使用
13.1.2  FreeMarker483
13.1.3  在Web应用中使用
13.1.2  FreeMarker485
13.2  FreeMarker的模板文件489
13.2.1  模板结构489
13.2.2  FTL指令规则490
13.2.3  插值规则490
13.3  表达式492
13.3.1  直接指定值492
13.3.2  输出变量值494
13.3.3  字符串操作496
13.3.4  集合连接运算符497
13.3.5  Map连接运算符497
13.3.6  算术运算符498
13.3.7  比较运算符499
13.3.8  逻辑运算符499
13.3.9  内建函数499
13.3.10  空值处理运算符500
13.3.11  运算符优先级500
13.4  FreeMarker的常用指令501
13.4.1  if指令501
13.4.2  switch、case、default、
13.4.2  break指令502
13.4.3  list、break指令502
13.4.4  include指令503
13.4.5  import指令503
13.4.6  noparse指令503
13.4.7  escape、noescape指令504
13.4.8  assign指令505
13.4.9  setting指令506
13.4.10  macro、nested、return指令506
13.5  使用FreeMarker作为
13.5  Struts 2的视图技术509
13.5.1  在FreeMarker模板中
13.5.1  使用Struts 2标签509
13.5.2  使用Freemarker Result512
13.5.3  解析模板中的变量514
13.5.4  访问Servlet/JSP范围的值516
13.6  本章小结517
第14章  整合Spring518
14.1  Spring简介519
14.1.1  Spring的起源和核心519
14.1.2  使用Spring的IoC容器521
14.2  Struts 2插件524
14.2.1  插件概述524
14.2.2  插件开发概述526
14.3  使用Spring插件完成整合527
14.3.1  整合Spring前的准备工作528
14.3.2  整合Spring的思考531
14.4  让Spring管理控制器532
14.4.1  整合流程532
14.4.2  从页面请求开始533
14.4.3  实现控制器逻辑533
14.4.4  实现业务逻辑535
14.5  使用自动装配537
14.5.1  指定自动装配537
14.5.2  修改配置文件538
14.5.3  改变自动装配策略539
14.6  本章小结540
第15章  整合JSF541
15.1  JSF简介541
15.1.1  JSF概述542
15.1.2  JSF和Struts 2的对比542
15.2  使用MyFaces543
15.2.1  下载和安装MyFaces543
15.2.2  从输入页面开始545
15.2.3  在Web应用中配置MyFaces547
15.2.4  实现后台Bean548
15.2.5  定义导航规则549
15.3  安装JSF插件551
15.4  使用JSF插件552
15.4.1  实现业务逻辑组件553
15.4.2  列出全部图书556
15.4.3  添加/修改图书558
15.5  整合JSF的思考563
15.6  本章小结564
第16章  整合SiteMesh565
16.1  SiteMesh简介565
16.1.1  SiteMesh概述566
16.1.2  下载和安装SiteMesh567
16.1.3  定义装饰器页面569
16.1.4  定义原始页面570
16.1.5  更复杂的装饰器页面572
16.2  使用SiteMesh插件575
16.2.1  安装SiteMesh插件575
16.2.2  在Struts 2中使用SiteMesh577
16.3  本章小结579
第17章  整合JasperReports580
17.1  JasperReports简介581
17.1.1  下载和安装JasperReports581
17.1.2  JasperReports初探582
17.1.3  JasperReports的开发流程588
17.1.4  解决PDF报表的中文问题589
17.2  动态报表590
17.2.1  带参数的报表590
17.2.2  带查询的报表594
17.2.3  以VO集合作为数据源的
17.2.3  动态报表600
17.3  使用iReport设计报表605
17.3.1  下载和安装iReport605
17.3.2  使用iReport607
17.3.3  建立数据源608
17.3.4  设计报表布局611
17.4  安装JasperReports插件614
17.5  使用JasperReports报表614
17.5.1  创建生成报表的Action615
17.5.2  配置生成JasperReports
17.2.3  报表的Action616
17.5.3  生成JasperReports报表617
17.6  本章小结618
第18章  整合JFreeChart619
18.1  JFreeChart简介620
18.1.1  JFreeChart的下载和安装620
18.1.2  使用JFreeChart621
18.1.3  JFreeChart开发步骤623
18.2  JFreeChart的常用统计图表624
18.2.1  柱状图625
18.2.2  折线图629
18.2.3  时间顺序图630
18.3  在网页中生成带交互功能的
18.3  统计图633
18.4  安装JFreeChart插件638
18.5  在Struts 2应用中使用
18.5  JFreeChart639
18.5.1  创建Action类639
18.5.2  配置Action641
18.6  本章小结642
第19章  整合Hibernate643
19.1  Hibernate概述644
19.1.1  Hibernate的作用644
19.1.2  Hibernate的优势646
19.2  Hibernate开发入门646
19.2.1  Hibernate下载和安装646
19.2.2  使用Hibernate保存记录647
19.2.3  使用Hibernate查询记录652
19.3  Struts 2整合Hibernate的思考654
19.3.1  自定义的整合方案654
19.3.2  整合方案的实现策略656
19.4  整合示例656
19.4.1  持久层设计656
19.4.2  DAO层设计660
19.4.3  业务逻辑层设计663
19.4.4  初始化组件工厂665
19.4.5  控制器实现666
19.5  整合后的思考和Spring框架668
19.6  本章小结669
第20章 “零配置”案例：注册
第20章  登录系统670
20.1  系统概述671
20.1.1  系统功能简介671
20.1.2  系统总体设计671
20.2  实现Hibernate持久层672
20.2.1  编写持久化PO类672
20.2.2  编写映射文件673
20.3  实现DAO层674
20.3.1  管理SessionFactory674
20.3.2  编写DAO接口675
20.3.3  实现DAO组件677
20.3.4  配置DAO组件679
20.4  实现业务逻辑层679
20.4.1  定义业务逻辑组件接口679
20.4.2  提供业务逻辑组件实现类680
20.4.3  配置业务逻辑组件682
20.5  使用Struts 2683
20.5.1  整合Struts 2和Spring683
20.5.2  处理登录685
20.5.3  图形验证码689
20.5.4  使用Ajax验证用户名692
20.5.5  注册新用户696
20.6  使用SiteMesh装饰页面699
20.7  本章小结700
第21章  电子拍卖系统701
21.1  系统功能简介和架构设计702
21.1.1  系统功能简介702
21.1.2  系统架构设计702
21.1.3  相关技术介绍703
21.2  持久层设计706
21.2.1  系统实体706
21.2.2  系统E-R图和数据表707
21.2.3  实现Hibernate PO709
21.2.4  管理SessionFactory718
21.3  实现系统DAO层720
21.3.1  DAO的基础配置721
21.3.2  实现系统DAO组件721
21.3.3  配置系统DAO组件728
21.4  实现业务逻辑层729
21.4.1  定义业务逻辑组件接口730
21.4.2  依赖注入DAO组件732
21.4.3  业务逻辑组件中的异常
21.4.3  处理733
21.4.4  处理用户竞价735
21.4.5  判断拍卖物品状态737
21.4.6  事务管理740
21.4.7  配置业务层组件741
21.5  实现系统Web层744
21.5.1  配置Struts 2的核心Filter744
21.5.2  处理用户登录745
21.5.3  图形验证码749
21.5.4  Web层的异常处理750
21.5.5  登录控制751
21.5.6  添加物品753
21.5.7  处理用户竞价760
21.6  使用SiteMesh页面装饰766
21.6.1  在Struts 2中整合SiteMesh
21.6.1  页面装饰766
21.6.2  定义页面装饰767
21.7  本章小结770