论控件属性、事件持久化

netcsharp 2008-03-24 12:44:52
# 我们知道,在VS2003中,自定义控件要得到Intellisense的支持,必须手工编写(后来也有人写了生成工具)Schema,但是在 VS2005中,Schema是由IDE自动生成的,就是说,你可以自动获得所有public属性和事件的Intellisence。
# 如果,public的属性不需要在Intellisence得到支持,而只在后台代码中使用,则可以为属性应用[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]标签(但是如果属性同时应用了[Bindable(true)],则属性仍在SourceView中获得智能感知)。
# 如果属性应用了[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)],则属性类型的信息也会映射到Schema中,比如Style属性,属性类型的子属性也会得到智能感知的支持。
# BindableAttribute决定属性和事件是否显示在属性窗口中。
# PersistenceMode决定持久化属性的方式,默认为[PersistenceMode(PersistenceMode.Attribute)],表示持久化属性为主标签的属性,如果属性包含子属性,则子属性持久化成破折号连接的样式,比如Font的子属性,Font-Name代表Font.Name子属性;
# [PersistenceMode(PersistenceMode.InnerProperty)]表示用嵌套标签表示复杂属性,比如DataList的ItemStyle属性,就使用嵌套的子标签的形式来持久化。
# [PersistenceMode(PersistenceMode.InnerDefaultProperty)]与[PersistenceMode(PersistenceMode.InnerProperty)] 的区别在于,主标签中的内容分析成此Attribute装饰的Property,比如,上例中的ItemStyle的值需要序列化在一对< ItemStyle></ItemStyle>标签中,而InnerDefaultProperty的属性则可省掉表示属性名的标签对,InnerDefaultProperty在一个类中只能应用一次。
# [PersistenceMode(PersistenceMode.EncodedInnerDefaultProperty)] 和InnerDefaultProperty不同的是,它会对内容进行HTML Encoding,比如把<div>变成<div>,就是说它的里面将不允许存在子控件和HTML标签。比如 TextBox.Text。

详细的大家可以看这里:http://www.netcsharp.cn/showtopic-376.aspx
...全文
121 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
whnjlxj 2009-07-27
  • 打赏
  • 举报
回复
厉害!顶
xiaoshi0318 2009-07-27
  • 打赏
  • 举报
回复
学习学习……
ChengKing 2009-07-26
  • 打赏
  • 举报
回复
4.3 属性的设计时特性
.NET Framework为控件设计时属性提供了很多丰富的类,这些属性的功能非常灵活,控制范围广泛,比如可以控制该属性在属性窗口中的显示模式,如:是否在属性窗口中显示该属性,也可以指定此属性必须接收值类型描述,按组分类等,也可以控制文本的标记呈现格式等,甚至可以自己定义一个属性类,实现自己想实现的功能。下面讲一下常用的.NET Framework的属性类对控件的支持功能。
 Bindable
指定属性是否可以绑定一个有效数据源,通常使用布尔值进行设置。例如:Bindable(true)。如果使用值true标记属性,表示该属性可以绑定一个有效数据源。
 Browsable
指定属性是否应该在属性窗口中显示,使用布尔值设置。一般情况下,对于常用的和比较重要的属性设置Browsable为true,否则,设置Browsable为false。
 EditorBrowsable
设置属性在编辑器中的可见性,比如设置在智能提示列表不显示或高级用户才可以看到该属性。
 Category
指定属性在属性浏览器中进行分组显示的类别。该设计时特性帮助可视化编辑器将属性进行逻辑分组。通常分为:外观(Appearance)、行为(Behavior)、布局(Layout)、数据(Data)、操作(Action)、键盘(Key)和鼠标(Mouse)等。如果您安装的是中文版的IDE,则默认情况下中文分类和英文分类是通用的,即设置成“数据”或“Data”类别是等价的。
 Description
设置显示在属性窗口最下面的描述属性功能的文字说明。
 DesignOnly
如果此属性设置为true,表示该属性只能在设计期间使用,不能在页面代码中设置其值。
 ReadOnly
设置该属性是否为只读状态。如果此特性设置为true,则在属性窗口能看到属性,但不能设置其值。另外,通过在属性语句体中把 set 语句段去掉也可以起到相同的效果。
 Themeable
设置该属性是否支持主题特性,默认情况下属性都支持主题。当该属性与界面无关时可以设置其值为false,禁用该属性的主题功能。
 DesignerSerializationVisibility
指定属性是否以及如何在代码中序列化,其值为DesignerSerializationVisibility的枚举值,存在3种设置方式:
 DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)指定序列化程序不应该序列化属性值;
 DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)指定应该允许序列化程序序列化属性的值;
 DesignerSerializationVisibility(DesignerSerializationVisibility.Content)指定序列化程序应该序列化属性的内容,而不是属性本身。此字段为只读。Visible为其默认值。
这里说的序列化是指在IDE中的设计器界面切换到代码视图时,看到的代码标记,或反向切换时把代码标记转化到设计器界面。后面讲复杂属性时会通过示例介绍此属性功能。
 NotifyParentProperty
指示当此设计特性应用到的属性的值被修改时将通知其父属性。换言之,如果属性的父属性应该在该属性值被修改时接到通知,则向该属性应用NotifyParentProperty特性。通常使用布尔值进行设置。一般常用于复杂属性,通知转换器更新到父级标记。
 ParseChildren
使用该设计特性指示当在页面上以声明方式使用控件时,嵌套在服务器控件标记内的XML元素是应该视为属性还是应视为子控件。通常情况下,包含两种声明方式:
 ParseChildren(true)表示将子XML元素作为服务器控件的属性分析;
 ParseChildren(bool childrenasProperty, string defaultProperty),其中childrenasProperty和上面的方式中的布尔值参数意义相同,defaultProperty定义默认情况下将子控件分析为服务器控件的集合属性。
 PersistChildren
该设计特性指示设计时是否应将服务器控件的子控件作为内部嵌套控件保持。如果该特性为PersistChildren(true),则将服务器控件的子控件作为嵌套服务器控件标记保持。如果为PersistChildren(false),则将该控件的属性作为嵌套元素保持。
 PersistenceMode
指定如何将服务器控件属性或事件保持到ASP.NET页面的元数据属性,共存在4种枚举设置方式:
 PersistenceMode(PersistenceMode.Attribute)指定属性或事件保持为属性;
 PersistenceMode(PersistenceMode.EncodedInnerDefaultProperty)指定属性作为服务器控件的唯一内部文本,如果属性值是HTML编码的,只能对字符串作这种指定;
 PersistenceMode(PersistenceMode.InnerDefaultProperty)指定属性在服务器控件中保持为内部文本,还指示将该属性定义为元素的默认属性,只能指定一个属性为默认属性;
 PersistenceMode(PersistenceMode.InnerProperty)指定属性在服务器控件中保持为嵌套标记,通常用于复杂对象,它们具有自己的持久性属性。
关于以上4种标记的具体用法,下一节会详细介绍。
 DefaultValue
指定属性的默认值。此特性的设置需要特别谨慎,假如设置的值不为空,则开发人员在使用时如果自己输入的值与默认值相同,则控件不会装载开发人员输入的值。也就是说此默认值不能指定为具有有效意义或业务意义的实际值。一般设置为空即可。
 DisplayName
指定在属性窗口中显示的别名。此别名仅在属性窗口中看到,当转换器转换到代码视图,以及在页面后面的代码中编码还是以实际的属性名称为准,而不是以该别名为准。
 ParenthesizedPropertyName
指定属性在属性窗口中显示时,是否带有括号,相当于在Category分组特性基础上的对属性窗口属性集的排序功能,如果不带括号该属性会自动排在该组的前面。
 PasswordPropertyText
指定是否设置成密码文本。如果设置为true,则在属性窗口中输入的文本会用特定的密码符号显示,而不是显示原文本;另外,在代码视图中看到的仍为原文本。
 TypeConverter
指定用作此特性所绑定到的对象的转换器的类型。用于转换的类必须从TypeConverter继承。使用ConverterTypeName属性来获取为该特性所绑定到的对象提供数据转换的类名。后面会通过代码示例讲解如何自定义一个自己的类型转换器。
 Editor
指定该属性的编辑器,如系统的文件编辑器、文本编辑器、颜色编辑器,还有集合编辑器等,也可以自己实现编辑器,具体用法后面会讲到。
 ToolBoxItem
此属性为类特性。属于工具箱属性,可以设置当前控件是否在工具箱中显示,以及所在工具箱项的类型名称等信息。默认生成的控件都显示在工具箱中。
 ToolBoxData
此特性为类特性,即不是属性的特性,而是类的特性,设置位置也是在类的上面。ToolBoxData表示从工具箱中拖一个控件到设计界面上时默认显示标记格式,如:
[ToolboxData(" <{0}:ControlProperty runat=server> </{0}:ControlProperty>")]
可以修改参数字符串,定制为自己想要的格式,但要保证所添加的属性为有意义的属性。
 DefaultProperty
此特性为类特性。它指定服务器控件的默认属性,例如:[DefaultProperty("Text")]。
指定用黑色粗体显示默认属性特性的属性名称。一般设置比较重要或常用的属性为默认的属性。如TextBox控件的Text属性。
 DefaultEvent
此特性为类特性。指定服务器控件的默认事件,例如:[DefaultEvent("OnClicked")]。
指定用黑色粗体显示默认事件特性的事件名称。一般设置比较重要或常用的属性为默认的事件,如Button控件的OnClick事件。
 ValidationProperty
此特性为类特性,指定该控件的哪个属性作为验证属性。当该控件与验证控件组合使用时,验证控件会自动验证该特性指定的属性。
 AspNetHostingPermission
此属性为JIT编译时代码访问安全属性。需要使用此属性确保链接到控件的代码具有适当的安全权限。Control类带有两个JIT编译时代码访问安全属性标记:
AspNetHostingPermission(SecurityAction.Demand,Level=AspNetHostingPermissionLevel.Minimal)和AspNetHostingPermission(SecurityAction.InheritanceDemand,Level=AspNetHosting PermissionLevel.Minimal).在使用时应把第一个属性应用于当前开发的控件,第二个属性是可选的,因为继承请求是可传递的,在派生类中仍有效。
 ControlBuilder
分析时特性,将自定义控件生成器与控件关联。只有在您希望使用自定义控件生成器,对页分析器用分析控件的声明性语法的默认逻辑进行修改时,才需要应用此特性。如果仅希望指定控件标记中的内容是否与属性或子控件对应,请使用ParseChildrenAttribute,而不要使用自定义控件生成器。
 Designer
设计时特性,指定与控件关联的设计器类。控件设计器类用于控制关联的控件在可视化设计器的设计图面上的外观和行为。


控件开发教程索引:
http://blog.csdn.net/ChengKing/archive/2009/01/01/3680629.aspx

本书中的第四章属性和第五章事件,这两章正是你需要的内容.
dylike 2009-07-23
  • 打赏
  • 举报
回复
可以参考毛*东的<论持久战>
另可使用第三方药剂,如<WEI哥>
阿云ivan 2008-08-22
  • 打赏
  • 举报
回复
顶一下先
sdfsseven 2008-08-21
  • 打赏
  • 举报
回复
up
netcsharp 2008-03-24
  • 打赏
  • 举报
