书籍详情
Java开放源码编程
作者:(美)Joe Walnes[等]著;甄山,甄镭译;甄山译
出版社:电子工业出版社
出版时间:2005-01-01
ISBN:9787121005145
定价:¥35.00
购买这本书可以去
内容简介
本书特色:本书是由Java开放源码领域的顶尖高手编写的,展示了如何使用最好的开放源码工具来开发J2EE应用。这些开放源码工具的组合使用可以减少实际应用中的Bug,并可以提高整个系统的稳定性和健壮性。本书用一个基于Web的宠物商店:PetSoar的开发作为实例,展示了整个项目的开发过程,在这个过程中,作者更关注于开发易于维护和灵活的应用,而不是仅仅展示最终结果。同时,作者为在开发过程的各个阶段应用开放源码的软件构件提供了一套方法。本书包含以下内容:开放源码工具和应用开发技术高质量的开放潭码项目:JUint、Hibemate、WebWork、SiteMesh、Lucene和XDoclet等用开放源码工具创建PetSoar读者可以在本书中找到以下问题的答案:●如何将开放源码项目与开发过程相结合?●如何选择合适的开放源码项目?●如何进行单元测试与集成测试?●如何更有效地实现程序员之间的交流?本书供各级Java程序员阅读。本书介绍了如何通过使用开放源码工具来构建一个现实的应用,以提高开发效率,降低企业开发费用。本书共分三个部分,使基本概念、使用工具和开发应用三个过程贯穿于读者的学习当中。特别是本书提及的开发者工具箱,包含了诸多的开放源码项目,它们都是与J2EE长期协同工作的结晶。而且,书中的实例使通过重新创作著名的SunJava蓝图:PetStore应用,将JUnit、Ant、Hibernate、WebWork、SiteMesh、XDoclet以及Lucene等工具的应用演绎得淋漓尽致,有利于读者在开发过程中提高可用性、结构简洁性和复用性的能力。本书适合于希望学习Java开放源码技术的程序员阅读。
作者简介
Joe Walnes是ThoughtWorks(www.thoughtworks.com)的技术顾问,这是一家专门为企业的技术发展提供服务的系统集成公司。Joe Walnes的学术研究领域集中在为软件开发设计者提供极限编程指导,为面向对象和面向组件系统提供设计技术支持,以及简化J2EE的开发。在他的(很少的)业余时间中,致力于开放源码项目的研究工作。他的许多工作项目和论文可在www.opensymphony.com和www.codehaus.org中找到。Ara Abrahamian是一名为企业Java开发提供技术支持和服务的自由顾问。他参与了遍布全球的各种J2EE项目。他的技术专长包括代码生成、面向属性程序设计和软件自动化技术。同时他也积极参与许多开放源码项目的研究工作,并且是XDoclet项目的领导人。他对采用轻量级的方法方面,如大型分布式开发团队的极限编程(XP)也感兴趣。
目录
第1部分 介 绍
第1章 本书概述
1. 1 使用开放源码技术
1. 2 了解设计和开发理论
1. 2. 1 先测试
1. 2. 2 少即多
1. 2. 3 总是问傻问题
1. 3 考察PetSoar项目
1. 4 抓住基础
小结
第2章 应用概况
2. 1 另一个宠物商店
2. 2 了解可维护性的重要性
2. 3 了解PetSoar的需求
2. 4 检查结构和技术
2. 4. 1 查看结构
2. 4. 2 查看实用库
2. 4. 3 使用存留和搜索
2. 4. 4 使用Web前端
2. 5 测试
小结
第2部分 建立开放源码工具箱
第3章 用JUnit进行单元测试
3. 1 测试的类型
3. 2 使用JUnit
3. 2. 1 JUnit的特征
3. 2. 2 写一个单元测试
3. 2. 3 运行一个单元测试
3. 2. 4 运行多个测试
3. 2. 5 你需要知道JUnit的一切
小结
第4章 用MOCks测试对象的交互作用
4. 1 测试对象的交互作用
4. 1. 1 考察测试状态中的一些易犯错误
4. 1. 2 探索替换物:测试交互作用
4. 2 使用模拟对象
4. 2. 1 实例场景
4. 2. 2 了解模拟对象的角色
4. 2. 3 了解模拟对象库
4. 2. 4 使用动态模拟
小结
第5章 用Hibernate存储对象
5. 1 了解持久化的复杂性
5. 2 用Hibemate2持久化对象
5. 2. 1 创建持久类
5. 2. 2 映射类到数据库中
5. 2. 3 配置Hibernate
5. 2. 4 获得一个会话
5. 2. 5 在数据库中存储对象
5. 2. 6 从数据库中检索对象
5. 2. 7 查询对象
5. 2. 8 持久化对象间的联系
5. 3 持久化层次结构对象
5. 4 了解Hibemate工具箱
5. 5 Hibemate同其他竞争技术的比较
5. 5. 1 Hibernate与EJB
5. 5. 2 Hibemate与JDO
5. 5. 3 Hibernate与DAO框架
小结
第6章 使用WebWork实现MVC模式
6. 1 了解模型视图控制器
6. 1. 1 检查模型层
6. 1. 2 检查视图层
6. 1. 3 检查控制器层
6. 1. 4 把全部层联系在一起
6. 1. 5 考证使用MVC的理由
6. 2 了解MVC. WebWork和XWork
6. 2. 1 考察XWork
6. 2. 2 考察WebWork
6. 3 进一步了解活动
6. 3. 1 一个简单的XWork实例
6. 3. 2 配置XWork
6. 3. 3 构造活动(活动组成)
6. 3. 4 从XWork中调用一个活动
6. 3. 5 使用参数和ActionContext
6. 4 应用物理学中的牛顿第三定律
6. 4. 1 了解XWork结果和活动链
6. 4. 2 考察WebWork结果和Servlet环境
6. 4. 3 配置WebWork
6. 4. 4 了解调度的角色
6. 4. 5 考察JSP和Velocity中的视图实例
6. 4. 6 基于组件的Web开发
6. 5 表达你自己
6. 5. 1 使用基础表达式
6. 5. 2 使用高级表达式
6. 5. 3 了解ValueStack
6. 6 考察类型转换
6. 6. 1 深入研究一个日期实例
6. 6. 2 指定默认转换规则
6. 6. 3 指定新的转换规则
6. 7 采用截取器分离事务
6. 7. 1 配置截取器栈
6. 7. 2 使用记录截取器
6. 7. 3 构建自己的截取器
6. 8 Validation--一个强大的截取器
6. 8. 1 考察一个没有使用XWork验证框架的实例
6. 8. 2 考察一个采用XWork验证框架的实例
6. 8. 3 使用内置的和用户自定义的验证
6. 8. 4 使用验证表达式
小结
第7章 用SiteMesh简化布局
7. 1 识别布局的问题
7. 2 使用面向对象的解决方案
7. 2. 1 装饰器设计模式
7. 2. 2 组合设计模式
7. 2. 3 结合模式
7. 3 用SiteMesh实现解决方案
7. 3. 1 SiteMesh的基本原理
7. 3. 2 创建一个装饰器
7. 3. 3 组成网页
7. 3. 4 考察SiteMesh
7. 4 使用技巧
7. 4. 1 将装饰器分组
7. 4. 2 不要惧怕引用
7. 4. 3 CSS是你的朋友
7. 4. 4 最小化HTML
7. 4. 5 分散关注点
小结
第8章 用Lucene添加搜索能力
8. 1 了解搜索的复杂性
8. 2 Lucene简介
8. 2. 1 了解Lucene的元素
8. 2. 2 索引一个文件
8. 2. 3 搜索文件
8. 2. 4 重新索引和删除一个已索引的文档
8. 2. 5 使用高级搜索
8. 2. 6 定制标志的进程
小结
第9章 用XDoclet生成配置文件
9. 1 XDOclet简介
9. 2 用XDoclet了解面向属性编程
9. 2. 1 了解属性的语法
9. 2. 2 运行XDoclet
9. 2. 3 用XDoclet应用高级的Hibernate或映射
9. 2. 4 使用XDoclet生成更复杂的工件
9. 2. 5 了解XDoclet任务和子任务
9. 2. 6有效地使用XDoclet
小结
第10章 交流与工具
10. 1 考察PetSoar开发
10. 2 管理不完善的交流
10. 2. 1 用一切可能的方法交流
10. 2. 2 使用源码交流
10. 2. 3 使用交流作为学习的工具
10. 3 考察工具箱
10. 3. 1 源代码配置管理--CVS
10. 3. 2 知识管理--WiKi
10. 3. 3 邮件目录--Maio~omo
10. 3. 4 实时讨论--IRC和即时消息
10. 3. 5 1DE-IDEA和Eclipse
10. 3. 6 问题追踪和任务管理--JIRA
10. 4 使用连续集成
10. 5 把工具连接在一起
小结
第11章 省时工具
11. 1 了解实用组件
11. 2 了解OSCache
11. 2. 1 介绍SampleNews. com
11. 2. 2 使用LOOP测试
11. 2. 3 考察OSCache标识符库
11. 2. 4 了解OSCache概念
11. 2. 5 缓存时间实例
11. 2. 6 查看高级的OSCache特征
11. 3 了解CommonsLang
11. 3. 1 考察最有用的类
11. 3. 2 使用Builder类
11. 4 了解Commons Collections
11. 5 了解Commons Logging
11. 5. 1 考察Commons Logging的优点
11. 5. 2 一个简单的实例
11. 6 了解Commons Digester
11. 6. 1 考察一个Digester实例
11. 6. 2 了解Digester规则
小结
第3部分 开发应用
第12章 建立开发环境
12. 1 在IDE内工作
12. 1. 1 问题:IDE不是自动化的
12. 1. 2 解决办法:自动构建工具
12. 2 将Ant用于你全部的构建需要
12. 2. 1 问题:Ant不是万灵药
12. 2. 2 解决办法:使用有意义的方法
12. 3 使用杂交处理方法
12. 4 组织你的项目
12. 4. 1 通过类型组织文件结构
12. 4. 2 通过部署组织文件结构
12. 4. 3 选择一个结构
12. 4. 4 PetSoar怎样
12. 5 管理单元测试
12. 5. 1 了解测试类型
12. 5. 2 考察测试小组. JUnit和批量测试
12. 6 使用版本控制
12. 7 部署PetSoar
小结
第13章 了解测试驱动开发
13. 1 为什么先测试
13. 1. 1 先测试与后测试
13. 1. 2 锁定需求
13. 2 了解测试技术
13. 2. 1 将单元测试与代码放在同一程序包中
13. 2. 2 从不跳过失败的测试
13. 2. 3 使用模拟对象孤立无法测试部分
13. 2. 4 何时使用接口和类
13. 2. 5 保持简洁
13. 2. 6 自顶向下工作
13. 2. 7 使用许多小的对象
13. 2. 8 保证测试组快速运行
13. 2. 9 避免静态和单件
13. 3 测试TDD循环
13. 3. 1 使用TDD的实例场景
13. 3. 2 实例场景重访
13. 3. 3 加强功能
小结
第14章 管理生命周期和组件依赖,
14. 1 了解组件和服务
14.
14. 2. 1 使用直接实例化
14. 2. 2 使用工厂
14. 2. 3 使用注册
14. 2. 4 使用容器
14. 3 了解组件生命周期
14. 4 了解反转控制
14. 4. 1 考察优点
14. 4. 2 考察缺点
14. 5 了解分离关注点(Separation of Concerns)
14. 6 使用容器来定义范围
14. 7 使用XWork的容器
14. 7. 1 配置容器
14. 7. 2 了解容器是如何工作的
14. 8 测试XWork组件
小结
第15章 定义域模型
15. 1 考虑域模型的优势
15. 2 处理层
15. 2. 1 层驱动与特性驱动方法的比较
15. 2. 2 选择自底向上. 自顶向下. 中间分离
15. 3 确定当前的目标
15. 4 向店中添加一个宠物
15. 4. 1 使用Hibernate实现PersistenceManager
15. 4. 2 我们的进展
15. 5 检索宠物
15. 5. 1 检索一个单一的宠物
15. 5. 2我们的进展
15. 6 持续分类目录
15. 6. 1 我们的进展
15. 6. 2 实现Category-Pet关联
15. 6. 3 我们的进展
15. 7 考虑性能和可维护性
小结
第16章 创建基于Web的界面
16. 1 添加一个宠物
16. 1. 1 创建AddPet活动
16. 1. 2 为AddPet创建视图
16. 1. 3 把全部连在一起试用
16. 2 显示一个宠物
16. 2. 1 创建一个ViewPet活动
16. 2. 2 重构活动
16. 3 编辑宠物
16. 3. 1 检查有效性
16. 3. 2 把全部连接在一起--第二次试用
16. 4 把宠物从这里拿走
16. 5 重构CRUD
16. 5. 1 消除在ViewPet和RemovePet中的重复
16. 5. 2 剩下的工作
16. 5. 3 完成最后一个重构
16. 5. 4 解耦验证
16. 6 更换宠物
小结
第17章 定义导航. 布局. 视觉和感觉
17. 1 组件化窗口组件表单
17. 2 形成更美妙的视感和感觉
17. 3 使用样式化风格
17. 4 导航到更好的用户界面
小结
第18章 实现浏览和查询功能
18. 1 定义应用需求
18. 2 浏览分类列表
18. 3 浏览宠物列表
18. 4 搜索商店中的宠物
18. 4. 1 实现LuceneSearcher
18. 4. 2 实现Lucenelndexer
18. 4. 3 进行到哪里了
18. 4. 4 查询任何类型的数据
18. 4. 5 进行到哪里了
18. 4. 6 实现全文检索
18. 4. 7实现分页
18. 5 把它组装起来
小结
第19章 增加购物车
19. 1 创建购物车
19. 2 创建WebWork活动
19. 3 购物车结账
小结
第20章 保护应用
20. 1 理解J2EE安全模型
20. 2 简化安全
20. 2. 1 使用HTTP请求包装器
20. 2. 2 使用安全过滤器
20. 2. 3 使用登录过滤器
20. 2. 4 在保护下工作
20. 3 使用更优雅的方法
小结
第1章 本书概述
1. 1 使用开放源码技术
1. 2 了解设计和开发理论
1. 2. 1 先测试
1. 2. 2 少即多
1. 2. 3 总是问傻问题
1. 3 考察PetSoar项目
1. 4 抓住基础
小结
第2章 应用概况
2. 1 另一个宠物商店
2. 2 了解可维护性的重要性
2. 3 了解PetSoar的需求
2. 4 检查结构和技术
2. 4. 1 查看结构
2. 4. 2 查看实用库
2. 4. 3 使用存留和搜索
2. 4. 4 使用Web前端
2. 5 测试
小结
第2部分 建立开放源码工具箱
第3章 用JUnit进行单元测试
3. 1 测试的类型
3. 2 使用JUnit
3. 2. 1 JUnit的特征
3. 2. 2 写一个单元测试
3. 2. 3 运行一个单元测试
3. 2. 4 运行多个测试
3. 2. 5 你需要知道JUnit的一切
小结
第4章 用MOCks测试对象的交互作用
4. 1 测试对象的交互作用
4. 1. 1 考察测试状态中的一些易犯错误
4. 1. 2 探索替换物:测试交互作用
4. 2 使用模拟对象
4. 2. 1 实例场景
4. 2. 2 了解模拟对象的角色
4. 2. 3 了解模拟对象库
4. 2. 4 使用动态模拟
小结
第5章 用Hibernate存储对象
5. 1 了解持久化的复杂性
5. 2 用Hibemate2持久化对象
5. 2. 1 创建持久类
5. 2. 2 映射类到数据库中
5. 2. 3 配置Hibernate
5. 2. 4 获得一个会话
5. 2. 5 在数据库中存储对象
5. 2. 6 从数据库中检索对象
5. 2. 7 查询对象
5. 2. 8 持久化对象间的联系
5. 3 持久化层次结构对象
5. 4 了解Hibemate工具箱
5. 5 Hibemate同其他竞争技术的比较
5. 5. 1 Hibernate与EJB
5. 5. 2 Hibemate与JDO
5. 5. 3 Hibernate与DAO框架
小结
第6章 使用WebWork实现MVC模式
6. 1 了解模型视图控制器
6. 1. 1 检查模型层
6. 1. 2 检查视图层
6. 1. 3 检查控制器层
6. 1. 4 把全部层联系在一起
6. 1. 5 考证使用MVC的理由
6. 2 了解MVC. WebWork和XWork
6. 2. 1 考察XWork
6. 2. 2 考察WebWork
6. 3 进一步了解活动
6. 3. 1 一个简单的XWork实例
6. 3. 2 配置XWork
6. 3. 3 构造活动(活动组成)
6. 3. 4 从XWork中调用一个活动
6. 3. 5 使用参数和ActionContext
6. 4 应用物理学中的牛顿第三定律
6. 4. 1 了解XWork结果和活动链
6. 4. 2 考察WebWork结果和Servlet环境
6. 4. 3 配置WebWork
6. 4. 4 了解调度的角色
6. 4. 5 考察JSP和Velocity中的视图实例
6. 4. 6 基于组件的Web开发
6. 5 表达你自己
6. 5. 1 使用基础表达式
6. 5. 2 使用高级表达式
6. 5. 3 了解ValueStack
6. 6 考察类型转换
6. 6. 1 深入研究一个日期实例
6. 6. 2 指定默认转换规则
6. 6. 3 指定新的转换规则
6. 7 采用截取器分离事务
6. 7. 1 配置截取器栈
6. 7. 2 使用记录截取器
6. 7. 3 构建自己的截取器
6. 8 Validation--一个强大的截取器
6. 8. 1 考察一个没有使用XWork验证框架的实例
6. 8. 2 考察一个采用XWork验证框架的实例
6. 8. 3 使用内置的和用户自定义的验证
6. 8. 4 使用验证表达式
小结
第7章 用SiteMesh简化布局
7. 1 识别布局的问题
7. 2 使用面向对象的解决方案
7. 2. 1 装饰器设计模式
7. 2. 2 组合设计模式
7. 2. 3 结合模式
7. 3 用SiteMesh实现解决方案
7. 3. 1 SiteMesh的基本原理
7. 3. 2 创建一个装饰器
7. 3. 3 组成网页
7. 3. 4 考察SiteMesh
7. 4 使用技巧
7. 4. 1 将装饰器分组
7. 4. 2 不要惧怕引用
7. 4. 3 CSS是你的朋友
7. 4. 4 最小化HTML
7. 4. 5 分散关注点
小结
第8章 用Lucene添加搜索能力
8. 1 了解搜索的复杂性
8. 2 Lucene简介
8. 2. 1 了解Lucene的元素
8. 2. 2 索引一个文件
8. 2. 3 搜索文件
8. 2. 4 重新索引和删除一个已索引的文档
8. 2. 5 使用高级搜索
8. 2. 6 定制标志的进程
小结
第9章 用XDoclet生成配置文件
9. 1 XDOclet简介
9. 2 用XDoclet了解面向属性编程
9. 2. 1 了解属性的语法
9. 2. 2 运行XDoclet
9. 2. 3 用XDoclet应用高级的Hibernate或映射
9. 2. 4 使用XDoclet生成更复杂的工件
9. 2. 5 了解XDoclet任务和子任务
9. 2. 6有效地使用XDoclet
小结
第10章 交流与工具
10. 1 考察PetSoar开发
10. 2 管理不完善的交流
10. 2. 1 用一切可能的方法交流
10. 2. 2 使用源码交流
10. 2. 3 使用交流作为学习的工具
10. 3 考察工具箱
10. 3. 1 源代码配置管理--CVS
10. 3. 2 知识管理--WiKi
10. 3. 3 邮件目录--Maio~omo
10. 3. 4 实时讨论--IRC和即时消息
10. 3. 5 1DE-IDEA和Eclipse
10. 3. 6 问题追踪和任务管理--JIRA
10. 4 使用连续集成
10. 5 把工具连接在一起
小结
第11章 省时工具
11. 1 了解实用组件
11. 2 了解OSCache
11. 2. 1 介绍SampleNews. com
11. 2. 2 使用LOOP测试
11. 2. 3 考察OSCache标识符库
11. 2. 4 了解OSCache概念
11. 2. 5 缓存时间实例
11. 2. 6 查看高级的OSCache特征
11. 3 了解CommonsLang
11. 3. 1 考察最有用的类
11. 3. 2 使用Builder类
11. 4 了解Commons Collections
11. 5 了解Commons Logging
11. 5. 1 考察Commons Logging的优点
11. 5. 2 一个简单的实例
11. 6 了解Commons Digester
11. 6. 1 考察一个Digester实例
11. 6. 2 了解Digester规则
小结
第3部分 开发应用
第12章 建立开发环境
12. 1 在IDE内工作
12. 1. 1 问题:IDE不是自动化的
12. 1. 2 解决办法:自动构建工具
12. 2 将Ant用于你全部的构建需要
12. 2. 1 问题:Ant不是万灵药
12. 2. 2 解决办法:使用有意义的方法
12. 3 使用杂交处理方法
12. 4 组织你的项目
12. 4. 1 通过类型组织文件结构
12. 4. 2 通过部署组织文件结构
12. 4. 3 选择一个结构
12. 4. 4 PetSoar怎样
12. 5 管理单元测试
12. 5. 1 了解测试类型
12. 5. 2 考察测试小组. JUnit和批量测试
12. 6 使用版本控制
12. 7 部署PetSoar
小结
第13章 了解测试驱动开发
13. 1 为什么先测试
13. 1. 1 先测试与后测试
13. 1. 2 锁定需求
13. 2 了解测试技术
13. 2. 1 将单元测试与代码放在同一程序包中
13. 2. 2 从不跳过失败的测试
13. 2. 3 使用模拟对象孤立无法测试部分
13. 2. 4 何时使用接口和类
13. 2. 5 保持简洁
13. 2. 6 自顶向下工作
13. 2. 7 使用许多小的对象
13. 2. 8 保证测试组快速运行
13. 2. 9 避免静态和单件
13. 3 测试TDD循环
13. 3. 1 使用TDD的实例场景
13. 3. 2 实例场景重访
13. 3. 3 加强功能
小结
第14章 管理生命周期和组件依赖,
14. 1 了解组件和服务
14.
14. 2. 1 使用直接实例化
14. 2. 2 使用工厂
14. 2. 3 使用注册
14. 2. 4 使用容器
14. 3 了解组件生命周期
14. 4 了解反转控制
14. 4. 1 考察优点
14. 4. 2 考察缺点
14. 5 了解分离关注点(Separation of Concerns)
14. 6 使用容器来定义范围
14. 7 使用XWork的容器
14. 7. 1 配置容器
14. 7. 2 了解容器是如何工作的
14. 8 测试XWork组件
小结
第15章 定义域模型
15. 1 考虑域模型的优势
15. 2 处理层
15. 2. 1 层驱动与特性驱动方法的比较
15. 2. 2 选择自底向上. 自顶向下. 中间分离
15. 3 确定当前的目标
15. 4 向店中添加一个宠物
15. 4. 1 使用Hibernate实现PersistenceManager
15. 4. 2 我们的进展
15. 5 检索宠物
15. 5. 1 检索一个单一的宠物
15. 5. 2我们的进展
15. 6 持续分类目录
15. 6. 1 我们的进展
15. 6. 2 实现Category-Pet关联
15. 6. 3 我们的进展
15. 7 考虑性能和可维护性
小结
第16章 创建基于Web的界面
16. 1 添加一个宠物
16. 1. 1 创建AddPet活动
16. 1. 2 为AddPet创建视图
16. 1. 3 把全部连在一起试用
16. 2 显示一个宠物
16. 2. 1 创建一个ViewPet活动
16. 2. 2 重构活动
16. 3 编辑宠物
16. 3. 1 检查有效性
16. 3. 2 把全部连接在一起--第二次试用
16. 4 把宠物从这里拿走
16. 5 重构CRUD
16. 5. 1 消除在ViewPet和RemovePet中的重复
16. 5. 2 剩下的工作
16. 5. 3 完成最后一个重构
16. 5. 4 解耦验证
16. 6 更换宠物
小结
第17章 定义导航. 布局. 视觉和感觉
17. 1 组件化窗口组件表单
17. 2 形成更美妙的视感和感觉
17. 3 使用样式化风格
17. 4 导航到更好的用户界面
小结
第18章 实现浏览和查询功能
18. 1 定义应用需求
18. 2 浏览分类列表
18. 3 浏览宠物列表
18. 4 搜索商店中的宠物
18. 4. 1 实现LuceneSearcher
18. 4. 2 实现Lucenelndexer
18. 4. 3 进行到哪里了
18. 4. 4 查询任何类型的数据
18. 4. 5 进行到哪里了
18. 4. 6 实现全文检索
18. 4. 7实现分页
18. 5 把它组装起来
小结
第19章 增加购物车
19. 1 创建购物车
19. 2 创建WebWork活动
19. 3 购物车结账
小结
第20章 保护应用
20. 1 理解J2EE安全模型
20. 2 简化安全
20. 2. 1 使用HTTP请求包装器
20. 2. 2 使用安全过滤器
20. 2. 3 使用登录过滤器
20. 2. 4 在保护下工作
20. 3 使用更优雅的方法
小结
猜您喜欢