下载频道  >  suixinm的资源
  • Linux 指令大全

    Linux 指令大全 名称:cat 使用权限:所有使用者 使用方式:cat [-AbeEnstTuv] [--help] [--version] fileName 说明:把档案串连接后传到基本输出(萤幕或加 > fileName 到另一个档案) 参数: -n 或 --number 由 1 开始对所有输出的行数编号 -b 或 --number-nonblank 和 -n 相似,只不过对于空白行不编号 -s 或 --squeeze-blank 当遇到有连续两行以上的空白行,就代换为一行的空白行 -v 或 --show-nonprinting 范例: cat -n textfile1 > textfile2 把 textfile1 的档案内容加上行号后输入 textfile2 这个档案里 cat -b textfile1 textfile2 >> textfile3 把 textfile1 和 textfile2 的档案内容加上行号(空白行不 加)之后将内容附加到 textfile3 名称 : cd 使用权限 : 所有使用者 使用方式 : cd [dirName] 说明 : 变换工作目录至 dirName。 其中 dirName 表示法可为绝对路径或相对路径。若目 录名称省略,则变换至使用者的 home directory (也就是刚 login 时所在的目录)。 另外,"~" 也表示为 home directory 的意思,"." 则是表示目前所在的目录,".." 则表示目 前目录位置的上一层目录。 范例 : 跳到 /usr/bin/ : cd /usr/bin 跳到自己的 home directory : cd ~ 跳到目前目录的上上两层 : cd ../.. 指令名称 : chmod 使用权限 : 所有使用者 使用方式 : chmod [-cfvR] [--help] [--version] mode file... 说明 : Linux/Unix 的档案存取权限分为三级 : 档案拥有者、群组、其他。利用 chmod 可 以藉以控制档案如何被他人所存取。 把计 : mode : 权限设定字串,格式如下 : [ugoa...][[+-=][rwxX]...][,...],其中u 表示该档案的拥有者, g 表示与该档案的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆 是。 + 表示增加权限、- 表示取消权限、= 表示唯一设定权限。 r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该档案是个子目录或者该档 案已经被设定过为可执行。 -c : 若该档案权限确实已经更改,才显示其更改动作 -f : 若该档案权限无法被更改也不要显示错误讯息 -v : 显示权限变更的详细资料 -R : 对目前目录下的所有档案与子目录进行相同的权限变更(即以递回的方式逐个变更) --help : 显示辅助说明 --version : 显示版本 范例 :将档案 file1.txt 设为所有人皆可读取 : chmod ugo+r file1.txt 将档案 file1.txt 设为所有人皆可读取 : chmod a+r file1.txt 将档案 file1.txt 与 file2.txt 设为该档案拥有者,与其所属同一个群体者可写入,但其他以 外的人则不可写入 : chmod ug+w,o-w file1.txt file2.txt 将 ex1.py 设定为只有该档案拥有者可以执行 : chmod u+x ex1.py 将目前目录下的所有档案与子目录皆设为任何人可读取 : chmod -R a+r * 此外chmod也可以用数字来表示权限如 chmod 777 file 语法为:chmod abc file 其中a,b,c 各为一个数字,分别表示User、Group、及Other的权限。 r=4,w=2,x=1 若要rwx属性则4+2+1=7; 若要rw-属性则4+2=6; 若要r-x属性则4+1=7。 范例: chmod a=rwx file 和 chmod 777 file 效果相同 chmod ug=rwx,o=x file 和 chmod 771 file 效果相同 若用chmod 4755 filename 可使此程式具有root 的权限 指令名称 : chown 使用权限 : root 使用方式 : chmod [-cfhvR] [--help] [--version] user[:group] file... 说明 : Linux/Unix 是多人多工作业系统,所有的档案皆有拥有者。利用 chown 可以将档案 的拥有者加以改变。一般来说,这个指令只有是由系统管理者(root)所使用,一般使用者没 有权限可以改变别人的档案拥有者,也没有权限可以自己的档案拥有者改设为别人。只有系 统管理者(root)才有这样的权限。 把计 : user : 新的档案拥有者的使用者 IDgroup : 新的档案拥有者的使用者群体(group)-c : 若该档 案拥有者确实已经更改,才显示其更改动作-f : 若该档案拥有者无法被更改也不要显示错误 讯息-h : 只对于连结(link)进行变更,而非该 link 真正指向的档案-v : 显示拥有者变更的详 细资料-R : 对目前目录下的所有档案与子目录进行相同的拥有者变更(即以递回的方式逐个 变更)--help : 显示辅助说明--version : 显示版本 范例 : 将档案 file1.txt 的拥有者设为 users 群体的使用者 jessie : chown jessie:users file1.txt 将目前目录下的所有档案与子目录的拥有者皆设为 users 群体的使用者 lamport : chmod -R lamport:users * 名称:cp 使用权限:所有使用者 使用方式: cp [options] source dest cp [options] source... directory 说明:将一个档案拷贝至另一档案,或将数个档案拷贝至另一目录。 把计 -a 尽可能将档案状态、权限等资料都照原状予以复制。 -r 若 source 中含有目录名,则将目录下之档案亦皆依序拷贝至目的地。 -f 若目的地已经有相同档名的档案存在,则在复制前先予以删除再行复制。 范例: 将档案 aaa 复制(已存在),并命名为 bbb : cp aaa bbb 将所有的C语言程式拷贝至 Finished 子目录中 : cp *.c Finished 名称:cut 使用权限:所有使用者 用法:cut -cnum1-num2 filename 说明:显示每行从开头算起 num1 到 num2 的文字。 范例: shell>> cat

    2015-01-17
    10
  • java多线程设计模式

    内容提要编辑多线程与并发处理是程序设计好坏优劣的重要课题,本书通过浅显易懂的文字与实例来介绍JAVA线程相关的设计模式概念,并且通过实际的JAVA程序范例和UML图示来一一解说,书中有代码的重要部分加上标注使读者更加容易解读,再配合众多的说明图解,无论对于初学者还是程序设计高手来说,这都是一本学习和认识设计模式非常难得的好书。 最后附上练习问题,让读者可以温故而知新,能快速地吸收书中的精华,书中最后附上练习问题解答,方便读者学习验证。 2图书目录编辑漫谈UML UML 类图 类和层次结构的关系 接口与实现 聚合 访问控制 类间的关联性 顺序图 处理流程和对象间的协调 时序图 Introduction 1 Java语言的线程 Java语言的线程 何谓线程 明为追踪处理流程,实则追踪线程 单线程程序 多线程程序 Thread类的run方法和start方法 线程的启动 线程的启动(1)——利用Thread类的子类 线程的启动(2)——利用Runnable接口 线程的暂时停止 线程的共享互斥 synchronized方法 synchronized阻挡 线程的协调 wait set——线程的休息室 wait方法——把线程放入wait set notify方法——从wait set拿出线程 notifyAll方法——从wait set拿出所有线程 wait、notify、notifyAll是Object类的方法 线程的状态移转 跟线程有关的其他话题 重点回顾 练习问题 Introduction 2 多线程程序的评量标准 多线程程序的评量标准 安全性——不损坏对象 生存性——进行必要的处理 复用性——可再利用类 性能——能快速、大量进行处理 评量标准的总结 重点回顾 练习问题 第1章 Single Threaded Execution——能通过这座桥的,只有一个人 第2章 Immutable——想破坏它也没办法 第3章 Guarded Suspension——要等到我准备好喔 第4章 Balking——不需要的话,就算了吧 第5章 Producer-Consumer——我来做,你来用 第6章 Read-Write Lock——大家想看就看吧,不过看的时候不能写喔 第7章 read-Per-Message——这个工作交给你了 第8章 Worker Thread——等到工作来,来了就工作 第9章 Future——先给您这张提货单 第10章 Two-Phase Termination——快把玩具收拾好,去睡觉吧 第11章 Thread-Specific Storage——每个线程的保管箱 第12章 Active Object——接受异步消息的主动对象 总结 多线程程序设计的模式语言 附录A 练习问题的解答 附录B Java的内存模型 附录C Java线程的优先级 附录D 线程相关的主要API

    2015-01-17
    10
  • Eclipse中文教程

    Eclipse – 整合开发工具(基础篇) Jacky Lee 2005/03/01 Eclipse.doc 第 1 页,共 1 页 目录 0.环境说明................................................................................................................................................................7 1.Eclipse简介............................................................................................................................................................8 1.1历史背景.....................................................................................................................................................8 1.2开放原始码软件.........................................................................................................................................8 1.3 Eclipse版本介绍.........................................................................................................................................8 1.4跨语言、跨平台.........................................................................................................................................9 2. Eclipse Platform..................................................................................................................................................10 2.1概观...........................................................................................................................................................10 2.2架构...........................................................................................................................................................10 2.3项目与资料夹...........................................................................................................................................10 2.4平台核心...................................................................................................................................................11 2.5工作区(workspace)....................................................................................................................................11 2.6工作台(workbench)...................................................................................................................................11 2.6.1视图(View).....................................................................................................................................12 2.6.2编辑器(Editor)................................................................................................................................14 2.6.3视景(Perspective)...........................................................................................................................16 2.7重新排列视图和编辑器...........................................................................................................................17 2.7.1放置游标........................................................................................................................................17 2.7.2重新排列视图................................................................................................................................18 2.7.3并列编辑器....................................................................................................................................18 2.7.4重新排列附加标签的视图............................................................................................................19 2.7.5最大化............................................................................................................................................19 2.8菜单和工具列...........................................................................................................................................20 2.8.1菜单................................................................................................................................................20 2.8.2图标和按钮....................................................................................................................................31 2.9视景...........................................................................................................................................................35 2.9.1新视景............................................................................................................................................35 2.9.2新窗口............................................................................................................................................37 2.9.3储存视景........................................................................................................................................37 2.9.4配置视景........................................................................................................................................39 2.10作业和标记.............................................................................................................................................40 2.10.1不相关的作业..............................................................................................................................40 2.10.2相关的作业..................................................................................................................................41 2.10.3开启档案......................................................................................................................................42 2.11书签.........................................................................................................................................................42 2.11.1新增和检视书签..........................................................................................................................42 Eclipse 中文教程.doc 第 2 页,共 221 页 2.11.2使用书签......................................................................................................................................44 2.11.3移除书签......................................................................................................................................44 2.12快速视图(Fast View)...............................................................................................................................46 2.12.1建立快速视图..............................................................................................................................46 2.12.2使用快速视图..............................................................................................................................46 2.13比较.........................................................................................................................................................47 2.13.1简单比较......................................................................................................................................48 2.13.2了解比较......................................................................................................................................49 2.13.3使用比较......................................................................................................................................49 2.14历史纪录.................................................................................................................................................51 2.15回应 UI...................................................................................................................................................52 3.喜好设定(Preferences).........................................................................................................................................55 3.1工作台(Workbench)..................................................................................................................................55 3.1.1外观(Appearance)...........................................................................................................................57 3.1.2功能(Capabilities)...........................................................................................................................58 3.1.3颜色和字型(Colors and Fonts)......................................................................................................59 3.1.4比较/修正(Compare/Patch)............................................................................................................61 3.1.5编辑器(Editors)..............................................................................................................................63 3.1.6档案关联(File Associations)..........................................................................................................64 3.1.7按键(Keys).....................................................................................................................................66 3.1.8标签装饰(Label Decorations)........................................................................................................72 3.1.9链接资源(Linked Resources).........................................................................................................72 3.1.10历史纪录(Local History)..............................................................................................................73 3.1.11视景..............................................................................................................................................74 3.1.12搜寻(Search).................................................................................................................................76 3.1.13启动和关闭(Startup and Shutdown)............................................................................................76 3.2 Ant.............................................................................................................................................................77 3.2.1 Ant 编辑器(Ant Editor).................................................................................................................78 3.2.2 Ant 执行时期(Ant Runtime).........................................................................................................79 3.3建置次序(Build Order).............................................................................................................................81 3.4说明(Help).................................................................................................................................................82 3.4.1说明服务器(Help Server)...............................................................................................................83 3.5自动更新(Install/Update)..........................................................................................................................84 3.6 Java............................................................................................................................................................84 3.6.1外观(Appearance)...........................................................................................................................85 3.6.2类别路径变量(Classpath variables)...............................................................................................86 3.6.3程序代码格式制作器(Code Formatter).........................................................................................86 3.6.4程序代码产生(Code generation)...................................................................................................88 Eclipse 中文教程.doc 第 3 页,共 221 页 3.6.5编译器(Compiler)...........................................................................................................................90 3.6.6 Java 编辑器(Java editor)...............................................................................................................94 3.6.7 JRE 安装(JRE installations)..........................................................................................................99 3.6.8 JUnit..............................................................................................................................................100 3.6.9新专案(New project)....................................................................................................................100 3.6.10组织汇入(Organize imports)......................................................................................................101 3.6.11「重构」喜好设定(Refactoring preferences).............................................................................102 3.6.12作业标示(Task Tags)..................................................................................................................102 3.7团队(Team)..............................................................................................................................................102 3.7.1 CVS..............................................................................................................................................103 3.7.2忽略的资源(Ignored Resources)..................................................................................................107 3.7.3档案内容(File Content)................................................................................................................107 4. Java程序开发....................................................................................................................................................108 4.1建立Java项目..........................................................................................................................................108 4.2建立Java类别..........................................................................................................................................110 4.3程序代码完成功能..................................................................................................................................111 4.3.1 Code Completion...........................................................................................................................111 4.3.2 Code Assist....................................................................................................................................111 4.4执行Java程序..........................................................................................................................................112 4.5 Java实时运算簿页面(Java Scrapbook Page)..........................................................................................114 4.6自订开发环境.........................................................................................................................................121 4.6.1程序代码格式..............................................................................................................................121 4.6.2程序代码产生模板......................................................................................................................122 4.6.3 Javadoc批注.................................................................................................................................124 4.7产生 getter 与 setter..............................................................................................................................128 4.8建立 JAR 档案......................................................................................................................................130 4.8.1建立新的 JAR 档案...................................................................................................................130 4.8.2设定进阶选项..............................................................................................................................132 4.8.3定义 JAR 檔的 manifest............................................................................................................133 4.8.4重新产生 JAR 檔.......................................................................................................................135 4.9.建立 Javadoc 文件................................................................................................................................137 4.9.1选取产生 Javadoc 用的类型......................................................................................................137 4.9.2为标准 doclet 配置 Javadoc 自变量........................................................................................138 4.9.3配置 Javadoc 自变量..................................................................................................................138 4.10工作集(Working Sets)...........................................................................................................................139 4.10.1新增工作集................................................................................................................................139 4.10.2隐藏「导览器」视图中的档案................................................................................................141 4.10.3显示「导览器」视图中的档案................................................................................................142 Eclipse 中文教程.doc 第 4 页,共 221 页 5.除错....................................................................................................................................................................144 5.1错误的程序.............................................................................................................................................144 5.2设定岔断点(Breakpoints).......................................................................................................................145 5.3逐步除错.................................................................................................................................................149 5.3.1 Step Into........................................................................................................................................149 5.3.2 Step Over......................................................................................................................................149 5.3.3 Step Return...................................................................................................................................149 5.3.4 Drop to Frame...............................................................................................................................149 5.3.5 Use Step Filters/Step Debug.........................................................................................................150 5.4继续执行.................................................................................................................................................151 5.5设定岔断点的Hit Count.........................................................................................................................153 5.6岔断点组态设定.....................................................................................................................................160 5.7监视点(Watchpoint)................................................................................................................................161 5.8方法岔断断点(Method Breakpoint)........................................................................................................164 5.9异常岔断点(Exception Breakpoint)........................................................................................................166 5.10 Java表示式及变更某些值....................................................................................................................168 6.重构(Refactoring)...............................................................................................................................................170 6.1重新命名.................................................................................................................................................170 6.1.1区域变量(Local Variable)............................................................................................................170 6.1.2字段(Field)...................................................................................................................................171 6.1.3方法(Method)...............................................................................................................................173 6.1.4类别(Class)或是接口(Interface)..................................................................................................174 6.1.5套件(Package)..............................................................................................................................176 6.2撷取(Extracting)......................................................................................................................................177 6.2.1撷取常数(Extracting a Constant).................................................................................................177 6.2.2撷取区域变量(Extracting a Local Variable)................................................................................180 6.2.3撷取方法(Extracting a Method)...................................................................................................182 6.3列入(Inlining)..........................................................................................................................................187 6.3.1列入常数(Inlining a Constant).....................................................................................................187 6.3.2列入区域变量(Inlining a Local Variable)....................................................................................189 6.3.3列入方法(Inlining a Method).......................................................................................................191 6.4变更方法签章(Signature).......................................................................................................................193 6.5移动Java元素(Moving Java Elements)...................................................................................................196 6.5.1字段(Field)...................................................................................................................................197 6.5.2 Static Members.............................................................................................................................198 6.6自行封装字段(Self Encapsulating a Field).............................................................................................200 7.要诀和技巧(Tips and Tricks).............................................................................................................................203 7.1编辑程序文件(Editing Source)...............................................................................................................203 Eclipse 中文教程.doc 第 5 页,共 221 页 7.2搜寻(Searching).......................................................................................................................................208 7.3程序代码导览和读取(Code navigation and reading).............................................................................209 7.4 Java视图(Java views)..............................................................................................................................212 7.5除错(Debugging).....................................................................................................................................214 7.6各种(Various)..........................................................................................................................................217 Eclipse 中文教程.doc 第 6 页,共 221 页 0.环境说明

    2015-01-17
    10
  • 网上支付安全

    内容简介编辑《网上支付与安全》分别介绍了支付体系、支付方式、支付工具等基 础知识以及各种典型的网上支付(包括互联网络支付、移动网络支付、固话网络支付等);同时分析了网上支付存在的安全问题与需求,并介绍了各种网上支付安全技术;此外还分别介绍了各种支付方式的支付流程、支付过程存在的安全问题以及相应的解决方法和技术。 《网上支付与安全》可以作为高等院校电子商务、计算机、金融学、财经专业及相关专业的教材或教学参考书;也可作为从事金融信息化、电子商务、IT应用软件研制和开发的科研人员,金融系统的各级管理人员、银行工作人员,以及广大电子商务爱好者的参考用书。 3图书目录编辑第1章 支付基础理论1 第2章 网上银行支付35 第3章 移动支付71 第4章 电话支付101 第5章 自助银行支付128 第6章 第三方支付154 第7章 中国银联与电子支付182 第8章 跨行支付209 第9章 网上支付安全技术237 第10章 认证中心269 参考文献298

    2015-01-17
    6
  • [网络支付与结算].徐勇

    内容简介编辑《网络支付与结算》从一个新的角度来讲述网络支付工具及其应用:以消费者(购买者)进行网络支付时,其资金是否立刻发生转移来分析各种网络支付方式。基于这个角度,将网络支付模式分为:预付型、即付型和后付型。《网络支付与结算》提供了与网络支付有关的大量案例、资料和形式多样的思考与练习题,以供阅读、训练使用,便于读者对所学知识的巩固和分析能力的培养.《网络支付与结算》在实用性和操作性方面都具有很强的指导作用。《网络支付与结算》可作为高等院校电子商务专业的本科教材,也可作为从事电子商务相关的企业、事业单位、金融机构等相关人员的参考书籍。 3图书目录编辑第1章 网络支付概述 第2章 网络支付基础 第3章 预付型网络支付方式 第4章 即付型网络支付方式 第5章 后付型网络支付方式 第6章 网络银行及其支付 第7章 移动支付 第8章 网络支付的法规和监管 参考文献 内容简介编辑资金流是电子商务业务流程的重要环节,服务于电子商务资金流的网络支付与结算已经成为商务各方关注的焦点。本书在分析电子商务的发展需求和金融电子化进程的基础上,全面介绍了网络支付与结算的整体理论与应用体系,强调了相关知识的完整性、时效性与发展性。 全书内容共分8章,以典型B to C型网络支付方式、典型B to B型网络支付方式、网络银行服务为核心,系统叙述了它们的背景、概念、支持技术、应用模式与业务流程、应用特点及应用状况,展望了移动商务与移动支付等最新业务,并且在充分结合中国国情的同时辅以大量实例、案例,穿插说明,力求实用。本书语言平实,图文结合,通俗易懂,方便教学与自学。 本书既可作为高等学校电子商务、信息管理、财务管理、工商管理等专业高年级本科生及研究生的教材,也可作为政府部门、企事业单位管理和技术人员的参考书。 6图书目录编辑第1章 电子商务和网络支付 第2章 电子货币与电子银行 第3章 网络支付基础 第4章 网络支付的安全解决方法 第5章 典型B TO C型网络支付方式述解 第6章 典型B TO B型网络支付方式述解 第7章 网络银行及其支付 第8章 移动支付与微支付

    2015-01-17
    4
  • struts2.0中文教程

    为Struts 2.0做好准备 http://www.blogjava.net/max/category/16130.html Struts作为MVC 2的Web框架,自推出以来不断受到开发者的追捧,得到用广泛的应用。作为最成功的Web框架,Struts自然拥有众多的优点: MVC 2模型的使用 功能齐全的标志库(Tag Library) 开放源代码 但是,所谓“金无赤金,人无完人”,Struts自身也有不少的缺点: 需要编写的代码过多,容易引起“类爆炸” 单元测试困难 这些缺点随着Web的发展越来越明显。这就促生了Struts 2.0,它的诞生能很好的解决上述问题。 好啦,废话就不多说了,现在就让我们感受一下的Struts 2.0的魅力吧。

    2015-01-17
    0
  • ThinkinJava11

    《Thinking In Java》中文版 作者:Bruce Eckel 致谢 --献给那些直到现在仍在孜孜不倦创造下一代计算机语言的人们! 指导您利用万维网的语言进行面向对象的程序设计 完整的正文、更新内容及程序代码可从http://www.bruceeckel.com 下载 从Java 的基本语法到它最高级的特性(网络编程、高级面向对象能力、多线程),《Thinking In Java》都 能对您有所裨益。Bruce Eckel 优美的行文以及短小、精悍的程序示例有助于您理解含义模糊的概念。 面向初学者和某种程度的专家 教授Java 语言,而不是与平台有关的理论 覆盖Java 1.2 的大多数重要方面:Swing 和新集合 系统讲述Java 的高级理论:网络编程、多线程处理、虚拟机性能以及同非Java 代码的连接 320 个有用的Java 程序,15000 行以上代码 解释面向对象基本理论,从继承到设计方案 来自与众不同的获奖作者Bruce Eckel 可通过万维网免费索取源码和持续更新的本书电子版 从www.BruceEckel.com 获得配套CD(含15 小时以上的合成语音授课) 读者如是说:“最好的Java 参考书⋯⋯绝对让人震惊”;“购买Java 参考书最明智的选择”;“我见过的 最棒的编程指南”。 Bruce Eckel 也是《Thinking in C++》的作者,该书曾获1995 年SoftwareDevelopment Jolt Award 最佳书 籍大奖。作为一名有20 经验的编程专家,曾教授过世界上许多地区的人进行对象编程。最开始涉及的领域是 C++,现在也进军Java。他是C++标准协会有表决权的成员之一,曾就面向对象程序设计这一主题写过其他5 本书,发表过150 多篇文章,并是多家计算机杂志的专栏作家,其中包括《Web Techniques》的Java 专栏。 曾出席过C++和Java 的“软件开发者会议”,并分获“应用物理”与“计算机工程”的学士和硕士学位。 读者的心声 比我看过的Java 书好多了⋯⋯非常全面,举例都恰到好处,显得颇具“智慧”。和其他许多Java 书 籍相比,我觉得它更成熟、连贯、更有说服力、更严谨。总之,写得非常好,肯定是一本学习Java 的好书。(Anatoly Vorobey,TechnionUniversity,Haifa,以色列)。 是我见过的最好的编程指南,对任何语言都不外如是。(Joakim ziegler,FIX 系统管理员) 感谢你写出如此优秀的一本Java 参考书。(Dr. Gavin Pillay,Registrar,King Edward VII Hospital ,南非) 再次感谢您这本令人震惊的书。我以前真的有点儿不知所从的感觉(因为不是C 程序员),但你的书 浅显易懂,使我能很快掌握Java——差不多就是阅读的速度吧。能从头掌握基本原理和概念的感觉 真好,再也不用通过不断的试验和出错来建立概念模型了。希望不久能有机会参加您的讲座。 (Randall R. Hawley,Automation Technician,Eli Lilly & Co) 我迄今为止看过的最好的计算机参考书。(Tom Holland) 这是我读过的关于程序设计的最好的一本书⋯⋯第16 章有关设计方案的内容是我这么久以来看过的 2 最有价值的。(Han Finci,助教,计算机科学学院,耶路撒冷希伯来大学,以色列) 有史以来最好的一本Java 参考书。(Ravindra Pai,Oracle 公司SUNOS 产品线) 这是关于Java 的一本好书。非常不错,你干得太好了!书中涉及的深度真让人震惊。一旦正式出 版,我肯定会买下它。我从96 年十月就开始学习Java 了。通过比较几本书,你的书可以纳入“必 读”之列。这几个月来,我一直在搞一个完全用Java 写的产品。你的书巩固了我一些薄弱的地方, 并大大延伸了我已知的东西。甚至在会见承包商的时候,我都引用了书中的一些解释,它对我们的开 发小组太有用了。通过询问组内成员我从书中学来的知识(比如数组和矢量的区别),可以判断他们 对Java 的掌握有多深。(Steve Wilkinson,MCI 通信公司资深专家) 好书!我见过的最好的一本Java 教材。(Jeff Sinclair,软件工程师,Kestral Computing 公司) 感谢你的《Thinking in Java》。终于有人能突破传统的计算机参考书模式,进入一个更全面、更深 入的境界。我读过许多书,只有你的和Patrick Winston 的书才在我心目中占据了一个位置。我已向 客户郑重推荐这本书。再次感谢。(Richard Brooks,Java 顾问,Sun 专业服务公司,达拉斯市) 其他书讨论的都是Java“是什么”(讲述语法和库),或者Java “怎样用”(编程实例)。 《Thinking in Java》显然与众不同,是我所知唯一一本解释Java“为什么”的书:为什么象这样 设计,为什么象这样工作,为什么有时不能工作,为什么比C++好,为什么没有C++好,等等。尽管 这本书也很好讲述了“是什么”和“怎样用”的问题,但它的特色并在于此。这本书特别适合那些想 追根溯源的人。(Robert S. Stephenson) 感谢您写出这么一本优秀的书,我对它越来越爱不释手。我的学生也喜欢它。(Chuck Iverson) 向你在《Thinking in Java》的工作致敬。这本书对因特网的未来进行了最恰当的揭示,我只是想对 你说声“谢谢”,它非常有价值。(Patrick Barrell,Network Officer Mamco-QAF Mfg 公司) 市面上大多数Java 书作为新手指南都是不错的。但它们的立意大多雷同,举的例子也有过多的重 复。从未没见过象您这样的一本书,它和那些书完全是两码事。我认为它是迄今为止最好的一本参考 书。请快些出版它!⋯⋯另外,由于《Thinking in Java》都这么好了,我也赶快去买了一本 《Thinking in C++》。(George Laframboise,LightWorx 技术咨询公司) 从前给你写过信,主要是表达对《Thinking in C++》一书的惊叹(那本书在我的书架上占有突出的 位置)。今天,我很欣慰地看到你投向了Java 领域,并有幸拜读了最新的《Thinking in Java》电 子版。看过之后,我不得不说:“服了!”内容非常精彩,有很强的说服力,不象读那些干巴巴的参 考书。你讲到了Java 开发最重要、也最易忽略的方面:基本原理。(Sean Brady) 你举的例子都非常浅显,很容易理解。Java 的许多重要细节都照顾到了,而单薄的Java 文档根本没 有涉及那些方面。另外,这本书没有浪费读者的时间。程序员已经知道了一些基本的事实,你在这个 基础上进行了很好的发挥。(Kai Engert,Innovative Software 公司,德国) 我是您的《Thinking in C++》的忠实读者。通读了您的Java 书的电子版以后,发现您在这两本书上 有同样高级别的写作水平。谢谢!(Peter R. Neuwald) 写得非常好的一本Java 书⋯⋯我认为您的工作简直可以说“伟大”。我是芝加哥地区Java 特别兴趣 组的头儿,已在最近的几次聚会上推荐了您的书和Web 站点。以后每个月开SIG 会的时候,我都想把 《Thinking in Java》作为基本的指导教材使用。一般来说,我们会每次讨论书中的一章内容。 (Mark Ertes) 衷心感谢你的书,它写得太好了。我已把它推荐给自己的用户和Ph.D.学生。(Hugues Leroy//Irisa-Inria Rennes France,Head of Scientific Computingand Industrial Tranfert) 3 我到现在只读了《Thinking in Java 》的40 页内容,但已对它留下了深刻的印象。这无疑是见过的 最精彩的编程专业书⋯⋯而且我本身就是一个作家,所以这点儿看法还是有些权威吧。我已订购了 《Thinking in C++》,已经等得迫不及待了——我是一名编程新手,最怕的就是散乱无章的学习线 索。所以必须在这里向您的出色工作表示敬意。以前看过的书似乎都有这方面的毛病,经常使我才提 起的兴致消弥于无形。但看了你的书以后,感觉好多了。(Glenn Becker,EducationalTheatre Association) 谢谢您这本出色的书。在终于认识了Java 与C++之间纠缠不清的一些事实后,我真的要非常感谢这 本书。对您的书非常满意!(Felix Bizaoui,Twin OaksIndustries,Louisa,Va) 恭喜你写出这么好的一本书。我是在有了阅读《Thinking in C++》的经历以后,才来看这本 《Thinking in Java》的,它确实没让我失望。(Jaco van derMerwe,软件专家,DataFusion Systems 有限公司,Stellenbosch,南非) 这是我看过的最好的Java 书之一。(E.E. Pritchard,资深软件工程师,英国剑桥动画系统有限公 司) 你的东东让其他Java 参考收黯然失色。看来其他作者都应该向你看齐了。(Brett g Porter,资深 程序员,Art & Logic) 我花了一、两个星期的时间来看你的书,并对以前我看过的一些Java 书进行了比较。显然,只有你 的书才能让我真正“入门”。现在,我已向我的许多朋友推荐了这本书,他们都对其作出了很高的评 价。请接受我真诚的祝贺,并希望她早些正式出版。(Rama Krishna Bhupathi,软件工程师,TCSI 公司,圣琼斯) 这是一本充满智慧的书,与简单的参考书有着截然不同的风格。它现在已成了我进行Java 创作一份 主要参考。你的目录做得相当不错,让人一目了然,很快就能找到自己需要的东西。更高兴的是,这 本书没有写成一本改头换面的API 字典,也没有把我们这些程序员看作傻瓜。(Grant Sayer,Java Components Group Leader,Ceedata Systems Pty 有限公司,澳大利亚) 啧啧,一本可读性强、论据充分的Java 书。外面有太多用词贫乏的Java 书(也有几本好的),只有 你的书是最好的。那些垃圾在你的书前面不值一提。(John Root,Web 开发员,伦敦社会安全部) 我刚刚开始看《Thinking in Java》。我希望它能有更大的突破,因为《Thinking in C++》写得实 在太好了。我是一名有经验的C++程序员,事先看那本书对学习Java 很有帮助。但我在Java 上的经 验不够,希望这本新书能让我满意。您真是一名“高产高质”作者。(Kevin K. Lewis, ObjectSpace 公司技术员) 我认为这是本好书。从这本书中,我学到了与Java 有关的所有知识。谢谢你能让这本书通过互联网 免费发行。如果不那样做,我根本不可能象现在这样有巨大的进步。但最令人高兴的是,你的书并没 有成为一本官方Java 手册,指出了Java 一些不当的地方。你真是做了一件大好事。(Frederik Fix, Belgium) 我现在经常查阅你的书。大约两年前,当我想开始学习C++的时候,是《C++ Inside&Out》指导我游 历C++的世界。它使我在这方面的技能大增,并找到了一个较好的职位。现在出于工作上的原因需要 学习Java,又是《Thinking in Java》给我正确的指引。尽管现在可选择的书更多了,但我知道自 己别无选择。很奇妙,不是吗?现在看这本书的时候,我居然有一种重新认识自己的感觉。衷心感谢 你,我现在的理解又比以前深入多了。(Anand Kumar S.,软件工程师,Computervision 公司,印 度) 你的书给人一种“鹤立鸡群”的感觉。(Peter Robinson,剑桥大学计算机实验室) 4 这是我看过的最好的一本Java 参考书。现在想起来,能找到这样的一本书简直是幸运。谢谢! (Chuck Peterson,因特网产品线主管,IVIS International 公司) 这本书太棒了!它已是我看过的第三本Java 书了,真后悔没有早点儿发现它。前两本书都没坚持看 完,但我已决心看完这一本。不妨告诉你,当时我是想寻找关于内部类使用的一些资料,是我的朋友 告诉我网上能下载这本书。你干得真不错!(Jerry Nowlin,MTS,Lucent Technologies) 在我看过的6 本Java 书中,你的《Thinking in Java》是最好和最有用的。(Michael Van Waas, Ph.D,TMR Associates 公司总裁) 我很想对《Thinking in Java》说声谢谢。这是一本多么出色的书——并不单指它在网上免费发送! 作为一名学生,我认为你的书有不可估量的价值(我有《C++ Inside&Out》的拷贝,那是关于C++的 另一本好书),因为它不仅教我怎样做,而且解释了为什么。这当然为我用C++或Java 这样的语言 编程打下了坚实的基础。我有许多朋友都象我一样热爱编程,在向他们推荐了这本书后,反映都非常 好,他们的看法同我一样。再次感谢您。顺便提一句,我是一个印尼畜牲,整天都喜欢和Java 泡在 一起!(Ray Frederick Djajadinata,Trisakti 大学学生,Indonesian Pork) 你把这本书放在网上引起了相当程度的轰动,我对你的做法表示真诚的感谢与支持!(Shane LeBouthillier,加拿大艾伯特大学计算机工程系学生) 告诉你吧,我是多么热烈地盼望读到你每个月的专栏!作为OOP 设计的新手,我要感谢你把即使最基 本的概念都讲得那么透彻和全面。我已下载了你的书,但我保证会在它正式出版后另行购买。感谢你 提供的所有帮助!(Dan Cashmer,B.C.Ziegler & Co.) 祝贺你完成了一件伟大的作品。我现在下载的是《Thinking in Java》的PDF 版。这本书还没有读 完,便迫不及待地跑到书店去找你的《Thinking in C++》。我在计算机界干了8 年,是一个顾问, 兼软件工程师、教师/培训专家,最近辞职自己开了一间公司。所以见过不少的书。但是,正是这些 书使我的女朋友称我为“书呆子”!并不是我概念掌握得不深入——只是由于现在的发展太快,使我 短期内不能适应新技术。但这两本书都给了我很大的启示,它与以前接触过或买过的计算机参考书都 大不相同。写作风格很棒,每个新概念都讲得很好,书中充满了“智慧”。(Simon Goland, simonsez@smartt.com,Simon Says Consulting 公司) 必须认为你的《Thinking in Java》非常优秀!那正是我一直以来梦想的参考书。其中印象最深的是 有关使用Java 1.1 作软件设计时的一些优缺点分析。(DirkDuehr,Lexikon Verlag,Bertelsmann AG,德国) 谢谢您写出两本空前绝后的书(《Thinking in Java》和《Thinking in C++》)。它们使我在面向 对象的程序设计上跨出了一大步。(Donald Lawson,DCLEnterprises) 谢谢你花时间写出一本真正有用的Java 参考书,你现在绝对能为自己的工作感到骄傲了。(Dominic Turner,GEAC Support) 这是我见过的最好的一本Java 书。(Jean-Yves MENGANT,Chief Software Architect NATSYSTEM, 法国巴黎) 《Thinking in Java》无论在覆盖的范围还是讲述方法上都有独到之处。看懂这本书非常容易,摘录 的代码段也很有说服力。(Ron Chan ,Ph.D,Expert Choice 公司,Pittsburgh PA) 你的书太棒了。我看过许多编程书刊,只有你的书给人一种全新的视野。其他作者都该向你好好学习 才是。(Ningjian Wang,信息系统工程师,The Vangurad Group) 5 《Thinking in Java》是一本出色的、可读性极强的书,我已向我的学生推荐阅读。(Dr. Pual Gorman,计算机科学系,Otago 大学,Dunedin 市,新西兰) 在我看过的书中,你的书最有品味,不象有的书那样粗制滥造。任何搞软件开发的人都不应错过。 (Jose Suriol,Scylax 公司) 感谢您免费提供这本书,它是我看过或翻过的最好的一本。(JeffLapchinsky,Net Results Technologies 公司程序员) 这本书简明扼要,看起来不仅毫不费力,而且象是一种享受。(Keith Ritchie,Java 研发组,KL Group 公司) 这真的是我看过的最好的一本Java 书!(Daniel Eng) 我看过的最好的Java 书!(Rich Hoffarth,Senior Architect,West Group) 感谢你这本出色的书籍,我好久都没有经历让人如此愉悦的阅读过程了。(Fred Trimble,Actium 公司) 你的写作能准确把握轻重缓急,并能成功抓住细节。这本书让学习变成了一件有趣的事情,我感觉满 意,非常满意!谢谢你这本出色的学习教程。(Rajesh Rau,软件顾问) 《Thinking in Java》让整个自由世界都感受到了震憾!(Miko O'Sullivan,Idocs 公司总裁) 关于《Thinking in C++》: 荣获1995 年由《软件开发》杂志评选的“最佳书籍”奖! “这本书可算一个完美的典型。把它放到自己的书架上绝对不会后悔。关于IO 数据流的那部分内容 包含了迄今为止我看过的最全面、最容易理解的文字。”(Al Stevens,《道伯博士》杂志投稿编 辑) “Eckel 的书是唯一一本清楚解释了面向对象程序设计基础问题的书。这本书也是C++的一本出色教 材。”(Andrew Binstock,《Unix Review》编辑)” “Bruce 用他对C++深刻的洞察力震惊了我们,《Thinking in C++》无疑是各种伟大思想的出色组 合。如果想得到各种困难的C++问题的答案,请购买这本杰出的参考书”(Gary Entsminger,《对 象之道》的作者) “《Thinking in C++》非常耐心和有技巧地讲述了关于C++的各种问题,包括如何使用内联、索 引、运算符过载以及动态对象。另外还包括一些高级主题,比如模板的正确使用、违例和多重继承 等。所有这些都精巧地编织在一起,成为Eckel 独特的对象和程序设计思想。所有C++开发者的书架 上都应摆上这本书。如果你正在用C++搞正式开发,这本书绝对有借鉴价值。”(Richard Hale Shaw,《PC Magazine》投稿编辑)。 6 写在前面的话 我的兄弟Todd 目前正在进行从硬件到编程领域的工作转变。我曾提醒他下一次大革命的重点将是遗传工程。 我们的微生物技术将能制造食品、燃油和塑料;它们都是清洁的,不会造成污染,而且能使人类进一步透视 物理世界的奥秘。我认为相比之下电脑的进步会显得微不足道。 但随后,我又意识到自己正在犯一些科幻作家常犯的错误:在技术中迷失了(这种事情在科幻小说里常有发 生)!如果是一名有经验的作家,就知道绝对不能就事论事,必须以人为中心。遗传对我们的生命有非常大 的影响,但不能十分确定它能抹淡计算机革命——或至少信息革命——的影响。信息涉及人相互间的沟通: 的确,汽车和轮子的发明都非常重要,但它们最终亦如此而已。真正重要的还是我们与世界的关系,而其中 最关键的就是通信。 这本书或许能说明一些问题。许多人认为我有点儿大胆或者稍微有些狂妄,居然把所有家当都摆到了Web 上。“这样做还有谁来买它呢?”他们问。假如我是一个十分守旧的人,那么绝对不这样干。但我确实不想 再沿原来的老路再写一本计算机参考书了。我不知道最终会发生什么事情,但的确认为这是我对一本书作出 的最明智的一个决定。 至少有一件事是可以肯定的,人们开始向我发送纠错反馈。这是一个令人震惊的体验,因为读者会看到书中 的每一个角落,并揪出那些藏匿得很深的技术及语法错误。这样一来,和其他以传统方式发行的书不同,我 就能及时改正已知的所有类别的错误,而不是让它们最终印成铅字,堂而皇之地出现在各位的面前。俗话 说,“当局者迷,旁观者清”。人们对书中的错误是非常敏感的,往往毫不客气地指出:“我想这样说是错 误的,我的看法是⋯⋯”。在我仔细研究后,往往发现自己确实有不当之处,而这是当初写作时根本没有意 识到的(检查多少遍也不行)。我意识到这是群体力量的一个可喜的反映,它使这本书显得的确与众不同。 但我随之又听到了另一个声音:“好吧,你在那儿放的电子版的确很有创意,但我想要的是从真正的出版社 那里印刷的一个版本!”事实上,我作出了许多努力,让它用普通打印机机就能得到很好的阅读效果,但仍 然不象真正印刷的书那样正规。许多人不想在屏幕上看完整本书,也不喜欢拿着一叠纸阅读。无论打印格式 有多么好,这些人喜欢是仍然是真正的“书”(激光打印机的墨盒也太贵了一点)。现在看来,计算机的革 命仍未使出版界完全走出传统的模式。但是,有一个学生向我推荐了未来出版的一种模式:书籍将首先在互 联网上出版,然后只有在绝对必要的前提下,才会印刷到纸张上。目前,为数众多的书籍销售都不十分理 想,许多出版社都在亏本。但如采用这种方式出版,就显得灵活得多,也更容易保证赢利。 这本书也从另一个角度也给了我深刻的启迪。我刚开始的时候以为Java“只是另一种程序设计语言”。这个 想法在许多情况下都是成立的。但随着时间的推移,我对它的学习也愈加深入,开始意识到它的基本宗旨与 我见过的其他所有语言都有所区别。 程序设计与对复杂性的操控有很大的关系:对一个准备解决的问题,它的复杂程度取决用于解决它的机器的 复杂程度。正是由于这一复杂性的存在,我们的程序设计项目屡屡失败。对于我以前接触过的所有编程语 言,它们都没能跳过这一框框,由此决定了它们的主要设计目标就是克服程序开发与维护中的复杂性。当 然,许多语言在设计时就已考虑到了复杂性的问题。但从另一角度看,实际设计时肯定会有另一些问题浮现 出来,需把它们考虑到这个复杂性的问题里。不可避免地,其他那些问题最后会变成最让程序员头痛的。例 如,C++必须同C 保持向后兼容(使C 程序员能尽快地适应新环境),同时又要保证编程的效率。C++在这两 个方面都设计得很好,为其赢得了不少的声誉。但它们同时也暴露出了额外的复杂性,阻碍了某些项目的成 功实现(当然,你可以责备程序员和管理层,但假如一种语言能通过捕获你的错误而提供帮助,它为什么不 那样做呢?)。作为另一个例子,Visual Basic(VB)同当初的BASIC 有关的紧密的联系。而BASIC 并没有 打算设计成一种能全面解决问题的语言,所以堆加到VB 身上的所有扩展都造成了令人头痛和难于管理和维护 的语法。另一方面,C++、VB 和其他如Smalltalk 之类的语言均在复杂性的问题上下了一番功夫。由此得到 的结果便是,它们在解决特定类型的问题时是非常成功的。 在理解到Java 最终的目标是减轻程序员的负担时,我才真正感受到了震憾,尽管它的潜台词好象是说:“除 了缩短时间和减小产生健壮代码的难度以外,我们不关心其他任何事情。”在目前这个初级阶段,达到那个 目标的后果便是代码不能特别快地运行(尽管有许多保证都说Java 终究有一天会运行得多么快),但它确实 将开发时间缩短到令人惊讶的地步——几乎只有创建一个等效C++程序一半甚至更短的时间。这段节省下来 的时间可以产生更大的效益,但Java 并不仅止于此。它甚至更上一层楼,将重要性越来越明显的一切复杂任 务都封装在内,比如网络程序和多线程处理等等。Java 的各种语言特性和库在任何时候都能使那些任务轻而 易举完成。而且最后,它解决了一些真正有些难度的复杂问题:跨平台程序、动态代码改换以及安全保护等 等。换在从前,其中任何每一个都能使你头大如斗。所以不管我们见到了什么性能问题,Java 的保证仍然是 非常有效的:它使程序员显著提高了程序设计的效率! 7 在我看来,编程效率提升后影响最大的就是Web。网络程序设计以前非常困难,而Java 使这个问题迎刃而解 (而且Java 也在不断地进步,使解决这类问题变得越来越容易)。网络程序的设计要求我们相互间更有效率 地沟通,而且至少要比电话通信来得便宜(仅仅电子函件就为许多公司带来了好处)。随着我们网上通信越 来越频繁,令人震惊的事情会慢慢发生,而且它们令人吃惊的程度绝不亚于当初工业革命给人带来的震憾。 在各个方面:创建程序;按计划编制程序;构造用户界面,使程序能与用户沟通;在不同类型的机器上运行 程序;以及方便地编写程序,使其能通过因特网通信——Java 提高了人与人之间的“通信带宽”。而且我认 为通信革命的结果可能并不单单是数量庞大的比特到处传来传去那么简单。我们认为认清真正的革命发生在 哪里,因为人和人之间的交流变得更方便了——个体与个体之间,个体与组之间,组与组之间,甚至在星球 之间。有人预言下一次大革命的发生就是由于足够多的人和足够多的相互连接造成的,而这种革命是以整个 世界为基础发生的。Java 可能是、也可能不是促成那次革命的直接因素,但我在这里至少感觉自己在做一些 有意义的工作——尝试教会大家一种重要的语言! 8 引言 同人类任何语言一样,Java 为我们提供了一种表达思想的方式。如操作得当,同其他方式相比,随着问题变 得愈大和愈复杂,这种表达方式的方便性和灵活性会显露无遗。 不可将Java 简单想象成一系列特性的集合;如孤立地看,有些特性是没有任何意义的。只有在考虑“设 计”、而非考虑简单的编码时,才可真正体会到Java 的强大。为了按这种方式理解Java,首先必须掌握它 与编程的一些基本概念。本书讨论了编程问题、它们为何会成为问题以及Java 用以解决它们的方法。所以, 我对每一章的解释都建立在如何用语言解决一种特定类型的问题基础上。按这种方式,我希望引导您一步一 步地进入Java 的世界,使其最终成为您最自然的一种语言。 贯穿本书,我试图在您的大脑里建立一个模型——或者说一个“知识结构”。这样可加深对语言的理解。若 遇到难解之处,应学会把它填入这个模型的对应地方,然后自行演绎出答案。事实上,学习任何语言时,脑 海里有一个现成的知识结构往往会起到事半功倍的效果。 1. 前提 本书假定读者对编程多少有些熟悉。应已知道程序是一系列语句的集合,知道子程序/函数/宏是什么,知 道象“If”这样的控制语句,也知道象“while”这样的循环结构。注意这些东西在大量语言里都是类似的。 假如您学过一种宏语言,或者用过Perl 之类的工具,那么它们的基本概念并无什么区别。总之,只要能习惯 基本的编程概念,就可顺利阅读本书。当然,C/C++程序员在阅读时能占到更多的便宜。但即使不熟悉C,一 样不要把自己排除在外(尽管以后的学习要付出更大的努力)。我会讲述面向对象编程的概念,以及Java 的 基本控制机制,所以不用担心自己会打不好基础。况且,您需要学习的第一类知识就会涉及到基本的流程控 制语句。 尽管经常都会谈及C 和C++语言的一些特性,但并没有打算使它们成为内部参考,而是想帮助所有程序员都 能正确地看待那两种语言。毕竟,Java 是从它们那里衍生出来的。我将试着尽可能地简化这些引用和参考, 并合理地解释一名非C/C++程序员通常不太熟悉的内容。 2 . J a v a 的学习 在我第一本书《Using C++》面市的几乎同一时间(Osborne/McGraw-Hill 于1989 年出版),我开始教授那 种语言。程序设计语言的教授已成为我的专业。自1989 年以来,我便在世界各地见过许多昏昏欲睡、满脸茫 然以及困惑不解的面容。开始在室内面向较少的一组人授课以后,我从作业中发现了一些特别的问题。即使 那些上课面带会心的微笑或者频频点头的学生,对许多问题也存在认识上的混淆。在过去几年间的“软件开 发会议”上,由我主持C++分组讨论会(现在变成了Java 讨论会)。有的演讲人试图在很短的时间内向听众 灌输过多的主题。所以到最后,尽管听众的水平都还可以,而且提供的材料也很充足,但仍然损失了一部分 听众。这可能是由于问得太多了,但由于我是那些采取传统授课方式的人之一,所以很想使每个人都能跟上 讲课进度。 有段时间,我编制了大量教学简报。经过不断的试验和修订(或称“反复”,这是在Java 程序设计中非常有 用的一项技术),最后成功地在一门课程中集成了从我的教学经验中总结出来的所有东西——我在很长一段 时间里都在使用。其中由一系列离散的、易于消化的小步骤组成,而且每个小课程结束后都有一些适当的练 习。我目前已在Java 公开研讨会上公布了这一课程,大家可到http://www.BruceEckel.com 了解详情(对研 讨会的介绍也以CD-ROM 的形式提供,具体信息可在同样的Web 站点找到)。 从每一次研讨会收到的反馈都帮助我修改及重新制订学习材料的重心,直到我最后认为它成为一个完善的教 学载体为止。但本书并非仅仅是一本教科书——我尝试在其中装入尽可能多的信息,并按照主题进行了有序 的分类。无论如何,这本书的主要宗旨是为那些独立学习的人士服务,他们正准备深入一门新的程序设计语 言,而没有太大的可能参加此类专业研讨会。 3. 目标 就象我的前一本书《Thinking in C++》一样,这本书面向语言的教授进行了良好的结构与组织。特别地,我 的目标是建立一套有序的机制,可帮助我在自己的研讨会上更好地进行语言教学。在我思考书中的一章时, 实际上是在想如何教好一堂课。我的目标是得到一系列规模适中的教学模块,可以在合理的时间内教完。随 后是一些精心挑选的练习,可以在课堂上当即完成。 在这本书中,我想达到的目标总结如下: 9 (1) 每一次都将教学内容向前推进一小步,便于读者在继续后面的学习前消化前面的内容。 (2) 采用的示例尽可能简短。当然,这样做有时会妨碍我解决“现实世界”的问题。但我同时也发现对那些 新手来说,如果他们能理解每一个细节,那么一般会产生更大的学习兴趣。而假如他们一开始就被要解决的 问题的深度和广度所震惊,那么一般都不会收到很好的学习效果。另外在实际教学过程中,对能够摘录的代 码数量是有严重限制的。另一方面,这样做无疑会有些人会批评我采用了“不真实的例子”,但只要能起到 良好的效果,我宁愿接受这一指责。 (3) 要揭示的特性按照我精心挑选的顺序依次出场,而且尽可能符合读者的思想历程。当然,我不可能永远 都做到这一点;在那些情况下,会给出一段简要的声明,指出这个问题。 (4) 只把我认为有助于理解语言的东西介绍给读者,而不是把我知道的一切东西都抖出来,这并非藏私。我 认为信息的重要程度是存在一个合理的层次的。有些情况是95%的程序员都永远不必了解的。如强行学习, 只会干扰他们的正常思维,从而加深语言在他们面前表现出来的难度。以C 语言为例,假如你能记住运算符 优先次序表(我从来记不住),那么就可以写出更“聪明”的代码。但再深入想一层,那也会使代码的读者 /维护者感到困扰。所以忘了那些次序吧,在拿不准的时候加上括号即可。 (5) 每一节都有明确的学习重点,所以教学时间(以及练习的间隔时间)非常短。这样做不仅能保持读者思 想的活跃,也能使问题更容易理解,对自己的学习产生更大的信心。 (6) 提供一个坚实的基础,使读者能充分理解问题,以便更容易转向一些更加困难的课程和书籍。 4. 联机文档 由Sun 微系统公司提供的Java 语言和库(可免费下载)配套提供了电子版的用户帮助手册,可用Web 浏览器 阅读。此外,由其他厂商开发的几乎所有类似产品都有一套等价的文档系统。而目前出版的与Java 有关的几 乎所有书籍都重复了这份文档。所以你要么已经拥有了它,要么需要下载。所以除非特别必要,否则本书不 会重复那份文档的内容。因为一般地说,用Web 浏览器查找与类有关的资料比在书中查找方便得多(电子版 的东西更新也快)。只有在需要对文档进行补充,以便你能理解一个特定的例子时,本书才会提供有关类的 一些附加说明。 5. 章节 本书在设计时认真考虑了人们学习Java 语言的方式。在我授课时,学生们的反映有效地帮助了我认识哪些部 分是比较困难的,需特别加以留意。我也曾经一次讲述了太多的问题,但得到的教训是:假如包括了大量新 特性,就需要对它们全部作出解释,而这特别容易加深学生们的混淆。因此,我进行了大量努力,使这本书 一次尽可能地少涉及一些问题。 所以,我在书中的目标是让每一章都讲述一种语言特性,或者只讲述少数几个相互关联的特性。这样一来, 读者在转向下一主题时,就能更容易地消化前面学到的知识。 下面列出对本书各章的一个简要说明,它们与我实际进行的课堂教学是对应的。 (1) 第1 章:对象入门 这一章是对面向对象的程序设计(OOP)的一个综述,其中包括对“什么是对象”之类的基本问题的回答,并 讲述了接口与实现、抽象与封装、消息与函数、继承与合成以及非常重要的多形性的概念。这一章会向大家 提出一些对象创建的基本问题,比如构建器、对象存在于何处、创建好后把它们置于什么地方以及魔术般的 垃圾收集器(能够清除不再需要的对象)。要介绍的另一些问题还包括通过违例实现的错误控制机制、反应 灵敏的用户界面的多线程处理以及连网和因特网等等。大家也会从中了解到是什么使得Java 如此特别,它为 什么取得了这么大的成功,以及与面向对象的分析与设计有关的问题。 (2) 第2 章:一切都是对象 本章将大家带到可以着手写自己的第一个Java 程序的地方,所以必须对一些基本概念作出解释,其中包括对 象“句柄”的概念;怎样创建一个对象;对基本数据类型和数组的一个介绍;作用域以及垃圾收集器清除对 象的方式;如何将Java 中的所有东西都归为一种新数据类型(类),以及如何创建自己的类;函数、自变量 以及返回值;名字的可见度以及使用来自其他库的组件;static 关键字;注释和嵌入文档等等。 (3) 第3 章:控制程序流程 本章开始介绍起源于C 和C++,由Java 继承的所有运算符。除此以外,还要学习运算符一些不易使人注意的 问题,以及涉及造型、升迁以及优先次序的问题。随后要讲述的是基本的流程控制以及选择运算,这些是几 10 乎所有程序设计语言都具有的特性:用if-else 实现选择;用for 和while 实现循环;用break 和continue 以及Java 的标签式break 和contiune (它们被认为是Java 中“不见的gogo”)退出循环;以及用switch 实现另一种形式的选择。尽管这些与C 和C++中见到的有一定的共通性,但多少存在一些区别。除此以外, 所有示例都是完整的Java 示例,能使大家很快地熟悉Java 的外观。 (4) 第4 章:初始化和清除 本章开始介绍构建器,它的作用是担保初始化的正确实现。对构建器的定义要涉及函数过载的概念(因为可 能同时有几个构建器)。随后要讨论的是清除过程,它并非肯定如想象的那么简单。用完一个对象后,通常 可以不必管它,垃圾收集器会自动介入,释放由它占据的内存。这里详细探讨了垃圾收集器以及它的一些特 点。在这一章的最后,我们将更贴近地观察初始化过程:自动成员初始化、指定成员初始化、初始化的顺 序、static(静态)初始化以及数组初始化等等。 (5) 第5 章:隐藏实现过程 本章要探讨将代码封装到一起的方式,以及在库的其他部分隐藏时,为什么仍有一部分处于暴露状态。首先 要讨论的是package 和import 关键字,它们的作用是进行文件级的封装(打包)操作,并允许我们构建由类 构成的库(类库)。此时也会谈到目录路径和文件名的问题。本章剩下的部分将讨论public,private 以及 protected 三个关键字、“友好”访问的概念以及各种场合下不同访问控制级的意义。 (6) 第6 章:类再生 继承的概念是几乎所有OOP 语言中都占有重要的地位。它是对现有类加以利用,并为其添加新功能的一种有 效途径(同时可以修改它,这是第7 章的主题)。通过继承来重复使用原有的代码时(再生),一般需要保 持“基础类”不变,只是将这儿或那儿的东西串联起来,以达到预期的效果。然而,继承并不是在现有类基 础上制造新类的唯一手段。通过“合成”,亦可将一个对象嵌入新类。在这一章中,大家将学习在Java 中重 复使用代码的这两种方法,以及具体如何运用。 (7) 第7 章:多形性 若由你自己来干,可能要花9 个月的时间才能发现和理解多形性的问题,这一特性实际是OOP 一个重要的基 础。通过一些小的、简单的例子,读者可知道如何通过继承来创建一系列类型,并通过它们共有的基础类对 那个系列中的对象进行操作。通过Java 的多形性概念,同一系列中的所有对象都具有了共通性。这意味着我 们编写的代码不必再依赖特定的类型信息。这使程序更易扩展,包容力也更强。由此,程序的构建和代码的 维护可以变得更方便,付出的代价也会更低。此外,Java 还通过“接口”提供了设置再生关系的第三种途 径。这儿所谓的“接口”是对对象物理“接口”一种纯粹的抽象。一旦理解了多形性的概念,接口的含义就 很容易解释了。本章也向大家介绍了Java 1.1 的“内部类”。 (8) 第8 章:对象的容纳 对一个非常简单的程序来说,它可能只拥有一个固定数量的对象,而且对象的“生存时间”或者“存在时 间”是已知的。但是通常,我们的程序会在不定的时间创建新对象,只有在程序运行时才可了解到它们的详 情。此外,除非进入运行期,否则无法知道所需对象的数量,甚至无法得知它们确切的类型。为解决这个常 见的程序设计问题,我们需要拥有一种能力,可在任何时间、任何地点创建任何数量的对象。本章的宗旨便 是探讨在使用对象的同时用来容纳它们的一些Java 工具:从简单的数组到复杂的集合(数据结构),如 Vector 和Hashtable 等。最后,我们还会深入讨论新型和改进过的Java 1.2 集合库。 (9) 第9 章:违例差错控制 Java 最基本的设计宗旨之一便是组织错误的代码不会真的运行起来。编译器会尽可能捕获问题。但某些情况 下,除非进入运行期,否则问题是不会被发现的。这些问题要么属于编程错误,要么则是一些自然的出错状 况,它们只有在作为程序正常运行的一部分时才会成立。Java 为此提供了“违例控制”机制,用于控制程序 运行时产生的一切问题。这一章将解释try、catch、throw、throws 以及finally 等关键字在Java 中的工作 原理。并讲述什么时候应当“掷”出违例,以及在捕获到违例后该采取什么操作。此外,大家还会学习Java 的一些标准违例,如何构建自己的违例,违例发生在构建器中怎么办,以及违例控制器如何定位等等。 (10) 第10 章:Java IO 系统 理论上,我们可将任何程序分割为三部分:输入、处理和输出。这意味着IO(输入/输出)是所有程序最为 11 关键的部分。在这一章中,大家将学习Java 为此提供的各种类,如何用它们读写文件、内存块以及控制台 等。“老”IO 和Java 1.1 的“新”IO 将得到着重强调。除此之外,本节还要探讨如何获取一个对象、对其 进行“流式”加工(使其能置入磁盘或通过网络传送)以及重新构建它等等。这些操作在Java 的1.1 版中都 可以自动完成。另外,我们也要讨论Java 1.1 的压缩库,它将用在Java 的归档文件格式中(JAR)。 (11) 第11 章:运行期类型鉴定 若只有指向基础类的一个句柄,Java 的运行期类型标鉴定(RTTI)使我们能获知一个对象的准确类型是什 么。一般情况下,我们需要有意忽略一个对象的准确类型,让Java 的动态绑定机制(多形性)为那一类型实 现正确的行为。但在某些场合下,对于只有一个基础句柄的对象,我们仍然特别有必要了解它的准确类型是 什么。拥有这个资料后,通常可以更有效地执行一次特殊情况下的操作。本章将解释RTTI 的用途、如何使用 以及在适当的时候如何放弃它。此外,Java 1.1 的“反射”特性也会在这里得到介绍。 (12) 第12 章:传递和返回对象 由于我们在Java 中同对象沟通的唯一途径是“句柄”,所以将对象传递到一个函数里以及从那个函数返回一 个对象的概念就显得非常有趣了。本章将解释在函数中进出时,什么才是为了管理对象需要了解的。同时也 会讲述String(字串)类的概念,它用一种不同的方式解决了同样的问题。 (13) 第13 章:创建窗口和程序片 Java 配套提供了“抽象Windows 工具包”(AWT)。这实际是一系列类的集合,能以一种可移植的形式解决 视窗操纵问题。这些窗口化程序既可以程序片的形式出现,亦可作为独立的应用程序使用。本章将向大家介 绍AWT 以及网上程序片的创建过程。我们也会探讨AWT 的优缺点以及Java 1.1 在GUI 方面的一些改进。同 时,重要的“Java Beans”技术也会在这里得到强调。Java Beans 是创建“快速应用开发”(RAD)程序构 造工具的重要基础。我们最后介绍的是Java 1.2 的“Swing”库——它使Java 的UI 组件得到了显著的改 善。 (14) 第14 章:多线程 Java 提供了一套内建的机制,可提供对多个并发子任务的支持,我们称其为“线程”。这线程均在单一的程 序内运行。除非机器安装了多个处理器,否则这就是多个子任务的唯一运行方式。尽管还有别的许多重要用 途,但在打算创建一个反应灵敏的用户界面时,多线程的运用显得尤为重要。举个例子来说,在采用了多线 程技术后,尽管当时还有别的任务在执行,但用户仍然可以毫无阻碍地按下一个按钮,或者键入一些文字。 本章将对Java 的多线程处理机制进行探讨,并介绍相关的语法。 (15) 第15 章 网络编程 开始编写网络应用时,就会发现所有Java 特性和库仿佛早已串联到了一起。本章将探讨如何通过因特网通 信,以及Java 用以辅助此类编程的一些类。此外,这里也展示了如何创建一个Java 程序片,令其同一个 “通用网关接口”(CGI)程序通信;揭示了如何用C++编写CGI 程序;也讲述了与Java 1.1 的“Java 数据 库连接”(JDBC)和“远程方法调用”(RMI)有关的问题。 (16) 第16 章 设计范式 本章将讨论非常重要、但同时也是非传统的“范式”程序设计概念。大家会学习设计进展过程的一个例子。 首先是最初的方案,然后经历各种程序逻辑,将方案不断改革为更恰当的设计。通过整个过程的学习,大家 可体会到使设计思想逐渐变得清晰起来的一种途径。 (17) 第17 章 项目 本章包括了一系列项目,它们要么以本书前面讲述的内容为基础,要么对以前各章进行了一番扩展。这些项 目显然是书中最复杂的,它们有效演示了新技术和类库的应用。 有些主题似乎不太适合放到本书的核心位置,但我发现有必要在教学时讨论它们,这些主题都放入了本书的 附录。 (18) 附录A:使用非Java 代码 对一个完全能够移植的Java 程序,它肯定存在一些严重的缺陷:速度太慢,而且不能访问与具体平台有关的 服务。若事先知道程序要在什么平台上使用,就可考虑将一些操作变成“固有方法”,从而显著加快执行速 12 度。这些“固有方法”实际是一些特殊的函数,以另一种程序设计语言写成(目前仅支持C/C++)。Java 还 可通过另一些途径提供对非Java 代码的支持,其中包括CORBA。本附录将详细介绍这些特性,以便大家能创 建一些简单的例子,同非Java 代码打交道。 (19) 附录B:对比C++和Java 对一个C++程序员,他应该已经掌握了面向对象程序设计的基本概念,而且Java 语法对他来说无疑是非常眼 熟的。这一点是明显的,因为Java 本身就是从C++衍生而来。但是,C++和Java 之间的确存在一些显著的差 异。这些差异意味着Java 在C++基础上作出的重大改进。一旦理解了这些差异,就能理解为什么说Java 是 一种杰出的语言。这一附录便是为这个目的设立的,它讲述了使Java 与C++明显有别的一些重要特性。 (20) 附录C:Java 编程规则 本附录提供了大量建议,帮助大家进行低级程序设计和代码编写。 (21) 附录D:性能 通过这个附录的学习,大家可发现自己Java 程序中存在的瓶颈,并可有效地改善执行速度。 (22) 附录E:关于垃圾收集的一些话 这个附录讲述了用于实现垃圾收集的操作和方法。 (23) 附录F:推荐读物 列出我感觉特别有用的一系列Java 参考书。 6. 练习 为巩固对新知识的掌握,我发现简单的练习特别有用。所以读者在每一章结束时都能找到一系列练习。 大多数练习都很简单,在合理的时间内可以完成。如将本书作为教材,可考虑在课堂内完成。老师要注意观 察,确定所有学生都已消化了讲授的内容。有些练习要难些,他们是为那些有兴趣深入的读者准备的。大多 数练习都可在较短时间内做完,有效地检测和加深您的知识。有些题目比较具有挑战性,但都不会太麻烦。 事实上,练习中碰到的问题在实际应用中也会经常碰到。 7. 多媒体C D- ROM 本书配套提供了一片多媒体CD-ROM,可单独购买及使用。它与其他计算机书籍的普通配套CD 不同,那些CD 通常仅包含了书中用到的源码(本书的源码可从www.BruceEckel.com 免费下载)。本CD-ROM 是一个独立的 产品,包含了一周“Hads-OnJava”培训课程的全部内容。这是一个由Bruce Eckel 讲授的、长度在15 小时 以上的课程,含500 张以上的演示幻灯片。该课程建立在这本书的基础上,所以是非常理想的一个配套产 品。 CD-ROM 包含了本书的两个版本: (1) 本书一个可打印的版本,与下载版完全一致。 (2) 为方便读者在屏幕上阅读和索引,CD-ROM 提供了一个独特的超链接版本。这些超链接包括: ■230 个章、节和小标题链接 ■3600 个索引链接 CD-ROM 刻录了600MB 以上的数据。我相信它已对所谓“物超所值”进行了崭新的定义。 CD-ROM 包含了本书打印版的所有东西,另外还有来自五天快速入门课程的全部材料。我相信它建立了一个新 的书刊品质评定标准。 若想单独购买此CD-ROM,只能从Web 站点www.BruceEckel.com 处直接订购。 8. 源代码 本书所有源码都作为保留版权的免费软件提供,可以独立软件包的形式获得,亦可从 http://www.BruceEckel.com 下载。为保证大家获得的是最新版本,我用这个正式站点发行代码以及本书电 子版。亦可在其他站点找到电子书和源码的镜像版(有些站点已在http://www.BruceEckel.com 处列出)。 但无论如何,都应检查正式站点,确定镜像版确实是最新的版本。可在课堂和其他教育场所发布这些代码。 版权的主要目标是保证源码得到正确的引用,并防止在未经许可的情况下,在印刷材料中发布代码。通常, 13

    2015-01-17
    12
  • WebSphere快速入门

    摘要 我们已经走进电子商务时代,本书将带您进入电子商务应用开发的世界。本书第一章介绍电子商务理念及有关技术基础,包括Internet、Web和Java。第二章介绍IBM电子商务应用框架,包括WebSphere。第三章给您带来WebSphere Studio应用开发技术。第四、五章分别介绍新一代Web应用的关键技术:Java Servlet和JSP。第六章介绍新一代Web应用服务器软件:WebSphere应用服务器。第七章带给您新一代Web应用编程技术:WebSphere应用编程技术。本书附录中的实验指导带您一起走过使用WebSphere技术开发电子商务应用的过程。 本书特别适合于信息技术类的高年级大学生和研究生,以及从事电子商务应用开发的技术人员。通过学习本书,您将了解电子商务应用开发的先进技术,并快速掌握WebSphere电子商务应用开发的基本技术。 第一章 电子商务基础知识 Web正改变着我们生活的方方面面,但任何领域都没有象商务运作方式那样经历着一场快速而巨大的变革。众多商家正在准备或已经走向转变到电子商务的道路,即使用Internet技术转变关键的商务过程。本章介绍电子商务理念及有关技术基础,包括Internet、Web和Java。 1.1 电子商务理念 从20世纪70年代以来,很多机构依靠电子数据交换(EDI、Electronic Data Interchange)实现业务处理的自动化。EDI着重于商业伙伴之间的事务处理标准化,但是EDI标准缺乏灵活性和可扩展性。进入20世纪90年代,随着Web技术的发展,尤其是在1995年Java出现以后,许多机构开始采用Web应用系统来支持电子商务。电子商务(e-business)是指借助Internet及相关技术进行商务活动,而一个电子商务(an e-business)是这样的一个机构,它通过内部网、外部网和Web将关键业务系统直接连接到客户、员工、供应商和业务伙伴。一个机构要转型为一个电子商务,就要使用Internet技术转变关键的业务过程,如客户关系管理、电子商贸、供应链管理、企业内部管理。这个转变过程也是一个综合使用Internet技术、信息技术、商务技术转变业务方式的过程。 然而,电子商务不仅仅是技术更新。转变到电子商务必须对需要做什么有一个明确的蓝图,以及对实现这个蓝图有一个清晰的发展指南。电子商务周期模型正是为企业开展电子商务提供了一个模型。电子商务周期(参见图1-1)由四个组成阶段,包括转变、构造、运行和利用。想要转变到电子商务的机构无论何时均可以从任何一个阶段开始。这也是一个重复的过程。 图1-1:电子商务周期模型 1) 转变阶段是关于转变核心的商务过程,也就是要将现有的商务模型扩展到网络世界以创造一个电子商务模型。应用Internet技术为商务创造最大限度的价值,电子商务改变着客户关系管理、供应链和电子商贸的传统准则。在转变商务过程时,每一个商务过程应该放在整体环境中加以考虑。否则,充其量只是离散的各个更好的商务过程,无法带来期望的改善客户服务和提高电子商务价值的效果。 2) 构造阶段是关于构造新的应用系统。转变核心的商务过程需要新一代的应用系统。构造阶段也包括使用一个基于开放标准的途径将已有应用系统迁移到Web上。要求电子商务应用系统是基于标准的、以服务器为中心的、可伸缩的、可快速部署、易用和易管理的。 3) 运行阶段涉及一个可伸缩的、可用的、安全的运行环境。围绕着商务和应用系统通常有一个基础设施。基础设施提供的服务要求是可用的、可伸缩的、易管理的和安全的。 4) 利用阶段是关于知识和信息的利用。这里的焦点是知识管理,也就是说利用我们知道的东西。与信息管理不同,知识管理包括对显式知识和隐式知识的管理。传统的IT系统处理的是显式知识,即能写下来并能编程处理的。而隐式知识是人们知道的但没有被写下来的东西,它基于直觉、经验和洞察力。 从简单的开始,快速地增长。从现有的基础上构造电子商务应用系统,逐步将核心业务扩展到Internet上,最终实现电子商务带来的巨大的投资回报。然而,电子商务的技术基础主要包括Internet、Web和Java,本章以下各节介绍这些技术的基础知识。 1.2 Internet基础知识 Internet已经成为企业、政府和研究机构共享信息的基础设施,同时也是开展电子商务的基础。Internet 的先驱是ARPANET。美国国防高级研究计划局 (Defense Advanced Research Project Agency、简称DARPA)于20 世纪 60 年代后期资助开发了一种叫做 ARPANET的实验性通讯系统。起初,它仅用于连接美国军事机构的计算机网络,但随后不久,这个网络很快扩展到与国防有关的公司和研究机构。从此,面向特定应用需求的不同网络协议及网络技术相继出现,同时也带来了网络互连的问题。如果两个网络使用不同的协议,即使采用某种网络技术将它们在物理上互相连接起来,应用系统(如邮件系统)之间也无法相互沟通。为此,很多组织,如CCITT(Consultative Committee on International Telephony and Telegraphy,现在成为 ITU-T,即International Telecommunications Union - Telecommunication Standardization Sector)和ISO(国际标准化组织),开始考虑定义一套分层协议族,使得应用系统之间能相互通信,即使这些应用系统运行在不同的网络环境中(如不同的操作系统和不同的网络技术)。DARPA从1970年左右开始研究一套称之为TCP/IP的分层协议族,于1978年左右基本定形。ARPANET于1980年左右开始采用TCP/IP协议族,并于1983年全面实现。与此同时,TCP/IP协议族在 UNIX操作系统中也得到了实现(由加利福尼亚大学伯克利分校完成),并免费分发。从此,TCP/IP在大学和研究机构中迅速传播,并成为连接UNIX系统的标准协议。这些互相连接的网络广泛深入到大学和其它组织(一开始主要是非赢利组织)。由于个人计算机的迅速普及,该网络扩展到全球大部分地方,并且开始吸引成千上万的个人以及赢利组织加入,由此逐渐形成了所谓的 Internet(因特网)。Internet指的是全球性互连网络。它由下列网络群构成: 1) 主干网:通常为大规模网络,这些网络主要用来与其它网络互连,如美国的NSFNET(NSF是指美国国家自然科学基金会)、欧洲的EBONE、大型的商用主干网。 2) 区域网:如连接大专院校的区域网。 3) 商用网络:为客户提供连接骨干网的服务的网络,或只供公司内部使用且连接到Internet的网络。 4) 局域网:如校园网。 90年代,Internet发展十分迅猛,这与1991年HTML的问世和Gopher的免费发放有关,也与1993年Mosaic的问世有关,Internet的商用也加速了Internet的扩张。到20世纪末,Internet已经成为一种通过服务器将小型网络连接起来的错综复杂的网络结构。大部分情况下,服务器通过专门进行 Internet 通讯的线路来传送数据。个人计算机则通过直接线路,或者通过电话线和调制解调器连接到这些服务器上。直接线路一般是高速的电讯线路,专门用于在建筑物之间或组织之间传送数据。而标准的电话线路,现在主要是综合业务数字网络(ISDN)的线路,则通常用于连接个人计算机。 1.3 Web基本知识 Web(World Wide Web、万维网)技术是电子商务的核心技术。Web的思想可追溯到Tim Berners-Lee于1989年3月在CERN (Centre European pour la Recherche Nucleaire,或称European Laboratory for Particle Physics、欧洲粒子物理实验室)写的一个关于信息管理的项目建议书(Information Management: A Proposal)。该建议书提出了分布式超文本系统的设想,旨在将CERN已有的几个信息服务器一体化,并提供一个简单的用户界面来存取各种形式的信息。1990年Web浏览器和Web服务器使用面向对象技术相继在CERN实现。Berners-Lee 和他的合作伙伴成功引入了构成Web体系结构的基本元素:Web服务器、Web浏览器、浏览器与服务器之间的通信协议HTTP(Hypertext Transfer Protocol 、超文本传输协议)、写Web文档的语言HTML(Hypertext Markup Language、超文本标记语言)、以及用来标识Web上资源的URL(Universal Resource Locator 、统一资源定位器)。1993年,美国伊利诺斯大学国家超级计算应用中心NCSA (National Center for Supercomputing Applications)的Marc Andreesen及其合作者发布了称为Mosaic的浏览器,这是第一个较健壮的易用的浏览器,它具有友善的图形用户界面。从此,Web迅速成长为全球范围内的信息宝库。1994 年,W3 联盟在Tim Berners-Lee的领导下成立,该组织通过制定技术规范与提供参考软件来发展Web的技术标准并促进Web产品之间的互操作性。 URL(Universal Resource Locator 、统一资源定位器)用来唯一标识Web上的资源,包括Web 页面、图象文件(如gif 格式文件和jpeg格式文件)、音频文件(如au格式)、视频文件 (如mpeg格式文件)。URL的格式为:协议://主机名<:端口号>/标识符(例如 http://www.seu.edu.cn:80/index.html )。协议可以是HTTP、HTTPS(安全的超文本传输协议)、FTP;主机名用来标识被请求的服务器;端口通常为不同协议保留,例如FTP和HTTP守护进程侦听不同的端口,FTP缺省的端口号为21,HTTP缺省的端口号为80;标识符说明被请求的是什么,可以是文件名(含路径)或一个应用关键字 (如/cgi-bin/和/servlet/)加上一些信息(如一个脚本的名字和servlet的名字)。例如,用户键入URL格式的地址(例如 http://www.seu.edu.cn:80/index.html );浏览器请求主机www.seu.edu.cn 在80端口提供的HTTP服务,并要求取得该服务器上的index.html文件;服务器接受请求,取得该文件;服务器把文件返回浏览器,并告诉浏览器这是一个HTML文件;浏览器在显示器上显示这个页面。在浏览器和web服务器之间使用的协议是HTTP。 HTTP(Hyper Text Transfer Protocol、超文本传输协议)是用来在互连网上传输文档的协议,它是Web上最常用也是最重要的协议,也是Web服务器和Web客户(如浏览器)之间传输Web页面的基础。HTTP是建立在TCP/IP之上的应用协议,但并不是面向连接的,而是一种请求/应答(Request/Response)式协议。浏览器通常通过HTTP向Web服务器发送一个HTTP请求,其中包括一个方法、可能的几个头、一个体。常用的方法类型包括:GET(请求一个网页)、POST(传送一个表单中的信息)、PUT(存入这个信息、类似于FTP中的PUT)和DELETE(删除这个信息)。Web服务器接受到HTTP请求之后,执行客户所请求的服务,生成一个HTTP应答返回给客户。HTTP应答有一个状态行、可能的几个头、一个体。在头中可以定义返回文档的内容类型(MIME类型)、Cache控制、失效时间。MIME类型包括:“text/html”(HTML文本)、“image/jpeg”(JPEG图)、“audio/ra”(RealAudio文件)。HTTP本身也在不断完善和发展,目前,常用的是HTTP1.1,它更好地利用TCP的特性,对HTTP1.0作了改进。 HTML (Hypertext Markup Language、超文本标记语言)是Web诞生与发展的要素之一,它旨在使得Web页面能显示在任何HTML使能的浏览器中,而与连网的机器平台无关。HTML并不是一个程序设计语言,而是一个标记语言,它所提供的标记是由SGML(Standard Generalized Markup Language,标准的通用标记语言)定义的。SGML是ISO(国际标准化组织)在1986年推出的一个用来创建标记语言的语言标准,它源自IBM早在1969年开发的GML(Generalized Markup Language),该语言的名称也正好包含了三位创始人姓字的第一个字母,他们分别是Charles F. Goldfarb, Edward Mosher,Raymond Lorie。SGML是一种元语言,即用来定义标记语言的语言,它提供了一种将数据内容与显示分离开来的数据表示方法,使得数据独立于机器平台和处理程序。这些特性促使Tim Berners-Lee 采用SGML来创建称之为HTML的标记语言。1993年形成HTML 1.0,以后不断完善,HTML 4.0发表于1997年。特别需要指出的是HTML提供的链接机制是Web的本质特性之一。但是,HTML更多的关注Web浏览器如何在页面上安排文本、图象和按钮等,过多地考虑外观使其缺乏对结构化数据的表示能力。另外,HTML中有限的标记不能满足很多Web应用的需要,如基于Web的大型出版系统和新一代的电子商务,而为各种应用需要不断地往HTML中增加标记显然不是最终的解决方法,究其原因是HTML缺乏可扩展性。解决方案应该是简化SGML使之能应用到Web上。为此,从1996年开始,W3C(World Wide Web Consortium) 的一个工作组在Jon Bosak的领导下致力于设计一个超越HTML能力范围的新语言,这个语言后来被命名为XML(Extensible Markup Language,可扩展标记语言)。1998年2月,W3C发布了XML 1.0作为其推荐标准。现在,W3C已经用XML设计出一个与HTML4.01功能等价的语言,称为XHTML1.0 (Extensible HyperText Markup Language)。 Web客户通常指的是Web浏览器,如Netscape Navigator和Microsoft Internet Explorer。这种浏览器能理解多种协议,如HTTP、HTTPS、FTP;也能理解多种文档格式,如text、HTML、JPEG(一种图象文件格式)、XML(有的尚未支持);也具备根据对象类型调用外部应用的功能。需要指出的是HTML文档中的链接在Web浏览器中通常以带下划线的方式显示,用户点击某个链接就能浏览到所链接的Web资源,这也是Web的魅力所在。 Web服务器(或称HTTP服务器)提供HTTP服务。本来Web服务器只提供“静态”内容,即返回在URL里指定的文件的内容,一般具备将URL名映射到文件名的功能,并能实施某种安全策略。现在,可采用CGI(通用网关接口)技术或Java Servlet技术从一个运行的程序里得出“动态”内容,可以采用应用关键字(如/cgi-bin/和/servlet/)来组织脚本文件和Servlet文件,而且现在的Web服务器通常还具备连接数据库的功能,这些形成了Web应用的出现。通常,一个Web服务器还提供其它服务,如FTP服务。有的还可作为代理服务器。一个代理服务器是一个可以从别的服务器上为它的客户取文件的服务器。代理服务器可以通过缓存应答(页面)使得响应时间更快,也可以降低网络流量,对外能隐藏内部网信息。 总之,URL、HTTP、HTML(以及XML)、Web服务器和Web浏览器是构成Web的五大要素。Web的本质内涵是一个建立在Internet基础上的网络化超文本信息传递系统,而Web的外延是不断扩展的信息空间。Web的基本技术在于对Web资源的标识机制(如URL)、应用协议(如HTTP和HTTPS)、数据格式(如HTML和XML)。这些技术的发展日新月异,同时新的技术不断涌现,因此Web的发展前景不可限量。 1.4 Java 简介 现代技术的发展,尤其是网络技术,给现代企业带来了许多新的机遇和挑战,如改善客户服务、全球化和信息检索等,这些在技术上反映为信息的获取、系统管理、系统集成、新技术的开发、Internet、Intranet等等与商业的结合。而这些要求一个随处可用的开放的结构和在不同的平台之间低成本的信息传递方式,Java正好满足这些要求。 Java是由Sun Microsystems公司于1995年5月推出的Java程序设计语言(以下简称Java语言)和Java平台的总称。用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动感的Web、Internet计算。从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器现在均支持Java applet。另一方面,Java技术也不断更新。 Java平台由Java虚拟机(Java Virtual Machine)和Java 应用编程接口(Application Programming Interface、简称API)构成。Java 应用编程接口为Java应用提供了一个独立于操作系统的标准接口,可分为基本部分和扩展部分。在硬件或操作系统平台上安装一个Java平台之后,Java应用程序就可运行。现在Java平台已经嵌入了几乎所有的操作系统。这样Java程序可以只编译一次,就可以在各种系统中运行。Java应用编程接口已经从1.1.x版发展到1.2版。目前常用的Java平台基于Java1.2。 Java语言是一个支持网络计算的面向对象程序设计语言。Java语言吸收了Smalltalk语言和C++语言的优点,并增加了其它特性,如支持并发程序设计、网络通信、和多媒体数据控制等。主要特性如下: 1) Java语言是简单的。Java语言的语法与C语言和C++语言很接近,使得大多数程序员很容易学习和使用Java。另一方面,Java丢弃了C++ 中很少使用的、很难理解的、令人迷惑的那些特性,如操作符重载、多继承、自动的强制类型转换。特别地,Java语言不使用指针,并提供了自动的废料收集,使得程序员不必为内存管理而担忧。 2) Java语言是一个面向对象的。Java语言提供类、接口和继承等原语,为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(关键字为implements)。Java语言全面支持动态绑定,而C++ 语言只对虚函数使用动态绑定。总之,Java语言是一个纯的面向对象程序设计语言。 3) Java语言是分布式的。Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java.net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、 ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。 4) Java语言是健壮的。Java的强类型机制、异常处理、废料的自动收集等是Java程序健壮性的重要保证。对指针的丢弃是Java的明智选择。Java的安全检查机制使得Java更具健壮性。 5) Java语言是安全的。Java通常被用在网络环境中,为此,Java提供了一个安全机制以防恶意代码的攻击。除了Java语言具有的许多安全特性以外,Java对通过网络下载的类具有一个安全防范机制(类ClassLoader),如分配不同的名字空间以防替代本地的同名类、字节代码检查,并提供安全管理机制(类SecurityManager)让Java应用设置安全哨兵。 6) Java语言是体系结构中立的。Java程序(后缀为java的文件)在Java平台上被编译为体系结构中立的字节码格式(后缀为class的文件), 然后可以在实现这个Java平台的任何系统中运行。这种途径适合于异构的网络环境和软件的分发。 7) Java语言是可移植的。这种可移植性来源于体系结构中立性,另外,Java还严格规定了各个基本数据类型的长度。Java系统本身也具有很强的可移植性,Java编译器是用Java实现的,Java的运行环境是用ANSI C实现的。 8) Java语言是解释型的。如前所述,Java程序在Java平台上被编译为字节码格式, 然后可以在实现这个Java平台的任何系统中运行。在运行时,Java平台中的Java解释器对这些字节码进行解释执行,执行过程中需要的类在联接阶段被载入到运行环境中。 9) Java是高性能的。与那些解释型的高级脚本语言相比,Java的确是高性能的。事实上,Java的运行速度随着JIT(Just-In-Time)编译器技术的发展越来越接近于C++。 10) Java语言是多线程的。在Java语言中,线程是一种特殊的对象,它必须由Thread类或其子(孙)类来创建。通常有两种方法来创建线程:其一,使用型构为Thread(Runnable) 的构造子将一个实现了Runnable接口的对象包装成一个线程,其二,从Thread类派生出子类并重写run方法,使用该子类创建的对象即为线程。值得注意的是Thread类已经实现了Runnable接口,因此,任何一个线程均有它的run方法,而run方法中包含了线程所要运行的代码。线程的活动由一组方法来控制。 Java语言支持多个线程的同时执行,并提供多线程之间的同步机制(关键字为synchronized)。 11) Java语言是动态的。Java语言的设计目标之一是适应于动态变化的环境。Java程序需要的类能动态地被载入到运行环境,也可以通过网络来载入所需要的类。这也有利于软件的升级。另外,Java中的类有一个运行时刻的表示,能进行运行时刻的类型检查。 Java语言的优良特性使得Java应用具有无比的健壮性和可靠性,这也减少了应用系统的维护费用。Java对对象技术的全面支持和Java平台内嵌的API能缩短应用系统的开发时间并降低成本。Java的编译一次,到处可运行的特性使得它能够提供一个随处可用的开放结构和在多平台之间传递信息的低成本方式。特别是Java企业应用编程接口(Java Enterprise APIs)为企业计算及电子商务应用系统提供了有关技术和丰富的类库。 1) JDBC(Java Database Connectivity)提供连接各种关系数据库的统一接口。 2) EJB(Enterprise JavaBeans)使得开发者方便地创建、部署和管理跨平台的基于组件的企业应用。 3) Java RMI(Java Remote Method Invocation)用来开发分布式Java应用程序。一个Java对象的方法能被远程Java虚拟机调用。这样,远程方法激活可以发生在对等的两端,也可以发生在客户端和服务器之间,只要双方的应用程序都是用Java写的。 4) Java IDL(Java Interface Definition Language) 提供与CORBA(Common Object Request Broker Architecture)的无逢的互操作性。这使得Java能集成异构的商务信息资源。 5) JNDI(Java Naming and Directory Interface)提供从Java平台到的统一的无逢的连接。这个接口屏蔽了企业网络所使用的各种命名和目录服务。 6) JMAPI(Java Management API)为异构网络上系统、网络和服务管理的开发提供一整套丰富的对象和方法。 7) JMS(Java Message Service)提供企业消息服务,如可靠的消息队列、发布和订阅通信、以及有关推拉(Push/Pull)技术的各个方面。 8) JTS(Java transaction Service)提供存取事务处理资源的开放标准,这些事务处理资源包括事务处理应用程序、事务处理管理及监控。 在Java技术中,值得关注的还有JavaBeans,它是一个开放的标准的组件体系结构,它独立于平台,但使用Java语言。一个JavaBean是一个满足JavaBeans规范的Java类,通常定义了一个现实世界的事物或概念。一个JavaBean的主要特征包括属性、方法和事件。通常,在一个支持JavaBeans规范的开发环境(如Sun Java Studio 和IBM VisualAge for Java)中,可以可视地操作JavaBean,也可以使用JavaBean构造出新的JavaBean。JavaBean的优势还在于Java带来的可移植性。现在,EJB (Enterprise JavaBeans) 将JavaBean概念扩展到Java服务端组件体系结构,这个模型支持多层的分布式对象应用。除了JavaBeans,典型的组件体系结构还有DCOM和CORBA,关于这些组件体系结构的深入讨论超出了本书的范围。 第二章 电子商务应用框架 要转变传统的业务过程,就需要开发和部署电子商务应用系统的一个基础,电子商务应用框架正是这样的一个基础。许多企业希望电子商务应用系统具备下列特征: 1) 基于标准; 2) 以服务器为中心; 3) 可伸缩; 4) 能利用已有的核心系统; 5) 可快速部署和易用; 6) 易管理。 本章介绍的电子商务应用框架能满足企业开发电子商务应用系统的上述需求。所谓一个框架是指一个可复用的设计,表示为一组抽象的元素范例以及元素范例之间合作的接口。框架是有针对性的,如一个用户界面框架只为软件系统的用户界面提供了一个设计,而一个应用框架为整个应用系统提供了一个设计。一个应用框架中的元素范例也可称之为组件。本节介绍的电子商务应用框架基于业界标准;它为开发和部署电子商务应用系统提供了一组完整的服务;它提供的Web应用编程模型定义了Web应用拓扑结构以及使用框架提供的服务来设计Web应用的一个模型。这个框架基于独立于平台和提供商的技术标准,包括关于客户端、应用服务器、网络、数据和基础设施的标准。这些标准使得客户能在任何时候在网络上的任何地方存取有关数据和服务,也使得开发的应用软件只需写一次就能到处运行,并能即插即用各种组件。下面介绍电子商务应用框架的基本系统模型、体系结构和Web应用编程模型。

    2015-01-17
    3
  • 经典SQL语句大全

    一、基础 1、说明:创建数据库 CREATE DATABASE database-name 2、说明:删除数据库 drop database dbname 3、说明:备份sql server --- 创建 备份数据的 device USE master EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat' --- 开始 备份 BACKUP DATABASE pubs TO testBack 4、说明:创建新表 create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..) 根据已有的表创建新表: A:create table tab_new like tab_old (使用旧表创建新表) B:create table tab_new as select col1,col2… from tab_old definition only 5、说明:删除新表 drop table tabname 6、说明:增加一个列 Alter table tabname add column col type 注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。 7、说明:添加主键: Alter table tabname add primary key(col) 说明:删除主键: Alter table tabname drop primary key(col) 8、说明:创建索引:create [unique] index idxname on tabname(col….) 删除索引:drop index idxname 注:索引是不可更改的,想更改必须删除重新建。 9、说明:创建视图:create view viewname as select statement 删除视图:drop view viewname 10、说明:几个简单的基本的sql语句 选择:select * from table1 where 范围 插入:insert into table1(field1,field2) values(value1,value2) 删除:delete from table1 where 范围 更新:update table1 set field1=value1 where 范围 查找:select * from table1 where field1 like ’%value1%’ ---like的语法很精妙,查资料! 排序:select * from table1 order by field1,field2 [desc] 总数:select count as totalcount from table1 求和:select sum(field1) as sumvalue from table1 平均:select avg(field1) as avgvalue from table1 最大:select max(field1) as maxvalue from table1 最小:select min(field1) as minvalue from table1 11、说明:几个高级查询运算词 A: UNION 运算符 UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。 B: EXCEPT 运算符 EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。 C: INTERSECT 运算符 INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。 注:使用运算词的几个查询结果行必须是一致的。 12、说明:使用外连接 A、left (outer) join: 左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。 SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c B:right (outer) join: 右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。 C:full/cross (outer) join: 全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。 12、分组:Group by: 一张表,一旦分组 完成后,查询后只能得到组相关的信息。 组相关的信息:(统计信息) count,sum,max,min,avg 分组的标准) 在SQLServer中分组时:不能以text,ntext,image类型的字段作为分组依据 在selecte统计函数中的字段,不能和普通的字段放在一起; .............. 以下省略。。。

    2015-01-17
    0
  • 企业应用架构模式

    内容简介编辑《企业应用架构模式》作者是当今面向对象软件开发的权威,他在一组专家级合作者的帮助下,将40多种经常出现的解决方案转化成模式,最终写成这本能够应用于任何一种企业应用平台的、关于解决方案的、不可或缺的手册。《企业应用架构模式》获得了2003年度美国软件开发杂志图书类的生产效率奖和读者选择奖。《企业应用架构模式》分为两大部分。第一部分是关于如何开发企业应用的简单介绍。第二部分是《企业应用架构模式》的主体,是关于模式的详细参考手册,每个模式都给出使用方法和实现信息,并配以详细的Java代码或C#代码示例。此外,整《企业应用架构模式》中还用了大量UML图来进一步阐明有关概念。 《企业应用架构模式》是为致力于设计和构建企业应用的软件架构师、设计人员和编程人员而写的,同时也可作为高等院校计算机专业及软件学院相关课程的参考教材。 3编辑推荐编辑《企业应用架构模式》: 企业应用开发的实践得益于多种新技术的出现,多层的面向对象平台(如Java、.NET)已经日渐平常。这些新工具和新技术有能力构建更强大的企业应用程序,但是在实现上还不太容易。由于开发人员未能充分理解有经验的对象程序开发人员在架构方面的经验和教训.因此企业应用中经常存在一些共同的错误。 《企业应用架构模式》就是面向企业应用开发者的,可帮助他们迎接这种艰难挑战。《企业应用架构模式》的作者Ma riin Fowler注意到,尽管技术本身存在变化——从Smalltalk到CORBA,再到。Java和NET,但基本的设计思想并没有太多变化.可以加以适当调整,用来解决那些共同的问题。在一组专家级合作者的帮助下,作者将40多种经常出现的解决方案转化成模式,最终写成这本能够应用于任何一种企业应用平台的、关于解决方案的、不可或缺的手册。《企业应用架构模式》曾于2002年荣获美国软件开发杂志图书类的生产效率奖和读者选择奖。 《企业应用架构模式》涉及两部分内容。第一部分是关于如何开发企业应用的简单介绍。在阅读这部分时.读者可以从头到尾通读,以掌握《企业应用架构模式》的范围。第二部分是《企业应用架构模式》的主体,是关于模式的详细参考手册.每个模式都给出使用方法和实现信息,并配有详细的Java代码或C#代码的示例。此外,整《企业应用架构模式》中还用了大量UML图来进一步阐明有关概念。 《企业应用架构模式》主要内容: 将企业应用分层 组织企业业务逻辑的主要方法 在对象和关系数据库之间进行映射的深层次解决方案 通过模型一视图一控制器来组织Web表现 处理跨多事务的数据的并发问题 设计分布式对象接口 4作者简介编辑福勒(Martin Fower),是一位独立咨询顾问,他运用对象技术解决企业问题已经超过十年。他的顾问领域包括健康管理、金融贸易,以及法人财务。他的客户包括Chrysler,Citibank,UK National Health Service,AndersenConsulting,NetscapeCommunications。此外Fowler也是objects、UML、patterns技术的一位合格讲师,他是《AnalysisPatterns》和《UML Distilled》的作者。 5目录编辑译者序 前言 模式列表 引言 1 0.1 架构 1 0.2 企业应用 2 0.3 企业应用的种类 3 0.4 关于性能的考虑 4 0.5 模式 6 0.5.1 模式的结构 7 0.5.2 模式的局限性 9 第一部分 表述 第1章 分层 12 1.1 企业应用中层次的演化 13 1.2 三个基本层次 14 1.3 为各层选择运行环境 15 第2章 组织领域逻辑 19 2.1 抉择 22 2.2 服务层 23 第3章 映射到关系数据库 25 .3.1 架构模式 25 3.2 行为问题 28 3.3 读取数据 29 3.4 结构映射模式 30 3.4.1 关系的映射 30 3.4.2 继承 33 3.5 建立映射 34 3.6 使用元数据 35 3.7 数据库连接 36 3.8 其他问题 38 3.9 进一步阅读 38 第4章 Web表现层 39 4.1 视图模式 41 4.2 输入控制器模式 43 4.3 进一步阅读 43 第5章 并发 45 5.1 并发问题 45 5.2 执行语境 46 5.3 隔离与不变性 47 5.4 乐观并发控制和悲观并发控制 48 5.4.1 避免不一致读 49 5.4.2 死锁 49 5.5 事务 50 5.5.1 ACID 51 5.5.2 事务资源 51 5.5.3 减少事务隔离以提高灵活性 52 5.5.4 业务事务和系统事务 53 5.6 离线并发控制的模式 54 5.7 应用服务器并发 55 5.8 进一步阅读 56 第6章 会话状态 57 6.1 无状态的价值 57 6.2 会话状态 58 6.3 存储会话状态的方法 59 第7章 分布策略 61 7.1 分布对象的诱惑 61 7.2 远程接口和本地接口 62 7.3 必须使用分布的情况 63 7.4 关于分布边界 64 7.5 分布接口 64 第8章 通盘考虑 67 8.1 从领域层开始 67 8.2 深入到数据源层 68 8.2.1 事务脚本的数据源 68 8.2.2 表模块的数据源 69 8.2.3 领域模型的数据源 69 8.3 表现层 69 8.4 一些关于具体技术的建议 70 8.4.1 Java和J2EE 70 8.4.2 .NET 71 8.4.3 存储过程 71 8.4.4 Web Services 72 8.5 其他分层方式 72 第二部分 模 式 第9章 领域逻辑模式 76 9.1 事务脚本(Transaction Script) 76 9.1.1 运行机制 76 9.1.2 使用时机 77 9.1.3 收入确认问题 78 9.1.4 例:收入确认(Java) 78 9.2 领域模型(Domain Model) 81 9.2.1 运行机制 81 9.2.2 使用时机 83 9.2.3 进一步阅读 83 9.2.4 例:收入确认(Java) 84 9.3 表模块(Table Module) 87 9.3.1 运行机制 88 9.3.2 使用时机 90 9.3.3 例:基于表模块的收入确认(C#) 90 9.4 服务层(Service Layer) 93 9.4.1 运行机制 94 9.4.2 使用时机 96 9.4.3 进一步阅读 96 9.4.4 例:收入确认(Java) 96 第10章 数据源架构模式 101 10.1 表数据入口(Table Data Gateway) 101 10.1.1 运行机制 101 10.1.2 使用时机 102 10.1.3 进一步阅读 102 10.1.4 例:人员入口(C#) 103 10.1.5 例:使用数据集(C#) 104 10.2 行数据入口(Row Data Gateway) 106 10.2.1 运行机制 107 10.2.2 使用时机 108 10.2.3 例:人员记录(Java) 108 10.2.4 例:领域对象的数据保持器(Java) 111 10.3 活动记录(Active Record) 112 10.3.1 运行机制 112 10.3.2 使用时机 113 10.3.3 例:一个简单的Person类(Java) 113 10.4 数据映射器(Data Mapper) 115 10.4.1 运行机制 116 10.4.2 使用时机 119 10.4.3 例:一个简单的数据映射器(Java) 119 10.4.4 例:分离查找方法(Java) 123 10.4.5 例:创建一个空对象(Java) 126 第11章 对象-关系行为模式 129 11.1 工作单元(Unit of Work) 129 11.1.1 运行机制 129 11.1.2 使用时机 133 11.1.3 例:使用对象注册的工作单元(Java) 134 11.2 标识映射(Identity Map) 137 11.2.1 运行机制 137 11.2.2 使用时机 139 11.2.3 例:标识映射中的方法(Java) 139 11.3 延迟加载(Lazy Load) 140 11.3.1 运作机制 140 11.3.2 使用时机 142 11.3.3 例:延迟初始化(Java) 142 11.3.4 例:虚代理(Java) 142 11.3.5 例:使用值保持器(Java) 144 11.3.6 例:使用重影(C#) 144 第12章 对象-关系结构模式 151 12.1 标识域(Identity Field) 151 12.1.1 工作机制 151 12.1.2 使用时机 154 12.1.3 进一步阅读 154 12.1.4 例:整型键(C#) 154 12.1.5 例:使用键表(Java) 155 12.1.6 例:使用组合键(Java) 157 12.2 外键映射(Foreign Key Mapping) 166 12.2.1 运行机制 167 12.2.2 使用时机 169 12.2.3 例:单值引用(Java) 169 12.2.4 例:多表查询(Java) 172 12.2.5 例:引用集合(C#) 173 12.3 关联表映射(Association Table Mapping) 175 12.3.1 运行机制 176 12.3.2 使用时机 176 12.3.3 例:雇员和技能(C#) 177 12.3.4 例:使用直接的SQL(Java) 179 12.3.5 例:用一次查询查多个雇员(Java) 182 12.4 依赖映射(Dependent Mapping) 186 12.4.1 运行机制 186 12.4.2 使用时机 187 12.4.3 例:唱片和曲目(Java) 188 12.5 嵌入值(Embedded Value) 190 12.5.1 运行机制 190 12.5.2 使用时机 190 12.5.3 进一步阅读 191 12.5.4 例:简单值对象(Java) 191 12.6 序列化LOB(Serialized LOB) 192 12.6.1 运行机制 193 12.6.2 使用时机 194 12.6.3 例:在XML中序列化一个部门层级(Java) 194 12.7 单表继承(Single Table Inheritance) 196 12.7.1 运行机制 197 12.7.2 使用时机 197 12.7.3 例:运动员的单表(C#) 198 12.7.4 从数据库中加载对象 199 12.8 类表继承(Class Table Inheritance) 202 12.8.1 运行机制 202 12.8.2 使用时机 203 12.8.3 进一步阅读 203 12.8.4 例:运动员和他们的家属(C#) 203 12.9 具体表继承(Concrete Table Inheritance) 208 12.9.1 运行机制 209 12.9.2 使用时机 210 12.9.3 例:具体运动员(C#) 210 12.10 继承映射器(Inheritance Mappers) 214 12.10.1 运行机制 215 12.10.2 使用时机 216 第13章 对象-关系元数据映射模式 217 13.1 元数据映射(Metadata Mapping) 217 13.1.1 运行机制 217 13.1.2 使用时机 218 13.1.3 例:使用元数据和反射(Java) 219 13.2 查询对象(Query Object) 224 13.2.1 运行机制 225 13.2.2 使用时机 225 13.2.3 进一步阅读 226 13.2.4 例:简单的查询对象(Java) 226 13.3 资源库(Repository) 228 13.3.1 运行机制 229 13.3.2 使用时机 230 13.3.3 进一步阅读 231 13.3.4 例:查找一个人所在的部门(Java) 231 13.3.5 例:资源库交换策略(Java) 231 第14章 Web表现模式 233 14.1 模型-视图-控制器(Model View Controller) 233 14.1.1 运行机制 233 14.1.2 使用时机 234 14.2 页面控制器(Page Controller) 235 14.2.1 运行机制 235 14.2.2 使用时机 236 14.2.3 例:Servlet控制器和JSP视图的简单演示(Java) 236 14.2.4 例:使用JSP充当处理程序(Java) 238 14.2.5 例:代码隐藏的页面控制器(C#) 241 14.3 前端控制器(Front Controller) 243 14.3.1 运行机制 244 14.3.2 使用时机 245 14.3.3 进一步阅读 246 14.3.4 例:简单的显示(Java) 246 14.4 模板视图(Template View) 248 14.4.1 运行机制 249 14.4.2 使用时机 251 14.4.3 例:分离的控制器,使用JSP充当视图(Java) 252 14.4.4 例:服务器页面(C#) 253 14.5 转换视图(Transform View) 256 14.5.1 运行机制 256 14.5.2 使用时机 257 14.5.3 例:简单的转换(Java) 257 14.6 两步视图(Two Step View) 259 14.6.1 运行机制 259 14.6.2 使用时机 260 14.6.3 例:两阶XSLT(XSLT) 264 14.6.4 例:JSP和定制标记(Java) 266 14.7 应用控制器(Application Controller) 269 14.7.1 运行机制 270 14.7.2 使用时机 271 14.7.3 进一步阅读 271 14.7.4 例:状态模型应用控制器(Java) 271 第15章 分布模式 275 15.1 远程外观(Remote Facade) 275 15.1.1 运行机制 276 15.1.2 使用时机 278 15.1.3 例:使用Java语言的会话bean来作为远程外观(Java) 278 15.1.4 例:Web Service(C#) 281 15.2 数据传输对象(Data Transfer Object) 285 15.2.1 运行机制 285 15.2.2 使用时机 288 15.2.3 进一步阅读 289 15.2.4 例:传输唱片信息(Java) 289 15.2.5 例:使用XML实现序列化(Java) 293 第16章 离线并发模式 295 16.1 乐观离线锁(Optimistic Offline Lock) 295 16.1.1 运行机制 296 16.1.2 使用时机 298 16.1.3 例:领域层与数据映射器(Java) 298 16.2 悲观离线锁(Pessimistic Offline Lock) 302 16.2.1 运行机制 303 16.2.2 使用时机 305 16.2.3 例:简单锁管理对象(Java) 305 16.3 粗粒度锁(Coarse-Grained Lock) 310 16.3.1 运行机制 310 16.3.2 使用时机 312 16.3.3 例:共享的乐观离线锁(Java) 312 16.3.4 例:共享的悲观离线锁(Java) 316 16.3.5 例:根对象乐观离线锁(Java) 317 16.4 隐含锁(Implicit Lock) 318 16.4.1 运行机制 318 16.4.2 使用时机 319 16.4.3 例:隐含的悲观离线锁(Java) 319 第17章 会话状态模式 321 17.1 客户会话状态(Client Session State) 321 17.1.1 运行机制 321 17.1.2 使用时机 322 17.2 服务器会话状态(Server Session State) 322 17.2.1 运行机制 322 17.2.2 使用时机 324 17.3 数据库会话状态(Database Session State) 324 17.3.1 运行机制 324 17.3.2 使用时机 325 第18章 基本模式 327 18.1 入口(Gateway) 327 18.1.1 运行机制 327 18.1.2 使用时机 328 18.1.3 例:私有消息服务的入口(Java) 329 18.2 映射器(Mapper) 331 18.2.1 运行机制 332 18.2.2 使用时机 332 18.3 层超类型(Layer Supertype) 332 18.3.1 运行机制 332 18.3.2 使用时机 333 18.3.3 例:领域对象(Java) 333 18.4 分离接口(Separated Interface) 333 18.4.1 运行机制 334 18.4.2 使用时机 335 18.5 注册表(Registry) 335 18.5.1 运行机制 336 18.5.2 使用时机 337 18.5.3 例:单子注册表(Java) 337 18.5.4 例:线程安全的注册表(Java) 338 18.6 值对象(Value Object) 339 18.6.1 运行机制 339 18.6.2 使用时机 340 18.7 货币(Money) 340 18.7.1 运行机制 341 18.7.2 使用时机 342 18.7.3 例:货币类(Java) 343 18.8 特殊情况(Special Case) 346 18.8.1 运行机制 347 18.8.2 使用时机 347 18.8.3 进一步阅读 347 18.8.4 例:一个简单的空对象(C#) 347 18.9 插件(Plugin) 348 18.9.1 运行机制 349 18.9.2 使用时机 350 18.9.3 例:ID生成器(Java) 350 18.10 服务桩(Service Stub) 352 18.10.1 运行机制 352 18.10.2 使用时机 353 18.10.3 例:销售税服务(Java) 353 18.11 记录集(Record Set) 355 18.11.1 运行机制 355 18.11.2 使用时机 356 参考文献 359 6序言编辑“每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复劳动。” —Christopher Alexander 本书是面向对象大师Martin Fowler继《Analysis Patterns》、《UML Distilled》、《Planning Extreme Programming》、《Refactoring》之后的又一力作。 “温故而知新”。Fowler在本书中再次向我们证明了《礼记》中这句古训的震撼力—他在回头审视自己及同仁多年来从事企业应用开发的经验和教训后,归纳总结了40多种企业应用架构的设计模式。这些模式从不同层次、不同侧面向我们展示了什么是好的企业应用架构?如何设计好的企业应用? 正如作者自己所言,企业应用在某些方面比其他软件(如电信通信软件)复杂得多:纷繁复杂的企业数据、“不合逻辑”的业务规则、变化莫测的用户需求,等等。环顾四周—CORBA、J2EE、.NET—企业应用开发技术可谓“前仆后继、层出不穷”,开发平台的种类之多就更不必说。 招式套路可以千变万化,扎实深厚的“内功”却是始终如一!虽然企业应用涉及的软件技术不断翻新,但是基本的架构及设计思想却没有太多变化。将以前行之有效的设计思路和方法加以适当调整,并应用到当前的问题上,是最高效的做法。在一组专家级合作者的帮助下,Martin将40多种经常出现的解决方案转化成模式,最终融会成这本“内功心法”。在仔细研读、用心揣摩本书之后,希望它能够帮助你应对任何一种企业应用平台,驾驭任何一种企业应用技术—无论是现在的技术还是未来的技术。 熟悉Fowler的读者都知道,这位大师的写作风格可谓是“深入浅出,娓娓道来”。本书也是一样。前8章是关于企业应用的背景知识,如分层架构、Web表现、业务逻辑、数据库映射、并发、会话、分布策略,等等。在此基础上,随后的各章分别对与这些背景知识相关的设计模式进行了详细的介绍。与其他设计模式的书一样,本书从模式的使用场景、解决方案、UML表示等方面予以介绍,详略有致。就连示例的编程语言的选取—Java和C#—也是与他的写作风格一脉相承的。 夜已深,窗外依旧是绵绵不断的早春小雨。让我们酌一杯清茶,一起来品味大师的话,一起来品味“源于实践、指导实践”的苦涩与甘甜— “模式的关键点是它们源于实践。必须观察人们的工作过程,发现其中好的设计,并找出‘这些解决方案的核心’。这不是一个简单的过程,但是一旦发现了某个模式,它将是非常有价值的。对于我来说,价值之一是能够撰写这样一本参考书。你不必通读本书的全部内容,也不必通读任何一本有关模式的书。只需要了解到这些模式都是干什么的、它们解决什么问题、它们是如何解决问题的,就足够了。这样,一旦你碰到类似问题,就可以从书中找出相应的模式。那时,你再深入了解相应的模式也为时不晚。” 7文摘编辑我虽然没有从事过早期批处理系统时期的任何工作,但我认为当时的软件工作人员不会太关注层次的概念,只要编写操作某些文件(ISAM、VSAM等)格式的程序,这就是当时的应用。它不需要层次。 20世纪90年代,随着客户/服务器系统的出现,分层的概念更明显了。这样的系统是一种两个层次的系统:客户端包括用户界面和其他应用代码,服务器端通常是关系型数据库。常见的客户端工具如VB、PowerBuilder和Delphi。这些工具使得构建数据密集型应用非常容易。因为它们的用户界面控件通常都是SQL感知的。因此,可以通过将控件拖拽到“设计区域”来建立界面,然后再使用属性表单把控件连接到后台数据库。 如果应用仅仅包括关系数据的简单显示和修改,那么这种客户/服务器系统的工作方式非常合适。问题来自领域逻辑:如业务规则、验证、计算等。通常,人们会把它们写在客户端,但是这样很笨拙,并且往往把领域逻辑直接嵌入到用户界面。随着领域逻辑的不断复杂化,这些代码将越来越难以使用。而且,这样做很容易产生冗余代码,这意味着简单的变化都会导致要在很多界面中寻找相似代码。 另外一种办法是把这些领域逻辑放到数据库端,作为存储过程。但是,存储过程只提供有限的结构化机制,这将再次导致笨拙的代码。而且,很多人喜欢关系型数据库的原因之一是SQL是一个标准,允许他们更换数据库厂商。尽管真正更换数据库厂商的用户寥寥无几,但还是有很多人希望拥有这种选择,并且没有太大的附加代价。由于存储过程都是数据库厂商私有的,因此普通用户被剥夺了这种选择权。 在客户/服务器方式逐渐大众化的同时,面向对象方式开始崛起。面向对象为领域逻辑的问题找到了答案:转到三层架构的系统。在这种方式下,在表现层实现用户界面,在领域层实现领域逻辑,在数据源层存取数据。这种方式使你可以将复杂的领域逻辑从界面代码中抽取出来,单独放到中间层,用对象加以建模和组织。

    2015-01-17
    10
img

关注 私信


用户积分:1843