首页>参考读物>计算机科学与技术>软件与程序设计

实战Struts
作者 : Ted Husted
译者 : 黄若波 程峰 程繁科
出版日期 : 2005-05-31
ISBN : 7-111-16281-1
定价 : 55.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 464
开本 : 16开
原书名 : Struts in Action: Building Web Applications with the Leading Java Framework
原出版社: Manning Publishing
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

Struts解决了许多Web应用程序开发中的常见问题。基于Struts应用程序框架构造的应用程序,除了可以复用业已证明可用的解决方案外,同时也可以使得开发人员更加关注应用程序的特性。Struts是由Apache软件基金会支持的开源软件。
  本书完整介绍了Struts框架结构,涵盖了设计、数据校验、数据库访问、动态页面生成、本地化、Struts配置以及其他一些重要的方面。书中还介绍了如何同时使用JSP标签和Velocity模板,并仔细介绍了Struts体系结构以及Struts控制流,同时也说明了如何扩展Struts框架结构。
  书中还明确指出了Struts 1.0和1.1版本间的区别,同时还通过实例说明了Struts 1.0应用程序向Struts 1.1应用程序转换的技术。本书还介绍了很多已得到证明的设计技术、模式和策略,而这些内容在其他书中是很难找到的。

主要内容
■ Struts 1.0和Struts 1.1
■ Jakarta Scaffold工具包
■ HTTP、Java Servlet和JSP标签库
■ 基于Servlet的应用程序设计
■ 设计和开发模式       

■ Jakarta Validator和Tile包
■ Velocity模板
■ 动态的Web程序设计
■ 使用数据库以及数据服务
■ 各种各样的例子

图书特色

图书前言