回复
蘑菇头~~UP
工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究 研究生姓名: 唐帅 导师姓名: 罗军舟 教授 苏生 教授 申请学位类别 工 程 硕 士 学位授予单位 东 南 大 学 工程领域名称 软 件 工 程 论文答辩日期 研究方向 Android+HTML5 学位授予日期 答辩委员会主席 评阅人 硕士学位论文 基于Android+HTML5的移动Web项目 高效开发探究 专业名称: 软件工程 研究生姓名: 唐帅 导师姓名: 罗军舟 校外导师: 苏生 THE RESEARCH OF EFFICIENT DEVELOPMENT OF MOBILE WEB PROJECTS BASED ON ANDROID AND HTML5 A Thesis Submitted to SoutheastUniversity For the Academic Degree of Master of Engineering BY Tang Shuai Supervised by Luo Junzhou and Su Sheng College of Software Engineering SoutheastUniversity February 2017 东南大学学位论文 独创性声明 本人声明所呈交的学位论文是我个人在导师指导下进行的研究工作及取得的研究成果。尽我所知,除了文中特别加以标注和致谢的地方外,论文中不包含其他人已经发表或撰写过的研究成果,也不包含为获得东南大学或其它教育机构的学位或证书而使用过的材料。与我一同工作的同志对本研究所做的任何贡献均已在论文中作了明确的说明并表示了谢意。 研究生签名: 日期: 东南大学学位论文使用 授权声明 东南大学、中国科学技术信息研究所、国家图书馆有权保留本人所送交学位论文的复印件和电子文档,可以采用影印、缩印或其他复制手段保存论文。本人电子文档的内容和纸质论文的内容相一致。除在保密期内的保密论文和在技术保护期限内的论文外,允许论文被查阅和借阅,可以公布(包括以电子信息形式刊登)论文的全部内容或中、英文摘要等部分内容。论文的公布(包括以电子信息形式刊登)授权东南大学研究生院办理。 研究生签名: 导师签名: 日期: 摘要 目前工业市场上认证检测领域,业务流程陈旧繁琐,用户与检测机构无法便捷有效的沟通。除此之外,用户需要亲临检测机构实地送检,在检测的每一个环节用户也无法有效的进行追踪,这些都制约着认证检测领域的进一步发展。鉴于市场上用户的手机型号、种类、屏幕分辨率等参差不齐,传统方式根据主流系统分别开发相应的系统耗时又耗力,为了高效开发并节约开发项目成本,本文采用Android+HTML5相结合的方式进行移动端Web系统的设计研发工作。 然而,由于HTML5的W3C标准规范还未制定,安卓系统中类浏览器Webview自身存在一些局限性,因此仍存在着诸多问题亟需解决,包括:(1)多窗口类浏览器模式问题。安卓上用于加载的Webview视图窗口只是作为类浏览器而存在,在安卓上更是只能同时运行一个Webview。(2)跨域数据交互问题。不同的Webview之间无法共享数据。(3)页面自适应问题。页面难以兼容适应不同分辨率的设备和浏览器。 本文研究并设计了基于Android+HTML5的在线认证检测系统,主要工作包括以下四个方面: (1)针对多窗口类浏览器模式问题,指出并分析了该问题存在的原因,利用Activity的运行机制,通过Fragment栈对主要模块的Webview进行管理,实现对不同模块之间切换的控制。 (2)针对跨域数据交互问题,指出并分析了跨域缓存交互问题出现的原因,通过在HTML5存储技术的基础上,重写LocalStorage,用移动端本地的Sqlite进行数据维护,实现跨域数据交互。 (3)针对页面自适应问题,本文结合渐进增强以及拥抱流式布局的思想,同时研究利用了移动设备的视口特性,实现跨分辨率、跨设备的页面自适应。 (4)针对系统的功能实现问题,通过结合利用原生态框架与HTML5的跨平台性,实现了“认我测”在线认证检测系统。 综上所述,“认我测”在线认证检测系统,率先填补了认证检测领域移动端的空缺,提供了Web浏览器+移动端的双端访问模式,给用户提供了多种访问途径,真正实现了用户和检测机构的随时随地在线下单检测。 关键词:HTML5,检测与认证,Android,多窗口浏览器模式,跨域处理,页面自适应 Abstract At present business processes are old and explicit in industrial market of certification and detection filed, as well as users can not have effective and convenient communication with detection institutions. Apart from these, customers have to come to detection institutions personally to send samples, and they can not take effective trace of each process during detection. All of these limit the advanced development of certification and detection field. As the versions, types and resolution of users' mobile phones vary in current market, conditional ways depending on systems respectively cost extra time and resources. In order to develop efficiently and save cost of projects, this paper combines android with HTML5 to design and start the development of mobile web system. However, due to standard specification of W3C of HTML5 hasn't been drafted, and browser-alike webview in android has several limits itself, there are still many problems to be solved. Including: (1) Multi-window browser pattern. Webview window in android used to load pages just works like browser, as well as there is only one webview running at the same time. (2)Cross-domain data interaction. Different webviews can not share data. (3)Self-adaption of pages. It is difficult for pages to adapt to devices and browsers of different resolution. This paper researched and designed an online certification and detecting system based on Android and HTML5. Four main parts are included as following: (1) Considering multi-window browser problem, this paper pointed out and analysed reasons of it. The running mechanism of Activity was used cleverly and webiews of main modules were managed through Fragment stacks, in order to control the switch among different modules. (2)Considering cross-domain data interaction problem, reasons of it were pointed out and analysed. LocalStorage was overrided based on HTML5 storage technics, and local sqlite was used to maintain data in order to realize cross-domain data interaction. (3)Considering self-adaption of pages, the system combined the ideas of progressive enhancement and embracing flow layout, aiming at personalitites of mobile facilities viewports, and realized respective solution. (4)Considering the implementation of system functions, the system took the advanteges of native frameworks as well as HTML5 crossing platforms, and developed "Finding Me Detecting" online certification and detecting system. In summary, "Finding Me Detecting" online certification and detecting system filled up blanks of mobile market in certification and detecting field, provoding double side access pattern, that is to say web browser together with mobile side, offering users various ways to access the system, and really realized the goal of whenever and wherever ordering to detect for users and detecting companies. Keywords: HTML5; Quality Authentication; Android; Multi-window browser; Cross-domain data; Page self-adaption 专业名词清单 专业名词 名词解释 HTML5 万维网的核心语言、标准通用标记语言下的一个应用超文本标记语言(HTML)的第五次重大修改 Android 一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导开发 IOS 由苹果公司开发的移动操作系统 Webkit 一个开源的浏览器引擎,在手机上的应用十分广泛 Webview WebView(网络视图)能加载显示网页,可以将其视为一个浏览器。它使用了WebKit渲染引擎加载显示网页 Activity Activity是一个应用程序组件,提供一个屏幕,用户可以用来交互为了完成某项任务,是一个负责与用户交互的组件 SSH 为 Struts+Spring+Hibernate的一个集成框架,是目前较流行的一种Web应用程序开源框架。其中使用Struts作为系统的整体基础架构,负责MVC的分离,在Struts框架的模型部分,控制业务跳转,利用Hibernate框架对持久层提供支持,Spring做管理,管理Struts和Hibernate。 WebStorage HTML新增的本地存储解决方案之一 LocalStorage 本地永久性存储数据,除非显式将其删除或清空 SessionStorage 存储的数据只在会话期间有效,关闭浏览器则自动删除 Sqlite 一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中 W3C 万维网联盟,创建于1994年,是Web技术领域最具权威和影响力的国际中立性技术标准机构。主要的工作是发展 Web 规范,这些规范描述了 Web 的通信协议(比如 HTML 和 XHTML)和其他的构建模块。 NativeApp 使用传统原生态Android SDK来实现的应用 WebApp 基于浏览器来实现的一种应用 HybridApp 一种可以下载的Native App,其用户界面的全部或者部分元素在嵌入式浏览器组件(WebView之类的)里面运行 优雅降级 一开始就构建站点的完整功能,然后针对浏览器测试和修复。认为应该针对那些最高级、最完善的浏览器来开发网站。而将那些被认为“过时”或有功能缺失的浏览器下的测试工作安排在开发周期的最后阶段 渐进增强 一开始只构建站点的最少特性,然后不断针对各浏览器追加功能。先让网站能够正常工作于尽可能旧的浏览器上,然后不断为它在新型浏览器上实现更多的增强和改进。 Viewport 移动设备上的Viewport就是设备的屏幕上能用来显示网页的一块区域,即浏览器上用来显示网页的那部分区域。Viewport不局限于浏览器可视区域的大小,可能比浏览器的可视区域要大,也可能比浏览器的可视区域要小。 媒体查询 CSS媒体查询允许开发者基于浏览网站的设备的特性来应用不同的样式申明,最常用的特性是视口宽度。 GCF 谷歌内嵌浏览器框架, 使用此插件,用户可以通过Internet Explorer的用户界面,以Chrome内核的渲染方式浏览网页。Chrome Frame 会把最新版的Chrome Webkit 内核和JavaScript 引擎注入到IE中, IE浏览器将获得Chrome的性能和功能 目录 摘要 I ABSTRACT II 专业名词清单 III 第一章 绪论 1 1.1 研究背景与意义 1 1.2国内外相关研究现状 2 1.2.1 在线认证检测平台开发现状 2 1.2.2 HTML5 3 1.2.3 Android 3 1.2.4 Android移动Web项目开发的三种解决方案:Native, Web和Hybrid优缺陷分析 4 1.2.5国内外应用现状 6 1.2.6 研究现状总结 7 1.3研究目标与内容 7 1.3.1多窗口浏览器模式的实现机制 7 1.3.2跨域交互即缓存处理方法 7 1.3.3页面自适应机制,即设备自适应与浏览器自适应机制 8 1.3.4 “认我测”质检服务平台的设计和实现 8 1.4 本文的结构安排 8 第二章 多窗口类浏览器设计 11 2.1 多窗口类浏览器需求分析 11 2.1.1 Activity简介 11 2.1.2 Fragment简介 11 2.1.3 多窗口类浏览器需求 12 2.2 多窗口浏览器模式的实现机制 12 2.2.1安卓移动端多窗口浏览器框架 12 2.1.2多窗口浏览器模式实现机制 13 2.3 模块实现 13 2.3.1类浏览器模式 13 2.3.2多窗口类浏览器模式 14 2.4 本章小结 15 第三章 跨域交互缓存处理设计 17 3.1 跨域交互缓存处理需求 17 3.1.1 缓存技术WebStorage 17 3.1.2 跨域交互缓存处理需求 17 3.1.3 页面回退管理需求 17 3.2 缓存处理机制 18 3.2.1 跨域缓存处理 18 3.2.2页面回退管理 18 3.3 模块实现 19 3.3.1跨域缓存机制的主要实现 19 3.3.2.页面回退管理的实现 22 3.4本章小结 22 第四章 页面自适应机制设计 23 4.1页面兼容策略 23 4.2 页面自适应策略 24 4.2.1设备自适应 24 4.2.2.浏览器自适应 25 4.3 模块实现 25 4.3.1根据适口属性设计响应式布局: 26 4.3.2同分辨率范围内的流式布局设计 26 4.3.3移动端viewport属性设定 27 4.3.4组件样式的渐进增强设计 27 4.4 本章小结 27 第五章 认我测在线检测服务系统设计 29 5.1认我测在线检测服务系统需求分析 29 5.2 系统时序流程 29 5.3 系统功能模块图 30 5.4 本章小结 32 第六章 认我测在线检测服务系统实现与测试 33 6.1认我测在线检测服务框架设计 33 6.2 系统运行环境搭建及配置 34 6.2.1 AndroidManifest.xml主程序环境配置 34 6.2.2 移动端工程资源布局 35 6.3 认我测在线认证检测系统的主要功能实现 36 6.3.1用户查询 36 6.3.2订单操作 37 6.3.3个人信息维护 37 6.4.系统功能测试 38 6.4.1 首页功能模块 38 6.4.2 订单功能模块 38 6.4.3 个人信息模块 39 6.4.4页面自适应 40 6.5 本章小结 41 第七章 总结与展望 43 7.1 工作总结 43 7.2 研究展望 44 致谢 47 参考文献 49 第一章 绪论 1.1 研究背景与意义 目前市场业务中在产品以及其他项目的认证和检测方面存在诸多不便,用户需要实地考察并频繁与检测单位沟通,填写繁琐的纸质检测报告、当面送递样品,对于检测环节中存在的问题难以及时交互并处理。市场上相应的检测平台诸如检测通、凡特网等皆为pc端检测网站,并且操作繁琐不够人性化,用户在实地使用中存在很多问题。昆山工业技术研究院着眼于为委托用户和质检机构搭建良好的沟通桥梁,免去目前市场业务中企业用户需要实地地并频繁地与检测机构沟通,从而提出自己的委托乃至下委托单、等待检测报告等,设计并研发了市场上首款提供质检服务的移动端app,即“认我测”质检服务平台系统,用户只需在手机上安装轻盈小巧的系统app,即可方便快捷的进行委托服务,质检机构亦可便捷地处理请求订单,双方都可以实时追踪委托订单的状态变化。 考虑到目前市场上用户的手机型号、种类、屏幕分辨率等参差不齐,传统方式根据主流系统(如android、ios)分别开发相应的系统耗时又耗力,为了高效开发并节约开发项目成本、提高项目开发效率,并迎合近年来新兴的HTML5移动页面开发技术,公司采用Android+HTML5相结合的方式进行移动端系统的研发工作。系统的主体一次开发即可在不同设备,包括不同系统、不同型号、不同分辨率设备上运行,免去了大量冗余的开发工作,提高项目的开发效率,降低项目的开发维护成本,为用户提供便捷服务。项目的封装框架只需根据系统的不同稍微改动定制即可,传统的多套系统项目现在只需一次开发,即可适应于不同机型。此外系统还可以通过微信公众号推广链接进行访问,大大的增强了系统的可扩展性和用户操作的便捷性。 然而,由于HTML5的W3C标准规范还未制定,安卓系统中类浏览器Webview自身存在一些局限性,使得结合安卓与HTML5开发移动web项目仍处在探索研发阶段,还不够成熟和完善,相应的技术支持也比较有限,因此仍存在着诸多问题亟需解决,包括: (1)多窗口浏览器模式问题。安卓用于加载的Webview视图窗口只是作为类浏览器而存在,并不等同于pc浏览器,在安卓上更是只能同时运行一个Webview,每次加载新的页面都只能覆盖掉原先的页面,无法达到网页浏览器的多窗口模式。通过常规的pc浏览器窗口的相应open、close进行新增窗口、关闭窗口等操作,在Webview类浏览器窗口中都无法正常运作,甚至会导致Webview失去响应。为此,需要研究相应的解决方案,用于模拟用户适应的网页多窗口浏览器模式。(2)跨域交互问题,即缓存机制与浏览记录管理问题。不同于网页浏览器,用户的数据可以在不同的窗口之间共享,Webview由于其模块之间无法共享数据的机制为保存用户信息以及共享其他程序数据带来了巨大难题。为此需要区分数据是同模块内部共享还是跨域共享访问,并提供相应的解决方案。Webview通过模拟多窗口浏览器模式运作后,在不断的新开页面以及不同模块之间互相切换,会导致页面回退时历史浏览地址发生覆盖,使得不同模块无法回到相应的上级页面,为此需要有效的对页面的浏览历史进行管理,并提供切实可行的方案。(3)页面自适应问题,即设备自适应与浏览器自适应问题。针对移动设备繁杂的屏幕分辨率,如何让页面进行分辨率自适应,从而发挥相对于原生态安卓开发的优势,是一个需要探索和解决的问题。考虑到高效开发设计以及便于推广应用,HTML5的界面不仅仅需要适应基于Webkit内核的Webview,还要能够方便的应用于PC端的网页,如何让HTML5的网页能够适用不同的浏览器内核,也是一个亟待解决的问题。 为此,如何使得“认我测”质检服务平台中安卓与HTML5的结合开发满足多浏览器模式,并解决跨域之间的数据交互问题,同时提高页面的设备自适应和浏览器自适应能力,成为跨平台移动web项目高效开发所亟待解决的问题。 1.2国内外相关研究现状 1.2.1 在线认证检测平台开发现状 互联网界目前在检测领域存在部分在线检测认证的平台,诸如华强认证、检测通等,可以为用户提供一些简单的检测申请,以及为检测机构提供平台发布相关信息。 图1.1 华强认证检测平台首页 如上图所示,在华强认证平台上用户可以选择认证或者检测服务,针对相应类型进行筛选。根据待检测的种类不同,选择相应的检测机构资质、证书、检测周期等查询结果,根据查询结果选择检测机构进行检测委托。检测机构与平台合作,提供负责的检测服务项目、价格等信息,在平台上开设个人站点,提供数据给平台,用于用户检索。 与时下常见的电商网站类似,此类检测平台都提供检测方设计自己的网站主页以出售检测服务,同时为用户提供检索结果、显示可购买的检测服务,用户可以选择质检服务并加入购物车、下单、查看检测方详情、与卖家(检测方)沟通检测细节等操作,但是这些平台都存在着共同的问题——流程不够清晰明了、检测服务不够个性化、用户操作繁琐等,这些问题给用户和检测机构的使用以及交流带来了很多不便。平台提供的检测项目有限,很多时候用户无法确定自己需要检测的项目所属,也不能有效地与检测方进行沟通。与此同时,认证检测领域对于移动端的涉及基础为零,目前主流移动端市场没有相应的认证检测服务产品,随着移动产品愈发便捷,在移动端研发设计相应的认证检测产品,使得用户可以随时随地进行下单咨询变得愈发重要。 1.2.2 HTML5 为了方便用户的使用,“认我测”认证检测平台的PC端基于B/S架构,其设计和研发离不开浏览器内核支持,同时移动端的Web开发也同样需要HTML5语言的支持。利用HTML5的崭新特性,能够更好地为用户提供服务。 HTML5是用于取代1999年所制定的HTML4.01和XHTML1.0标准的HTML(标准通用标记语言下的一个应用)标准版本;现在仍处于发展阶段,但大部分浏览器已经支持某些HTML5技术。HTML5有两大特点:首先,强化了Web网页的表现性能。其次,追加了本地数据库等Web应用的功能。 HTML5广义上为包括HTML、CSS和JavaScript在内的一套技术组合。减少浏览器对于需要插件的丰富性网络应用服务,如Adobe Flash、Microsoft Silverlight与Oracle JavaFX的需求,并且提供更多能有效增强网络应用的标准集。目前HTML5已向开发人员提供了很多新的标签,如section,nav,article,header和footer等。这些标签语义化程度高,被广泛使用。 HTML5逐渐为移动Web开发所采纳,主要原因在于其适用移动项目开发的八大特性,即离线缓存、音频视频自由嵌入、地理定位、Canvas绘图、丰富的交互方式、低开发维护成本、CSS支持以及调用手机硬件。其中离线缓存可以看做是加强版的cookie,不受数据大小限制,有更好的弹性以及架构,可以将数据写入到本机的ROM中,还可以在关闭浏览器后再次打开时恢复数据,以减少网络流量。音频视频方面HTML5无需拆分开混排的多媒体内容,可以将文字、图片、音频、视频等放在一起进行处理。HTML5提供地理定位的支持,无需专属导航软件,通过缓存即可加载地图数据,方便灵活。在系统开发和维护方面,打开即可使用最新版本,免去重新下载升级包的麻烦,使用过程中就直接更新了离线缓存。除此之外,HTML5增强了对CSS样式的支持,极大的增强了界面的美化和友好性,提高了用户体验。 1.2.3 Android Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。Android操作系统最初由Andy Rubin开发,主要支持手机。2005年8月由Google收购注资。2007年11月,Google与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良Android系统。随后Google以Apache开源许可证的授权方式,发布了Android的源代码。2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。 2013年的第四季度,Android平台手机的全球市场份额已经达到78.1%。 Android是一个真正意义上的开放性移动设备综合平台。它包括操作系统、用户界面和应用程序-移动电话工作所需的全部软件,而且不存在任何以往阻碍移动产业创新的专有权障碍。通过与运营商、设备制造商、开发商和其他有关各方结成深层次的合作伙伴关系,来建立标准化、开放式的移动电话软件平台,在移动产业内形成一个开放式的生态系统,这样应用之间的通用性和互联性将在最大程度上得到保持。 在开发之初,Android平台就被设计成一个由一系列应用所组成的平台。所有的应用都运行在一个核心的引擎上面,这个核心引擎其实就是一个虚拟机,它提供了一系列用于在应用和硬件资源间进行通讯的API。Android打破了应用之间的界限,开发人员可以把Web上的数据与本地的联系人、日历、位置信息结合起来,为用户创造全新的用户体验。此外应用程序不仅可以通过标准API 访问核心移动设备功能、互联网,应用程序还可以声明它们的功能供其他应用程序使用。 考虑到移动端市场主流操作系统的使用情况、移动领域的发展趋势以及Android操作系统的开源性,系统采用Android操作系统为研究对象,在其基础上进行设计和研发,使得认证检测产品能够为主流用户所使用,为用户带来便捷。 1.2.4 Android移动Web项目开发的三种解决方案:Native, Web和Hybrid优缺陷分析 Native app是用传统原生态Android SDK来实现的应用;Web app是基于浏览器来实现的一种应用。 Hybrid app是一种可以下载的Native App,其用户界面的全部或者部分元素在嵌入式浏览器组件(WebView之类的)里面运行。对用户来说,Hybrid App与Native App很难区别。二者都可以从应用程序商店或市场下载,存放在移动设备上,运行方式完全如同其他任何应用程序。但是对开发者来说,却存在巨大的差异,因为其无需为每一种移动操作系统从头开始重新编写应用程序,而是只要用HTML、CSS和JavaScript编写其中一部分应用程序代码,即可在多个设备上重复使用。 以下是三种技术各自的优缺点。 Native app Web app Hybrid app 系统特性 可以完美发挥系统特性(调用系统服务、内存管理等); 操控设备硬件(如相机、蓝牙、振动器等) 无法充分发挥系统特性(调用系统服务、内存管理等); 无法操控设备硬件(如相机、蓝牙、振动器等) 可以发挥大部分系统特性(调用系统服务、内存管理等); 可以通过JavaScript API操控设备硬件(如相机、蓝牙、振动器等) 用户体验 可提供最佳的用户体验,最优质的用户界面,最华丽的交互; 支持消息推送 用户体验较差; 图片和动画支持性不高; 不支持消息推送 可提供较好的用户体验; 支持消息推送 本地资源 可访问本地资源 不支持访问本地资源 可访问本地资源 应用更新 获得新版本时需重新下载应用更新,不够方便 跨平台开发、用户不需要下载安装App,开发速度快 可以下载新应用更新,也可在线更新 适用场景 适合制作游戏等性能要求比较高的应用 对于对界面的灵活性有较高要求的app 适用于对画面表现特别高以外的主流需求 开发成本 各平台不兼容,多平台的开发、移植比较复杂,开发成本高,开发周期长,开发成本高; 维护多个版本的成本比较高; 针对多种设备(不同分辨率、不同硬件配置等)的调试和适配较麻烦,维护成本高; 纯HTML5快速开发,较低的开发成本; 支持设备广泛,基于浏览器,跨平台性,维护成本低; Native+HTML5 针对不同系统制定系统外壳,页面部分可重用,大大降低开发成本; 可直接在线更新,更新成本低; 跨平台性,无需针对不同平台开发多个版本应用。 网络要求 支持离线使用 非常依赖网络,网络不稳定等其他环境时,用户请求页面的效率大打折扣 大部分功能依赖网络 考虑到系统需要提供较好的用户体验、用户与检测机构能够利用消息推送进行实时沟通、用户的查询和下单操作默认已具备网络环境等因素,因此为了更好地利用移动端本地硬件支持以及实现跨平台、跨设备的开发,系统采取了Hybrid混合开发模式。通过在原生态框架中嵌入Webview类浏览器,主体页面采用HTML5开发,由原生态定制系统框架,这样在更换移动端操作系统时,只需相应更换系统外壳,主体部分可以重复利用,极大地减少了研发成本,提高了系统的可复用性。系统主体部分更新时,无需在应用市场中重新下载,应用HTML5的特性在线更新缓存即可方便地获取最新版本,为用户带来了便捷。 1.2.5国内外应用现状 图1.2 智能手机操作系统分布数据 市场调研公司Kantar Worldpanel ComTech发布的智能手机操作系统数据显示,截至2016年2月末的三个月内,Android中国城市的销售份额从去年同期的73%增至76.4%。而在美国和欧洲五大市场(包括英国、德国、法国、意大利和西班牙),Android的市场占比继续保持增长态势。因此系统选取市场移动端主流操作系统Android作为基础,进行移动端认证检测产品的研发和设计。 随着移动浪潮的兴起,各种APP层出不穷,极速的业务扩展提升了团队对开发效率的要求,这时使用IOS&Andriod开发一个APP的成本相对过高,而HTML5的低成本、高效率、跨平台等特性马上被利用起来形成了一种新的开发模式:HybridAPP。 作为一种混合开发的模式,Hybrid APP底层依赖于Native提供的容器(UIWebview),上层使用Html&Css&JS做业务开发,底层透明化、上层多多样化,这种场景非常有利于前端介入,非常适合业务快速迭代。Hybdrid作为目前主流的移动端开发设计模式,能够极大的利用Native和HTML5的优势,将性能与用户体验相结合,缩短跨系统的产品研发周期,给用户和研发都带来极大的便利。混合型APP软件兼具“原生型APP软件良好用户交互体验的优势”和“网页型APP软件跨平台开发的优势”。市场上一些主流移动应用都是基于混合型APP软件的方式开发,比如工商银行、百度搜索、街旁、东方航空、微信、去哪儿等。 目前已有众多企业采用混合型APP软件技术开发APP应用,一方面是开发简单,另外一方面可以形成一种开发的标准。企业封装大量的原生型的原生插件如支付功能插件供Java调用,并且可以在今后的项目中尽可能的复用,从而大幅降低开发时间和成本。混合型APP软件的标准化给企业移动应用开发、维护、更新都带来了极高的便捷性。 混合型APP软件通常是基于第三方跨平台移动应用引擎框架进行开发,在国内开发者中比较知名的有PhoneGap、Titanium和AppCan。这些引擎框架一般使用HTML5和Java作为编程语言,调用引擎封装的底层功能如照相机、传感器、通讯录、二维码等。HTML5和Java只是作为一种解析语言,真正调用的都是原生型APP软件一样封装的底层功能,这是和网页型APP软件的最大区别和不同。因为使用了浏览器技术,所以混合型APP软件通常具有跨平台的特性,并且开发成本和网页型APP软件接近,开发效率也远高于原生型APP软件。根据国际科技媒体ReadWriteWeb 2015数据统计显示,截至2015,有80%的App全部或部分基于HTML5研发。大部分的App内容以网页的形式呈现,包括微信、Facebook、Twitter等。为此,Hybrid混合模式成为“认我测”在线检测服务平台移动端框架的开发和设计依赖。 尽管微信通过公众号的形式,使得Android+HTML5模式得以应用并推广,这项技术目前仍不够完善,利用web实现移动app存在一些瓶颈。(1)根据百度移动互联网发展趋势报告,iPhone下载一个1.407k的网页,建立连接耗时1.35s左右,传输耗时0.15s左右。这样,导致app在建立连接的时候,屏幕处于白屏状态。app在一秒多的时间内,完全处于白屏状态,加上3G、GPRS网络的不稳定,有时候等待app响应需要几秒甚至1几秒的时间,对于mobie app来说,这是个致命的缺陷。(2)难以实现本地存储。基于Android存在多版本系统,Android低版本中的Webkit对HTML5和CSS3不能够很好地支持。常用的HTML5向后兼容方案是通过Javascript+CSS+Html来模拟HTML5的一些特性,但过多的js存在于移动app中会得不偿失。 Android+HTML5的混合开发模式对于移动端Web项目开发已经成为市场的主流和趋势,与此同时这项技术还存在着一些问题,需要不断的进行改进和完善。 1.2.6 研究现状总结 总而言之,Android操作系统在移动市场仍居主流,HTML5也为用户带来崭新的特性,Hybrid混合开发模式也逐渐成为移动Web开发的主流设计模式,大量的市场应用都成功的应用和推广了Android+HTML5。正是在这种背景下,“认我测”在线认证检测系统率先填补了移动端认证检测领域的产品空缺,采取了Hybrid混合开发模式。同时,利用Android+HTML5相结合开发移动端Web项目尚处于应用阶段,仍然存在很多问题,还不够成熟和完善。如何将这二者更有效的结合使用,并解决过程中存在的问题,提高项目开发的效率以及节约开发成本,是一个需要研究探索的问题,这也是本课题的意旨。 1.3研究目标与内容 1.3.1多窗口浏览器模式的实现机制 深入挖掘Webview作为类浏览器视图窗口与传统PC端浏览器的区别,针对安卓端同一视图区域单一运行Webview的特性,通过在原生态安卓中启用Fragment视图加载不同视图页面,在外部Activity中对Fragment进行管理控制。同时调整窗口加载及操作模式,适应移动端相关操作从而实现程序中加载多个Webview视图窗口并可以随意切换,实现类浏览器多窗口加载资源并交互的模式。 1.3.2跨域交互即缓存处理方法 针对Webview不支持多窗口间跨域访问的问题,重写缓存处理方式以替代网页端会话级缓存机制,模拟web端本地存储localStorage对本地缓存的处理方法,诸如setItem()、getItem()、removeItem()以及clear(),通过将持久化数据存储在移动端本地数据库来模拟网页端数据持久化存储,实现多Webview间跨域交互访问以及缓存数据保存和处理。 通过维护Webview的历史栈,根据需求进行过滤跳转或者重新加载页面。若当前为重定向后的链接,那么回退的时候就需要忽略上一级的链接,不使用Webview自带的回退方法goBack(),相对地移除重定向和重定向后的url,获取到初始页面链接后自行进行loadUrl()操作. 1.3.3页面自适应机制,即设备自适应与浏览器自适应机制 利用Viewport来控制页面的缩放比例、页面的初始大小,针对不同分辨率的移动设备实现网页页面自适应。通过渐进增强以及优雅降级机制来控制不同版本、不同浏览器之间的兼容问题,以及利用JavaScript库辅助修正相应的样式问题,从而实现浏览器适配的机制。 1.3.4 “认我测”质检服务平台的设计和实现 移动客户端通过安卓与HTML5结合开发设计委托方和质检方app,通过原生态安卓框架外壳嵌入Webview渲染加载页面,添加Java接口与消息会话模块,通过移动端Sqlite操作数据重写localStorage来实现缓存机制,利用Fragment视图层控制Webview的切换与运行来展现主要的功能模块—委托方App:首页模块、订单模块、消息模块和个人模块;质检方App—订单模块、消息模块和个人模块。 服务器端采用J2EE的SSH框架搭建项目,通过微信公共账号链接Html页面,为用户提供多种系统访问途径,增强了系统的可扩展性,为用户带来便利。 1.4 本文的结构安排 本文共分为七个章节。 第一章是绪论部分,介绍课题的研究背景,指出课题的研究意义。然后通过对HTML5研究、Android移动Web开发技术研究以及Hybrid开发问题研究来介绍该课题在国内外的研究现状。最后说明本文的研究目标与内容,以及论文的结构安排。 第二章介绍多窗口类浏览器模式策略的设计与实现。针对现有移动端单一窗口存在的不足,提出类浏览器多窗口解决方案,并对多窗口浏览器模式进行设计 第三章其次分析Webview的跨域数据交互问题,针对移动端类浏览器内核不支持跨域数据访问的不足,提出本地持久性存储替代web端缓存的解决方案,并对跨域访问模式进行设计。同时分析了页面重定向导致的页面无法正常访问问题,提出采用页面浏览历史栈的管理方案,针对回退时目标页面解析进行相应操作。 第四章是多分辨率多设备页面自适应策略设计。首先分析现有Web页面在移动端不同分辨率和设备显示存在的问题,针对页面难以在不同设备上保持兼容适应的不足,提出页面自适应解决方案,并通过渐进增强以及媒体查询等方式进行设计。 第五章是认我测系统的设计,包括系统的功能需求分析、业务流程展示以及功能模块设计。 第六章是系统的功能测试,介绍了相关的实现环境与工具,并对系统的主要功能模块以及主要解决方案进行了功能验证测试。 第七章是总结展望部分,总结本文的主要工作内容与创新点,并对本文写作与实验过程中的不足及后续研究进行展望。 第二章 多窗口类浏览器设计 2.1 多窗口类浏览器需求分析 2.1.1 Activity简介 在Android中一个Activity是一个应用程序组件,它提供一个屏幕,用户可以为了完成某项任务用来交互,例如拍照、拨号、看地图、发送邮件等。每一个Activity被系统给予一个窗口,在该窗口上面可以绘制用户接口。一个应用程序通常由多个Activities组成,他们通常是松耦合关系。通常首次启动应用程序的时候呈现给用户的Activity被指定为"Main Activity”。为了完成不同的动作,每一个Activity可以启动另一个其他的Activity。一个新的Activity启动,前一个Activity就被终止了,但是系统将Activity保存在一个栈上。当一个新Activity启动,它被推送到栈顶,取得用户焦点。栈的管理符合“后进先出”原则,所以,当用户完成当前Activity然后点击back按钮,它被弹出栈并且被摧毁,然后恢复之前的Activity。 若一个Activity因新的Activity启动而停止,系统通过Activity的生命周期回调函数,通知其这种状态转变。一个Activity根据它自己的状态变化可能会收到许多回调函数的通知信息,诸如系统创建、停止、恢复或者摧毁Activity,每个回调都使得开发者得以完成相应状态的指定工作。例如,当停止Activity的时候,应该释放所有大的对象,如网络数据库连接。当Activity恢复时,开发人员可以重新获得必要的资源和恢复被中断的动作。这些状态转换都是Activity的生命周期的组成部分。 2.1.2 Fragment简介 Android 3.0中开始引入Fragments 的概念,可以称为:碎片、片段。其目的是为了解决不同屏幕分辨率下动态和灵活的UI设计,大屏幕如平板、小屏幕如手机。平板电脑的设计使得其有更多的空间来摆放更多的UI组件,而多出来的空间存放UI使得这些组件会产生更多的交互,从而诞生了Fragments。 Fragments 的设计不需要开发者来亲自管理视图层的复杂变化,通过将Activity 的布局分散到Fragment 中,可以在运行时修改Activity 的外观,并且由Activity 管理保存其变化。当一个片段指定了自身的布局时,它能和其他片段配置成不同的组合,在活动中为不同的屏幕尺寸修改布局配置。小屏幕可能每次显示一个片段,而大屏幕则可以显示两个或更多。Fragment是Activity的界面中的一部分或一种行为。可以把多个Fragments组合到一个Activity中来创建一个多面界面并且可以在多个Activity中重用一个Fragment。除此之外,可以把Fragment认为是模块化的一段Activity,它具有自己的生命周期,接收它自己的事件,并可以在Activity运行时被添加或删除。 Fragment不能独立存在,它必须被嵌入到Activity中,而且Fragment的生命周期受到所在的Activity的影响。当Activity暂停时,它拥有的所有的Fragments都被暂停;当Activity销毁时,它拥有的所有Fragments都被销毁。然而,当activity运行时(在onResume()之后,onPause()之前),可以单独地操作每个Fragment,比如添加或删除它们。在执行上述针对Fragment的事务时,可以将事务添加到一个栈中,这个栈被Activity管理,栈中的每一条都是一个Fragment的一次事务。有了这个栈,就可以反向执行Fragment的事务,这样就可以在Fragment级支持“返回”键(向后导航)。 2.1.3 多窗口类浏览器需求 在Android中展现在用户面前的Activity同时只能存在一个,而由于类浏览器内核Webkit的特性,一个Activity中同时只能加载一个Webview用以渲染网页,如果用户想模仿Web浏览器新增一个浏览器标签窗口打开新页面,只能将原来的网页覆盖掉,无法在窗口间来回切换,用户也无法保持原有的浏览器使用习惯。为此,需要利用Activity栈的切换特点,将系统的主要模块分别设计在不同的Fragment上,通过各自的Webview进行加载渲染,在用户需要切换窗口时,通过管理切换Fragment达到目的的实现。 2.2 多窗口浏览器模式的实现机制 2.2.1安卓移动端多窗口浏览器框架 图2.1 多窗口浏览器模式系统框架图 如图4所示,系统安卓移动端由首页、订单、消息以及个人信息四个模块构成,每个模块对应一个视图层Fragment,在安卓Activity运行时一次加载一个视图Fragment,通过底部的原生态菜单栏BottomBar进行视图之间的切换。每个视图Fragment对应同一个位置的Webview类浏览器窗口,通过Webview加载所需要的页面,通过外部的Fragment对Webview的加载以及切换进行控制,从而实现类浏览器多窗口模式。 2.1.2多窗口浏览器模式实现机制 多窗口浏览器模式的实现原理为:安卓外部Activity控制视图层Fragment的加载和切换,Fragment内部加载和控制Webview对页面的渲染,同时调整Web端页面的窗口打开和关闭模式,通过页面重定向进行打开和关闭返回。 多窗口浏览器模式解决两个问题,一是安卓中的类浏览器窗口模式,二是浏览器多标签模式。在移动端的页面加载过程中,类浏览器内核Webview的运行机制为覆盖加载页面,一次运行期间只同时存在一个Webview,与PC端浏览器的运行模式不同,无法通过open打开一个新的浏览器标签页,也无法通过close关闭单个的标签页。为此需要通过loadUrl进行页面重定向,在关闭页面时通过loadUrl反重定向或者通过Webview本身的goBack方法进行回退。移动端的Webview在全局意义上等价于PC端的浏览器,但是通过close关闭的不是一个窗口,而是关闭了整个浏览器。安卓中Activity运行时只能加载一个Webview,因此无法同时展现不同的页面,为此需要通过外部对Webview序列的控制,模拟多窗口显示页面的模式。 在安卓Activity的视图View初始化过程中,实例化需要首次显示的视图层fragment (如首页),将其放入实例化的视图层管理容器HashMap,并通过changeFragmentFrom Menu方法控制用户对视图层Fragment的切换,将原有的视图层置为等待恢复状态,并激活新的视图层用以在Activity中展现,通过changeFragmentBack控制用户通过回退操作唤醒的首页视图层,以此来控制不同视图层,即类浏览器窗口之间的切换。在相应的Fragment视图层中,初始化视图InitView时渲染加载Webview,同时控制底部的菜单栏,通过Webview加载相应的本地网页或服务器端网页,设置Webview相应的属性进而控制页面由Webview加载,而非默认的系统浏览器加载。为Webview绑定页面与原生态安卓相交互的接口,从而可以在加载的页面内调用安卓的原生态功能。 2.3 模块实现 2.3.1类浏览器模式 该部分主要为安卓中通过Webview渲染加载网页的过程。主要包含以下过程: Fragment布局文件中声明控件Webview,绑定其资源ID,为Webview设置宽度和高度。 (1)在Fragment视图初始化initView部分,利用findViewById()通过资源ID获取到Webview控件,对其进行初始化,同时设置相关的webSettings属性,让Webview可以运行JavaScript脚本以及能与本机数据库进行交互。 (2)重写WebViewClient的shouldOverrideUrlLoading()函数,让应用程序的Webview直接加载网页内容,而不调用外部的浏览器。 (3)重写Webview网页对话框,构建一个Builder用以显示网页中的对话框,在点击确定按钮之后,继续执行网页中的操作,同时关闭Builder对话框。 (4)为JavaScript创建安卓接口。通过addJavaScriptInterface为Webview绑定底层Java接口,同时提供相应的接口方法名以及在页面中可以调用的句柄名称,通过该句柄和方法名,即可在Html5页面的JavaScript中访问该底层的Java方法,实现对页面上部和底部的系统外壳的展示管理。 (5)通过loadUrl进行对目标页面的渲染加载,可以加载访问服务器端的页面,也可访问放置在项目内部的页面文件,该模式需要将相应页面放置于系统的assets目录下。相对而言服务器端页面更加常用,也便于维护。 2.3.2多窗口类浏览器模式 图2.2 多窗口类浏览器模式原理图 (1)创建各个主功能模块的视图类Fragment,分别为主界面模块HomeFragment、订单模块OrderFragment、聊天咨询模块MessageFragment以及个人中心模块PersonalFragment,继承自基类BaseFragment。 (2)每个Fragment视图类中声明并初始化相应的Webview组件,对其进行属性设置,为其绑定JavaScript接口并覆盖渲染加载页面的方法,绑定相应的需要在页面调用的底层Java方法接口。重写默认的页面回退响应事件,对页面访问历史以及目标访问页面进行过滤判断,执行相应的处理方法。 (3)在MainActivity的初始化initView中声明并初始化Fragment管理容器HashMap,初始化主页视图HomeFragment并将其加入容器,设置其为默认加载视图。获取FragmentManager用以维护管理Fragment队列,调用beginTransaction方法开启事务。 (4)重写回退按钮响应事件。当页面回到各自模块的初始页面然后按下回退键时,判断当前模块所在的Fragment,由主页模块后退时,执行确认退出系统操作,若从其他模块进行后退,则回到主页模块。通过底部菜单栏setRadioChecked方法设定当前模块的选中标识。 (5)重写模块间切换的方法changeFragmentFromMenu,开启事务,对模块标识ftag进行判断操作,根据用户点击的模块图表将相应的模块视图Fragment通过onResume()进行恢复,同时通过show()将该模块进行展示,从Fragment管理容器中将主页模块以外的Fragment移除。将带有oflag暂停标识的Fragment视图进行暂停处理,通过hide隐藏取消该视图的展示。 (6)在各自的Fragment模块视图类中重写onResume方法,用以在模块恢复时进行用户是否登录判断。对Webview渲染加载的页面进行分析,判断是否包含index初始页面标识。根据flag标识进行是否需要登录操作,flag为1表示从其他Fragment跳转到该模块的Fragment视图并需要用户登录。 以上就是多窗口类浏览器模式的实现主要环节,通过Webview加载渲染服务器资源页面,控制碎片视图Fragment展现各自模块的Webview,在MainActivity对碎片容器以及碎片视图之间的切换进行管理控制,从而完成多窗口类浏览器模式的实现。 2.4 本章小结 本章分析并介绍了安卓中Activity的基本性质,对碎片视图Fragment进行了相关阐述和引出,综合分析了多窗口类浏览器模式的设计需求。随后对多窗口类浏览器模式的框架进行了设计,通过Activity运行管理Fragment的加载和切换,各个模块的Fragment视图独自加载运行相应的Webview,补充和完善不同模块之间切换和回退的业务逻辑。在模块实现部分详细描述了两个关键部分的实现环节,即类浏览器模式和多窗口类浏览器模式,介绍了过程中主要用到的方法以及实现思想。 第三章 跨域交互缓存处理设计 3.1 跨域交互缓存处理需求 3.1.1 缓存技术WebStorage 图3.1 WebStorage示意图 WebStorage 使得网站能够把信息存储到本地的计算机上,并在以后需要的时候进行获取。WebStorage和Cookie类似,区别在于WebStorage是为了更大容量存储而进行设计。Cookie的大小是受限的,并且每次当请求一个新的页面的时候,Cookie都会被发送过去。而WebStorage则存储在计算机上,网站在页面加载完毕后可以通过Javascript来获取这些数据。 WebStorage提供两种类型的API:localStorage和sessionStorage,区别在于localStorage是本地永久性存储的数据,除非显式将其删除或清空,否则将一直保存在本地。sessionStorage存储的数据只在会话期间有效,关闭浏览器则自动删除。两个对象都有共同的操作API。 3.1.2 跨域交互缓存处理需求 WebStorage存储技术针对的是同一个类浏览器Webview,系统在各模块之间由不同的Webview加载渲染,通过不同的Fragment进行管理,因此模块之间无法共享数据。然而通过多窗口浏览器模式构建的系统模块之间经常需要进行数据交互,如用户登录信息以及产品相关信息,Webview由于其特性仅支持自身内部的缓存数据交互。同Webview内不断的覆盖加载新页面以及发生页面回退时可以对缓存数据提供便捷高效的数据保存,使得在页面加载的过程中可以便利的处理需要交互的数据;相对的不同的Webview之间无法共享数据,无论是会话级缓存还是持久化缓存。为此需要重写web端的持久化存储localStorage,将交互的数据保存到移动设备本地数据库。 3.1.3 页面回退管理需求 对于初始页面为A,点击某个链接跳转到B(http://xxx.com.cn/),B页面重定向到C页面(http://xxx.com.cn/website/index.Html),当调用webview.goBack()时,页面回退到B,然后接着会重定向回C页面。这样会导致两个问题:无法回退到Webview的初始页面A以及无法正常退出Activity或者Fragment(只有还未加载完C时进行回退才能退出页面)。为此需要引入历史记录栈,对页面访问历史进行管理,在回退事件中判断该加载页面是否需要重定向并执行相应的操作。 3.2 缓存处理机制 3.2.1 跨域缓存处理 在移动端数据库Sqlite操作类LocalStorage中定义相应的数据库连接属性、创建和更新的操作以及数据库操作单例Instance,在视图访问基类BaseFragment中定义覆盖web端持久化存储localStorage的核心交互类LocalStorageJavascriptInterface。获得数据库操作单例,并覆盖localStorage对缓存的常用处理方法取值getItem(),修改值setItem(),删除值removeItem()以及清空缓存clear()。将页面上获得的数据键值对存入数据库,对其进行更新删除以及返回给页面使用。在Webview初始化时进行页面与后台交互绑定addJavaScriptInterface,并在页面初始化init过程中将页面的默认localStorage操作更换成覆盖重写的方法,即可在页面进行跨域访问时交互相应的数据。 跨域交互的缓存处理机制如图5所示: 图3.2 缓存处理机制原理图 3.2.2页面回退管理 安卓的回退按钮一般用于返回上一级菜单,不过在浏览器页面加载过程中却不能理想地返回上一级页面,默认的回退按钮是针对Activity的回退,对于Webview来说,回退按钮会致使浏览器调用finish()而结束自身的运行,因此需要覆盖Activity的onKeyDown()事件,在方法内部重新对浏览页面进行管理。 在页面的新建关闭以及重定向时,Webview的页面回退goBack()会受到干扰,不能正常回到前一个页面,甚至会发生前后两个页面间来回切换后退的死循环,并影响模块间的后退返回。为此需要对历史访问页面进行管理,采用如下实现方案。 在Fragment视图声明时定义一个用于管理保存历史浏览记录的历史栈ArrayList,将系统初始加载界面加入列表。在此后的页面加载过程中,每次加载页面都将其加入历史栈,在系统回退响应事件中,判断页面是否为重定向页面,如果为重定向页面,则移除历史栈中最后两个链接,加载操作后历史栈的最后一项;否则移除历史栈中最后一项,加载操作后历史栈的最后一项。 页面回退方案的流程图如图3.3所示: 图3.3页面回退管理机制图 3.3 模块实现 3.3.1跨域缓存机制的主要实现 图3.4 重写LocalStorage类示意图 (1)重写LocalStorage类。让LocalStorage继承自SQLiteOpenHelper类,声明LocalStorage对象实例以及其他数据库连接配置信息,如数据表名称、表中存储的数据Id与值Value、数据库名称、创建数据库语句等。通过Singleton单例模式维护LocalStorage实例,重写创建数据库和更新的相关操作。 (2)添加LocalStorage的底层JavaScriptInterface,供服务器资源页面进行访问。通过LocalStorageDBHelper对象获取到单例localStorage,声明上下文对象和SQLiteDatabase对象。重写HTML5存储技术LocalStorage的关键缓存数据操作方法getItem()、setItem()、removeItem()以及clear()。 图3.5 重写WebStorage核心方法示意图 1.重写getItem(),根据传入参数key获取相应的value值 ①判断传入的key是否为空。 ②若key不为空,通过localStorageDBHelper的getReadableDatabase()方法实例化数据库对象database。执行sqlite的数据库查询操作,返回数据库结果操作游标。 ③根据游标的moveToFirst判断查询结果是否为空,返回相应的value结果。关闭数据库连接。 2.重写setItem(),根据传入的参数key和相应值value更新数据库 ①判断传入的key和value是否为空,通过getItem()获取更新前的值。 ②实例化数据库对象database。声明ContentValues对象并将key和value相应赋值。判断更新前和key对应的值是否存在,若存在执行数据库的更新操作;若不存在,执行数据库的插入操作。关闭数据库。 3.重写remove() ①判断传入的key是否为空 ②实例化数据库操作对象,执行相应的数据库删除操作,关闭数据库 4.重写clear() 实例化数据库操作对象,执行数据库删除操作,清空整张数据库表。 在Fragment视图中初始化Webview时,通过addJavaScriptInterface为其绑定重写的底层LocalStorage操作接口,并将操作句柄设置为localStorage。设置webSettings属性,通过setDomStorageEnabled与setDatabaseEnabled启用本地存储功能。 在服务器资源页面JavaScript方法中,尝试用句柄LocalStorage替换window默认的localStorage。若发生异常,说明LocalStorage没有被添加至webview。然后即可像通常HTML5的localStorage对缓存数据进行操作。 3.3.2.页面回退管理的实现 (1)在MainActivity中覆盖模块间的回退响应事件。当模块页面回退至各自的初始页面时,点击回退按钮执行相应的模块切换策略,若该模块为主界面模块,则弹出退出系统确认框供用户选择是否退出;若为其他模块则将菜单栏切换到首页模块。 (2)在各自的Fragment中覆盖模块内部的回退响应事件。在页面初始化时定义并维护一个存放历史访问页面的历史栈loadHistoryUrls (ArrayList),把初始页面url加入到历史栈中,在覆盖加载方法shouldOverrideUrlLoading中将待渲染加载的页面加入到历史栈中。 (3)在Fragment内部的回退事件处理方法中,判断是否可以执行返回操作。然后判断历史栈存存放页面的前一页是否包含初始重定向页面,若包含该页面则移除加载栈中的最后两个链接,否则移除加载栈中的最后一个链接。最后加载重定向之前的页面。 3.4本章小结 本章首先分析了HTML5标准下缓存处理策略WebStorage,其包含本地存储LocalStorage与会话存储SessionStorage,并提供了相应的介绍和说明。然后分析了跨域数据交互问题问题存在的原因以及页面回退管理存在的问题。由于Webview的数据封闭性,不同的模块Webview之间无法共享访问数据,使得不同的模块无法正常交互,为此采用重写LocalStorage的方式,通过本地Sqlite数据库操作模拟HTML5中缓存的操作,重写LocalStorage关键的操作方法setItem()、getItem()、removeItem()以及clear(),并为Webview绑定相应的底层Java方法接口,在服务器页面资源中用重写的LocalStorage替换默认的localStorage,从而完成跨域数据的调用访问操作。由于页面的重定向作用,页面回退时会反复加载到重定向后的页面,导致页面无法正常回退,因此通过维护历史栈的方式,在页面回退时对回退目标页面进行分析判断,并执行相应的回退管理方法,从而使得模块内部的页面以及模块之间可以正常地进行返回操作。 第四章 页面自适应机制设计 针对移动设备分辨率和屏幕大小、设备型号迥异的现状,本章将在分析现有页面跨浏览器兼容方案的基础上,同时结合移动端对不同分辨率设备的支持特性,分析与设计跨机型、跨分辨率、跨浏览器的页面自适应机制。 4.1页面兼容策略 为了使页面能够适应不同版本的浏览器内核,诸如IE、Chorme、Firefox等,CSS3引入了两种常用的设计策略,即优雅降级和渐进增强。 优雅降级指的是在页面设计开始即构建页面的完整功能,然后针对不同的浏览器进行测试和修复。该观点认为应该针对那些最高级、最完善的浏览器来开发网站,同时把那些被认为过时或有功能缺失的浏览器下的测试工作安排在开发周期的最后阶段。在这种设计思想下,旧版的浏览器通常被认为仅能提供简单却功能没有大碍的页面浏览体验。虽然可以做一些小的调整来适应某个特定的浏览器,但由于这些调整并非开发过程中关注的焦点,因此浏览器间呈现的差异通常将被直接忽略。 渐进增强指的是在页面设计开始只构建页面的最少特性功能,然后不断针对各高级浏览器追加额外功能。渐进增强思想认为应该先让网站能够正常工作于尽可能旧的浏览器上,然后不断为它在新型浏览器上实现更多的增强和改进。随着时间的推移,当更多的用户逐渐开始升级浏览器,同时浏览器本身的支持度也不断提升时,就会有越来越多的用户体验到这些增强和改进,无需为了一个已经成型的网站在旧式浏览器下正常工作而做逆向开发。渐进增强观点认为网页的开发应关注于内容本身。这使得渐进增强成为目前一种更为合理的设计范例。 图4.1 优雅降级和渐进增强图例 对于优雅降级,功能衰减的设计从复杂的功能现状开始,不断减少用户体验的供给;而渐进增强则的设计是从一个非常基础的,能够发挥作用的版本开始,并不断地进行扩充,以适应未来环境的需要。功能衰减意味着往回看;而渐进增强则意味着朝前看,同时保证其根基安全牢固。 为了能够给用户提供更好的界面交互体验,同时适应不同版本的浏览器内核,系统采用了部分渐进增强的思想,利用媒体查询为不同的浏览器版本和内核提供相应的展现效果,同时保证基本的页面展现功能。 4.2 页面自适应策略 系统采用部分渐进增强的页面适配思想,以及拥抱流式布局策略,通过视口元素的媒体查询来控制不同分辨率阈值下页面的布局规划,调整页面元素的布局为百分比方式,包括组件宽度、字体以及高度、图片的动态大小来控制相同分辨率阈值范围下不同视口中组件的平滑缩放。同时对HTML5页面的移动端适配属性进行设置控制,针对需要达到的效果设置其Viewport的属性,包括宽和高、页面最初大小、初始缩放比例、屏幕像素密度等。使得系统在Web浏览器端以及移动端都有良好的展示效果。 4.2.1设备自适应 Viewport是指用以展现手机页面的区域。尽管Viewport的可见区域和屏幕大小是匹配的,但是它有着自己的尺寸(dimensions),这一尺寸决定了页面上可见的像素点。一个web页面在扩张到整个屏幕之前占用的像素数据是由Viewport的尺寸来定义的,而不是设备屏幕的尺寸。如一个设备的屏幕宽480像素,但是Viewport宽800像素,那么这个web页面需要在800像素宽的屏幕上才能完全展现。 在HTML5中可以使用 <meta> 标签来为页面定义Viewport 的属性。可以在 <meta> 标签的content 属性中,定义多个Viewport属性。例如,Viewport的高和宽,页面的最初大小,以及目标屏幕分辨率。Content 属性中的每个Viewport性质必须以逗号相隔。通过初始缩放initial-scale和用户调整缩放来控制页面的伸张以适当地填充移动端设备的显示区域。通过target density定义屏幕像素密度来控制安卓浏览器和Webview根据不同屏幕的像素密度对页面进行的缩放。 图4.2 视口属性设置示意图 4.2.2.浏览器自适应 通过拥抱流式布局的来使得页面在不同尺寸屏幕上良好的运行。从手机到电脑,设备的屏幕尺寸层出不穷,很难用传统意义上的统一布局来适应这些变动。拥抱流式布局倡导响应式界面设计,通过媒体查询(@media screen and...)来获得设备特性信息,从而灵活的控制不同尺寸屏幕的浏览器动态的调整页面元素的布局,以适应视口特性的变化。 同时根据“目标元素宽度/上下文元素宽度=百分比宽度”的模式将传统的固定像素式布局改为百分比布局,元素的固定像素宽度转换成百分比宽度。假定整个页面布局的宽度是960px,按照1024px屏幕分辨率做参照,百分比应是960/1024 = 93.75%。其他的组件宽度也可以按照960px为参照计算。若除下来的结果是很长的小数,如340/960 = 0.3541666666666667 ,无须对结果进行四舍五入,这样可以保持最高的精确度,这些小数应尽可能完整保留。 根据“目标元素尺寸/上下文元素尺寸=百分比尺寸”将文字的固定像素大小转换为等量的相对尺寸,现代浏览器默认的字体大小是16px,字体的相对大小用em为单位来表示。若某个div的字体大小为48px,则转化后为48/16=3em。结果为小数时的处理方式同上。 给图片设置阈值以使图片随着视口平滑缩放,为不同屏幕尺寸提供不同的图片,然后针对不同视口宽度修正设计,保证在响应式设计中内容始终优先。图片不是布局元素,它里面不包含子元素。另外,图片还有失真的问题,缩放不当都会造成失真。为此,需要给图片添加样式max-width:100% 以实现弹性图片,因为图片所处的容器可以自动缩放,只需让图片限制在父级的宽度之内,就可以随父级一起缩放。弹性图片仅用max-width无法实现,除此之外还需使用百分比宽度。处理方式同计算布局元素的宽度。在此过程中需要注意图片的失真问题,当用户使用的一个超宽屏幕时,图片被放大到原大小的两倍甚至更多,图片的质量会大幅下降。所以还需为图片设置绝对阈值,即宽度上限,因此一个弹性图片的样式组合应该为:width:30%; max-width:400px。 对于一个使用超宽屏幕的用户,按照正常的页面设计比例,这张图片被放大到了500px,但是现在只能显示最大宽度400px,依然是个问题。为此可以采用另一个组合,把max-width加到图片的父级元素上,从源头上就限制放大的最大值,这样图片与它的相邻元素的比例就不会失调了。这样的设计也是个权衡的结果,因为页面结构千变万化,具体的解决办法,还得分析具体页面。 为了防止放大的过宽,可以通过媒体查询来设置不同分辨率下的阈值。在处理各种浏览器兼容问题时,可以借助Modernizr,一个用于检测浏览器功能的开源JavaScript库,通过Modernizr追加的额外类名来辅助修正样式问题,以及通过检测浏览器是否支持媒体查询来按需加载资源,让老版本IE支持HTML5等。 4.3 模块实现 页面自适应主要的实现方式包含: 4.3.1根据适口属性设计响应式布局: ①加入兼容配置代码 <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">,通过chrome插件GCF(谷歌内嵌浏览器框架)控制IE以Webkit引擎及V8引擎进行样式排版,若用户未安装该插件则以IE最高文档模式进行展
技术基础 New Folder 多样式星期名字转换 [Design, C#] .NET关于string转换的一个小Bug Regular Expressions 完整的在.net后台执行javascript脚本集合 ASP.NET 中的正则表达式 常用的匹配正则表达式和实例 经典正则表达式 delegate vs. event 我是谁?[C#] 表达式计算引擎 正式发布表达式计算引擎WfcExp V0.9(附源码) 运算表达式类的原理及其实现 #实现的18位身份证格式验证算法 身份证15To18 的算法(C#) 一组 正则表达式 静态构造函数 忽略大小写Replace效率瓶颈IndexOf 随机排列算法 理解C#中的委托[翻译] 利用委托机制处理.NET中的异常 与正则表达式相关的几个小工具 你真的了解.NET中的String吗? .NET中的方法及其调用(一) 如何判断ArrayList,Hashtable,SortedList 这类对象是否相等 帮助解决网页和JS文件中的中文编码问题的小工具 慎用const关键字 装箱,拆箱以及反射 动态调用对象的属性和方法——性能和灵活性兼备的方法 消除由try/catch语句带来的warning 微软的应试题完整版(附答案) 一个时间转换的问题,顺便谈谈搜索技巧 .net中的正则表达式使用高级技巧 (一) C#静态成员和方法的学习小结 C#中结构与类的区别 C#中 const 和 readonly 的区别 利用自定义属性,定义枚举值的详细文本 Web标准和ASP.NET - 第一部分 XHTML介绍 在ASP.NET页面中推荐使用覆写(Override)而不是事件处理(Event Handler) 常用编码工具类,支持base64,md5,des,crc32 也谈谈技术面试 在C#里把ArrayList转换为Array 或 把Array转换为ArrayList C# 2.0 在.NET 2.0中,让你的组件也可以绑定 .NET20 一种简单的窗口控件UI状态控制方法 翻译MSDN文章 —— 泛型FAQ:最佳实践 Visual C# 3.0 新特性概览 C# 2.0会给我们带来什么 泛型技巧系列:如何提供类型参数之间的转换 C#2.0 - Object Pool 简单实现 Attributes in C# 手痒痒,也来个c# 2.0 object pool 泛型技巧系列:用泛型打造可复用的抽象工厂 体验.net2.0的优雅(四):Provider、策略、控制反转和依赖注入 泛型最佳实践 asp.net 2.0下嵌套masterpage页的可视化编辑 C# 2.0与泛型 动态调用对象的属性和方法——性能和灵活性兼备的方法 泛型技巧系列:用泛型打造可复用的抽象工厂 泛型技巧系列:如何提供类型参数之间的转换 .NET 2.0 泛型Quiz Visual Studio 2005体验泛型编程 C++ 泛型编程系列讲座之实施 泛型技巧系列:简单类型选择器 C# 泛型简介 我眼中的C#2.0新功能特性 泛型技巧系列:避免基类及接口约束 New Article 不该用Generics实现Abstract Factory的理由 C#2.0-泛型 C#2.0-extern C#2.0-可空类型 C#2.0-分部类 C#2.0-迭代器 C#2.0 的新增功能学习 泛型的序列化问题 .NET 2.0 泛型在实际开发中的一次小应用 C#2.0 Singleton 的实现 .Net Framwork 强类型设计实践 通过反射调用類的方法,屬性,字段,索引器(2種方法) ASP.NET: State Server Gems 完整的动态加载/卸载程序集的解决方案 从NUnit中理解.NET自定义属性的应用(转载) 如何在.NET中实现脚本引擎 (CodeDom篇) .NET的插件机制的简单实现 我对J2EE和.NET的一点理解 难分难舍的DSO(一) InternalsVisibleToAttribute,友元程序集访问属性 Essential .NET 读书笔记 [第一部分] NET FrameWork的Collections支持 .NET的反射在软件设计上的应用 关于跨程序集的反射 实现C#和VB.net之间的相互转换 深入剖析ASP.NET组件设计]一书第三章关于ASP.NET运行原理讲述的补白 asp.net 运行机制初探(httpModule加载) 利用反射来查看对象中的私有变量 关于反射中创建类型实例的两种方法 ASP.Net应用程序的多进程模型 NET委托:一个C#睡前故事 [推荐] - [原创] Microsoft .NET策略及框架概述 卸载Class? Web Form 窗体 如何实现web页面的提示保存功能 在ASP.Net中两种利用CSS实现多界面的方法 如何在客户端调用服务端代码 页面一postback,它就显示页面的最顶端,怎样让它定位在某一位置? 如何保证页面刷新后的滚动条位置 清除网页历史记录,屏蔽后退按钮! 如何传值在2个页面之间 :要求不刷新父页面,并且不能用Querystring传值 Asp.net地址转义(分析)加强版 Web的桌面提醒(Popup) Using the Popup Object Click button only once in asp.net 2.0 Coalesys PanelBar + R.a.d Treeview +Xml 构建的Asp.net 菜单和权限管理模块 突破屏蔽限制,自己的网站使劲弹新IE窗口 对页面SCROLLING的CSS不能生效原因 .Net 中IE使用WinForm控件的使用心得。 动态加载用户控件的组件!(终结MasterPages技术) 在ASP.NET 1.1下实现模板化站点的新思路 在ASP.Net中两种利用CSS实现多界面的方法 用于弹出ModalDialog进行数据选择的控件 使用.ashx文件处理IHttpHandler实现发送文本及二进制数据的方法 制作一个简单的多页Tab功能 一完美的关于请求的目录不存在而需要url重写的解决方案! 在C#中实现MSN消息框的功能 XmlHttp实现无刷新三联动ListBox 鼠标放在一个连接上,会显示图片(类似tooltip) 使用microsoft.web.ui.webcontrols的TabStrip与IFame组件,达到页的切换效果 HttpModule 实现 ASP.Net (*.aspx) 中文简繁体的自动转换,不用修改原有的任何代码,直接部署即可! 服务器自定义开发二之客户端脚本回发 Web开发: 使用URL重写WEB主题切换 如何在Asp.Net1.1中实现页面模板(所谓的MasterPage技术) Tool Tip 示例(FILTER版) Tool Tip示例 (htc版) 一个.net发送HTTP数据实体的类 按键跳转以及按Enter以不同参数提交,及其他感应事件 动态控制Page页的Head信息 SubmitOncePage:解决刷新页面造成的数据重复提交问题 SharpRewriter:javascript + xml技术利用#实现url重定向 采用XHTML和CSS设计可重用可换肤的WEB站点 asp.net的网址重定向方法的比较:面向搜索引擎友好 也谈 ASP.NET 1.1 中 QueryString 的安全获取写法 ASP.NET运行模式:PageHandlerFactory 利用搜索引擎引用来高亮页面关键字 网站首页的自动语言切换 应用系统的多语言支持 (一) 应用系统的多语言支持 (二) 自动返回上次请求页面(小技巧) ASP.NET 2.0 控件 ASP.NET 2.0 验证控件新的功能 DataGridView中如何在textbox列中限制输入。 ASP.NET 2.0构建动态导航的Web应用程序(TreeView和Menu ) 体验.net2.0的优雅(3) -- 为您的 SiteMap 添加 控制转发功能 GridView控件使用经验 ASP.NET 2.0:弃用 DataGrid 吧,有新的网格控件了! ASP.NET2.0控件一览---标准控件(1) ASP.NET2.0控件一览---标准控件(2) ASP.NET 2.0中使用webpart系列控件 ASP.NET 2.0 中实现跨页提交 新控件、管理外观、布局及其它用户体验 ASP.NET 2.0 缓存技术 (原创) asp.net 2.0中的theme主题覆盖问题 asp.net 2.0中利用app_offline.htm功能 .NET 2.0中的字符串比较 小试ASP.NET 2.0的兼容性 为 asp.net 2.0 的菜单控件增加 target 属性 ASP.NET 2.0 的内部变化 常见的 ASP.NET 2.0 转换问题和解决方案 Asp.Net2.0无刷新客户端回调 体验.net 2.0 的优雅(1) -- 异步WebService调用 ASP.NET 2.0页面框架的几点新功能 ASP.NET 2.0 中收集的小功能点 asp.net2.0中的webpart使用小记 2.0问题、错误解决办法 ASP.NET 2.0使用Web Part创建应用程序之二(共二) 体验 .net2.0 的优雅(2) -- ASP.net 主题和皮肤 NET2.0系列介绍(一).NET 2.0 中Web 应用程序主题的切换 ASP.NET 2.0 中Web 应用程序主题的切换 2.0正式版中callback的一些变化+使用示例(ASP.NET 2.0) Server Side ViewState 在服务器端存贮ViewState (ASP.NET 2.0) VS2005 ASP.NET本地化学习笔记&感受 在自定义Server Control中捆绑JS文件 Step by Step 深度解析Asp.Net2.0中的Callback机制 使用 Web 标准生成 ASP.NET 2.0 Web 站点 ASP.NET 2.0基于SQLSERVER 2005的aspnetdb.mdf部署 ASP.NET 2.0 Security FAQs Asp.net 2.0功能体验,细节之Web控件(一) 隐藏控件 Asp.net 2.0功能体验,总体设计思想 Asp.net 2.0 WebPart使用经验点滴 革新:.NET 2.0的自定义配置文件体系初探 关于如何在ASP.NET 2.0中定制Expression Builders 怎么在ASP.NET 2.0中使用Membership asp.net 2.0-实现数据访问(1) ASP.NET 2.0 新特性 .NET 2.0里使用强类型数据创建多层应用 在MastPage中引用脚本资源 2.0正式版中callback的一些变化+使用示例(ASP.NET 2.0) asp.net 2.0 新特性 Visual Web Development 2005开发ASP.NET使用小技巧 ASP.NET 2.0 异步页面原理浅析 [1] [原] 自定义通用System.Web.UI.IHierarchicalDataSource简单实现 在 ASP.NET 2.0 中创建 Web 应用程序主题 ASP.NET 2.0 中的数据访问 ASP.NET 2.0:弃用 DataGrid 吧,有新的网格控件了! 将 ASP.NET 2.0 应用程序服务配置为使用 SQL Server 2000 或 SQL Server 2005 ASP.NET 2.0 中的数据源控件 使用 ASP.NET 2.0 ObjectDataSource 控件 ASP.NET 2.0 的内部变化 使用SQL Cache Dependency 代替 Ibatisnet 提供的CacheModel ASP.NET 2.0中小心Profile命名冲突 使用ASP.NET 2.0 Profile存储用户信息[翻译] Level 200 [ASP.NET 2.0]PageParser.GetCompiledPageInstance中存在一个Bug 如何在DotNet 2的登录组件中检索用户的锁定状态及解锁? ASP.NET 2.0, 想说爱你不容易 SqlDataSource WEB控件:当DeleteCommandType= 遭遇 ASP.NET 2.0 只读 TextBox 回发后信息丢失的 bug asp.net2.0:扩展ImageButton控件定制自己需要的功能 ASP.NET 2.0 正式版中无刷新页面的开发(示例代码的补充) ASP.NET2.0中themes、Skins轻松实现网站换肤! ASP.NET 2.0 中的代码隐藏和编译 ASP.NET 2.0 Language Swithcer and Theme Swicher 多语言转换和多样式主题转换 ASP.NET2.0 ObjectDataSource的使用详解(1) ASP.NET2.0 ObjectDataSource的使用详解(2) TextDataSource(1) — DataSourceControl内幕 TextDataSource(2) — 翠花,上“数据” ASP.NET2.0 ObjectDataSource的使用详解(3) ASP.NET2.0 快速入门 ----默认中的主题外观 数据库开发 ADO.NET 通过DataTable获得表的主键 ADO.NET 2.0 操作实例 ADO.NET 2.0 大批量数据操作和多个动态的结果集 ADO.NET 2.0 异步处理 在ASP.NET中使用WINDOWS验证方式连接SQL SERVER数据库 改进ADO.Net数据库访问方式 ASP.NET 2.0 绑定高级技巧 简单实用的DataSet更新数据库的类+总结 [ADO.NET]由数据库触发器引发的问题 为ASP.NET封装的SQL数据库访问类 DataTable.Select方法的性能问题 .NET 2.0里使用强类型数据创建多层应用 ADO.NET实用经验无保留曝光 有了System.Data.IDataReader,一切皆成数据 理解DataSet的数据缓存机制 存储过程 可按任意字段排序的分页存储过程(不用临时表的方法,不看全文会后悔) 常用sql存储过程集锦 存储过程中实现类似split功能(charindex) 通过查询系统表得到纵向的表结构 将数据库表中的数据生成Insert脚本的存储过程!!! 2分法-通用存储过程分页(top max模式)版本(性能相对之前的not in版本极大提高) 分页存储过程:排序反转分页法 优化后的通用分页存储过程 sql语句 一些Select检索高级用法 SQL server 2005中新增的排序函数及应用 根据基本表结构及其数据生成 INSERT ... 的 SQL 简便的MS SQL 数据库 表内容 脚本 生成器 将表数据生成SQL脚本的存储过程 直接从SQL语句问题贴子数据建表并生成建表语句的存储过程 从SQL中的一个表中导出HTML文件表格 获取數据库表的前N条记录 几段SQL Server语句和存储过程 生成表中的数据的脚本 最详细的SQL注入相关的命令整理 Oracle Oracle中PL/SQL单行函数和组函数详解 mssql+oracle Oracle编程的编码规范及命名规则 Oracle数据库字典介绍 0RACLE的字段类型 事务 CMT DEMO(容器管理事务演示) 事务隔离性的一些基础知识 在组件之间实现事务和异步提交事务(NET2.0) 其它 在.NET访问MySql数据库时的几点经验! 自动代码生成器 关于能自定义格式的、支持多语言的、支持多数据库的代码生成器的想法 发布Oracle存储过程包c#代码生成工具(CodeRobot) New Folder XCodeFactory3.0完全攻略--序 XCodeFactory3.0完全攻略--基本思想 XCodeFactory3.0完全攻略--简单示例 XCodeFactory3.0完全攻略--IDBAccesser XCodeFactory2.0完全手册(中) XCodeFactory2.0完全手册(上) XCodeFactory3.0Beta1推出 ! SQL Server 2005 SQL Server 2005的几个新功能 在SQL Server 2005中解决死锁 在 SQL Server 2005 中查询表结构及索引 sql server 2005中的DDL触发器 在 SQL Server 2005 中使用表值函数来实现空间数据库 SQL Server 2005的30个最重要特点 同时安装sql2000和sql2005的经验 类如何与界面绑定 在Asp.net中如何用SQLDMO来获取SQL Server中的对象信息 使用Relations建立表之间的关系并却使用PagedDataSource类对DataList进行分页 通过作业,定时同步两个数据库 SQLSERVER高级注入技巧 利用反射实现ASP.NET控件和数据实体之间的双向绑定,并且在客户端自动验证输入的内容是否合法 asp.net报表解决方法 SQLDMO类的使用 SQL过程自动C#封装,支持从表到基本存储过程生成 使用SQLDMO控制 SQL Server 使用SQL-DMO实现定制SQL Scripts Create Tables and Build inserts from Tables by using Mygeneration Templates(Sql Server) C# 获取数据库中某个某个表的创建脚本 DbHelperV2 - Teddy的通用数据库访问组件设计和思考 也论该不该在项目中使用存储过程代替SQL语句 如何使数据库中的表更有弹性,更易于扩展 存储过程——天使还是魔鬼 如何获取MSSQLServer,Oracel,Access中的数据字典信息 C#中利用GetOleDbSchemaTable获取数据库内表信息[原创] 如何解决ACCESS中SELECT TOP语句竟然返回多条记录的问题? Asp.net 利用OleDb的GetOLEDBSchemaTable方法得到数据库架构信息 用于 Visual Studio .Net 的 IBM DB2 开发外接程序 第2章 并发操作的一致性问题 (2) Using sqlite with .NET Visual Studio 2005 中的新 DataSet 特性 MySQL 和 .Net2.0配合使用 与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable 与DotNet数据对象结合的自定义数据对象设计 (一) 数据对象与DataRow ASP.NET中大结果集的分页[翻译] .net 2.0 访问Oracle --与Sql Server的差异,注意事项,常见异常 Ado.net 与NHibernate的关系? 动态创建数据库 SQL Server数据库安全规划全攻略 .net通用数据库访问组件SQL Artisan应用简介1 在Framework1.0下同时连接SqlServer和Oracle的一些体会 XML XPath XPath最通俗的教程(ZZ) XPath中相对路径和绝对路径 XPath 简单语法 Asp.Net(C#)利用XPath解析XML文档示例 XSL .Net框架下的XSLT转换技术简介 一个XSLT的简单例子 XSLXSLT板主题整理 xsl入门的好文章 新手学习XSL的好东西 XSL语法介绍 XSL学习心得 - 调用属性值 XSLT与XML转换的详细介绍 功能应用 读写搜索 基础教程 RSS Web2.0时代,RSS你会用了吗?(技术实现总结) 知识集锦:三分钟全面了解 Blog 和 RSS C#+ASP.NET开发基于Web的RSS阅读器 ASP.NET RSS Toolkit(RSS工具) Serialize Your Deck with Positron [XML Serialization, XSD, C#] 如何用RSS技术升级您的网站 RSS技术在行业中的应用三案例 RSS的力量 为自己的网站添加RSS功能 建立自己的RSS asp.net+c#+sql生成rss2.0代码 如何获取远程RSS内容? C#如何实现读取RSS VC# 2005 Screen Saver Starter kit里的Rss处理类分析 使用XmlHttp与Javascript实现对RSS的读取 WEB BUILDER中的动态页面生成 WebBulider 中的RSSWebpar — 建立自己的 RSS 阅读器 RSS 2.0规范 C#版简易RSS阅读器(新增读取OPML功能) C#版简易RSS阅读器 asp.net 页面中生成 RSS 2.0 提要 用 Ajax 和 RSS 攒个首页新闻 用RSS来整合内容以满足不同的需要 简单的在线RSS阅读器(原创) 用户自定义配置接点读取 通用方案 利用XmlDocument更新Xml文件中的数据 XML的特征以及一些用途 如何创建一个XML文件,然后创建一个与之关联的样式表文件? Rss为什么会兴起?什么时候会被替代? 遍历指定文件夹下所有的xml文件并动态生成HTML页面 通过XML来远程抓娶图片的代码 .Net1.0和2.0下 soap序列化和binary序列化的比较 NET中书写XML的一种简单方法 适用于IE浏览器及非IE浏览器的xmlhttp脚本 用实例说明如何用JavaScript生成XML XML驱动开发 XamlReader.Load(): Build Up Your Own XamlPad 如何理解xslt中模板调用 Web Service 从WEB SERVICE 上返回大数据量的DATASET MSMQ,Enterprise Service, DotNet Remoting,Web Service 的优缺点 动态调用web服务 Web服务最佳实践(翻译) HTTP协议下用Web Service上传大文件的解决方案 与大家分享一些Web Service的经验 Web Service Security --- Introduction XML Web Service 安全性 SOA 设计原则和 Web 服务中的数据传输 解决内网通过代理服务器访问外网部署WebService报错问题“请求因 HTTP 状态 407 失败” 对象与状态 Application Session 如何得到Sessionid的值 Session研习笔记 Cookie cookie 学习总结 ViewState ASP.NET 小技巧:重写 ViewState 的存储目的地,以提高页面性能 由重写ViewState存储目的而想到的 [总结]关于在线用户列表的统计! Persistent Strategy (1) - 问题定义与实现 Persistent Strategy (2) - Xml序列化的应用 利用HttpModuler实现WEB程序同一时间只让一个用户实例登陆 控件 DataGrid 简单实用的DATAGRID组件 为DataGrid创建自定义列控件(二) 为DataGrid创建自定义列控件(一) 为DataGrid创建自定义列控件(三) 在ASP.NET环境下完整的datagrid填充数据后界面动态显示填充方案 在dataGrid中拖动改变列宽度,在asp.net中 用javascript实现dataGrid表头排序 存储过程DataGrid分页及注意点 在后代码里创建DataGrid控件 为DataGrid自定义分页添加自定义导航和分页信息 如何利用DataGrid纵向显示数据? 如何用DataGrid实现类似DataList多列的效果 竖表转横表(支持多列) 竖表变横表(支持固定列) 通用分页控件(DataGrid,DataList,Repeater都可以用它来分页) 如何同时选择DataGrid的多行 DataGrid单元格移动变色,点击变色,双击取消颜色,排序. 分页管理器实现 oButton加入DataGrid模板列引起的问题。 将RadioButton加入到DataGrid模板列后单选简单实现 用c#实现将DataGrid中的数据导为microsoft office excel 2003 TreeView ASP.NET环境下完整的treeview使用类 C#加javaScripts实现选中树节点后显示节点内容(微软TreeView) treeview 的使用心得 FlyTreeView for ASP.NET 3.2 破解攻略 用Ajax技术让IE Web Control Tree View实现大数据量读取 我在使用C#中Treeview与解析XML遇到的问题! TreeView父子联动效果保持节点状态一致 Asp.Net 2.0 TreeView的Checkbox级联操作 DataList Html控件 table动态改变颜色包括一个边框 功能超强的表格(上下左右移动,添加删除行列,导出) 用户控件开发 ASP.NET 服务器控件授权 为控件添加自定义属性事件 让你的控件属性注释支持多语言 自定义UserControl的属性为什么不能在设计时显示在属性窗口中 asp .net 服务器控件开发心得 今天你写控件了吗 --Asp.net服务器控件开发系列文章 汇总 将ASP.NET用户控件转化为自定义控件 TextBox 创建具有自验证功能的textbox控件 textbox上实现右键菜单 给FreeTextBox 3.0.5 添加上QQ和MSN表情 FreeTextBox中存在一个严重的安全漏洞 DOTNET2.0 的编辑器:WebHtmlEditor 1.5 Release提供在线演示和下载 FreeTextBox使用详解 (版本3.1.1) 弹出式选择文本控件 ASP.NET: Custom AutoCompleteTextBox WebControl [With Source Code] Button 水晶报表 水晶报表数据填充(一种推模式,两种拉模式)类库 RDLC报表(一) RDLC报表(二) 其他控件 让asp.net默认的上传组件支持进度条反映 HtmlTextWriter学习笔记 用户控件例码 ASP.net下的前台日历控件源代码(不刷新页面) ASP.net下DataGrid的单项选择控件 个ASP.Net的DataGrid分页控件,在Oracle数据库下,每次只取当前页的数据,不使用存储过程 自动获取当前日期下一周的年月日代码 asp.net下的日历控件源代码 写了一个live.com的Gadget——农历日历 令你心动的Asp.net 开发中的MessageBox控件 WebForm的MessageBox类 复合控件开发系列之一 年月日三联动下拉框 下拉日期控件 客户端计时器控件(clientTimer)的c#源码 在线考试系统中卷面计时的一点思考 GridView GridView 控件使用不完全指南! GridView 控件使用不完全指南!(续一) ASP.NET2.0中Gridview中数据操作技巧 一套可嵌入或独立使用的翻页控件: WebPager(附源码) Web进度条的简单方案 ComponentArt WebUI3.0控件使用方法 在ASP.NET页面中使用SolpartMenu控件 共享两个做项目最常用功能操作的封装类 国内报表设计器的分析 基于Ajax的日期控件 缓存服务与性能优化 通过系统配置来提高ASP.NET应用程序的稳定性 通过系统配置来提高ASP.NET应用程序的稳定性(续) 异步加载图片,提高HTML性能 负载均衡环境下缓存处理 网站速度优化模块HttpCompressionModule [连载]Tuning .NET Performance [连载]Tuning .NET Performance [连载]Tuning .NET Performance 连载]Tuning .NET Performance 安全与验证 加密解密 使用证书来做RSA非对称式加密 自已做的一个加密软件,超好用而且加密强度极高,公布源码 身份权限审核 使用URL参数+Controls层实现网站用户权限管理 系统分析中大家是怎样设计系统的多级权限控制的?? 多级权限设置请教。 基于角色的权限控制 AspNetForums中基于角色的权限控制 asp.net页面如何控制页面依据不同用户权限有不可见、可见、编辑 三种操作权限? 请问在SmartClient应用中,如何做到科学的身份验证和权限分配?~~UP有分 做过权限管理和想做权限管理的人进来(附我的思路) 关于权限设计的探讨 Asp.net中基于Forms验证的角色验证授权 用户权限系统设计方案 权限控制系统的设计 统一用户及权限管理系统 权限系统:分散实现、关注变化 关于权限管理的系统的构思 EsbAOP应用--权限管理 asp.net能实现身份认证的EMAIL发送方法(c#版本) 单点登录(SSO)的核心--kerberos身份认证协议技术参考(一) 单点登录(SSO)的核心--kerberos身份认证协议技术参考(二) 单点登录(SSO)的核心--kerberos身份认证协议技术参考(三) 权限系统概要(收集,整理) membership,想说爱你不容易 蛙蛙推荐:web下的授权简单解决方案 将权限引入系统的探索 数据库有效验证 浅谈在ASP.NET中数据有效性校验的方法 XML Schema Validator Class JSClientValidator-客户端javascript验证新模式 如果做到安全的系统之验证用户输入. 部署安全 查看贴子内容 CLI里面的秘密……(二)强命名、元数据以及文件结构(上半部分) Assembly学习心得 asp.net 保护网站不受用户上传文件的侵害 在设置窗体身份验证时设置个别页面不需要进行验证 基于Web应用程序的安全问题之一Cross-Site Scripting Vulnerabilities 代码安全 基于强名称签名的代码访问保护及其改进 防止对 Visual Basic .NET 或 C# 代码进行反相工程 如何防止 DLL 被反编译 揭开.NET程序保护的秘密 如何建立有效的.Net软件注册保护机制 由浅至深,谈谈.NET混淆原理 (一) 由浅至深,谈谈.NET混淆原理 (二) 最简单的混淆 由浅至深 谈谈.NET混淆原理(三)-- 流程混淆 由浅至深 谈谈.NET混淆原理 (四) -- 反混淆(原理 + 工具篇) 由浅至深,谈谈.NET混淆原理 -- 五(MaxtoCode原理),六(其它保护方法) 看了下面那篇“Crack别人应用程序”的文章有感,简述.Net下的应用程序授权。 vs2003中设计强名称程序集并制作安装入GAC的MSI 无法破解的软件注册码算法 保护你的代码——谁动了我的组件? ASP.NET中的单点登录 Cookie 支持二级域名和FormsAuthentication 加强版 论电子签章(Electronic Signature)在C#中的实现方法 使用IHttpHandler防止非法链接 使用 Ildasm, ILasm, Peverify 来 Crack 别人写的应用程序。 ASP.NET2.0应用中定制安全凭证之实践篇 创建安全的ASP.NET虚拟主机 实现关于跨二级域名和1.1和2.0版.net Forms身份验证体制的问题和解决办法. Kerberos简介 在ASP.NET中防止注入攻击[翻译] 封装了一个极其易用的加密解密类,支持DES、三重DES、Rijndael、RC2、MD5、以及非对称加密算法RSA 学习一下 .net framework 中有关安全的内容 学习一下 .net framework 中有关安全的内容(续) 环境配置与部属 使用ASP.NET的跟踪服务 无ASPX文件部署(续) 无aspx文件部署 aspx->cs->dll 如何把用http访问的网页转换用https访问 一个配置IIS的问题 在Apache环境下成功的运行ASP.NET 关于通用配置管理模块的思考-续(用XmlDocument 还是DataSet) 在.net中使用强类型来读取配置信息 Asp.net网站的ClickOnce自动部署(1)-自动部署的内容 Asp.net网站的ClickOnce自动部署(2)-虚拟目录的配置 Asp.net网站的ClickOnce自动部署(3)-虚拟目录的配置 web.config文件自定义配置节的使用方法 模仿AppSettings进行web.config的自定义节读取[简单实用型] 关于无aspx文件部署,我的一些探索心得 .NET配置文件解析过程详解(二) Asynchronous Pluggable Protocols Microsoft CRM3.0 多服务器安装部署过程 解决w3wp.exe内存占用问题 实战1.1下Web.Config配置标记configSections 系统设计与项目管理 系统设计 分层开发思想与小笼包 N层企业级架构模板 系统设计的一些原则 在UI层使用Domain逻辑的一些探讨 在C#程序中实现插件架构 组件设计实战--组件之间的关系 (Event、依赖倒置、Bridge) 逻辑设计的例子 一个.net的系统的AOP设计思路一——NHibernate和界面/对象映射层 设计和编写可复用的代码 基于工作流程系统日志生成业务流程模型 SVG + Javascript + ASP.NET + WebService开发楼宇管理系统(一) 系统分析员,让我头痛 .NET下的域对象持久模式 业务流程管理综述 动态工作流的设计 提升软件的用户体验 应用软件的合理性 架构(Architecture)和框架(Framework)杂谈 小议模型 再议模型 软件设计评价 软件设计评价(续) 理解架构师 架构师不是建筑师 MDA(模型驱动架构) 家庭财务总管--软件设计 应用系统架构设计-补全篇 对Web平台和软件架构的一些看法 关于多层设计想到的问题-涉及Nhibernate和Log4Net 谁拥有接口? Codd提出的RDBMS的12项准则 一个糟糕的设计 业务系统里面常见的方法接口设计 将UI和UI控制分离 DotNet软件开发框架 细节决定成败:业务拦截器 广告管理系统的UML分析与设计 软件的架构设计 框架不是框框—应用框架的基本思想 创建成功的工程 软件可行性分析 GIS系统与一个好的软件架构,Why not and how? 直观而简单的解决方案--软件设计的永恒追求 企业开发基础设施--序 企业开发基础设施--类厂服务 企业开发基础设施--事件通知服务 面向对象 基于Visual C#的接口基础教程 基于C#的接口基础教程之一 基于C#的接口基础教程之二 基于C#的接口基础教程之三 基于C#的接口基础教程之四 基于C#的接口基础教程之五 基于C#的接口基础教程之六 基于C#的接口基础教程之七 小结 一个代理的例子 关于委托事件的一两个很好的例子! 依赖倒置 细说继承关系映射 面向对象与面向组件小议 C#中接口多重继承的注意事项 [ASP.NET入门随想四]吸星大法——页面的OO思想篇 如何在类中编写事件 OOD经验原则总结 [ASP.NET入门随想六]大航海家——OO思想的类间关系 接口跟基类的一点点感受 [ASP.NET入门随想七]主角与配角——OO思想的多态、接口与委托 Win32中安全的子类化 (1) Emit生成Property C#中类和接口的设计思想 数据库设计 数据库设计指南 使用Rose2003进行数据库建模并导入SQLServer2000的图解详细过程 UML 聚合 的概念 UML视图 静态视图 构件图 包图 初学uml-(1) 类图和关系 UML学习-通过用例分析来确认需求 国际化组件的设计 Web应用的UML建模与.NET框架开发 基于UML的短信计费系统的分析与设计 基于UML的系统分析方法研究 UML的三大“硬伤” 系统约定:用UML描述工作流管理 使用Rose2003进行数据库建模并导入SQLServer2000的图解详细过程 文档 项目开发总结报告 方案设计书 系统规格/需求规格说明/概要设计书范例 “一卡通”信息系统数据库设计初步探讨(原创) 某M1射频卡餐饮收费系统简单数据模型 广告发布统计实现的可行性分析阶段报告 应用软件部2005年年度工作总结 CPMS企业绩效考核管理系统 V1.1 介绍 设计模式 吕震宇设计模式随笔系列 C#设计模式(1) C#设计模式(2) C#设计模式(3) C#设计模式(4)-Simple Factory C#设计模式(5)-Factory Method Pattern C#设计模式(6)-Abstract Factory Pattern C#设计模式(7)-Singleton Pattern C#设计模式(8)-Builder Pattern C#设计模式(9)-Prototype Pattern C#设计模式(10)-Adapter Pattern C#设计模式(11)-Composite Pattern C#设计模式(12)-Decorator Pattern C#设计模式(13)-Proxy Pattern 设计模式(14)-Flyweight Pattern 设计模式(15)-Facade Pattern 设计模式(16)-Bridge Pattern 设计模式(17)-Chain of Responsibility Pattern 设计模式(18)-Command Pattern 设计模式(19)-Observer Pattern 设计模式(20)-Visitor Pattern 设计模式(21)-Template Method Pattern 设计模式(22)-Strategy Pattern 设计模式随笔-蜡笔与毛笔的故事 设计模式随笔-从“有病”说起(工厂模式前传) 设计模式随笔-发大米喽 设计模式随笔-锦囊妙计 设计模式随笔-让众口不再难调 设计模式随笔-用奶箱订报纸 设计模式随笔-再论锦囊妙计 也说说“从Adapter模式到Decorator模式” 梦幻.Net设计模式 Dot Net设计模式—桥接模式 如何在实际工作中发现模式 设计模式能够解决的问题 设计模式不能做什么 Dot NET设计模式—抽象工厂 Dot NET设计模式—反射工厂 Dot Net 设计模式—简单工厂 Dot Net设计模式—工厂方法模式 Dot Net设计模式—生成器模式 Dot Net设计模式—原型模式 如何掌握并在实践中自如运用设计模式 Dot Net设计模式—单件模式 Dot Net设计模式—适配器模式 Dot Net设计模式—外观模式 Dot Net设计模式—适配器、桥接与外观三模式之间的关系 .NET反射、委托技术与设计模式 创建型模式之间的比较 用实例解说Dot Net设计模式——装饰模式 New Folder 设计模式原型模式(Prototype)- 面馆里的菜单 程序员的时间管理---做一个高效的程序员 设计模式-工厂模式(手工作坊到工业化的转变 c#实现) 设计模式-简单工厂模式(SimpleFactory-C#) 设计模式学习笔记(一) Terrylee 探索设计模式(五):工厂方法模式(Factory Method) 探索设计模式(1):开篇 探索设计模式(2):深入浅出单件模式(Sigleton Pattern) 探索设计模式(3):抽象工厂模式新解(Abstract Factory) 探索设计模式(4):建造者模式过程图解(Builder Pattern) 探索设计模式(六):原型模式(Prototype Pattern) 探索设计模式(七):创建型模式专题总结(Creational Pattern) 探索设计模式(九):桥接模式(Bridge Pattern) 探索设计模式(八):适配器模式(Adapter Pattern) 探索设计模式(11):组合模式(Composite Pattern) .NET设计模式(13):享元模式(Flyweight Pattern) Head First Design Patterns(深入浅出设计模式 Head First Design Patterns(深入浅出设计模式)-目录 Head First Design Patterns(深入浅出设计模式)-设计模式介绍 你真的了解Ioc与AOP吗? Spring.Net 示例代码分析 乱改:Visitor经典模式改进1 乱评:《c#设计模式》中的“访问者模式” 软件的架构与设计模式之模式的种类 Ioc模式(又称DI:Dependency Injection) 隐藏在.NET中的IoC? 一步一步开发Spring Framework MVC应用程序 CSharp面向对象设计模式纵横谈--Singleton Pattern 听课笔记 CSharp面向对象设计模式纵横谈--面向对象设计模式与原则 听课笔记 最少职责OOD设计手段 OOD的设计手段总结 面向对象设计的六大原则简介 由浅入深学“工厂模式”(1) 由浅入深学“工厂模式”(2) A Taste of AOP from Solving Problems with OOP and Design Patterns (Part I) A Taste of AOP from Solving Problems with OOP and Design Patterns (Part II) A Taste of AOP from Solving Problems with OOP and Design Patterns (Part III) 与大虾对话: 领悟设计模式 Design&Pattern团队《设计模式在软件开发的应用》精华版 由浅入深学“工厂模式”(3) 简话设计模式 观察者模式 (using .net) C#中事件与观察者模式 Role分析模式(一) 角色对象基本概念 Role分析模式(二)角色对象创建和管理 在开发中体验设计模式 重新诠释AOP 侃中介者模式(Mediator) 采用AOP 的观点来 Log 所有方法的调用 MS 的IOC容器(ObjectBuilder)? .Net event vs. observer Pattern DProxy介绍 – 一种高性能轻量级AOP开发组件(.NET 1.1) JavaScript中的Decorator模式 魔法牌里的模式(Bridge) 决策者得选择(Strategy) 通讯兵(Chain of Responsibility) 面向智能体编程(Agent Oriented Programmig, AOP)一些体会 Bridge? 一个GIS二次开发中常用的设计模式 Switch语句,僵化的毒药 策略模式的应用实践 重读GoF Factory Method来实现数据库操作的类 用Factory Method模式扩展MyMSDNTVLibrary 工厂模式和容器模式的探索 反编译 Component重要类,全文解释 - 容器篇 单系统多类型数据源随意切换的c#实现 用C#实现MVC(Model View Control)模式介绍 小议.NET中的对象拷贝 设计模式原则详解 封装变化(一) AOP的纯.Net实现 使用纯.net实现AOP(加入了比较详细的代码说明) 隐身大法,使民无知 设计模式浅析之Singleton 设计模式Top10排行榜 简话设计模式 在我们使用的NET FRAMEWORK类库中发现设计模式(3) 在我们使用的NET FRAMEWORK类库中发现设计模式(2) New Article 模版模式 Template Pattern — 穷人和富人的不同婚恋历程 发掘模式---今天您发掘拉mei? 老师讲的抽象工厂,错了一点点 Singleton + Proxy 模式+AOP Observer模式为何要区分推拉模式 也来谈谈工厂模式 项目管理 需求分析控制 项目经理 七个关于有效沟通的哲理故事 新主管如何生存? 怎样从一名程序员过度到项目经理 论《金瓶梅》与项目管理中人际关系协调 做项目经理的一些思考 怎样从一名程序员过度到项目经理 什么是项目经理 团队建设 软件项目中的人员管理和团队建设 建立“杀手”开发团队 软件开发组的团队精神 如何指导软件开发新手 改变一个状况不佳的项目组 论软件开发中的三种重要角色 如何调动员工的积极性 成功项目团队中应树立的五种意识 管理观点系列:团队管理 现在有多同事工作较懒散,没有一点工作效率,开发出来的东西,Bug又多。如果让你来管理你会怎么做? 人才的识与用 用人之道 高效团队的速成之道 管理人员如何有效应用表扬与批评进行反馈 [项目管理]管理中的人 [团队管理]+[软件人生]从项目计划到保密管理到个人学习与提高的方法 建立团队精神 你实现团队管理了吗? 需求管理 怎么做需求分析 撰写优秀的需求 需求分析的20条法则 从用户接触到完成需求说明书 需求调研步骤和方法 一种界面需求分析方法 细谈软件需求分析过程:提取、抽象、升华 网站项目管理-如何做好需求分析 如何写系统分析书 客户需求何时休? 软件需求管理-用例方法,读书摘要 [理解需求变更之一]说说需求变更的必然 RUP简介 软件开发过程中最重要的是人?还是领导者? 开贴讨论:我观察国内几乎所有公司都有这样或者那样的管理问题,开贴讨论:小团队web项目负责人的工作办法 技术不是全部,归纳和演绎能力也很重要 谈恋爱与IT项目管理 广为流传的一个关于项目管理的通俗讲解 诸子百家与项目管理 之 序 诸子百家与项目管理 之 总述 问答 诸子百家与项目管理 之 周易篇(项目管理的两个基本点) 诸子百家与项目管理 之 孙子兵法篇(项目管理的整体思维) 实战解析----项目目的和范围 项目管理过程中的棘轮效应 任务管理 项目整体管理 项目风险管理 项目采购管理 项目沟通管理 项目人力资源管理 项目成本管理 项目质量管理 项目时间管理 项目范围管理 编码人员和美工的配合问题 心得体会:关于开发效率和项目周期的问题 紧急项目处理方法 做项目的一些体会(之一)_软件开发过程中我们应当具有的能力 团队技能之一——分析问题 价值高于一切-企业软件开发谈 项目管理之我见(原创) 项目开发管理经验交流 软件实例开发手记(自序)-为保证文章完整性,谢绝对某篇而非全部手记的转载 紧急项目处理方法 浅谈项目管理中的职责权 - [原创] 由一个虚构的例子谈谈中小型研发型项目的技术管理及成本控制(全文) 优化IT企业的基础架构 一个研发经理的项目日记 .net敏捷开发及常用工具 关于项目管理和项目计划制定的对话 微软资深经理人的项目管理经验 WEB项目开发 MyMsn动态Resize页框架的布局详解 性能,安全,集成才是web之道 重构之美-走在Web标准化设计的路上[深入结构:理解h系列的不合理。] 重构之美-走在Web标准化设计的路上[振臂一呼:Css, Stop! ] 重构之美-走在Web标准化设计的路上[复杂表单]3 2 Update 重构之美-走在Web标准化设计的路上[唠叨先] 重构之美-迎接Web标准化设计的来临[总结一:网页设计回归?] 重构之美-走在Web标准化设计的路上[对HTML/XHTML/XML/XSL的一些认识] 雅虎网站项目工作流程 微软资深经理人的网站项目管理经验 其它 软件工程 一个测试的重构 RUP 核心概念 配置管理的概念 RUP && MSF 特点 构建面向对象的应用软件系统框架 构建面向对象的应用软件系统框架 目录 构建面向对象的应用软件系统框架 第1章 构建面向对象的应用软件系统框架 第2章 第3章 数据和对象 第4章 O/R Mapping的一般做法 第5章 设计一个O/R Mapping框架 第6章 面向方面编程 第7章 接口 第8章 事务处理 第9章 性能优化 第10章 界面层的功能划分 第11章 界面设计模式 第12章 动态代码生成和编译技术 第13章 远程过程访问的客户端整合 第14章 智能客户端 第15章 简述 Effective Coding - Readability 单元测试时的一些最佳实践 Best free tools/frameworks/libraries I use 统一界面设计 十二种实践方法与我的XP心得 使用CVS做.NET项目 在asp.net页面上得到Castle容器的实例 当前软件开发的反思 面向对象设计,ORM,NHIBERNATE杂谈(有感) 投标方案应该怎么写? CMM/CMMI将带我们走向何方——一个CMM从业人员的反思 对一个排序程序的不断重构 FxCop 设计规则 敏捷实践12 条原则 《敏捷软件开发》读书笔记 (1) 《敏捷软件开发》读书笔记 (2) -- 设计原则 《重构》 读书笔记 (1) 企业应用之领域模型 我的.net项目经验(一)。 也谈 SOA 重新诠释SOA 登山的程序员(极限与敏捷之一) 敏捷的总设计师(极限与敏捷之二) 实战解析--项目的主要技术储备 产品升级策略 读《DTS分析模型、设计模型》有感 软件开发核心工作流程 新产品研发 分析设计过程.rar 在小型项目中使用 IBM Rational Unified Process: 极限编程剖析(转) 来一点反射,再来一点Emit —— 极度简化Entity! 软件整合--硬件整合--平台整合 用自定义KeyValueCollection类代替Dictionary/Hastable,改善简化后的Entity性能 Java剑 VS .NET刀 -- 东山再起(论模式)(二)【推荐】 基于构件技术的需求管理过程-框架需求调研 PSP课程(一): PSP简介 我对系统重构的理解 重构---Who are you?! 单元测试应该测什么,不应该测什么? AccEAP架构介绍(1)---实体的设计 我的单元测试认识之路 中小型MIS开发之我见(一)---开发阶段 中小型MIS开发之我见(二)---具体实施(上) 中小型MIS开发之我见(二)---具体实施(下) 团队开发框架(Developement Structure for Team),内容列表及整理计划 风继续吹----对一些ORM框架的使用心得(2) 冷眼程序人生----对一些ORM框架的使用心得 读书笔记]-道法自然之需求分析 个人对软件开发的思考 网络应用 一个Udp信息收发静态类! [修改]脚本判断网站是否能打开 IIS防止文件下载完全手册(非更改文件名法) 在.NET中利用XMLHTTP下载文件 开发 .NET 下的 FTP 客户端组件 如何不让没有登录的用户下载的问题 文件下载时如何隐藏实际地址? ASP.NET 多文件上传 .net 中发mail到hotmail中乱码问题的解决 郁闷的OpenPOP的MIME Parser Asp.net(c#)实现多线程断点续传 关于 OpenSmtp 邮件标题过长后出现乱码问题的解决 支付宝Payto接口的c#.net实现 文件操作 发布一个Asp.Net文件夹复制类 关于File的一些例子 文件操作工具类 FileUtility 大文件上传之异常处理(原创) 文件 在线压缩 技术 ASP.NET在线压缩与在线解压缩 c#文件操作(二) 在ASP.NET中跟踪和恢复大文件下载 Response.BinaryWrite()下载时文件名的问题. Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) DotNet 序列化学习笔记 一个上传的类 系统控制 WMI类--所有可用的WMI的类封装 用ActiveX控件和JavaScript脚本实现基于Web的票据套打(源码下载) 运用API函数获取系统信息 通过ASP.NET页面重启服务器 开源:VS.NET打印思想与2003/5DataGrid、DataGridView及二维数据如ListView等终极打印实现(全部源码) 关于如何打印ListView的解决方法 修改IIS目录的Asp.Net版本 如何获取客户IE统计信息[代码] 图像多媒体 js图形报表 一个可设置背景图片的验证码图片的生成方法 图片翻页幻灯效果 图片渐变轮换效果 讨论一下flash.ocx(8.0版本的)与.net结合的编程 动态生成缩略图 SharpMap介绍及源码分析 利用Javascript 结合 VML 生成三维报表(饼图) 技巧与总结 代码阅读总结(个人总结开发小技巧) DotNet精美书籍大检阅 asp.net的页面代码组织模式 金鼎俱乐部项目总结 总结一下散乱的开发点滴(3) (高手勿入) 说的都是概念——有关编程范式 组织一些开源项目 VS.NET操作技巧 Visual SourceSafe VSS信息的读取的操作 安装程序 安装程序自动安装数据库 程序安装时检查是否已经安装.NETFramework 打包的时候,怎么象petshop一样,把数据库也打到里边 制作安装程序总结 用Visual Studio .Net 2003制作安装程序时轻松实现将自己的程序添加到系统的鼠标右键菜单 .net打包自动安装数据库 用自删除dll实现应用程序的安装/卸载代码 .NET打包自动安装数据库 调试常见问题 IE安装了flash插件还不能显示swf动画的问题 让人哭笑不得的“Unable to load one or more of the types in the assembly”问题的解决! 关于异常处理的一点感受 项目调试时候,出现其中用到的一个组件“访问被拒绝”的解决方法。 对于引用的控件被拒绝访问的解决办法的补充(续) 对于引用的控件被拒绝访问的解决办法的补充(续++)++ 对于引用的控件被拒绝访问的解决办法的补充(续++) 使用Visual Studio.net调试javascript最方便的方法 在Apache上调试Asp.net 1.1/2.0代码 VS.NET 2005 vs.net 2005 中自定义模版项 自己动手打造Visual Studio 2005 Team Suite 正式汉化版 用Visual Studio 2005创建宏代码生成器 Visual Studio 2005 Team Foundation Server Beta3 安装手记 Visual Studio 2005 Team System的BUG? 对vs2005生成dll文件的一点疑惑 开发VS2005下ComboBoxTreeView(下拉列表框弹出树) 与ToolStripComboBoxTreeView(下拉列表框工具条弹出树) Visual Studio 2005中编译调试新功能 使用 Visual Studio 2005 Team System 进行单元测试并生成用于 Unit Test Framework 的源代码 在VS.NET2005中使用java代码段以及SOL文件格式的解析 ClubWEBSite starter kit二次开发及Vs2005中ObjectDataSource控件的应用小记 Visual Studio 2005 RTM的奇怪问题 Team Foundation Server Beta3 安装指南 VS2005中通过code snippet定制类模板 C#2.0 Singleton 的实现 Dataset+TableAdapter _.net最终数据访问类出现? 我的心血显然被藐视了 目前发现的 asp.net数据绑定的几个BUG(不定期连载) 使用GDI+在VS2005下开发基于DataGridView的财务显示单元格控件 目前发现的VS2005 asp.net 数据绑定bug (二) -关于ObjectDatasource 和TableAdapter Use Whidbey Beta2 to target .NET Runtime 1.1 Targetting 1.1 .NET Framework with MSBuild 安装TFS vs.net 2005中web.config智能感知丢失时 VS2005中用Code Snippets提高开发效率 VS2005运行速度优化心得 vs2005 的WebSite 的开发方式的替代Visual Studio Web Application Projects VS2005如何进行单元测试. 善用免费的Code Snippet Libraries加快你的开发速度 Code Snippet Libraries压缩下载包 Visual Studio 2005 Web Application项目RC发布 Visual Studio 2005 Web Application Projects 项目Cool的地方 VS2005将支持的两种WEB编程模型的比较 VS.NET 工具 CodeSmith 我的用CodeSmith生成的业务对象 CodeSmith基础(一) CodeSmith基础(二) CodeSmith基础(三) CodeSmith基础(四) CodeSmith基础(五) CodeSmith基础(六) CodeSmith基础(七) CodeSmith基础(八) CodeSmith应用(一) CodeSmith应用(二) CodeSmith应用(三) CodeSmith应用(四):实现选择路径对话框 CodeSmith-Terrylee CodeSmith实用技巧(一):使用StringCollection 数据库字段属性配置工具界面[用于代码生成] Sharpdevelop2.0预览版放出来了 对nunit很失望 Resharper的快捷键 ReSharper 利用Together For VS.NET检查所编写的代码是否够规范 如何用CodeSmith减少代码重复编写 NET 的Refletion的初步了解 VS2005 Add-in:CSS Properties Window 每个开发人员现在应该下载的十种必备工具 体验ReSharper V1.0 for VS.Net 2003 - Part I 用DNS、IIS实现Web项目团队协作开发! 创建自定义的Visual Studio项模板 Microsoft Windows Workflow Foundation 入门:开发人员演练 将asp.net1.1的应用程序升级到asp.net2.0的一点心得 自动填写版权信息 .Net1.x转换为.Net 2.0要注意的几个问题 服务器同时存在1.1和2.0程序注意事项 使用@Page指令的Src 属性 简化对老版本的 asp.net程序的维护 常见的 Web 项目转换问题及解决方案 将 Web 项目从 Visual Studio .Net 2002/2003 转换到 Visual Studio 2005 的分步指南 常见的 ASP.NET 2.0 转换问题和解决方案 你的.net 2.0 真的能与1.1 安全正确地运行在同一台电脑上吗? 小心Server Application Unavailable 错误 安装vsts:如何卸载SQL Server 2005 其他新技术 反射 初识.net反射技术 .NET反射、委托技术与设计模式 .net反射技术的应用—如何调用Java的COM接口 灵活正确的实现.NET插件机制 C#中使用反射的性能分析 论.NET反射、委托技术与设计模式关系 Ajax 用Ajax技术让IE Web Control Tree View实现大数据量读取 AJAX设计模式 之 怎样构建一个可刷新的无刷新应用 AJAX设计模式实践 之 可刷新Ajax应用范例+Framework 在ASP.NET中实现AJAX Ajax.Net的onLoading及aspx页面的默认名字空间及ajaxpro的google组怎么没有一个chinese? CuteEditor5.0的安装及它与Ajax.net配合无刷新操作数据库! 使用简单的Ajax Framework -MagicAjax.NET 剖析MagicAjax 利用AJAX技术开发应用程序实战 基于Ajax的五子棋演示 AJAX页面XMLHTTP对象生成及下一步技术研究 到了该讨论XMLHTTP在Ajax中作用的时候... Ajax,纠正错误,又向前一小步 Ajax, 想得更实际一些 Ajax, 使用PostBack响应模型和Web控件资源, 让服务器返回更少的数据 几句话介绍MagicAjax 使用MagicAjax 实现无刷新Webparts AJAX编写用户注册实例及技术小结 Web 2.0中AJAX技术应用详解 一个要钱的ajax框架zumipage 网站的推广之痛-使用AJAX和.NET网站的朋友注意了 让MagicAjax支持中文! 阿特拉斯神(二) AJAX急速狂飙:开发www.99scj.com体验(1) ASP.NET 调味品:AJAX 一套使用简单的Ajax服务器控件-Anthem.NET Introduction to Anthem.NET 三种Ajax框架使用比较 Ajax基本原理讲解 【AjaxPro实现机制浅析二】*.ashx文件是怎么来的? 利用Ajax与数据岛实现无刷新绑定 应用Ajax.net在Asp.net中实现无aspx文件应用 Atlas 用Atlas来实现一个基于AJAX的无刷新Chatroom Atlas Table Layout Template 学习Atlas是发现的几个小问题 Atlas笔记1:介绍和调用WebService的方法 Atlas是什么? Atlas 实现机制浅析 [1] Atlas 实现机制浅析 [3] 使用ASP.NET Atlas编写显示真实进度的ProgressBar(进度条)控件 Atlas应用程序调试技巧 在Atlas服务器端实现中推荐使用Web Service而不是Page Method Atlas揭秘 —— 绑定(Binding) 在ASP.NET Atlas中创建自定义的Transformer 在ASP.NET Atlas中创建自定义的Validator 使用ASP.NET Atlas ItemView控件显示集合中的单个数据 使用ASP.NET Atlas ListView控件显示列表数据 调试Atlas客户端JavaScript脚本 在ASP.NET Atlas中创建自定义的Behavior 使用ASP.NET Atlas SortBehavior实现客户端排序 在Atlas中实现检测postback progress的状态的方法 使用ASP.NET Atlas XSLTView控件用XSLT修饰并显示XML数据 Remoting 一步一步学Remoting之一:从简单开始 初识用.NET Remoting来开发分布式应用 使用.NET Remoting开发分布式应用——配置文件篇 基于消息与.Net Remoting的分布式处理架构 使用.NET Remoting开发分布式应用——基于租约的生存期 Remoting多个信道(Chennel)的注册问题 Remoting中的线程与网络通信内幕初探 Remoting Event 远程事件 Remoting Discussion(二) Remoting Discussion(三) 移动开发 在PPC上用时间做唯一编号遇到的问题及其解决方法 正确处理 SqlCeException 的方法 通过ActiveSync使你的Windows Mobile Emulator连接到Internet Pocket PC 2003编程环境 Windows Mobile开发环境搭建指南 短信任务源程序分享[.NET CF C#] 循序渐进:使用 Visual Studio 2005 为基于 Windows Mobile 的设备生成 .NET Compact Framework 应用程序 是不是.net compact framework的Bug呢? 窗体切换中的小技巧 Web 2.0 WEB2.0商业模式才刚开始 用Blog和Wiki搭建IT团队的知识库 论web2.0的定义及web2.0盈利的实现方式 MagicAjax-NoStore,Session,Cache模式的区别 Wiki的介绍 wiki、Blog与项目知识管理 wiki的来龙去脉与企业应用 2006年 Web 2.0 将面临的10个问题 web 2.0 精彩语录 创新的媒介:Web 2.0三大营销变革 2005年Web 2.0领域涌现的11大高质量软件 学习冲电 <> Go back什么是Web 2.0? Web 2.0时代,你属于哪一份子? 全面精通Web 2.0,做互联网潮头人 项目Wiki的选择和配置 2005年 Web2.0 带动的11大软件 最近的asp.net技术demo 通用异常处理框架 在C#中调用WINCE连接PC的程序 GPS定位信息的接收 PDA/GPS检测报告 CnForums和已有系统的整合方案 Community Server技术分析——CS是如何将三个项目整合到一起的 Microsoft.mshtml到底是什么? BI与CRM深入行业应用 纯粹B/S方式实现InfoPath的设计和运行时--Web Builder WebBuilder 界面一览 大话 .NET/MONO 跨平台应用 移植 ASP.net 项目到 Mono 的问题报告 激动的一天 MONO - .NET跨平台之亲身经历(一) 使用Updater Application Block实现自动更新例子 Component/Service Oriented Software System Development Thinking Smart Client Case Study Source Code Download from MSDN China 初探YAML 在将WEBPART打包成*.CAB包和*.MSI安装包后,竟然无法将其安装到指定的WSS网站 Microsoft Windows Workflow Foundation 入门:开发人员演练 如何让ClickOnce进行手动更新(含代码) WEB BUILDER中的动态页面生成 flash与asp.net通信(LoadVars类) EsbAOP应用--异常关闭器 EnterpriseServerBase的AOP--EsbAOP实现 [WPF]WPF中如何实现数据与表示分离。(一) —— XAML 翻译:微软是如何输掉API之战(上) 微软是如何输掉API之战(下) Log4Net五步走 Agile Framework功能介绍(1):自动事件连接 基于构件技术的软件工程 - Small Team Practice小型团队项目实践标准 RIA全程追踪-引子 Boo简介及无关的一些牢骚 企业应用之领域模型 企业应用之数据持久化方案 通过Spring.net来使用XCodeFactory生成的数据层! 关于SNS规则引擎的一点想法 Biztalk2004 Decoder的二次开发----春田花花幼稚园的信息化项目 虚拟社会,做尽天下业务(集思广义,以求大同) ORM新实现——Dali 使用Microsoft Systems Management Server 2.0 进行补丁管理 CNN评出25个典型的下一代互联网公司 SQL Server Report Services 的RS数据库移植到另外一台服务器,报“rsReportServerNotActivated”错误 .NET和JAVA的跨平台,我们很期望.但是容易吗 LoadRunner 架构概览 关于Flex、Jrun、ColdFusion、IIS、ASP.Net结合使用的误区!(只说Flex1.5版本) Windows Communication Foundation入门(Part One) office 操作 ADO.NET(OleDb)读取Excel表格时的一个BUG Office with .Net 系列之 ――― 在自己的程序中宿主Office Office with .Net (二) ――― 使用.Net访问Office编程接口 Office with .Net(二)之外传―――“彻底干净的”关闭Office程序 我写的Asp.net操作Excel的一个类库ExcelHelper(源码下载) C#操作Excel,套用模板并对数据进行分页 关于ASP.NET中调用Excel组件不能结束进程的解决方法 用完Excel组件后 如何彻底关闭Excel进程 一个Excel exporter的组件 web 下实现文档的可浏览但不可保存 Excel开发:简化工作表中选定区域的操作 开源代码系列之Office文档读写(Excel/Word) 将Exce嵌入你的.Net程序 实例与经典源码 .NET Pet Shop 4 .NET Pet Shop 4: Migrating an ASP.NET 1.1 Application to 2.0 NET Pet Shop 4 .NET Pet Shop 4 关于练习项目的一些背景 基于.NET 2.0的Petshop4正式推出了 PetShop的系统架构设计 Petshop 4 学习 Agile Framework 介绍Agile Framework Agile Framework架构图 利用db4o做中间层数据缓存 关于数据层设计的取舍思考 基于SOA思想的架构设计 框架设计之Castle&CompositeUI容器融合 架构设计之Smart Client 架构设计之离线处理 DotNetNuke DNN 数据访问策略 【译】 快速正确的制作DNN模块数据库安装脚本 DotNetNuke开始支持ASP.NET2.0 DotNetNuke从入门到进阶(1)怎样写自己的模块 DotNetNuke 代码文档 翻译DNN-Documentation-readme.txt DotNetNuke:如何创建自己的模块(FlashPlayer Module) [DNN模块开发]让模块支持“导入”“导出”功能 [DNN模块开发]DNN模块的层次划分 [DNN模块开发]模块的文件结构及命名方法 [DNN模块开发]如何写模块数据库安装脚本 建立单独的解决方案来开发DNN模块 [DNN模块开发]快速制作DNN模块安装包 [DNN模块开发]快速正确的制作DNN模块数据库安装脚本 [DNN扩展]将Lion.Web.WebHtmlEditor作为DNN的富文本编辑器(初步实现) [DNN扩展]LionHtmlEditorProvider(v1.0.1) [DNN扩展]LionHtmlEditorProvider(v1.0.2) 最后更新:2005-7-25 [DNN模块开发]如何写dnn文件 [DNN模块开发]分类链接模块终于大功告成了 [DNN扩展]LionHtmlEditorProvider(v1.0.3) [DNN模块开发]分类链接模块V1.1 [DNN模块开发]增强型DNN在线调查模块 [DNN学习所得]如何防止页面中的敏感信息被提取 如何修改DotNetNuke(DNN)中服务条款和隐私说明 利用反射工厂模式支持多数据库访问 DNN中搜索引擎原理——如何获取SearchItem DNN中搜索引擎原理——数据库分析篇 [DNN通用控件]TextEditor [DNN学习所得]SolpartMenu一个相当不错的下拉菜单控件 [DNN功能]列表管理添加中国的省份选择下拉框 [DNN学习所得]CBO——简化从数据库读取数据并实例化对象的有效方法 刚开始学习DNN的一点小经验(二) 全新安装dnn3.1.0 DNN安装模板(DotNetNuke.install) [DNN学习所得]让IE也能实现解压缩功能(提供演示源码下载) DNN核心用户控件——实现页面灵活布局的第一步 DNN的数据访问方式——合理运用模式,提高数据访问的灵活性(有修正) 刚开始学习DNN的一点小经验(一) [DNN学习所得]HttpModule到底是个什么东西 DotNetNuke3研究报告一(安装) 初识DotNetNuke(DNN) 关于DotNetNuke(DNN)的语言问题 DotNetNuke3研究报告二(数据访问) [DNN学习所得]HttpModule到底是个什么东西 DNN文件夹说明 [DNN通用控件]DualListControl介绍 DNN3.2.2安装说明 [DNN 3.2.2] DNN开发中的一些细节(2) DNN开发中的一些细节(1) Flash+xml 在 Dnn系统开发中的应用 DNN开发中的一些细节(3) 开源项目 开源CMS Alfresco 1.0 发布 ArgoUML -- 开源UML 建模工具 应用IBatisNet+Castle进行项目的开发 再论IBatisNet + Castle进行项目的开发 NHibernate VS IbatisNet IBatisNet 之 自动生成主关键字 细节决定成败:一个公共类库 BugTracker.NET 汉化手札 ORM开题篇-Gentle.NET之牛刀小试 使用NHIBERNATE写DAL层的流程和牢骚 Mono 开发 (使用.NET技术的你,绝对不能忽略Mono) .NET开源项目链接 MonoRail - 前期准备 MonoRail - 简介 经典案例介绍 广州市工商局商标管理软件 Duwamish 学习Duwamish7的MSDN说明及相关技术策略 Duwamish7学习笔记(七) Duwamish7学习笔记(六) Duwamish7学习笔记(五) Duwamish7学习笔记(四) Duwamish7学习笔记(三) Duwamish7学习笔记(二) Duwamish7学习笔记(-) NHibernate 使用NHibernateContrib中的Nullables NHibernate文档翻译进度&问题收集(持续更新) NHibernate文档翻译 第3章 持久化类(Persistent Classes) NHibernate文档翻译 第5章 集合类(Collections)映射 NHibernate文档翻译 第6章 关联映射 NHibernate文档翻译 第7章 示例: Parent/Child NHibernate 1.0.1 发布了 NHibernate文档翻译完成 NHibernate文档翻译 第8章 NHibernate缓存(NHibernate.Caches) NHibernate文档翻译 第9章 使用AttributesNHibernate.Mapping.Attributes NHibernate文档翻译 第10章 NHibernate.Tool.hbm2net DDL的NHibernate文档 1.快速起步 NHibernate中DateTime,int,bool空值的处理方法 使用NHibernate进行数据持久层开发的最佳实践 基于NHibernate的三层结构应用程序开发初步 NHibernate.Helper Project NHibernate学习手记(1) - 对象的简单CRUD操作 NHibernate学习手记(6) - 实现one2many/many2one的映射 NHibernate快速指南 NHibernate之1——为什么不用DataSet? NHibernate文档翻译 第1章 体系结构 NHibernate文档翻译 第2章 ISessionFactory配置 NHibernate文档翻译 第4章 O/R Mapping基础 由为什么要学习NHibernate说开去 NHibernate 使用手迹(1st) NHibernate 使用手迹(2nd) NHibernate使用手迹(3rd) 发布:偶写的NHibernate代码生成器 面向对象设计,ORM,NHIBERNATE杂谈(有感) Snake.Net Snake.Net 框架中的ORM(一) (Version 0.2 Beta) Snake.Net 框架中的ORM(二) (Version 0.2 Beta) Snake.Net 框架中的ORM(三) (Version 0.2 Beta) Snake.Net网络通讯模块 序 Snake.Net网络通讯模块 - SMTP(一) Snake.Net网络通讯模块 - POP3(二) Snake.Net网络通讯模块 - IMAP4(三) Snake.Net网络通讯模块 - FTP(四) Snake.Net 框架中的ORM(四) (Version 0.2 Beta) Snake.Net 框架中的ORM(五) (Version 0.2 Beta) QPG平台 编写容易被维护的代码(1) QPG--基本用法介绍 技术篇(1)--QPG容器的基本用法 技术篇(2)--QPG容器的高级用法 技术篇(3)--QPG界面分解方法介绍 技术篇(4)--基于QPG容器的服务扩展 技术篇(5)--QPG数据处理方法 技术篇(6)--大话AOP 实践篇(1)--QPG之“打狗棍法” 思想篇(3)—IT运用模式的轮回 思想篇(2)--归纳和演绎能力也很重要 思想篇(1)--企业需要什么样的人才? 思想篇(完)----跟往事干杯 思想篇(4)---- 实战解析(完)----总结 Enterprise Library Enterprise Library2.0(1):Data Access Application Block学习 Enterprise Library2.0(2):Logging Application Block学习 Enterprise Library2.0中加密数据库连接字符串 Enterprise Library——企业库配置管理应用程序块 Enterprise Library——企业库缓存应用程序块 Enterprise Library Step By Step系列(一):配置应用程序块——入门篇 Enterprise Library Step By Step系列(二):配置应用程序块——进阶篇 Enterprise Library Step By Step系列(三):数据访问程序块——入门篇 Enterprise Library Step By Step系列(四):数据访问程序块——进阶篇 Enterprise Library Step By Step系列(五):安全应用程序块——入门篇 Enterprise Library Step By Step系列(六):安全应用程序块——进阶篇 Enterprise Library Step By Step系列(七):日志和监测应用程序块——入门篇 terprise Library Step By Step系列(八):日志和监测应用程序块——进阶篇 Enterprise Library Step By Step系列(九):缓冲应用程序块——入门篇 Enterprise Library Step By Step系列(十):缓冲应用程序块——进阶篇 Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇 Enterprise Library Step By Step系列(十二):异常处理应用程序块——进阶篇 Enterprise Library Step By Step系列(十三):加密应用程序块——入门篇 Enterprise Library Step By Step系列(十四):创建基于消息队列(MSMQ)的异步日志 Enterprise Library Step By Step系列(十五):配置应用程序块——设计篇 Enterprise Library Step By Step系列(十六):使用AppSetting Application Block Composite UI Application Block 学习笔记之Commands Composite UI Application Block学习笔记之Event Broker 使用Updater Application Block实现自动更新例子 使用企业程序库的两点体会 Composite UI Application Block学习笔记之Smart Part 关于在服务器端使用Microsoft Exception Management Application Block Logging application block of Enterprise Library 2.0 TimeStamp of the Logging Application Block in EntLib 2.0 对 Updater Application Block v2的表面行为分析及问题 (一) HTTP Downloader for Updater Application Block 2 ObjectBuilder内功心法之中国特色 一个从网页中提取天气预报信息的程序(附源码) Ilungasoft Framework: 使用视图处理继承关系、Tree结构实体关系映射示例[源码] DataQuicker2快速入门-----存储过程篇 一个ASP.NET2.0的小项目-BLOG Ilungasoft Framework中处理有关联关系的实体 Community Server2.0专注细节一 邮件提醒按钮实现(上) DataQuicker(ORM)中的缓存机制 数据框架DataQuicker2第一个版本开源下载. SVG + Javascript + ASP.NET + WebService开发楼宇管理系统 - 杂记3(完) 新的数据框架DataQuicker2 Walk through Message----春田花花幼稚园的信息化项目(II) SVG + Javascript + ASP.NET + WebSe
Java开发技术大全 电子版 第1篇Java基础知识入门. 第1章Java的开发运行环境2 1.1Java的运行环境与虚拟机2 1.2Java的开发环境4 1.2.1JDK的安装4 1.2.2如何设置系统环境变量6 1.2.3编译命令的使用8 1.2.4解释执行命令的使用10 1.2.5UltraEdit的使用11 1.3一个简单的Java应用程序14 1.4一个简单的Java小程序16 1.5本章小结18 第2章Java语言基础19 2.1Java语言的特点19 2.2Java程序的构成21 2.3数据类 型23 2.3.1基本数据类型23 2.3.2常量25 2.3.3变量26 2.3.4整型数据27 .2.3.5浮点型数据29 2.3.6字符型数据30 2.3.7布尔型数据32 2.3.8变量赋初值33 2.3.9变量的作用域34 2.3.10数据类型转换34 2.4运算符与表达式37 2.4.1算术运算符和算术表达式38 2.4.2关系运算符和关系表达式43 2.4.3逻辑运算符和逻辑表达式44 2.4.4条件运算符和条件表达式48 2.4.5位运算符和位运算表达式50 2.4.6赋值运算符和赋值表达式53 2.4.7表达式的求值顺序55 2.5流程控制语句58 2.5.1三种基本控制结构58 2.5.2表达式语句和空语句59 2.5.3块语句60 2.5.4if~else分支语句61 2.5.5多路分支switch~case语句69 2.5.6当型循环while语句71 2.5.7直到型循环do~while语句72 2.5.8当型循环for语句74 2.5.9循环的嵌套78 2.5.10跳转语句break80 2.5.11跳转语句continue82 2.6程序文本的风格84 2.6.1注释84 2.6.2程序的格式编排87 2.7基础语法实战演习88 2.7.1判断闰年88 2.7.2求最大公约数和最小公倍数89 2.7.3Fibonacci数列90 2.7.4逆向输出数字91 2.7.5求水仙花数92 2.7.6输出图形93 2.7.7输出九九口诀表94 2.8本章小结95 第2篇Java面向对象编程 第3章对象和类98 3.1面向对象的基本概念98 3.1.1对象98 3.1.2类99 3.1.3消息101 3.1.4面向对象的4个基本特征101 3.2类与对象104 3.2.1类的基本结构104 3.2.2类的声明104 3.2.3创建类体105 3.2.4对象的生命周期106 3.2.5对象的创建106 3.2.6对象的使用108 3.2.7对象的释放和垃圾收集机制108 3.3成员变量的定义与使用109 3.3.1成员变量的定义109 3.3.2成员变量的访问权限110 3.3.3实例成员变量和静态成员变量114 3.4方法的定义和实现116 3.4.1方法的声明117 3.4.2创建方法体与return语句117 3.4.3局部变量和成员变量的区别119 3.4.4方法的访问权限121 3.5方法的调用121 3.5.1方法调用的形式121 3.5.2方法调用的参数123 3.5.3隐含参数this127 3.6构造方法128 3.6.1无参数构造方法的定义和使用129 3.6.2带参数构造方法的定义和使用131 3.6.3this关键字和构造方法的调用132 3.7静态方法133 3.7.1静态方法的声明和定义134 3.7.2静态方法和实例方法的区别134 3.7.3静态代码块136 3.7.4再论静态成员变量137 3.8main()方法和命令行参数139 3.9结束方法141 3.10本地方法141 3.11本章小结144 第4章继承与多态145 4.1继承的基本原理145 4.2子类对父类的继承146 4.3属性隐藏和方法的覆盖148 4.3.1属性的隐藏148 4.3.2方法的覆盖151 4.4构造方法的继承154 4.5super的使用156 4.5.1用super引用父类的成员156 4.5.2使用super调用父类的构造方法157 4.6继承的内部处理158 4.7多态的基本概念159 4.8重载159 4.8.1普通方法的重载160 4.8.2构造方法的重载161 4.8.3重载的解析163 4.8.4重载与覆盖的区别165 4.9运行时多态165 4.9.1实例方法的运行时多态165 4.9.2成员变量运行时的表现167 4.9.3静态方法运行时
第Ⅰ部分 使 用 Eclipse 第1章 引言 3 1.1 Eclipse作为应用程序开发 工具的宿主...... 4 1.2 不仅仅是工具的宿主,Eclipse 还作为客户端应用程序的 宿主...... 5 1.3 什么是Eclipse?...... 6 1.3.1 工具与应用程序的集成平台..... 6 1.3.2 Java开发环境..... 7 1.3.3 开源社区..... 8 1.3.4 Eclipse基金会的目标..... 9 1.3.5 作为用户和捐献者(contributor)参与社区..... 10 1.3.6 Eclipse许可证..... 10 1.4 获取与安装Eclipse.. 11 1.5 本章小结...... 11 1.6 参考文献...... 12 第2章 Eclipse入门 13 2.1 第一步...... 14 2.1.1 提示没有任何JRE可用的对话框..... 14 2.1.2 创建您的第一个项目..... 15 2.1.3 Eclipse的外观:编辑器、视图和透视图..... 16 2.1.4 用户界面概述..... 18 2.1.5 首选项介绍..... 19 2.2 基本的Eclipse使用...... 20 2.2.1 在Eclipse中工作..... 21 2.2.2 了解Eclipse用户界面..... 22 2.2.3 任务、书签和问题..... 28 2.2.4 后台处理..... 29 2.2.5 Eclipse的帮助功能..... 30 2.3 资源管理...... 36 2.3.1 工作空间..... 36 2.3.2 有关项目的更多内容..... 42 2.3.3 资源的导入和导出..... 44 2.3.4 资源移动..... 46 2.3.5 文本编辑器..... 47 2.3.6 快速差别—— 实时变化通知..... 48 2.3.7 文件编码..... 48 2.3.8 打印..... 49 2.4 Eclipse定制...... 49 2.4.1 透视图..... 49 2.4.2 渐进显示..... 51 2.4.3 在Eclipse中运行多窗口和多工作空间..... 51 2.4.4 改变键盘快捷键..... 54 2.4.5 定制JRE... 55 2.4.6 在Eclipse中使用其他计算机程序..... 55 2.4.7 性能..... 60 2.5 练习概述...... 61 2.6 本章小结...... 61 2.7 参考文献...... 62 第3章 使用Java开发工具 63 3.1 JDT入门...... 64 3.1.1 JDT用户界面概述..... 64 3.1.2 JDT基础..... 65 3.1.3 使用JDT视图..... 68 3.1.4 搜索..... 69 3.2 编写Java代码...... 71 3.2.1 Java编辑器概述..... 71 3.2.2 键入辅助..... 76 3.2.3 代码辅助..... 77 3.2.4 代码生成..... 80 3.2.5 导航Java错误和警告..... 81 3.2.6 使用快速修正功能来修改Java错误..... 82 3.2.7 重构..... 83 3.2.8 使用代码模板..... 86 3.2.9 字符串外部化..... 87 3.2.10 生成Javadoc.. 88 3.2.11 在不同的JRE下编写 Java代码..... 90 3.2.12 编译代码..... 91 3.2.13 Eclipse与Ant的集成..... 92 3.3 Java元素的使用...... 94 3.3.1 文件夹..... 94 3.3.2 Java项目..... 94 3.3.3 类和接口..... 98 3.3.4 导入Java元素..... 98 3.3.5 Java元素的本地历史记录..... 98 3.4 调整JDT性能...... 99 3.5 JDT视图和首选项的 更多内容...... 100 3.5.1 视图内容过滤..... 100 3.5.2 Package Explorer视图..... 100 3.5.3 Hierarchy视图..... 101 3.5.4 Call Hierarchy视图..... 102 3.5.5 Outline视图..... 103 3.5.6 Problems视图..... 103 3.5.7 Search视图..... 103 3.5.8 Java Type Hierarchy透视图..... 103 3.5.9 Java Browsing透视图..... 104 3.6 练习概述...... 105 3.7 本章小结...... 106 3.8 参考文献...... 106 第4章 Java程序的运行与调试 107 4.1 运行Java代码...... 108 4.1.1 使用运行和调试命令..... 108 4.1.2 管理启动配置..... 109 4.1.3 对代码片断编辑测试窗页面中的表达式进行求值..... 111 4.2 调试...... 112 4.2.1 基本的调试活动..... 113 4.2.2 表达式求值..... 115 4.2.3 修改变量和字段的值..... 116 4.2.4 使用Java编辑器进行调试..... 116 4.2.5 对当前所调试的程序进行操作..... 117 4.2.6 Console视图中的程序输出..... 119 4.2.7 有关断点的更多知识..... 119 4.2.8 Java异常断点..... 121 4.2.9 将程序与源代码相关联..... 123 4.2.10 热代码替换..... 123 4.3 远程调试...... 124 4.4 练习概述...... 125 4.5 本章小结...... 126 4.6 参考文献...... 127 第5章 协同使用Eclipse 129 5.1 Eclipse对CVS的支持...... 130 5.2 Eclipse的通用小组支持...... 131 5.2.1 Eclipse小组支持的基本原则..... 132 5.2.2 配置小组支持..... 132 5.3 为初学者准备的CVS概述...... 133 5.3.1 CVS的一些重要设计原则..... 133 5.3.2 修订版:任何东西都不会被丢失..... 134 5.3.3 更新:跟上小组的进度..... 134 5.3.4 提交:共享您的资源..... 134 5.3.5 版本设置:捕获资源的当前状态..... 135 5.3.6 分支和合并:支持并行开发..... 135 5.3.7 在分支和合并时对于修订版本号发生了什么..... 136 5.3.8 使用CVS管理二进制文件..... 136 5.4 Eclipse中的CVS用户界面...... 136 5.4.1 CVS Repository Exploring透视图:资源库主页..... 137 5.4.2 CVS Repositories视图..... 137 5.4.3 CVS Annotate视图..... 141 5.4.4 CVS Resource History视图..... 141 5.4.5 查看CVS命令..... 143 5.4.6 CVS是如何管理工作空间中项目的..... 143 5.4.7 在Team快捷菜单中可获得的CVS操作..... 144 5.4.8 Team Synchronizing透视图和Synchronize向导..... 146 5.4.9 处理同一文件的并发更新..... 147 5.4.10 使用CVS的Watch/Edit 支持以避免对同一文件的 并行更新..... 148 5.4.11 恢复被删除的文件..... 150 5.4.12 其他CVS用户界面元素.... 150 5.5 特殊情况及其处理...... 151 5.5.1 对项目资源进行重命名、移动和删除..... 151 5.5.2 取消修改:使用替换和比较操作..... 152 5.5.3 通过建立分支来进行版本维护和新版本开发..... 152 5.6 其他功能...... 152 5.6.1 编辑器中的快速差别功能对CVS的支持..... 153 5.6.2 补丁程序:快速而又简单地共享更改..... 153 5.6.3 项目集:加快新工作空间..... 153 5.6.4 断开项目与CVS的连接或为项目重分派一个CVS资源库..... 154 5.7 练习概述...... 154 5.8 本章小结...... 155 5.9 参考文献...... 155 第6章 Eclipse环境管理 157 6.1 Eclipse安装实例概览...... 158 6.1.1 Eclipse的目录内容..... 158 6.1.2 Eclipse的平台配置..... 159 6.1.3 features目录..... 160 6.1.4 plugins目录..... 161 6.2 理解运行时配置...... 161 6.2.1 用户界面中的功能部件详细信息..... 162 6.2.2 配置详细信息..... 163 6.3 协调首选项设置...... 164 6.3.1 同步首选项设置..... 164 6.3.2 定义新的首选项默认设置..... 165 6.4 理解配置管理的基本原理...... 167 6.4.1 Update Manager介绍..... 168 6.4.2 配置基础..... 168 6.4.3 安装位置类型..... 169 6.4.4 Update Manager的API命令..... 170 6.5 使用Update Manager.. 170 6.5.1 安装位置的添加和删除..... 171 6.5.2 功能部件的禁用和启用..... 171 6.5.3 从更新站点安装功能部件..... 172 6.5.4 将服务应用于功能部件..... 173 6.5.5 相关练习..... 173 6.6 配置的管理...... 174 6.6.1 理解默认配置处理..... 174 6.6.2 使用备用配置..... 175 6.6.3 在工作空间和配置之间强制建立一对一关系..... 177 6.7 本章小结...... 178 6.8 参考文献...... 178 第Ⅱ部分 扩展Eclipse基础 第7章 扩展Eclipse,亦利亦弊 181 7.1 对扩展Eclipse感到兴奋吗? 您肯定会的!...... 181 7.2 一个简单而实用的示例...... 182 7.3 短暂接触“Hello, World”...... 183 7.4 提出恰当的问题比知道答案 更重要...... 185 7.4.1 怎样把扩展显示在用户界面中,显示在哪里..... 186 7.4.2 扩展用户界面的常用方法.... 186 7.4.3 用户界面的扩展怎样感知某些事件(如用户的选择)?..... 189 7.4.4 怎样扩展对象(如显示在Outline视图中的对象). 193 7.4.5 不同视图中显示的相同对象之间的关系..... 194 7.4.6 怎样通过程序更改JDT模型..... 195 7.5 接下来我们学习哪些内容...... 197 第8章 Eclipse体系结构概述 199 8.1 历史和现状...... 200 8.2 体系结构的最高优先级: 可扩展性与集成...... 201 8.3 Eclipse作为IDE平台和作为 胖客户端应用程序...... 203 8.4 Eclipse Platform Runtime.. 204 8.5 用户界面架构...... 205 8.5.1 标准小部件工具箱..... 205 8.5.2 JFace用户界面架构..... 206 8.6 Workbench架构...... 208 8.6.1 存储持久性值..... 209 8.6.2 使用胖客户端平台创建应用程序..... 209 8.6.3 使用并发性架构维持对用户的快速响应..... 210 8.6.4 通过功能组管理用户界面..... 210 8.6.5 扩展Workbench集成开发环境..... 211 8.7 本章小结...... 212 8.8 参考文献...... 212 第9章 插件开发入门 213 9.1 插件入门...... 214 9.1.1 集成情景..... 215 9.1.2 发布自己的插件..... 217 9.2 扩展和扩展点入门...... 217 9.3 实现插件的基本步骤...... 220 9.3.1 声明自己的插件清单..... 222 9.3.2 定义自己的插件类..... 225 9.3.3 安装自己的插件..... 226 9.4 使用插件开发环境...... 227 9.4.1 PDE视图和编辑器..... 227 9.4.2 管理运行时环境和开发环境..... 230 9.4.3 创建并运行插件..... 231 9.5 练习概述...... 232 9.6 本章小结...... 233 9.7 参考文献...... 233 第10章 使用胖客户端平台创建 应用程序..... 235 10.1 在RCP上构建应用程序的 理由...... 235 10.1.1 给企业带来的好处..... 235 10.1.2 给软件开发者带来的 好处..... 236 10.1.3 给用户带来的好处..... 236 10.2 复习Eclipse体系结构...... 237 10.2.1 Eclipse应用程序类型..... 240 10.2.2 Eclipse的运行..... 241 10.2.3 定义一个Eclipse应用 程序..... 242 10.3 重用Eclipse的时机...... 243 10.3.1 非UI的插件组件..... 243 10.3.2 SWT图形用户界面..... 244 10.3.3 基于添加项的Workbench 用户界面..... 245 10.3.4 IDE扩展..... 245 10.4 实现自己的Workbench... 246 10.4.1 可以在Workbench中 配置什么..... 249 10.4.2 启动并运行自己的应用 程序..... 250 10.4.3 配置自己的应用程序..... 250 10.4.4 支持来自其他插件的UI 添加项..... 251 10.5 练习概述...... 252 10.6 本章小结...... 253 10.7 参考文献...... 253 第11章 创建扩展点:其他人怎样 扩展您的插件..... 255 11.1 扩展点和扩展之间的关系...... 255 11.2 查看激活的插件、扩展以及扩展点的正式列表...... 257 11.3 怎样定义扩展点...... 258 11.3.1 选择需要让其他人扩展 或配置的现有代码..... 258 11.3.2 声明扩展点..... 260 11.3.3 为预期的行为定义 接口..... 261 11.3.4 处理用于扩展点的 注册表项..... 264 11.3.5 通过以前定义的接口 契约调用适当的方法..... 265 11.4 处理动态插件...... 266 11.5 怎样启用基于模式的New Extension向导...... 267 11.5.1 为什么要定义一个 模式..... 268 11.5.2 模式编辑器..... 268 11.6 示例概述...... 269 11.7 本章小结...... 269 11.8 参考文献...... 269 第12章 插件开发的高级专题 271 12.1 从Eclipse 2.1移植插件...... 271 12.2 插件类加载器...... 272 12.3 运行时发现以及延迟加载...... 273 12.4 强制进行前期插件激活...... 274 12.5 插件粒度...... 275 12.6 插件片断...... 275 12.6.1 片断用作语言包..... 276 12.6.2 片断作为专用于某个 平台的内容..... 276 12.7 本章小结...... 277 12.8 参考文献...... 277 第13章 定义功能部件和产品 279 13.1 功能部件...... 279 13.1.1 功能部件的概念..... 279 13.1.2 功能部件的定义..... 281 13.1.3 烙印功能部件的商标..... 285 13.1.4 安装功能部件..... 287 13.2 产品...... 292 13.2.1 创建产品定义..... 292 13.2.2 定义产品介绍的内容..... 293 13.2.3 在Eclipse Platform上 构建自己的产品..... 294 13.3 练习概述...... 295 13.4 本章小结...... 295 13.5 参考文献...... 296 第Ⅲ部分 扩展Eclipse Workbench 第14章 SWT:一个轻便但出色的 小部件体系 299 14.1 SWT应用程序的基本结构...... 300 14.2 常见的SWT小部件...... 302 14.3 对事件作出响应...... 304 14.4 怎样使用布局管理器来 布置SWT小部件...... 307 14.4.1 填充布局..... 310 14.4.2 行布局..... 310 14.4.3 栅格布局..... 312 14.4.4 窗体布局..... 315 14.4.5 栈布局..... 317 14.4.6 布局管理器总结..... 317 14.5 错误处理...... 317 14.6 小部件有特殊的销毁需求...... 318 14.7 使用线程来分离UI和非UI行为...... 320 14.8 SWT包概述...... 322 14.9 SWT对Swing的支持...... 323 14.10 Eclipse Forms.. 323 14.11 示例概述...... 324 14.12 本章小结...... 324 14.13 参考文献...... 325 第15章 JFace查看器 327 15.1 查看器基础...... 327 15.1.1 查看器的概念..... 327 15.1.2 查看器的外观..... 328 15.1.3 查看器的类型..... 328 15.1.4 查看器的用法..... 329 15.1.5 使用查看器的原因..... 329 15.2 查看器架构...... 330 15.2.1 类结构..... 330 15.2.2 内容提供者、内容查看 器与标签提供者之间 的关系..... 331 15.3 创建基本的内容查看器的配置...... 332 15.3.1 确定输入..... 332 15.3.2 创建查看器..... 333 15.3.3 创建内容提供者..... 334 15.3.4 创建标签提供者..... 334 15.3.5 把查看器与内容提供者、 标签提供者连接起来..... 336 15.3.6 定义到查看器的输入 内容..... 336 15.3.7 实现模型-查看器同步..... 337 15.4 控制在结构化查看器中显示的内容...... 341 15.4.1 过滤查看器的内容..... 342 15.4.2 对查看器内容进行 排序..... 343 15.5 与查看器对象相互作用...... 345 15.5.1 处理查看器中用户选中 的对象..... 346 15.5.2 自由地创建查看器弹出 菜单操作..... 347 15.5.3 添加查看器操作..... 348 15.6 使用其他类型的查看器...... 349 15.6.1 表查看器..... 350 15.6.2 树查看器..... 351 15.6.3 表树查看器..... 352 15.6.4 复选框查看器..... 352 15.7 Workbench集成的高级 选项...... 352 15.7.1 增加对Properties对话框 的支持..... 353 15.7.2 在查看器中为对象添加 标签修饰..... 354 15.8 示例概述...... 356 15.9 本章小结...... 356 15.10 参考文献...... 357 第16章 对话框和向导 359 16.1 对话框——非Workbench 部分的用户界面...... 359 16.1.1 引用点——用户界面 架构..... 360 16.1.2 用于对话框和向导的 Workbench扩展点..... 360 16.1.3 常见的可重用对话框..... 363 16.2 向Preferences对话框中添加 首选项页面...... 364 16.2.1 定义首选项页面扩展..... 365 16.2.2 实现首选项页面..... 366 16.2.3 定义首选项页面的用户 界面..... 367 16.2.4 如何向首选项页面添加 首选项值逻辑..... 368 16.2.5 构建字段编辑器首 选项页面..... 379 16.3 向Properties对话框中添加属性页面...... 373 16.3.1 定义属性页面扩展..... 374 16.3.2 实现属性页面..... 376 16.3.3 定义属性页面的用户 界面..... 377 16.3.4 添加资源属性的访问 逻辑..... 378 16.3.5 保存那些特定于资源 类型的属性..... 370 16.3.6 实现自己的属性 对话框..... 380 16.4 添加向导...... 380 16.4.1 定义向导扩展..... 381 16.4.2 实现向导..... 383 16.4.3 实现向导页面..... 384 16.4.4 定制向导..... 385 16.4.5 控制向导页面的进展..... 387 16.4.6 延迟创建向导页面的 用户界面..... 388 16.4.7 可重用的专用向导 页面..... 389 16.5 直接打开向导对话框来处理向导...... 391 16.6 示例概述...... 392 16.7 本章小结...... 393 16.8 参考文献...... 393 第17章 对话框设置、首选项及 用户设置..... 395 17.1 对话框设置、首选项值以及 用户设置选项概述...... 395 17.1.1 对话框设置..... 395 17.1.2 首选项值..... 396 17.1.3 用户设置..... 396 17.2 对话框设置中的存储值...... 396 17.2.1 管理对话框设置..... 397 17.2.2 对话框设置的用法..... 398 17.3 存储插件的首选项值...... 398 17.3.1 管理首选项值..... 399 17.3.2 设置默认的首选项值..... 400 17.3.3 对首选项值的更改作出 反应..... 400 17.4 使用用户设置管理作用域内的属性值...... 401 17.4.1 作用域、节点和 存储值..... 401 17.4.2 作用域的层次结构..... 402 17.4.3 访问用户设置..... 403 17.4.4 更改通知..... 405 17.5 示例概述...... 405 17.6 本章小结...... 406 17.7 参考文献...... 406 第18章 视图 407 18.1 视图:通用Workbench部分...... 407 18.1.1 行为..... 408 18.1.2 体系结构..... 409 18.1.3 功能..... 409 18.2 视图的实现...... 410 18.2.1 设计视图..... 410 18.2.2 声明视图扩展..... 411 18.2.3 创建视图类..... 412 18.2.4 定义用户界面..... 413 18.2.5 添加视图操作..... 414 18.2.6 保存和恢复视图的 状态..... 416 18.2.7 打开一个视图的 第二个实例..... 416 18.2.8 支持Show In请求..... 417 18.2.9 回顾视图的实现..... 418 18.3 支持操作添加项...... 419 18.3.1 创建添加项的目标菜单 占位符..... 419 18.3.2 把快捷菜单注册到 Workbench中..... 420 18.4 与其他Workbench组件交互...... 421 18.4.1 共享并侦听Workbench 部分被选中的内容..... 422 18.4.2 提供显示在Properties 视图中的内容..... 424 18.4.3 支持全局操作..... 429 18.5 示例概述...... 430 18.6 本章小结...... 430 18.7 参考文献...... 431 第19章 编辑器 433 19.1 编辑器的行为和体系结构...... 433 19.2 基本的实现步骤...... 434 19.2.1 设计编辑器的外观..... 435 19.2.2 为编辑器的输入创建 一个New向导(可选). 435 19.2.3 声明编辑器扩展..... 436 19.2.4 创建编辑器类..... 437 19.2.5 使用编辑器输入实例化 模型..... 437 19.2.6 定义用户界面..... 439 19.2.7 处理用户对编辑器 输入的修改..... 439 19.2.8 处理对编辑器输入 的保存..... 439 19.2.9 把查看器与模型关联 起来..... 440 19.2.10 使模型和编辑器同步..... 440 19.2.11 处理用户所选的内容..... 441 19.2.12 定义编辑器的操作..... 441 19.3 除了基本实现步骤之外的其他内容...... 444 19.3.1 重用胖客户端平台和 IDEWorkbench的专用 编辑器..... 445 19.3.2 连接编辑器和Outline 视图..... 446 19.3.3 在编辑器和视图之间 导航..... 447 19.4 示例概述...... 448 19.5 本章小结...... 449 19.6 参考文献...... 449 第20章 透视图 451 20.1 创建透视图...... 451 20.2 使用perspectiveExtensions扩展点...... 453 20.3 示例概述...... 454 20.4 本章小结...... 455 20.5 参考文献...... 455 第21章 操作添加项:集成捷径 457 21.1 操作添加项扩展点...... 458 21.2 操作添加项基础...... 459 21.2.1 操作添加项API. 459 21.2.2 在插件清单文件中指定 添加项..... 461 21.2.3 在菜单和工具栏中指定 操作..... 463 21.2.4 使用过滤器来精确定义 您的操作出现的位置..... 465 21.2.5 被选中内容的类 过滤器..... 466 21.2.6 使用操作表达式创建 精细的过滤器..... 466 21.3 向Workbench菜单栏和 工具栏添加操作...... 469 21.4 向视图的菜单和工具栏 添加操作...... 474 21.5 向编辑器的菜单和工具栏 添加操作...... 478 21.6 向视图和编辑器添加快捷 菜单...... 481 21.6.1 向视图添加快捷菜单..... 481 21.6.2 向编辑器添加快捷 菜单..... 482 21.6.3 向视图或编辑器中被选中 的对象添加快捷菜单..... 483 21.7 向操作指派加速键...... 486 21.8 示例概述...... 489 21.9 本章小结...... 489 21.10 参考文献...... 490 第22章 提供帮助 491 22.1 集成您的联机文档...... 492 22.1 1 把帮助内容创建为 HTML内容..... 493 22.1.2 声明帮助扩展..... 493 22.1.3 创建目录文件..... 494 22.1.4 Eclipse的联机文档..... 496 22.2 创建上下文相关的帮助...... 497 22.2.1 声明帮助的上下文 扩展..... 497 22.2.2 定义弹出信息的内容..... 497 22.2.3 把弹出信息与UI上下文 关联起来..... 498 22.3 运行独立的帮助 Infocenter.. 500 22.4 定制Help系统...... 500 22.5 示例概述...... 501 22.6 本章小结...... 501 22.7 参考文献...... 501 第Ⅳ部分 扩展Eclipse IDE 第23章 工作空间资源编程 505 23.1 资源的概念...... 505 23.1.1 物理视图..... 506 23.1.2 逻辑视图..... 507 23.1.3 资源模型与文件系统 的交互..... 508 23.1.4 Navigator视图中资源 的可见性..... 509 23.2 工作空间API.. 510 23.2.1 工作空间和工作空间 根目录..... 510 23.2.2 资源容器..... 512 23.2.3 工作空间资源句柄..... 513 23.2.4 项目..... 514 23.2.5 项目描述..... 515 23.2.6 资源..... 517 23.2.7 路径..... 518 23.2.8 文件夹和文件..... 520 23.2.9 链接资源..... 521 23.2.10 访问资源树中的资源..... 522 23.3 资源属性...... 524 23.3.1 会话属性..... 524 23.3.2 持久属性..... 525 23.4 处理工作空间资源更改 事件...... 526 23.4.1 使用工作空间API 跟踪更改..... 526 23.4.2 添加资源更改侦听器..... 526 23.4.3 资源更改事件触发 的时序..... 529 23.4.4 访问资源变化..... 530 23.4.5 资源变化内容..... 533 23.5 资源更改事件管理...... 534 23.5.1 使用Iworkspace Runnable.. 534 23.5.2 使用WorkspaceJob类..... 535 23.5.3 使用工作空间调度 规则工厂..... 536 23.6 使用工作空间保存事件来保存关键数据...... 537 23.6.1 保存事件——何种与 何时..... 537 23.6.2 保存参与者API. 537 23.7 示例概述...... 539 23.8 本章小结...... 540 23.9 参考文献...... 540 第24章 利用性质和构建器管理 资源 541 24.1 定制项目的处理行为...... 541 24.1.1 如何使用性质和 构建器..... 541 24.1.2 扩展工作空间资源 处理架构..... 542 24.2 定义和实现性质...... 542 24.2.1 创建性质以支持项目 配置..... 542 24.2.2 将性质添加到项目中..... 544 24.2.3 管理性质-构建器关系..... 545 24.2.4 使用定制图像标识您 的项目性质..... 546 24.3 定义和实现增量项目 构建器...... 547 24.3.1 构建器基础..... 547 24.3.2 构建器调用..... 548 24.3.3 判断何时需要使用 构建器..... 549 24.3.4 构建器的定义和实现..... 550 24.4 示例概述...... 553 24.5 本章小结...... 554 24.6 参考文献...... 554 第25章 使用标记对资源进行标识 555 25.1 使用标记...... 555 25.1.1 创建定制的资源标记..... 557 25.1.2 设置标记属性..... 558 25.1.3 在标记创建和更新的 过程中限制资源更改 事件..... 558 25.2 添加新的标记类型...... 559 25.2.1 定义标记超类型..... 559 25.2.2 重用超类型属性..... 561 25.2.3 控制标记持久性..... 561 25.2.4 向文本标记添加定制 图像..... 561 25.3 用标记解析生成器和帮助支持生成器扩展标记...... 562 25.3.1 添加标记解析..... 563 25.3.2 添加标记帮助..... 564 25.4 示例概述...... 565 25.5 本章小结...... 566 25.6 参考文献...... 566 第26章 使用JFace Text构建定制 的文本编辑器 567 26.1 标准的文本编辑器功能...... 568 26.1.1 文本编辑和查看..... 568 26.1.2 标准菜单和工具栏项..... 568 26.1.3 标准的标记表示..... 569 26.2 编辑器配置:定制点...... 570 26.2.1 内容辅助..... 570 26.2.2 语法突出显示..... 571 26.2.3 内容格式化..... 571 26.2.4 各种各样的定制..... 572 26.3 文本编辑器的实现细节...... 572 26.3.1 选择编辑器的起点..... 573 26.3.2 TextViewer类..... 573 26.3.3 AbstractDecoratedText Editor类的关系..... 574 26.3.4 文档的来源..... 575 26.3.5 模型-视图-控制器 关系..... 576 26.3.6 对文档进行分区..... 577 26.3.7 SourceViewer Configuration类..... 578 26.4 示例概述...... 578 26.5 本章小结...... 579 26.6 参考文献...... 579 第27章 扩展Java开发工具 581 27.1 JDT概述及其作用...... 581 27.2 Java模型...... 582 27.3 访问可重用的JDT功能...... 584 27.3.1 JavaCore类..... 584 27.3.2 JavaUI类..... 588 27.3.3 ToolFactory类..... 589 27.3.4 SearchEngine类..... 590 27.4 编译Java源代码...... 590 27.5 分析Java源代码...... 590 27.5.1 JDT Abstract Syntax Tree.. 591 27.5.2 细粒度解析Java 源代码..... 594 27.6 操作Java源代码...... 598 27.6.1 使用IsourceManipulation 进行简单源代码操作..... 598 27.6.2 使用IBuffer进行稍复杂 的源代码操作..... 598 27.6.3 使用AST重写进行复杂 的源代码操作..... 601 27.7 JDT在何处扩展了Eclipse.. 604 27.8 扩展JDT用户界面...... 605 27.8.1 添加视图操作..... 605 27.8.2 添加编辑器操作..... 607 27.8.3 向Java元素快捷菜单 添加操作..... 608 27.8.4 向特定视图或者编辑器 快捷菜单添加操作..... 608 27.8.5 添加全局操作..... 609 27.8.6 在自己的视图中显示 JDT元素..... 609 27.8.7 重用公共的JDT选择 对话框..... 609 27.9 示例概述...... 610 27.10 本章小结...... 610 27.11 参考文献...... 610 第Ⅴ部分 可扩展性专题 第28章 可服务性 613 28.1 插件诊断信息:系统和 配置信息...... 614 28.2 Eclipse Status对象:状态收 集器...... 614 28.3 异常处理:错误检测...... 616 28.4 错误对话框:在错误消息中 提供详细的状态信息...... 616 28.5 运行时跟踪:一个运行时 诊断工具...... 618 28.6 在产品环境中使用跟踪...... 620 28.7 诊断信息:一个内容丰富的 错误日志...... 620 28.8 错误记录:把错误写入 Workbench错误日志中...... 621 28.9 示例概述...... 622 28.10 本章小结...... 622 28.11 参考文献...... 622 第29章 使用作业实现响应性和 并发性..... 623 29.1 并发性架构...... 623 29.1.1 在架构中谁完成了什么 工作?..... 624 29.1.2 作业的基础..... 625 29.1.3 作业的类型..... 628 29.1.4 作业管理器..... 629 29.1.5 作业在用户界面中的 可见性..... 630 29.1.6 冲突管理..... 631 29.1.7 回顾并发性架构..... 632 29.2 使用作业...... 632 29.2.1 创建作业..... 633 29.2.2 定义作业的属性..... 634 29.2.3 调度作业..... 634 29.2.4 使用sleep请求来暂停 一个作业..... 635 29.2.5 等待作业的完成..... 635 29.2.6 侦听作业更改事件..... 636 29.2.7 请求撤销作业..... 637 29.3 用户交互选项...... 638 29.3.1 使用特定于作业的 图像..... 638 29.3.2 使用活动进度报告的 方式运行作业..... 639 29.3.3 Workbench部分用于作业 处理的支持技术..... 639 29.3.4 提供作业的完成反馈..... 640 29.4 作业的冲突管理选项...... 642 29.4.1 使用作业管理器锁..... 642 29.4.2 使用调度规则..... 643 29.4.3 工作空间资源对调度 规则的支持..... 644 29.4.4 定义调度规则..... 645 29.5 示例概述...... 646 29.6 本章小结...... 646 29.7 参考文献...... 646 第30章 使用功能组管理丰富 的功能 647 30.1 功能组简介...... 648 30.2 功能组扩展点...... 651 30.3 定义主向导...... 656 30.4 活动API.. 657 30.5 定义自己的触发器...... 659 30.6 示例概述...... 659 30.7 本章小结...... 659 30.8 参考文献...... 660 第31章 国际化和辅助功能 661 31.1 国际化对插件有何影响...... 661 31.2 国际化的步骤...... 663 31.2.1 把可翻译的字符串移动 到*.properties文件中..... 663 31.2.2 隔离那些依赖于外观的 参数..... 664 31.2.3 使用语言环境敏感的正确 数据格式和置换API. 664 31.2.4 使用自己本国的语言 进行测试..... 664 31.2.5 创建初始翻译的插件 片断..... 665 31.2.6 Eclipse语言包JAR... 665 31.3 辅助功能...... 667 31.4 示例概述...... 668 31.5 本章小结...... 668 31.6 参考文献...... 669 第32章 性能调整 671 32.1 应该快速启动Eclipse的 原因...... 671 32.2 使用Runtime Spy诊断 启动问题...... 672 32.2.1 安装Core Tools.. 672 32.2.2 侦查Workbench的 开发..... 673 32.2.3 侦查运行时Workbench.. 679 32.2.4 接下来的内容..... 679 32.3 示例研究:提升IBM Web Sphere Studio的启动性能...... 680 32.3.1 帮助Eclipse快速启动..... 680 32.3.2 再论Runtime Spy.. 681 32.3.3 侦查WebSphere Studio.. 681 32.4 用Performance Monitor避免 性能衰减...... 688 32.4.1 安装..... 689 32.4.2 示例的使用..... 689 32.5 特定于Eclipse的性能问题的 通用解决方案...... 691 32.6 本章小结...... 692 32.7 参考文献...... 692 第33章 Swing互操作性 693 33.1 在视图和编辑器中嵌入 AWT和Swing... 693 33.2 启动-编辑集成...... 698 33.2.1 调用模式..... 699 33.2.2 提升最终用户的使用 经验..... 699 33.2.3 常见的集成问题..... 700 33.3 ABCEditor示例——进程 内调用...... 700 33.3.1 用于外部编辑器的 编辑器扩展..... 700 33.3.2 添加Workbench感知 ——资源同步..... 702 33.3.3 添加Workbench感知 ——工具首选项..... 703 33.3.4 处理系统退出..... 704 33.4 示例概述...... 704 33.5 本章小结...... 704 33.6 参考文献...... 705 第34章 OLE与ActiveX互操作性 707 34.1 Eclipse中的COM支持...... 708 34.1.1 内嵌的OLE文档..... 708 34.1.2 内嵌的ActiveX控件..... 708 34.2 COM容器支持...... 709 34.2.1 创建OleFrame对象..... 709 34.2.2 创建OleClientSite对象.... 709 34.2.3 激活OLE对象..... 710 34.2.4 钝化OLE对象..... 711 34.2.5 Eclipse OLE编辑器 支持..... 711 34.2.6 创建OleControlSite 对象..... 712 34.2.7 激活OleControlSite 对象..... 713 34.3 OLE自动化——访问已 扩展的行为...... 713 34.3.1 OLE exec命令..... 714 34.3.2 IDispatch接口..... 715 34.3.3 方法..... 716 34.3.4 不带参数的调用..... 716 34.3.5 Variant类型..... 717 34.3.6 带参数的调用..... 717 34.3.7 属性..... 718 34.3.8 事件属性侦听器..... 720 34.4 示例概述...... 721 34.5 本章小结...... 721 34.6 参考文献...... 722 第Ⅵ部分 练 习

8,834

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 组件/控件开发
社区管理员
  • 组件/控件开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