网站购物车   | 店铺购物车  
店铺平均得分:99.38 分,再接再厉!!!【查看全部评价】
评分 40分 50分 60分 70分 80分 90分 100分
数量 0 0 1 0 1 5 169
本店铺共有 0 笔投诉记录,投诉率 0% ,低于平均投诉率 1% 【查看详细】
投诉类型
数量
比例
店主称呼:陈先生   联系方式:购买咨询请联系我  13556494203    地址:广东省 汕头市 潮南区 包邮韵达快递
图书分类
店铺公告
有问题直接@店主
本店不提供任何发票收据,请知晓

本店快递通、韵达、全峰,不接受指定,随机发货,指定无效
大部分都有货,部分地区包邮


不接急单,只卖正版,部分地区包邮,多仓库发货,大部分都有货,可以放心下单

图书发出后,不接受拒收

您好,二手图书为旧书、用过的图书,不支持七天无理由退货


售后问题请直接电话联系客服(书籍价格尽量标低价单本运费7元·叠加一本书籍·加一本2元(1KG内:)超2kg加四元
您好,因本店在东莞有三四个仓库,且图书种类较多以仓库确认的订单金额为准,还请亲理解!
只卖正版,实货正版二手旧书可能存在划线·斑点·氧化发黄现象·
个别馆藏书·侧面有书贴·品质要求高者需私聊后再拍)各位书友,重点提示《标上下册,全套书籍有的为单本书籍询问清楚再拍谢谢》
部分地区包邮,多仓库发货,大部分都有货,可以放心下单·
店铺介绍
已停止营业
交易帮助
第一步:选择图书放入购物车。
第二步:结算、填写收货地址。
第三步:担保付款或银行汇款。
第四步:卖家发货。
第五步:确认收货、评价。
作/译者:孙鑫 出版社:电子工业出版社
Struts 2深入详解
出版日期:2008年07月
ISBN:9787121068126 [十位:7121068125]
页数:670      
定价:¥79.00
店铺售价:¥31.60 (为您节省:¥47.40
店铺库存:1
注:您当前是在入驻店铺购买,非有路网直接销售。
正在处理购买信息,请稍候……
我要买: * 如何购买
** 关于库存、售价、配送费等具体信息建议直接联系店主咨询。
联系店主:购买咨询请联系我  13556494203
本店已缴纳保证金,请放心购买!【如何赔付?】
买家对店铺的满意度评价:查看更多>>
评分
评价内容
评论人
订单图书
《Struts 2深入详解》内容提要:
2006年,WebWork与Struts这两个**的Java Web框架的开发团队,开始合作开发一个新的、结合了WebWork与Struts的优点,并且更加优雅、扩展性更强的框架,命名为“Struts 2”,并于2007年上半年推出了Struts 2的正式版本。本书讲解的是Struts 2中号称“*佳可用”的2.0.11版本。
本书*大的特点就是深入、详尽、解惑。
深入 本书深入剖析了Struts 2内部的运行机制,在知识的讲解上,结合了Web程序的运行机制与Struts 2框架的内部工作机制,以帮助读者更深入地掌握基于Struts 2的Web开发。
详尽 本书内容详尽,几乎涵盖了Struts 2中所有的知识点。本书力求在每一个知识点的讲解上都清晰明了,而不是简单地一带而过,让读者对所学的知识理解得更为透彻。
解惑 本书秉承作者一贯的让读者知其然而知其所以然的写作风格,在知识的讲解上,不光让读者知道怎么用这个知识,还让读者知道为什么要这么用。在问题的分析解决上,从根源入手,帮助读者了解问题发生的根本原因,培养读者发现问题、分析问题、解决问题的能力。
本书语言生动、
《Struts 2深入详解》图书目录:
第1章 认识Struts 2
1.1 什么是Web框架
1.1.1 模型1
1.1.2 模型2和MVC
1.1.3 Web框架的诞生
1.2 从Struts 1到Struts 2
1.2.1 其他Web框架
1.2.2 Struts 1的缺点
1.2.3 市场与技术的结合——Struts 2的诞生
1.3 准备开发环境
1.4 小结
第2章 Struts 2初体验
2.1 下载和安装Struts 2
2.2 使用Subversion来获取
2.2 Struts 2的源代码
2.3 Hello World程序
2.4 Struts 2项目开发总结
2.5 小结
第3章 由“登录”开始
3.1 使用领域对象接收用户输入
3.2 使用ModelDriven action
3.3 使用action的属性接收用户输入
3.4 访问request、session和application对象
3.4.1 与Servlet API解耦的访问方式
3.4.2 与Servlet API耦合的访问方式
3.5 小结
第4章 Struts 2架构剖析
4.1 XWork 2——Struts 2的基础
4.2 Struts 2的体系结构
4.3 Struts 2框架的调用流程
4.4 小结
第5章 Struts 2配置详解
5.1 Struts 2的配置文件
5.1.1 web.xml
5.1.2 struts.properties
5.1.3 struts-default.xml
5.1.4 struts.xml
5.1.5 struts-plugin.xml
5.1.6 静态内容
5.2 struts.xml配置详解
5.2.1 Bean配置
5.2.2 常量(Constant)的配置
5.2.3 包(Package)配置
5.2.4 名称空间(Namespace)配置
5.2.5 包含(Include)配置
5.2.6 拦截器(Interceptor)配置
5.2.7 Action配置
5.2.8 Result配置
5.2.9 异常(Exception)配置
5.3 配置Action
5.3.1 Action映射
5.3.2 使用method属性
5.3.3 动态方法调用
5.3.4 模拟Struts 1的ForwardAction
5.3.5 默认的action
5.3.6 通配符映射
5.4 配置Result
5.4.1 结果映射
5.4.2 结果类型
5.4.3 常用结果类型
5.4.3.1 dispatcher结果类型
5.4.3.2 redirect结果类型
5.4.3.3 redirectAction结果类型
5.4.3.4 plainText结果类型
5.4.4 全局结果
5.4.5 动态结果
5.4.6 在结果配置中使用参数
5.5 异常处理
5.6 使用注解配置Action
5.6.1 与Action配置相关的注解
5.6.2 使用注解配置Action的注意事项
5.6.3 使用注解配置Action的实例
5.7 小结
第6章 准备用户注册程序
6.1 创建数据库表
6.2 编写用户注册程序
6.3 解决中文乱码问题
6.4 Struts 2对依赖注入的支持
6.4.1 Spring插件
6.4.2 在用户注册程序中集成Spring
6.5 小结
第7章 Struts 2中的OGNL
7.1 为什么使用OGNL
7.2 OGNL基础
7.3 OGNL表达式
7.3.1 常量
7.3.2 操作符
7.3.3 访问JavaBean的属性
7.3.4 调用方法
7.3.5 调用静态方法和静态字段
7.3.6 调用构造方法
7.3.7 索引访问
7.3.7.1 数组和列表索引
7.3.7.2 JavaBean的索引属性
7.3.7.3 OGNL对象索引属性
7.3.8 对集合进行操作
7.3.8.1 创建集合
7.3.8.2 集合的伪属性
7.3.8.3 投影(projection)
7.3.8.4 选择(selection)
7.3.9 lambda表达式
7.4 OGNL的类型转换
7.5 Struts 2在OGNL基础上的增强
7.5.1 值栈(ValueStack)
7.5.2 [N]语法
7.5.3 top关键字
7.5.4 访问静态成员
7.5.5 值栈中的Action实例
7.5.6 Struts 2中的命名对象
7.6 与JSP 2.1的冲突
7.7 OGNL表达式的综合应用
7.8 小结
第8章 Struts 2的标签库
8.1 引用Struts 2的标签库
8.2 标签的语法
8.3 通用标签
8.3.1 数据标签
8.3.1.1 property标签
8.3.1.2 set标签
8.3.1.3 push标签
8.3.1.4 param标签
8.3.1.5 bean标签
8.3.1.6 action标签
8.3.1.7 include标签
8.3.1.8 url标签
8.3.1.9 i18n和text标签
8.3.1.10 date标签
8.3.1.11 debug标签
8.3.2 控制标签
8.3.2.1 if/elseif/else标签
8.3.2.2 iterator标签
8.3.2.3 append标签
8.3.2.4 merge标签
8.3.2.5 generator标签
8.3.2.6 subset标签
8.3.2.7 sort标签
8.4 UI标签
8.4.1 模板和主题
8.4.1.1 Struts 2支持的模板引擎
8.4.1.2 加载模板
8.4.1.3 选择主题
8.4.1.4 创建定制的主题
8.4.1.5 Struts 2内置的4种主题
8.4.2 表单标签
8.4.2.1 表单标签的公共属性
8.4.2.2 表单标签的name和value属性
8.4.2.3 ID名分配
8.4.2.4 form标签
8.4.2.5 textfield标签
8.4.2.6 password标签
8.4.2.7 textarea标签
8.4.2.8 select标签
8.4.2.9 optgroup标签
8.4.2.10 radio标签
8.4.2.11 checkbox标签
8.4.2.12 checkboxlist标签
8.4.2.13 doubleselect标签
8.4.2.14 combobox标签
8.4.2.15 optiontransferselect标签
8.4.2.16 updownselect标签
8.4.2.17 hidden标签
8.4.2.18 submit标签
8.4.2.19 reset标签
8.4.2.20 label标签
8.4.2.21 token标签
8.4.2.22 file标签
8.4.2.23 head标签
8.4.3 非表单标签
8.4.3.1 component标签
8.4.3.2 a标签
8.4.3.3 actionerror、actionmessage和fielderror标签
8.5 使用Struts 2的表单标签改写用户注册程序中的注册页面
8.6 小结
第9章 国际化
9.1 国际化与本地化
9.1.1 Locale
9.1.2 资源包
9.1.3 消息格式化
9.2 Struts 2对国际化的支持
9.2.1 Struts 2资源包的组织和加载方式
9.2.2 在消息文本中使用参数
9.2.3 访问国际化消息
9.3 将用户注册程序国际化
9.4 错误消息的国际化
9.5 Struts 2设定访问用户的locale的流程
9.6 为用户注册程序添加英文版本
9.7 小结
第10章 拦截器
10.1 拦截器的工作方式
10.2 编写拦截器类
10.3 Struts 2自带的拦截器
10.4 配置拦截器
10.5 PreResultListener接口
10.6 开发执行**验证的拦截器
10.7 使用拦截器注解
10.8 小结
第11章 类型转换
11.1 传统的数据处理过程
11.2 Struts 2对类型转换的支持
11.2.1 使用OGNL表达式命名参数
11.2.2 Struts 2内置的类型转换器
11.2.3 null属性的处理
11.2.4 对List、Map和Set的支持
11.2.4.1 使用List来保存图书信息的实例
11.2.4.2 使用Map来保存图书信息的实例
11.2.5 使用Set来保存图书信息的实例
11.3 创建自定义的类型转换器
11.4 类型转换错误的处理
11.5 使用类型转换注解
11.5.1 TypeConversion注解
11.5.2 Conversion注解
11.5.3 Element注解
11.5.4 Key注解
11.5.5 KeyProperty注解
11.5.6 CreateIfNull注解
11.6 小结
第12章 对输入数据进行验证
12.1 手动验证
12.1.1 在Action的execute()方法中进行验证
12.1.2 在validateXxx()方法中进行验证
12.1.3 在validate()方法中进行验证
12.2 使用验证框架
12.2.1 什么是验证器
12.2.2 注册验证器
12.2.3 开启验证
12.2.4 定义验证规则
12.2.5 验证文件的查找顺序
12.2.6 Struts 2内置的验证器
12.2.7 在用户注册程序中使用验证框架
12.2.8 确认密码的验证
12.2.9 短路验证
12.2.10 开发自己的验证器
12.2.11 使用visitor字段验证器复用验证
12.2.12 同时使用验证框架和手动验证
12.2.13 客户端JavaScript验证
12.3 使用验证注解
12.3.1 与验证相关的注解
12.3.2 在用户注册程序中使用验证注解
12.4 小结
第13章 使用FreeMarker作为表现层
13.1 FreeMarker简介
13.1.1 FreeMarker是什么
13.1.2 为什么要使用FreeMarker
13.2 FreeMarker的工作原理
13.2.1 模板+数据模型=输出
13.2.2 数据模型
13.2.2.1 scalar变量
13.2.2.2 hash和sequence变量
13.2.2.3 方法变量
13.2.2.4 宏变量
13.2.3 模板
13.3 FreeMarker的语法和操作
13.3.1 准备工作
13.3.2 表达式
13.3.2.1 直接指定值
13.3.2.2 访问变量
13.3.2.3 字符串操作
13.3.2.4 序列操作
13.3.2.5 散列操作
13.3.2.6 算术运算
13.3.2.7 比较操作
13.3.2.8 逻辑操作
13.3.2.9 内置函数
13.3.2.10 方法调用
13.3.2.11 缺少值处理操作符
13.3.2.12 操作符优先级
13.3.3 插值(interpolation)
13.3.4 指令
13.3.4.1 if/elseif/else指令
13.3.4.2 switch/case/default/break指令
13.3.4.3 list/break指令
13.3.4.4 include指令
13.3.4.5 import指令和名称空间
13.3.4.6 assign指令
13.3.4.7 global指令
13.3.4.8 local指令
13.3.4.9 setting指令
13.3.4.10 macro、nested和return指令
13.3.4.11 function和return指令
13.3.4.12 noparse指令
13.3.4.13 escape和noescape指令
13.3.5 内置函数
13.3.5.1 操作字符串
13.3.5.2 操作数字
13.3.5.3 操作日期
13.3.5.4 操作布尔值
13.3.5.5 操作序列
13.3.5.6 操作散列
13.3.6 在模板中定义变量
13.4 Struts 2对FreeMarker的支持
13.4.1 FreeMarker标签
13.4.2 在FreeMarker标签中
13.4.2 使用动态属性
13.4.3 JSP标签支持
13.4.4 变量解析与内置变量
13.4.5 访问Servlet/JSP范围对象
13.4.6 类型转换与本地化
13.5 在用户注册程序中使用FreeMarker来实现表现层
13.6 小结
第14章 使用SiteMesh控制页面布局
14.1 SiteMesh简介
14.2 下载并安装SiteMesh
14.3 感受SiteMesh
14.4 SiteMesh的工作原理
14.5 SiteMesh的标签库
14.5.1 decorator标签库
14.5.2 page标签库
14.6 在装饰器中获取原始页面的内容
14.7 装饰器的组合应用
14.8 装饰器映射器
14.9 Struts 2对SiteMesh的支持
14.10 在用户注册程序中使用SiteMesh进行页面布局
14.10.1 使用JSP作为表现层
14.10.2 使用FreeMarker作为表现层
14.11 小结
第15章 避免表单重复提交与等待页面
15.1 避免表单重复提交
15.1.1 避免表单重复提交的实现原理
15.1.2 Struts 2的实现方式
15.1.3 使用TokenInterceptor
15.1.4 使用TokenSessionStoreInterceptor
15.2 自动显示等待页面
15.2.1 ExecuteAndWaitInterceptor 的工作机制
15.2.2 使用ExecuteAndWaitInterceptor
15.3 小结
第16章 文件上传和下载
16.1 文件上传
16.1.1 基于表单的文件上传
16.1.2 文件上传格式分析
16.1.3 Struts 2对文件上传的支持
16.1.4 在Struts 2中实现文件上传
16.1.5 对文件上传进行更多的控制
16.1.6 多文件上传
16.2 文件下载
16.2.1 Struts 2对文件下载的支持
16.2.2 在Struts 2中实现文件下载
16.2.3 改进下载程序
16.3 小结
第17章 在Struts 2中实现CRUD
17.1 准备工作
17.2 文章分类的CRUD操作
17.3 小结
第18章 Struts 2对Ajax的支持
18.1 Ajax快速入门
18.1.1 Ajax简介
18.1.2 DOM
18.1.3 XMLHttpRequest
18.2 Ajax应用开发
18.2.1 使用XML作为数据的载体
18.2.2 使用JSON串作为数据的载体
18.2.2.1 理解JSON
18.2.2.2 下载JSON的Java实现
18.2.2.3 下载JSON的JavaScript脚本
18.2.2.4 使用JSON作为图书信息的数据
18.2.2.2 格式
18.2.3 使用Dojo简化Ajax应用的开发
18.2.3.1 Dojo概述
18.2.3.2 下载Dojo工具包
18.2.3.3 在ch18 Web程序中使用Dojo
18.3 在Struts 2中使用JSON插件
18.3.1 JSON插件
18.3.1.1 JSON插件概述
18.3.1.2 定制序列化和反序列化
18.3.1.3 下载JSON插件
18.3.2 使用JSON插件的实例
18.4 Struts 2的Ajax标签
18.4.1 Ajax标签的基础知识
18.4.1.1 共同的属性
18.4.1.2 等待指示符
18.4.1.3 事件发布/订阅模型
18.4.1.4 URL
18.4.1.5 阻止请求
18.4.2 使用Ajax标签前的准备工作
18.4.3 div标签
18.4.4 submit标签
18.4.5 a标签
18.4.6 tabbedPanel标签
18.4.7 autocompleter标签
18.4.7.1 autocompleter标签简介
18.4.7.2 准备工作
18.4.7.3 autocompleter标签用法详析
18.4.8 tree和treenode标签
18.4.8.1 用tree和treenode标签构建静态树
18.4.8.2 用tree标签构建动态树
18.5 Struts 2对DWR的支持
18.6 小结
第19章 集成Hibernate和Spring
19.1 Hibernate简介
19.2 Hibernate的下载和安装
19.3 Hibernate快速入门
19.3.1 配置文件
19.3.2 主要接口和类
19.3.3 总结
19.4 在Struts 2中集成Hibernate
19.5 集成Spring
19.6 小结
第20章 在Struts 2中开发Struts 1的Web应用
20.1 Struts 1插件
20.1.1 Struts 1插件的工作原理
20.1.2 使用Struts 1插件
20.2 用户注册实例
20.2.1 准备工作
20.2.2 阶段1:简单的Struts 1 Action
20.2.3 阶段2:带有ActionForm的Struts 1 Action
20.2.4 阶段3:添加手动验证
20.2.5 阶段4:使用CommonsValidator验证框架
20.3 小结
附录A Struts 1与Struts 2的对比
附录B WebWork 2与Struts 2的对比
附录C 从WebWork 2移植到Struts 2
《Struts 2深入详解》文章节选:
第1章 认识Struts 2
本章要点
掌握MVC架构模式
 理解Web框架是什么
 弄清楚Struts 1、Struts 2和WebWork三者之间的关系
 搭建本书的开发环境
Struts 2已经推出了稳定的版本,其先进的架构和设计思想,随着时间的推移,相信会有越来越多的人开始使用Struts 2。基于Struts原有的人气,加上采用了WebWork的设计架构,Struts 2必将成为*为流行的Web开发框架之一。
1.1 什么是Web框架
随着Internet的发展,基于HTTP协议和HTML标准的Web应用呈几何数量级增长,人们在不知不觉中已经被网络悄悄地改变了生活。在网络普及之前,我们购买图书要去书店,给亲人汇钱要去邮局或者银行,而现在,一切都是这么便捷,你可以在网上购买图书、汇款、缴纳电话费,你甚者可以为远在他乡的女朋友订购一束玫瑰。各种各样的网上业务丰富了我们的生活,节省了我们的时间,提高了我们的工作效率,改善了我们的生活品质。
支撑这些网上业务的就是各种各样的Web应用,而这些Web应用又是用各种Web技术开发的。早期的Web应用主要是静态页面的浏览(如新闻的浏览),这些静态页面使用HTML语言来编写。随着网络的发展,很多线下业务开始向网上发展,基于Internet的Web应用也变得越来越复杂,不但要和数据库交互,而且还要和用户进行交互,由此衍生出了各种服务器端页面编写技术,目前应用得较多的三种服务器端页面编写技术就是ASP、JSP和PHP。
JSP通过在HTML页面文件中嵌入Java脚本代码,从而实现动态网页功能。HTML标签负责页面的布局和显示外观,Java代码负责提取动态数据,实现业务逻辑。对于简单的应用,采用这种方式可以简化开发难度,加快开发进度;然而,对于一些较大的应用,大量的HTML和Java代码的混杂导致了页面的显示逻辑和业务逻辑交错在一起,使得代码的可读性变差,维护难度增加,不利于HTML编辑人员和Java开发人员的分工协作。
为了分离页面的表现逻辑和业务逻辑,使程序各部分的职责更加清晰,增强代码的可维护性,SUN公司在JSP的早期规范中制定了两种JSP开发模型,分别为模型1(Model 1)和模型2(Model 2)。
1.1.1 模型1
模型1使用JSP+JavaBeans技术将页面显示和业务逻辑处理分开。JSP实现页面的显示,JavaBean对象用来承载数据和实现业务逻辑。模型1的结构如图1-1所示。
图1-1 模型1的JSP架构
在模型1中,JSP页面独自响应请求并将处理结果返回给客户,所有的数据通过JavaBean来处理,JSP实现页面的显示。
我们看一个按照模型1的结构实现的用户登录的例子。在这个例子中有两个JavaBean类,UserBean和UserCheckBean,UserBean对象负责保存用户数据,UserCheckBean对象负责实现对用户登录信息进行验证的业务逻辑。
UserBean的代码片段如例1-1所示。
例1-1 UserBean.java
通过这个例子可以看到,模型1将页面显示和业务逻辑进行了分离,不足之处是在JSP页面中仍然需要编写流程控制和调用JavaBean的代码,当需要处理的业务逻辑非常复杂时,这种情况会变得更加糟糕。在JSP页面中嵌入过多的Java代码将会使程序变得异常复杂,对于前端页面设计人员来说,大量的嵌入代码使他们无从下手。
模型1不能满足大型应用的需要,但是对于小型应用,由于该模型简单,且不涉及过多的要素,可以很好地满足小型应用的需要。所以在简单应用中,应该优先考虑模型1。
1.1.2 模型2和MVC
在模型1中,JSP页面嵌入了流程控制代码和部分的逻辑处理代码,我们可以将这部分代码提取出来,放到一个单独的角色中,这个角色就是控制器角色,而这样的Web架构就是模型2了。模型2符合MVC架构模式,MVC即模型-视图-控制器(Model-View-Controller)。
MVC架构有助于将应用程序分割成若干逻辑部件,使程序设计变得更加容易。MVC架构提供了一种按功能对各种对象进行分割的方法(这些对象是用来维护和表现数据的),其目的是为了将各对象间的耦合程度降至*低。MVC架构原本是为了将传统的输入(input)、处理(processing)和输出(output)任务运用到图形化用户交互模型中而设计的,但是,将这些概念运用到基于Web的企业级多层应用领域也是很适合的。
在MVC架构中,一个应用被分成三个部分:模型(Model)、视图(View)和控制器(Controller)。
模型代表应用程序的数据以及用于访问控制和修改这些数据的业务规则。当模型发生改变时,它会通知视图,并为视图提供查询模型相关状态的能力。同时,它也为控制器提供访问封装在模型内部的应用程序功能的能力。
视图用来组织模型的内容。它从模型那里获得数据并指定这些数据如何表现。当模型变化时,视图负责维护数据表现的一致性。视图同时将用户的请求通知控制器。
控制器定义了应用程序的行为。它负责对来自视图的用户请求进行解释,并把这些请求映射成相应的行为,这些行为由模型负责实现。在独立运行的GUI客户端,用户的请求可能是一些鼠标单击或是菜单选择操作。在一个Web应用程序中,它们的表现形式可能是一些来自客户端的GET或POST的HTTP请求。模型所实现的行为包括处理业务和修改模型的状态。根据用户请求和模型行为的结果,控制器选择一个视图作为对用户请求的响应。图1-2描述了在MVC应用程序中模型、视图、控制器三部分的关系。
在JSP模型2中,控制器的角色由Servlet来实现,视图的角色由JSP页面来实现,模型的角色由JavaBean来实现。模型2的架构如图1-3所示。
Servlet充当控制器的角色,它接受请求,并且根据请求信息将它们分发给相应的JSP页面来产生响应。Servlet控制器还根据JSP视图的需求生成JavaBean的实例并输出给JSP环境。JSP视图可以通过直接调用JavaBean实例的方法或使用和动作元素来得到JavaBean中的数据。
下面我们按照模型2的架构重写用户登录验证的程序。在本例中,两个JavaBean类(UserBean和UserCheckBean)和welcome.jsp仍然用模型1例子中的程序,主要增加作为控制器使用的Servlet。
在模型2的login.jsp中,我们增加了一个隐藏输入域,如下:
服务器端的控制器可以根据这个隐藏字段的值来判断用户是请求登录表单,还是提交登录信息。
ControllerServlet类充当控制器,它接收用户的请求,根据请求的不同进行相应的处理,并选择对应的视图呈现给用户。例如,当用户提交登录表单时,ControllerServlet实例化UserBean对象保存用户登录信息,实例化UserCheckBean对象对用户登录信息进行验证,并根据登录成功与否选择欢迎或者失败页面呈现给用户。ControllerServlet类的代码如例1-6所示。
完整的代码请参看本书配套光盘中的ch01目录,测试时,输入URL:
http://localhost:8080/ch01/model2/login
本例中的JSP页面不包含任何的流程控制和业务处理逻辑,它只是简单地检索控制器创建的JavaBean对象,然后动态内容插入到预定义的页面模板中。
采用模型2的架构,可以将页面的显示、业务逻辑的处理和流程的控制很清晰地区分开,JSP负责数据的显示,JavaBean负责承载数据以及业务逻辑的处理,Servlet负责流程的控制。采用模型2架构的Web应用程序很容易维护和扩展,因为作为视图的JSP页面之间没有直接的关联。另外,在大型项目的开发过程中,采用模型2的架构,可以充分利用前端页面设计人员和后端Java开发人员所掌握的不同技能,页面设计人员可以发挥自己的美术和设计才能来表现页面,程序开发人员可以发挥自己擅长逻辑思维的特点,实现项目中的业务逻辑处理。
在项目中,采用哪种模型要根据实际的业务需求来确定。一般来说,对于小型的、业务逻辑处理不多的应用,采用模型1比较合适。如果应用有着较复杂的逻辑,并且返回的视图也不同,那么采用模型2较为合适。
1.1.3 Web框架的诞生
基于MVC架构模式开发的Web应用程序,容易出现多个控制器,在编写控制器时,对于页面导航的处理也会比较复杂。通过对基于MVC架构的Web应用程序进行分析,可以发现一些实现上的相同之处和不同之处。相同之处就是MVC架构的调用流程:
(1)所有的请求直接访问控制器,由控制器对请求进行分发;
(2)控制器实例化JavaBean对象,由JavaBean对象处理业务逻辑,以及承载数据;
(3)控制器根据请求处理的结果,向用户呈现相应的视图。
不同之处是:
(1)用户请求URL的不同对应了不同的处理单元;
(2)不同表单提交的数据需要不同的JavaBean对象来保存数据;
(3)请求处理结果的不同导致控制器向用户呈现视图的不同。
根据这些相同和不同之处,我们可以开发这样一种Web软件,它按照MVC架构实现整个调用流程,对于需要变化的地方(即上述的不同之处),采用外部配置文件的方式来解决,一种可行的配置文件如例1-7所示。
例1-7 配置文件的一种实现(采用XML文件格式)
……
《Struts 2深入详解》作者介绍:
孙鑫,**IT培训专家,具有多年的软件开发和教育培训经验,曾主讲过的课程包括C/C++、VC++、COM\DCOM\COM+、SQL Server、Oracle、Java、J2EE等。2004年曾推出《Java无难事》和《VC++深入编程》教学视频,获得了强烈的反响,在网络上掀起了一股视频教学的风潮,无数热爱编程的学员通过这两套视频走上了软件开发的道路。 2006年5月和6月,相继推出了《Java Web开发详解》和《VC++深入详解》两本著作。近年来一直从事高端编程语言培训和技术书籍的撰写,于2004年7月创建了程序员之家网站(http://www.sunxin.org)