到2000年的时候,Java已经是一个成熟的语言了。早期版本中的那些问题被解决,同时一些很有趣的开发工具和类库也开始出现在市场上。我当时已经有过数年开发基于Web应用程序的经验。和许多其他程序员一样,最开始开发Web应用程序的时候是使用JavaScript和Perl语言。这种组合具有强大的功能,但是维护它简直就是一个噩梦。后来又使用过ColdFusion,它同样具有强大的功能但是对于我的客户而言,它太贵了。我曾经还试过FileMaker Pro,这是一个很有趣的工具,但是它过于专业化了。
  我当时做的这一系列的Web应用程序的主要客户是一个公共的广播电台。该电台的主要经济支柱是每年的拍卖活动。本地的供应商提出自己的商品和服务,而人们通过广播电台来投标同时来支持该电台。当然,对于那些高端的拍卖品,例如手工艺品、汽车、度假产品、名人签名等等,我们同时也会在网站上贴出他们对应的图片。
  在1998的时候,对于那些高端拍卖品,我们使用JavaScript和Perl语言开发的一个应用程序来进行“预投标“。那些真正的投标还是通过电台的实况投标活动进行。应用程序真正要做的仅仅是得到开始投标的价格。到1999年的时候,我们开始同时通过在线以及电话投标两种形式了。每一年的时候,因为发现原来使用的平台并不能完全符合我的要求,我都不得不使用另外的平台来使得发布被拍卖的产品。
  对于当时正在使用的Apache服务器很满意,因此我花费了一些时间来研究刚刚诞生的Jakarat站点。在那个站点上,我发行了Struts。最开始的时候,我甚至都觉得Struts项目可能已经不是一个活动的项目了。但是它的文档看起来是一个很有潜力的项目。因此,我订阅了它的邮件列表来看看是否还有人工作在该项目上。该项目的文档中附带了一个例子应用程序,因此我独自一个人来试试该例子程序。试图来搞清楚该框架结构到底干什么。这项研究工作最终变成了“对于Struts应用程序的介绍“这样一篇文档,在其中通过一系列的截屏来说明例子应用程序是如何工作。我将该文章发表在邮件列表上,其他一些订阅了该邮件列表的人指出我在文章中的一些小错误。
  我继续订阅该邮件列表,在可能的情况下帮助其他人同时也得到其他人的帮助。该邮件列表的使用人数极具上升。到年底的时候,Struts的体系架构师Cragi McClanahan希望有人可以帮助他完成Struts1。0版本的文档工作。我被Struts小组选中来完成该文档工作。到2001年的时候,我们终于成功发布了Struts1。0。
  在这以后,我开始了“More About Struts“的页面。在最开始的时候,我仅仅是用它来存放那些我编写的和Struts相关的材料。然后我又在其中添加了指向其他人编写的关于Struts的材料。慢慢地,越来越多关于Struts的文章出现了。我的关于Struts的资源列表的页面也越来越大,越来越受到欢迎。因此我将它移到Struts的主站点上。现在,它包含了一系列的页面,指向我们知道的全部和Struts相关的东西上。
  Strus的邮件列表中包含了很多很有用的东西。特别在开始的时候,Craig也经常通过它来给出实现细节上以及体系结构上的指导。但是,现在想在归档后的邮件列表中找到合适的回答已经变成了一个挑战。因此,我又开始通过对于邮件列表里面每一个问题进行归纳,找到最好的部分。这项工作最后成为了一个相当大的关于Struts的“FAQ“。在2001年的六月,JGurn决定对于Struts也设定一个论坛和FAQ,因此我们将该FAQ移交给JGurn,但是我还是负责该FAQ。
  同时,许多出版社也开始注意到Struts。很多出版社向我约稿。在咨询了其他的Struts社团后,我们最终觉得和Manning出版社一起合作。和Apache一样,Manning对于开源项目也是有着长期的承诺。尽管我们期望使得这本书尽快面世,但是我们也期望能够保证本书尽可能成为最好的。
  结果就是我们现在看见的《Struts in Action》。在其实是一本合作的结晶。David Winterfeldt,Struts Validator的创始人,很热心地负责了关于Validator的章节。同样,Cedric Dumoulin,Tiles的创始人,也负责Tiles的章节。George Franciscus负责第一章,也是最关键的一章。第一章就是专门针对那些刚刚进入该领域的新手的。我们甚至请Craig为我们写了序言(Craig更喜欢写程序)。当然,其他的Struts开发人员和整个社区,都在不同的阶段审阅了本书的手稿。我们在此对于那些建议表示感谢。
  我们就要进入使用Struts的第三个年头了。现在我们不会每年都重写一次,我们将每年改进它。

Ted Husted
Fairport 纽约

图书序言

本书是很多资深的Struts开发人员艰苦工作的结晶。Ted,Cedric,George和David通过他们出色的工作来通过该书说明Struts是如何工作的,以及如何在实际工作中使用Struts。如果你是一个使用Struts的新手,则本书可以使得你更快地更容易地掌握Struts框架结构以及将它使用到自己的实际项目中去。对于那些已经很了解Struts的程序员而言,通过阅读本书,还是可以发现一些新的东西。
  我是在20世纪90年代末期开始对基于Web的应用程序感兴趣。当时我已经掌握了一门计算机语言(Java),它解决了高级编程中一个很重要的问题-程序员不需要考虑如何动态地释放已经被分配的内存。
  在开始的时候,我所期望去做的仅仅是使得构造基于Web应用程序的程序员的生活轻松一些。而Struts的出乎意料地流行说明了不仅仅是Struts视图解决的问题不仅仅我一个人碰到过。Struts解决了很多普遍存在的问题。
  当JSP的最初规范出台的时候(0.91和0.92),在该文档中一个引人入胜的概念在于两种不同的构造基于JSP的应用程序的基本设计风格。模式一的特性是表单提交的结果是由产生该表单的servlet或者JSP页面来处理。这种设计风格使得我们将表现层逻辑(创建表单的代码)和商业层逻辑(用来对输入数据进行校验以及处理输入的数据)混和在一起。当项目里面的程序员仅仅具有一方面的技能(或者是稍微懂一些程序设计的页面设计人员,或者是仅仅懂一些HTML的Java开发人员)的时候,经常使用这种设计方法。同时,当项目的时间很紧张(例如,原形系统需要在下个星期一的时候运行否则不能够得到投资基金的支持),使用该方式也很有用。但是经验告诉我,模式一的设计方法会导致在以后的系统维护和增强都很困难。
  与此相反,模式二的设计方法是将表单提交的数据交给一个控制器模块。控制器模块将数据转发给合适的商业逻辑模块来处理数据。商业逻辑模块和数据库打交道,同时还获取要进一步和用户打交道使用的数据。然后,控制器模块将创建响应页面的工作交给表现层模块来处理。表现层模块的唯一功能就是创建响应页面。
  你可能认为使用模式二风格的程序可能要更加复杂-特别对于一个简单的应用程序而言,这种复杂性会使得项目没有办法进行。实际上,基于模式二创建的应用程序并不比基于模式一创建的应用程序需要更多的时间。但是使用模式二创建应用程序的好处会很快显示出来。如果我们基于一个恰当的体系结构来创建应用程序,则对于一个层次进行的主要修改并不会(或者很少)对于其他层次有影响。这样我们就可以立刻重用那些并不受到影响的层次中的逻辑。
  在我对于基于Web应用程序的体系结构进行这样探索的时候,我的职业生涯也同时带我进入了一个很有趣的方向。当时我在一个为美国长途汽车工业提供信息服务的公司工作,该公司期望将他们的服务也扩展到欧洲。这就使得他们的应用程序需要具有处理多种语言和国际化的能力。我很快地编写了一个简单的控制器servlet来使得我们可以实现简单的MVC体系结构,但是并不奏效,因为我们需要的是可以进行语言选择的控制器。
  我在国际化中最开始的工作就是沿着JSP1.1提供的新的JSP标签来创建“用户使用界面“。该工作最终演变成了如今Struts中的<bean:message>标签。
  在这之后,我加入了Sun公司。在Tomcat上工作。(作为Tomcat4中Catalina容器的设计师)。该开发工作中的一大部分是开源项目Apache的一部分。当Sun在1999年将其对于JSP和Servlet的参考实现贡献给Apache后,我们关于servlet容器的开发就是Jakarta项目的一部分。但是,当时我对于模式二中原始的应用程序设计方式并不满意,因此我决心做些什么。
  尽管我对于如何解决该问题有着很好的想法,但是真正的代码直到2000年的Memorial Day假日的时候才出来。(我妻子一定对此感到很委屈,因为我带着我的笔记本和全家人一起去Oregon海滩度过那个假期)。而ActionForm的第一个版本就是在那个假期里面出现的。而该想法很明显解决了很多设计上有趣的问题。除此之外,在表现层以及商业逻辑组件上定义逻辑上的名字,和通过一个中心地方的配置文件来集中管理这些名字,可以解决开发人员在对该两层进行开发时候的合作以及避免对一层的修改影响另外一层的问题。
  我在Tomcat项目上的经历使我知道开源项目开发的好处,因此很自然我将Struts贡献给了开源社区。这个选择以及Struts自身优美地解决了一些开发基于Web应用程序中的根本问题的能力,使得Struts以令人吃惊地速度被人们所使用。成千上万的程序员下载了Struts,通过了学习曲线,通过Struts的邮件列表开始问问题(也得到回答),然后成功地使用Struts构造应用程序。
  当然,不可能通过我一个人的力量来实现全部这些功能。Ted,Cedric,David以及其他Struts委员会中曾经以及现在的成员,还有George以及Struts开发团队,才使得Struts框架结构能够比我一个人能够做到的更加成功。对于他们,我致以我发自内心的感谢。对于你们,本书的读者,我希望你们会发现你们对于Struts的技术和API上花的时间是值得的。

Craig McClanahan

作者简介

Ted Husted:Ted Husted: 是一名咨询师,也是公认的Struts权威。他还是jGuru Struts论坛的管理员以及Struts开发小组的核心成员。

译者简介

黄若波 程峰 程繁科:暂无简介

图书目录

第一部分 Struts起步
第1章 概述1
11 本书的目的1
111 Struts的开发人员1
112 为什么说Struts是开源软件2
113 为什么被称为Struts2
12 应用程序框架的概念2
13 必备知识3
131 HTTP3
132 通用网关接口4
133 Java servlet5
134 JSP6
135 JSP标签7
136 JavaBean8
137 Model 29
14 Struts概述9
141 构造一个简单的应用程序11
142 准备工作11
143 如何完成整个练习12
144 回顾17
15 总结20
第2章 研究Struts体系结构21
21 言众人所言21
22 为什么使用Struts21
221 历史的回顾21
222 Struts介绍22
223 Struts控制层22
224 使用Struts开发Web应用程序26
23 为什么需要框架结构26
231 Web——麻烦的源头26
232 servlet解决方案27
233 Servlet框架结构28
234 黑盒和白盒系列29
24 Struts、Model 2和MVC29
241 MVC的演变29
242 Model 2的产生30
243 应用程序层——独立的视图层31
244 Struts如何实现Model 2、MVC和分层32
25 Struts控制流33
251 流程概述33
252 更微小的细节35
253 Struts的性能37
26 Struts的强项和弱点38
261 Struts的缺点38
262 Struts的优点40
27 总结41
第3章 构造一个简单的应用程序42
31 从基础了解Struts42
32 简述登录应用程序的流程43
321 起步43
322 将会使用的页面43
323 欢迎页面44
324 登录页面44
325 再次进入欢迎页面45
326 退出欢迎页面45
327 特性摘要45
33 解剖登录应用程序46
331 浏览器中欢迎页面的代码46
332 欢迎页面的JSP源代码47
333 欢迎页面的配置信息49
334 浏览器中登录页面的代码50
335 登录页面对应的配置部分52
336 LogonSubmit的源代码52
337 LogonForm的源代码53
338 LogonAction的源代码55
339 LogoffAction的源代码60
34 构造一个应用程序62
341 定义需求62
342 计划应用程序63
343 计划源代码树结构65
344 安装自己的开发工具65
345 建立buildxml文件66
346 建立webxml文件66
347 建立strutsconfigxml文件67
348 测试部署68
349 构造我们的欢迎页面69
3410构造登录页面70
3411构造常量类71
3412构造其他的类72
3413创建用户目录72
3414配置ActionErrors73
3415编译和测试登录页面73
3416修改欢迎页面74
3417Struts的Action:ForwardAction75
35 总结76
第4章 配置Struts组件77
41 三个XML文件和一个属性文件77
42 Web应用程序部署描述文件78
421 webxml文件78
422 ActionServlet的参数80
43 Struts配置81
431 细节82
432 管理修改83
433 原则:隐藏变化83
44 Struts配置元素84
441〈globalexceptions〉85
442〈formbeans〉86
443〈globalforwards〉87
444〈actionmappings〉88
445〈controller〉89
446〈messageresources〉90
447〈plugin〉90
448〈datasources〉91
449 编写自己的子类92
4410Struts配置文件的一个框架92
45 应用程序的资源文件94
46 Ant文件95
47 配置Struts的核心97
471 安装Java和Servlet容器97
472 安装一个开发环境98
473 安装Struts的核心文件98
48 配置Tiles框架结构98
49 配置Struts Validator99
410使用Struts空白应用程序100
411配置模块化的应用程序102
4111 分而治之102
4112 前缀化页面104
4113 更新配置文件104
412 共享Struts的JAR文件104
413 总结105
第二部 分提出自己的框架结构
第5章 处理ActionForm107
51 输入垃圾,输出珠宝107
52 多面手ActionForm110
521 使用ActionForm来填充自己的域110
522 使用ActionForm作为数据缓存111
523 使用ActionForm作为数据校验器112
524 使用ActionForm作为类型转换器112
525 使用ActionForm作为数据传递对象112
526使用ActionForm作为防火墙113
53 ActionForm的设计结果114
531 ActionForm可能和业务逻辑层对象共享名字114
532 ActionForm可能减少定制的代码量114
533 ActionForm可以封装辅助函数115
534 ActionForm可以内含其他bean115
54 ActionForm的其他类型116
541 Mapbacked ActionForm116
542 DynaActionForm117
55 哪些情况下不使用ActionForm118
551 为什么ActionForm不是一个Map对象118
552 为什么ActionForm不是一个简单的JavaBean118
553 为什么ActionForm不是一个接口119
56 使用ActionForm119
561 实现业务层逻辑120
562 内含可改变的数据对象121
563 设置不可改变数据对象122
564 设置可改变的数据对象123
565 使用工厂方法123
566 传递一个Map对象124
567 通过反射传递数据126
568 使用接口类130
57 BaseForm131
571 SessionLocale131
572 Dispatch132
573 自动填充132
574 BaseMapForm132
58 总结133
第6章 使用ActionForward对象134
61 ActionForward的功能134
62 ActionForward如何工作135
63 本地转发和全局转发136
64 运行时刻参数137
641 在页面中增加参数137
642 在Action类中添加参数138
65 动态转发138
66 导航条内容不变的原因138
67 编写自己的ActionForward139
68 总结140
第7章 ActionMapping的设计141
71 了解ActionMapping141
711 ActionMapping bean142
712 ActionMapping目录142
72 ActionMapping属性143
721 path属性143
722 forward属性144
723 include属性144
724 type属性144
725 className属性144
726 name属性145
727 roles属性145
728 scope属性145
729 validate属性145
7210input属性145
7211parameter属性146
7212attribute属性147
7213prefix和suffix属性147
7214unknown属性147
73 内部组件148
731 本地转发148
732 本地异常148
74 编写自己的ActionMapping148
75 总结149
第8章 使用Action对象150
81 准备,设定,行动150
82 使用Action对象150
821 Action是什么151
822 何时调用Action152
823 Action可以做什么153
824 Action到底是什么157
83 标准的Action158
831 标准的桥接Action159
832 标准的基本Action161
84 级联Action165
85 Scaffold Action167
851 仅仅和转发相关的Action167
852 辅助Action172
86 基本的View Action174
87 辅助Action类使用的技术175
871 可选择的转发176
872 先调用177
873 捕获级联的异常177
874 灵活的错误信息转发179
875 提示成功消息180
876 可变换的视图180
877 使用反射技术来调用方法181
878 使用反射来调用类181
88 使用灵活转发182
89 总结186
第9章 扩展ActionServlet187
91 ActionServlet的地位187
92 RequestProcessor189
921 process方法190
922 processRoles190
93 ExceptionHandler192
94 插件193
95 总结193
第三部 分构造自己的页面
第10章 显示动态内容195
101 标签——就是你195
1011 JSP标签库——有什么优点195
1012 Struts和JSTL198
1013 Struts标签库和MVC199
102 使用扩展标签库200
1021 扩展标签是如何工作的200
1022 如何安装扩展标签202
1023 扩展标签库不是什么203
103 Struts标签库204
1031 Struts标签库的常用功能205
1032 bean标签206
1033 html标签208
1034 logic标签210
104 使用Struts标签213
1041 Struts的标签213
1042 基础213
1043 技术220
1044 可用的控件231
105 不同的视图232
1051 Struts和JSP232
1052 servlet上下文232
1053 除了JSP以外233
106 总结233
第11章 使用Tiles开发应用235
111 管理布局235
1111 用动态模板进行分层235
1112 运用模板的结果236
1113 使用模板236
1114 集成模板、Tiles和Struts237
112 创建一个layout模板238
1121 tile是什么240
1122 部署Tiles模板241
1123 添加样式表242
1124 模板和MVC243
113 Tiles Definition243
1131 声明Definition243
1132 JSP声明244
1133 配置文件声明247
1134 把Definition作为ActionForward249
114 Tile 属性250
1141 useAttribute250
1142 importAttribute251
1143 put251
1144 putList和add253
115 把一个应用程序转化为Tiles253
1151 设置Tiles框架253
1152 测试默认配置254
1153 浏览页面254
1154 使用〈tiles:insert〉重构页面256
1155 把〈tiles:insert〉标签析取到Definition中262
1156 模式化基础layout265
1157 把Definition精练为基础类和扩展类266
1158 形成例程267
1159 对移植的管理267
116 总结268
第12章 验证用户输入270
121 只有看见时我才知道270
1211 我们不能拒绝的输入270
1212 Web层的校验271
1213 使用校验器的结果272
122 Struts Validator简述273
123 基本校验器280
1231 required校验器281
1232 mask校验器281
1233 range校验器282
1234 maxLength校验器283
1235 minLength校验器283
1236 byte、short、integer、long、float和double校验器283
1237 date校验器283
1238 creditCard校验器284
1239 email校验器284
124 资源包284
1241 默认的资源包285
1242 默认校验器消息285
1243 定制化的校验器消息286
125 配置文件286
126 校验器的JSP标签287
127 ValidatorForm和ValidatorActionForm290
128 本地化的校验器291
129 可插入的校验器291
1210技术292
12101 多页面校验293
12102 取消按钮293
12103 定制化的消息293
12104 相关联域294
12105 联合使用校验器和validate方法295
1211移植应用程序到Struts Validator296
12111 安装配置Validator框架结构296
12112 测试默认的配置297
12113 回顾你的校验方法297
12114 扩展ValidatorForm或者Scaffold BaseForm298
12115 选择一个校验器来进行移植工作298
12116 添加formset、form和field元素299
12117 在ApplicationResources中添加新的选项300
12118 调用Struts校验器301
12119 测试和重复301
121110删除ActionForm子类302
1212总结303
第13章 内容本地化305
131 用另外一个名字305
1311 为什么进行本地化306
1312 Java的国际化功能306
132 Struts的国际化组件310
1321 Session中的Locale属性310
1322 MessageResources311
1323 默认的资源包311
1324 ActionErrors313
1325 ActionMessages313
1326 区域敏感的JSP标签314
133 本地化Struts应用程序318
1331 允许本地化318
1332 使用框架结构Locale对象319
1333 将标签和消息存放在属性文件中320
1334 创建语言相关的属性文件320
1335 在可以本地化模块中指定恰当的键值321
1336 其他模块使用〈bean:message〉321
134 本地化其他模块321
1341 本地化Struts Validator321
1342 本地化Tiles322
1343 本地化集合322
135 总结323
第14章 使用数据服务功能325
141 起步325
1411 从层次的角度看JDBC325
1412 介绍数据服务326
142 研究业务层327
1421 Struts——使用自己的模式327
1422 定义业务对象327
1423 设计业务对象328
1424 设计结果329
1425 混合业务方法和Action(不推荐)329
1426 一个简单的例子330
143 在Struts中使用ProcessBeans和JDBC330
1431 介绍ProcessBean331
1432 作为数据传递对象的ProcessBean332
1433 填充ProcessBean333
1434 执行ProcessBean333
1435 访问数据服务334
1436 使用典型的流程335
1437 对业务行为进行编码336
1438 使用ProcessBean作为持久层338
1439 使用其他的持久层338
144 使用result对象339
145 使用辅助Action340
146 使用Lucene341
147 使用内容摘要345
1471 Digester和RSS346
1472 获取和生成数据346
1473 RSS摘要347
148 在Struts中使用EJB349
1481 Session Facade350
1482 数据传递对象350
1483 实现模式350
149 总结351
第四部 分以实例介绍Struts
第15章 Artimus:实例研究353
151 框架的框架353
152 Scaffold——工具的产生354
153 关于Artimus354
154 部署描述文件(webxml)356
1541 配置Artimus357
1542 应用程序的属性357
1543 连接适配器358
1544 启动属性358
1545 其他配置设定358
1546 安全设定358
1547 受保护的URL359
1548 授权用户359
1549 鉴证策略359
155 ArtimusServlet359
1551 子类361
1552 串标志符361
1553 扩展点361
156 应用程序与SQL属性文件362
157 indexjsp363
158 全局转发363
159 /find/Recent365
1591 扩展bean368
1592 superexecute368
1593 getArticles368
1594 AccessfindByLast与ResultList368
1595 ProcessResult369
1596 ProcessAction370
1510 tilesxml与Articlejsp371
15101 useAttribute373
15102 baseStyle373
15103 标题373
15104 Tiles373
1511 resultjsp375
15111 图例376
15112 isResult376
15113 RESULT377
1512 article actions380
1513 viewjsp382
15131 headline383
15132 content383
15133 contributor384
1514 formjsp385
15141 article content386
15142 contributed/contributor387
15143 article ID387
15144 validation387
1515 /do/Menu389
15151 logon390
15152 菜单391
15153 我们的控件392
15154 saveResult方法392
15155 我们的结果集392
1516 menujsp393
15161 /find/Hours394
15162 /menu/Find395
15163 /find/Last396
15164 /menu/Contributor396
15165 /menu/Manager397
1517 总结397
第16章 Redux:迁移到Struts 11398
161 下一步:Struts 11398
1611 Struts 11特征集399
1612 我们可使用的特征401
162 改变基础402
1621 Struts 11中的Tiles402
1622 Struts 11中的Validator405
1623 Struts 11中的ReloadAction406
1624 对webxml和strutsconfigxml的其他变更406
1625 messagejsp(版本11)406
1626 formjsp(版本11)407
1627 MenuCreate(版本11)409
1628 继续前进409
163 可自由选择的修改410
1631 DynaActionForm格式410
1632 基于Action的安全机制411
1633 修改Action路径413
1634 Struts 11中的应用程序资源414
164 总结414
第17章 Velocity:替换JSP416
171 转移到Velocity模板416
172 变化导致了应用程序框架结构的出现416
173 为什么需要Velocity416
1731 Velocity轻便、快捷而且通用417
1732 Velocity可以很好地与其他软件协作417
1733 Velocity简单但是功能强大417
174 在Web应用程序中使用Velocity418
1741 将Velocity与servlet资源一起使用418
1742 联合使用Velocity和上下文属性419
1743 Velocity如何与Struts协同工作420
1744 VelocityStruts工具包420
1745 Struts View工具421
175 我们的登录模板421
176 建立VelocityViewServlet424
1761 安装VelocityViewServlet424
1762 部署Velocity servlet424
1763 工具箱配置文件425
177 设置strutsconfig426
178 总结427
附录
附录A 设计模式429
附录B Struts配置文件的API435
附录C 标签库快速参考446
术语表450
参考文献456

教学资源推荐
作者: [美] 克里斯多夫 W. 弗雷泽(Christopher W. Fraser)戴维 R. 汉森(David R. Hanson) 著
作者: 【美】梁勇(Y.Daniel Liang) 著
作者: 辛运帏 饶一梅
作者: 郑阿奇 主编 丁有和 编著
参考读物推荐
作者: [美]特恩斯?帕尔(Terence Parr)著
作者: 洪石丹
作者: [加]吉姆·范·麦格伦(Jim Van Meggelen),[美]罗素·布莱恩特(Russell Bryant),[加]莱夫·马德森(Leif Madsen) 著
作者: J.D.Meier;Carlos Farre;Prashant Bansode;Scott Barber;Dennis Rea