??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲高清资源在线观看,亚洲精品制服丝袜四区,亚洲国产精品毛片av不卡在线http://m.tkk7.com/aawanghuan/category/15804.html路O漫其修远兮,向ְ上下而求索!~zh-cnTue, 27 Feb 2007 12:35:49 GMTTue, 27 Feb 2007 12:35:49 GMT60.NET和J2EE的全面比??http://m.tkk7.com/aawanghuan/articles/83843.html萝卜青菜萝卜青菜Mon, 27 Nov 2006 09:47:00 GMThttp://m.tkk7.com/aawanghuan/articles/83843.htmlhttp://m.tkk7.com/aawanghuan/comments/83843.htmlhttp://m.tkk7.com/aawanghuan/articles/83843.html#Feedback0http://m.tkk7.com/aawanghuan/comments/commentRss/83843.htmlhttp://m.tkk7.com/aawanghuan/services/trackbacks/83843.html
关于.NET技术与Sun公司的Java2企业版(J2EETMQ相比较Q许多客户都想了(jin)解Microsoft公司的观炏V由于以下的几个原因Q?NET和JEE的比较有Ҏ(gu)手:(x)

1) 一般来_(d)W(xu)indows .NET Framework是Microsoft的Windowspȝ中经q精?j)定义的技术部分,而J2EE则是一个书面的协议。如果不局限于学术斚w的讨论,换句话说Q就是在几个应用q_上讨个话题的商业价|那么仅仅比较J2EE和一个实际应用的工具是没有意义的?br />
q样实际应用的工具如QIBM公司的WebSphere应用服务QBEA的WebLogic服务或是其它cM的应用服务?br />
要想得到令h满意的分析,只有q行产品之间的比较,例如比较开发效率。用J2EEQ开发者需要创?个组件来建立一个单一的EJB。表面上看来Q这只不q是为开发效率付出的一点代仯(g)已。但是Java的一些开发工具隐藏了(jin)一些开发技巧,降低?jin)效率。另一个例子,J2EE的部|体pd分复杂难解,cd入JARQ而JAR嵌入WARQW(xu)AR又嵌入EAR。但是在一定程度上Q有些工兯自动完成部vq程。上q情况导致决定一个应用服务商业h(hun)值的关键因素开发效率因不同的销售商而有差异Q这主要取决于开发工L(fng)效率?br />
2) 关于“J2EE全明星队伍”的问题。当比较.NET和J2EE所有组件的集合Ӟq个问题׃生了(jin)。例如,分析者考虑开发效率时可能到下列问题QA公司的品, B公司的应用服务程序, C公司的安全规则, D公司便安装, E公司军_h。所有这些都可能和J2EE有关。集合上q这些特征属性,J2EE工具看v来还行:(x)h便宜Q安装简便,速度快,安全性高Q有高速缓存,q且有好的开发工P{等。但q些都无关痛痒—因Z可能同时获得所有的q些Ҏ(gu)。事实上Q一ơ只能得C个准的Ҏ(gu)。因些品来自不同的公司Q它们不可能合作无间。例如,IBM公司的工具不能和BEA公司的WebLogic服务同时工作Q因为后者是用的Oracle公司的缓存引擎,而Oracle的引擎不能用Iona的h(hun)D得,{等诸如此类。h们有时候会(x)误将“J2EE的所有特性集合”作为比较的基础Q但q是不合理的。客户需要的是知道一对一Q品对产品的比较?br />
3Q比?NET和J2EE而忽视其它应用^台是十分重要的。J2EE是仅x(chng)应用E序服务器的规范。但是绝大多数客户对下列q些感兴:(x)应用E序服务器,端口Q商业服务器和分析工P数据库,分离数据和流动性,信息代理Q应用程序集合,定w理Q智能客L(fng){等。作为对客户要求的回应,q些因素应该l一工作Q所有的主要销售商应该推行整合的^台。例如Microsoft的^収ͼ包括Windowspȝ的客L(fng)和服务器QW(xu)indows .NET FrameworkQVisual Studio.NET FrameworkQ和Microsoft企业服务器)(j)QBEA的WebLogicq_QIBM公司的WebSphereq_QOracle的^収ͼq有Sun公司的一个^台。将_֊集中在这些^台的一个难题(应用服务器)(j)上将?x)导致一个类似“树(wi)林和林”关pȝ问题。这L(fng)一个比Ҏ(gu)合适的Q但是它应该被考虑C个更qKq_的一部分?br />
从Microsoft的角度来看,和那些不常见的警告相比,q些是Windows .NET Framework和基于J2EE的品的关键性的异同炏V?br />
怼?br />
1Q?Windows .NET Framework和Java都有一个受控的q行时环境,它不但将源代码{换成中间语言Q而且这些中间语a~译成本地的可执行代码。两个环境都支持片整理、动态类加蝲和异常处理等?br />
2Q?.NET和Java都倡导和支持基于组件的设计、多态性、(h)承和接口{,也提供基cd来执行I/O、XML处理、带有连接池的数据库接入、文本操作与|页脚本~写{?br />
3Q?两者都l过Ҏ(gu)的销售商的品进行发布。J2EE规范自己是“销售中立”的Q但实际上那些遵从规范的产品都必d现规范外的特性,例如理Ҏ(gu)或是展开Ҏ(gu)。因此,q些产品必须是对应特定的销售商。例如Microsoft公司的Windows?NETpȝ?br />
4Q?Windows .NET Framework和基于J2EE的品都和第三方的品一起工作。例如,在后端数据库领域Q?NET和基于J2EE的应用程序能讉K储存在Microsoft的SQL服务器、IBM的DB2、OracleQInformix、Sybase{服务器里面的数据。再举一个例子,.NET和基于J2EE的系l能讉K?hu)行的信息中间设备,如Microsoft的MSMQ或是IBM的MQSeries。同P也包括文件系l,W三方开发工P代码版本pȝQ防火墙{?br />
不同?br />
1Q?原理

J2EE是一个单一语言的^収ͼx(chng)跨^台的可移植性。这意味着Q要利用J2EEQ设计方案能使用多个操作pȝ其中的一个,但开发者必L受关于Java的培训。Microsoft提供?NET构架作ؓ(f)Windowspȝ的一部分。开发者能使用多种语言Qƈ且效率很高而不用进行一U新语言的重新训l。但.NET Framework是Windowspȝ的一部分?br />
2Q?宽度和广?br />
a. .NET包括代码、品、工具和构架Q来利用|络上全部的计算资源Q包括设备、个人电(sh)脑和服务器等?NET使所有的q些讑֤能经q标准通讯协议全部q接在一Px(chng)谓的“XML WEB服务”。(.NET应用E序可以和Q何一个系l连接,无论pȝ用什么语a和^収ͼ甚至是J2EE。只要目标系l遵照XML WEB服务标准。)(j).NET模型是广泛的分布式计,它和许多代码互相通讯q交换信息?br />
b. J2EE是面向服务器的模型,它ƈ不开发网l上的智能和计算功能。ȝ来说Q基于J2EE的品只支持服务器端的应用程序。J2EE一般把PC只看作是一个HTML的浏览器Q而将q些讑֤认ؓ(f)是哑l端。至于XML WEB服务Q现有的协议标准支持分布式的计算Q现有版本的J2EE规范q没有提到XML WEB服务的问题,但是ZJ2EE的品在d?jin)附加装|后也可以支持XML Web服务。然而,d附加装置也就意味着有严格的限制。例如,q(sh)清楚现有的规范是否允许EJB调用Web服务Q虽然Web服务的组件能调用一些EJBE序?br />
3Q?~程模型的一致?br />
Windows .NET Framework提供?jin)一个跨服务器、PC和其它设备的一致的、面向组件的模型。而J2EE提供EJB作ؓ(f)服务器端的组件模型;为客L(fng)或是本地lg建立开攄完全用Java~写的APIQؓ(f)用户界面提供servletQ也为移动设备提供另一U不同的模型。甚臛_EJB内部也有臛_3U明显不同的子模型,每一U子模型都有不同的语a定义?br />


Microsoft?NET~程模型与Javaq_相比较,在各U服务器和客L(fng)上有更好的一致性。J2SE是基于开攄完全用Java~写的APIQ而J2EE是基于Java servlet和EJB?br />
DH Brown, 2002q??br />


4Q?功能

a. Windows .NET Framework提供一个能识别版本的类加蝲器,q就意味着应用E序的开发者能保他们开发的应用E序在一部分代码已经更新的情况下仍能q行。而Java和J2EEQ现有的Q没有版本识别的cd载器Q这意味着开发者和理员(sh)能保证代码被执行时是正确的。或是说Q开发者只能靠q气来保证这一炏V?br />
b. Windows .NET Framework昄?jin)语a层面上的cd性—这׃得编E更加简单。例如,在源代码中只用一个简单的属性就能把.NETlg标志为处理模式。或者说Q一?NETlg和XML的串行化可以在一个属性中被定义。这个机制大大简化了(jin)许多~程d。而Java不显Ca层上的类属性,虽然Sun公司考虑到要修改Java语言来改变现状。这U变化估计在两三q内才能W一ơ实现?br />
c. .NETq支持分L据访问,q主要用于在Ud讑֤或是偶尔联网的场合里q行的应用程序。数据能被脱机操作,接着再和起始数据重新同步。而不论是J2EEq是J2SE现阶D都不支持分L据访问,需要这功能的J2EE开发者必自己写“plumbing code”?br />
d. 为徏立基于网l的用户界面QW(xu)indows .NET Framework提供Z事g的模型,q些模型cM于流行的Visual Basic中的客户端模型。ASP .NET模型使得建立、发布和l护一个基于网l的用户界面变得更加Ҏ(gu)。与之Ş成对比的是,J2EE在JSP中不支持q样的模型。有一些第三方的扩展程序部分I补了(jin)q些功能Q但是它们的实用性和便性不能和ASP .NET相比。作Z个推荐的J2EE附加E序QJava Server Faces可能做到q一炏V但q个附加E序q没有包括在J2EE?.4版本以前。而要获得销售商的支持,则又需臛_一q的旉?br />
e. J2EE支持一个对象相关的数据映像模型Q它被称作EJB Entity Beans。这hZ(jin)允许开发者更Ҏ(gu)C一个相关的数据库徏立对象模型。然而,实际上把q个x(chng)~程实现却要面对下列问题Q?br />
?易用性:(x)当那些熟知的、正规定义的、被q泛支持的结构化查询语言QSQLQ和开发者的数据怺作用Ӟ开发者不得不攑ּ它们Q而用一个被UCؓ(f)EJBQL的弱定义查询语言。和SQL相类|EJBQL的功能ƈ不强大(例如Q在现有的规范中Q它没有ORDER BY的语句,q样开发者就没法使用特定数据库的SQL扩展Q,而它的语义也没有被正规定义。还有,在对象间建立联系和附属关pd分困难,而且在对象间和XML以及(qing)后端之间的数据翻译是手动控制的?br />
?性能Q基于EJBpȝ的性能仍是一个未知数。没有提供公开的基准。客户反映,得到的性能q远偏离?jin)Entity BeansQƈ且{向一个更直接的数据访问策略。这是EJB Entity Beans没有被广泛用的一个关键因素?br />
在Windows .NET Framework中,数据讉K是基于数据集比较的。数据集保存?sh)(jin)相x(chng)据的一个子集,它由一个或多个SQL查询语句描述。数据集中的数据可能保存关键的联p,q且开发者能直接Ҏ(gu)据进行操作,能将数据转换成XML格式和上ơ操作的cdQ能使用标准的SQLqo(h)数据{。总而言之,相对于EJB Entity BeansQ?NET的数据集模型提供一个更丰富而且单熟(zhn)的途径?br />
5Q?便?br />
aQ?配置Q对于J2EEQ配|是由部|描qC息获得的XML格式的文Ӟ它们和实际执行的商用逻辑代码有明昑֌别。这U方法有很多问题。第一Q考虑到特定类的元数据Q有些代码中的改变和元数据中的改变是怺依赖的。两个独立文件的同步性要求有可能产生错误。第二,考虑到应用程序层的元数据Q在J2EE中,没有可以从一个程序(h)承元数据到另一个程序的途径。与J2EE不同QW(xu)indows?NET构架包括?jin)这个功能,使得可以在源代码中直接向cL加属性,q样׃?x)生第一个问题。Windows .NET中的元数据模型允许客戯己添加扩展程序,q样开发者就可以~写和用自q属性。ؓ(f)?jin)在Windows?NET构架中配|外部元数据Q这个功能被包括在配|文件的分pȝ中,它能从父pȝ中(h)承属性,q样每个文g?x)很,它只记录改变的设定。这避免了(jin)J2EE模型的第二个问题

bQ?数据库连接池Windows .NET Framework中,是根据需要自动徏立和理q些池的。而在J2EE模型中,q接池必被明确配置和管理?br />
cQ?XML Web服务Q在.NET中徏立一个XML Web服务像在类中添加一个属性那L(fng)单。有些基于J2EE的品也惛_Java中模拟这个功能,.NET提供更简单的Ҏ(gu)来徏立和使用可由双方共同操作?XML Web服务?br />
dQ?部vQ在.NET中,要部|一个应用程序,理员只需要拷贝文件。而在J2EE中,理员必d很多~译文g和JAR、WAR以及(qing)EARl定Q然后在一个特定的服务器部|工具中解开q运行它们,接着拯l果档案。这个多步部|过E意味着典型的编?~译/调试循环被大大g长了(jin)。此外,׃动态加载类q程中的一些变化,更新一个简单的cd帔R要重新启动基于J2EE的服务器?br />


虽然许多公司选择Java作ؓ(f)企业发展的策略^収ͼ但它们的使用却由于J2EE的复杂性而受到阻。Meta GroupQ??br />


6Q?成本

aQ?Z(jin)部vQ运行在Windows .NET Framework之外~写的服务器端的应用E序需要一个Windows Server的许可,q比三个遵从J2EE的商业服务器中的M一个许可都便宜很多。包括四个网l服务器的系l部|费用的差别可达到数十万元。例如,Microsoft Windows Server 2003Q企业版Q的一个四机器pȝQ每个有四个pcQ的许可费用不超q?6Q?00元Q这考虑?jin)零售因素?j)。而W(xu)ebSphere Application Server 5.0在同L(fng)pȝ中每台pc的许可费用达12Q?00元Q这p192Q?00元。这个比率是12?。大多数ZJ2EE的商业应用程序服务器的h(hun)格都和这cM。(q假定了(jin)性能相等。然而实际上Middleware公司2002q?0月的报告昄Q一个徏立在Windows .NET Framework上的应用E序的效率是建立在同h行的ZJ2EE的服务器上的E序?-4倍。所以实际上h的优势远高(sh)12?Q有很多免费的,ZJ2EE的开放源应用服务器,但是它们q没有J2EE-compliant的商标。还有关于文件和产品的问题:(x)需要品之间的比较来讨论采许可费用?br />
bQ?为Windows .NET Framework开发工L(fng)费用也更加低廉。Visual Studio .NET?NET的整合开发工P它的许可费用大大低于商业化的J2EE销售商制定的开发工L(fng)费用。ƈ且在业界QVisual Studio .NET作ؓ(f)最?jng)_发工兯得了(jin)一pd的大奖。评估过Visual Studio .NET和其竞争Ҏ(gu)的客户都_(d)相对于最好的Java工具QVisual Studio .NET开发效率更高(See GigaQ?002q?月)(j)?br />
cQ?使用Windows .NET Framework的开发和l护费用更低。专家认可费用ƈ不是一个项目的最大开支。典型的软g开发和l护占项目总费用的50-80%QGlassQ?002QKemererQ?995QGartnerQ?001Q。Middleware公司2002q?0月的研究表明Q在Windows .NET Framework上一个给定的应用E序开发相对于J2EEQ只需?/3的代码。代码越就意味着l护更加单?br />
ȝ



显而易见:(x)正确的品选择决策不可能不评估实际的品。对比Microsoft Windows Server?qing)Windows .NET Framework和J2EEQSun公司的规范)(j)是有价值的Q但是这L(fng)努力~少实际产品的评估。然而,q是可以从中得出一些结论:(x)

1Q?J2EE展现?jin)一个以服务器ؓ(f)中心(j)的原则,q将重心(j)攑֜EJB和解决“相兛_象的映像问题”上。J2EE在支持XML和W(xu)eb服务上已l落后了(jin)。Windows .NET Framework的原则则是通过协议标准和XML、充分利用服务器、接口和讑֤的的大规模分布式计算?br />
2Q?相对于编写在Windows .NET Framework上的E序QJ2EE应用E序需要更多的代码来执行相同的d?br />
3Q?J2EE的管理和部v模型更像是一个主机模型,它关注保护和限制E有的计算资源Q按比率使用。而W(xu)indows .NET Framework展现出的原则是计资源是廉h(hun)的,而且更加廉P但是部v能力保持大部分昂贵的资源?br />
MQ如果一个项目要求必M几个操作pȝ中选择一个作为部|^収ͼ而不考虑开发成本;强制Qƈ且重新培训训l)(j)开发者用单一的编E语a来执行这个项目,从而代码的版本问题׃再重要;重要的是配给和限制相对便宜的计算资源Q这样用昂贵复杂的开发和l护工具显得顺理成章;而编写更多的代码也有其优?- J2EE也许是一个不错的选择?br />
然而,如果商业目标昄最优化的开发效率是重要的;低廉的性h(hun)比更W合要求Q通过通讯协议的标准获得的可相互操作性有较高?sh)|大量支持Z界面的应用程序和Ud的应用程序是重要的;更感兴趣的是易扩展性—这L(fng)话,建立一个Windows .NET Framework上的Windows Server应用E序是正的选择?img src ="http://m.tkk7.com/aawanghuan/aggbug/83843.html" width = "1" height = "1" />

萝卜青菜 2006-11-27 17:47 发表评论
]]>
J2EE ?Net 的比?/title><link>http://m.tkk7.com/aawanghuan/articles/83841.html</link><dc:creator>萝卜青菜</dc:creator><author>萝卜青菜</author><pubDate>Mon, 27 Nov 2006 09:32:00 GMT</pubDate><guid>http://m.tkk7.com/aawanghuan/articles/83841.html</guid><wfw:comment>http://m.tkk7.com/aawanghuan/comments/83841.html</wfw:comment><comments>http://m.tkk7.com/aawanghuan/articles/83841.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/aawanghuan/comments/commentRss/83841.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/aawanghuan/services/trackbacks/83841.html</trackback:ping><description><![CDATA[<p>Q?Q多pȝ整合和系lg展? (tng) <br /> (tng) 跨^台的Ҏ(gu)一直是J2EE  (tng) 的最大特点,它通过Java  (tng) 的虚拟机技术屏蔽了(jin)底层操作pȝ的细节。从而实C(jin)所~写的代码可以在Windows  (tng) q_上用,也能够在Unix  (tng) q_上用。即所谓“一ơ编写,处处可用”。在J2EE  (tng) 规范里面又通过JDBC、JNDI  (tng) {技术屏蔽了(jin)诸如数据库、目录访问等|络l节。可以这么说Q目前用J2EE  (tng) 技术实现的企业U应用可以运行在大机、Unix、windows、linux{各U操作系l上Q后台可以连接Oracle、DB2、Informix  (tng) {等数据库,q且效率斚w没有太多的区别。在各系l连接方面,J2EE  (tng) 也提Z(jin)很多很好的解x(chng)案,例如J2CA——J2EE  (tng) 联接器体pȝ构,是J2EE  (tng) 规范规定的如何用Java? (tng) <br /> (tng) 技术与所谓遗留系l如ERP、CRM  (tng) {的q接Ҏ(gu)。当然J2EE  (tng) 现在也提倡用Web  (tng) Service  (tng) {技术来q行pȝ互联。M而言QJ2EE  (tng) 技术是一套标准,它由诸多公司一h持,所以技术的通用性和标准性比较高Q目前基本上成ؓ(f)企业U解x(chng)案的事实标准? (tng) <br /> (tng) .Net  (tng) 从本质上来讲不是一套标准,而是微Y一pd产品的集合,所以,选择.Net  (tng) 技术,基本上就选定?jin)微软^台。也是_(d)操作pȝ只能使用WindowsQ甚至低层硬件只能选择Intel  (tng) 的系列芯片。而不能在大机、Unix  (tng) 以及(qing)Linux  (tng) {系l上使用。在数据库方面,.Net  (tng) 在自w的Microsoft  (tng) SQL  (tng) Server  (tng) 上也?x)比其他数据库运行得好。在pȝ互联斚wQ?Net  (tng) 提倡用Web  (tng) ServiceQ这个技术目前还比较斎ͼq没有太多的成熟可靠的解x(chng)案? (tng) <br /> (tng) MQ在多系l整合和pȝ延展性方面,基本上是J2EE  (tng) 的特点,目前而言Q?Net  (tng) 技术还很难望其背? (tng) <br /> (tng) Q?QI/O  (tng) 处理和线E调? (tng) <br /> (tng) 在这个方面,从应用的层面看,两者都能够辑ֈ企业U应用的需求。但是I/O处理和线E调度从本质上来讲应该由底层g和操作系l来解决。J2EE  (tng) 支持众多的硬件和操作pȝQ单从这Ҏ(gu)Ԍ都比.Net  (tng) 技术有优势得多。别的不_(d)大型计算机的I/O  (tng) 处理能力和线E调度能力是其他M机种所无法企及(qing)的。而大Z目前只能q行J2EEQ不能运?Net。光q一点,p明了(jin)在这个方面J2EE  (tng) 优(sh).Net  (tng) 技术? (tng) <br /> (tng) Q?Q稳定性和安全? (tng) <br /> (tng) E_性和安全性方面可以用很多方式d现和补偿Q问题的关键是看投入的成本和l护的费用是多少Q昂늚资金投入昄是不合适的。所以,我们去讨论那些Yg的补偿方法没有太多的意义Q我们把讨论集中在操作系l和g芯片U别的比较? (tng) <br /> (tng) .Net  (tng) 技术进军高端应用市(jng)场,靠的是Windows  (tng) Data  (tng) Center  (tng) 之类的操作系l,靠的是Intel  (tng) 的安腾芯片。Windows  (tng) 操作pȝ的稳定性和安全性与Unix  (tng) 乃至S/390{操作系l相比较Q其l果不言而喻。Windows  (tng) 是最通用的桌面系l,也是最大的病毒温床。众多的病毒困扰着Windows  (tng) 的用者。目前,利用Microsoft  (tng)  (tng) SQL  (tng) Server  (tng) 的漏z的病毒正在肆虐是一个明证。而Unix、Linux  (tng) 和大型机操作pȝ的病毒就较少Q安全别也比Windows  (tng) 高? (tng) <br /> (tng) 再来看看.Net  (tng) 所能够q行的硬件^収ͼ一般而言只有Intel  (tng) 公司的芯片,Intel公司的志片一般我们认为它只是个部门别服务器的芯片。Intel  (tng) 公司Cq入高端服务器市(jng)场的是Intel  (tng) 公司与HP  (tng) 公司共同研发?4  (tng) 位芯片安腾。安腄列目前最新的是安?。尽在其发布会(x)上英特尔展示?jin)安?  (tng) 处理器与Sun  (tng) 公司UltraSPARCⅢ的性能Ҏ(gu)资料Q但q?dng)ƈ没有展示更多的基于系l的安全性、稳定性及(qing)兼容性能的对比评,而这些是高端应用的关键所在,而安?与现有应用Y件的兼容则更是不甚明?jin)的二进制兼宏V因此,我们可以说安?要在高端?jng)场占领一定的Cq需要一些时日和改进? (tng) <br /> (tng) 所以,.Net  (tng) 技术在高端的企业应用?jng)场q比较缺乏案例支持? (tng) <br /> (tng) Q?Q品成熟度{其他因? (tng) <br /> (tng) J2EE  (tng) ?999  (tng) qŞ成了(jin)其成熟的架构Qƈ且到今天已经有相当成熟的l过(g)验的企业应用pȝ。?Net  (tng) I其渊源是源自微软以前开发企业应用程序的q_DNA  (tng) Q? (tng) Distributed  (tng) NetworkArchitectureQ,其中包括?jin)许多已l被证实的技术,q且q些技术已l在产品中得到实玎ͼ包括微Y的事务服务器、COM+、消息队列、SQL  (tng) Server  (tng) 数据库等。而对于扩展性,qؓ(f)业界接受的事实是.NET  (tng) q_的扩展思想是基于Y件的横向扩展Q而J2EE  (tng) q_的扩展思想则是Zg的纵向扩展。这也符合微软和Sun各自的品利益。但是我们还需要细看这个问题,.Net  (tng) 技术源于DNA  (tng) 技术。众所周知QDNA技术可能能够解决部门应用的问题,但是在大型企业应用中׃是那么适合?jin)。其实,从微软这家公司的历史背景可以看?gu)个问题,微Y从来不是一个老牌的企业解决Ҏ(gu)的提供者,它是从DOS、Windows  (tng) {桌面操作系lv家的Q在购买?jin)一个企业操作pȝ开发出Windows  (tng) NT  (tng) 后才开始进入企业解决Ҏ(gu)?jng)场。与IBM、HP、Sun  (tng) {一直从事企业应用的提供商相比Q其技术和支持力量q显得稚嫩。尚没有大多的成功案例和解决Ҏ(gu)。而J2EE  (tng) 却是q些企业U解x(chng)案的提供商所力推的,所以J2EE  (tng) 在企业中有大量的成功案例和解x(chng)案。这些可以从世界各种大企业的IT  (tng) 应用pȝ的实际情况可以看出。世界上大多C业的IT  (tng) pȝ中,使用J2EE  (tng) 技术的q远大于.  (tng) Net。可以这么说Q?Net技术尚没有太多比较成功的实施案例。?tng)?<br /></p><img src ="http://m.tkk7.com/aawanghuan/aggbug/83841.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/aawanghuan/" target="_blank">萝卜青菜</a> 2006-11-27 17:32 <a href="http://m.tkk7.com/aawanghuan/articles/83841.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ruby on Rails ?J2EEQ两者能否共存?http://m.tkk7.com/aawanghuan/articles/83835.html萝卜青菜萝卜青菜Mon, 27 Nov 2006 09:10:00 GMThttp://m.tkk7.com/aawanghuan/articles/83835.htmlhttp://m.tkk7.com/aawanghuan/comments/83835.htmlhttp://m.tkk7.com/aawanghuan/articles/83835.html#Feedback0http://m.tkk7.com/aawanghuan/comments/commentRss/83835.htmlhttp://m.tkk7.com/aawanghuan/services/trackbacks/83835.html Ruby on Rails 是一个相对较新的 Web 应用E序框架Q构建在 Ruby 语言之上。它被宣传ؓ(f)现有企业框架的一个替代,而它的目标,而言之,是让生z,臛_?Web 开发方面的生活Q变得更L。在本文中,Aaron Rustad 对 Rails 和传l的 J2EE 框架在架构上的一些关键特性进行比较?/font>

Ruby on Rails 是一?Web 应用E序框架Q它的目标是为应用程序开发提供一条易行道。实际上Q框架的支持者们声称 Ruby on Rails 开发h员的生率最多是使用传统 J2EE 框架?10 倍。(请阅诠ZRolling with Ruby on Rails”一文,以获得关于这一声明的更多内容;请参? 参考资?/font> Q。虽然这句话造成?Rails ?J2EE C֌相当大的争议Q但争论中却很少谈及(qing)如何比较 Rails ?J2EE 架构。本文将使用企业应用E序中常见的开源工P?Rails 框架和典型的 J2EE 实现q行比较?/font>

什么是 Ruby on RailsQ?/font>

要想扑ֈ用一句话描述 Rails 的简单说明,只需查看目? 主页 卛_Q?/font>

Rails 是一个用 Ruby ~写的全栈的Qfull-stackQ、开源的 Web 框架Q可以用它来轻杄写实际的应用E序Q所需的代码也要比大多数框架花在处?XML 上的代码?

虽然我不能保证框架确实会(x)提供它所承诺的轻村ֿ乐,但是上面q句话确实很好地ȝ?Rails 的品质。全栈包括:(x)Web 服务器、处?HTTP h和响应的框架Q以?qing)方便地把数据持久存储到关系数据库的框架。Rails 通过消除复杂?XML 配置文gQ?Ruby 语言的动态性质Q帮助把?rn)态类型语a中常见的许多重复代码减少到最,努力使开发工作变得更Ҏ(gu)?/font>

Rails 和典型的 J2EE Web 堆栈

?1 比较?Rails 堆栈和典型的 J2EE Web 堆栈Q包?Tomcat servlet 容器、Struts Web 应用E序框架?Hibernate 持久性框Ӟ(j)?/font>



?1. Rails ?J2EE 堆栈的比较?/font>
Rails ?J2EE 堆栈的比? src= (tng)

可以看到QRails 堆栈和构成普通的Z J2EE ?Web 应用E序的组件之间的基本区别很小。两者都有用来执行应用程序代码的容器Q都有帮助分d用程序的模型、视囑֒控g?MVC 框架Q以?qing)持久存储数据的机制?/font>

MVC 框架

模型-视图-控制器(MVCQ是应用旉相当ѝ应用面相当q的一个设计模式。它源自 SmalltalkQ如今,几乎所有的 GUI 框架Q包?Web 和胖客户端,都以该框架ؓ(f)基础。MVC 有三个部分:(x)模型Q负责业务逻辑Q包括应用程序状态和在q个状态上执行的动作;视图Q用来渲染和向用户呈现模型(?Web 应用E序中,视图一般渲染ؓ(f) HTMLQ;控制?/i>Q定义应用程序的行ؓ(f)。有?MVC 模式的详l解释,请参? 参考资?/font> ?/font>

前端控制?/font>

Struts ?DispatchServlet 都是前端控制器模式的例子Q所以,它们提供?jin)相同的功能。它们接?HTTP hQ解?URLQ把h的处理{发给适当的动作。在 Struts 中,动作是扩展自 ActionController 的类。两个前端控制器之间的主要区别是它们如何军_处理具体h的动作?/font>

使用 StrutsQ开发h员需要把特定h的映外部化?XML 配置文g中的 ActionServlet Ӟ它将解析q个文gQƈ准备接受h。根据约定,?ActionServletQ由 ActionServlet 分派到适当??2 ?XML 是一个典型的映射。它告诉 deleteOrder.do 的请求{发到 Rails 采用?jin)不同的方式。它没有依赖配置文g把请求映到某一个动作,而是Ҏ(gu)h?URL 发现适当的动作。从?2 可以看到QURL OrderController 实例上的 4 作ؓ(f)可用的实例变量。Rails _聪明Q知?find Ҏ(gu)Q那么只要用 deleteQ就可以调用q个Ҏ(gu)?/font>



?2. Rails ?Struts 中的 URL 映射 (tng)
Rails ?Struts 中的 URL 映射 (tng)

动作和模?/font>

?Rails ?Struts 中,动作用来充当前端控制器和模型之间的桥梁。开发h员提供动作的现实Q从而提供特定于应用E序的请求处理。前端控制器负责接受hQƈ把请求传递到特定动作。图 3 演示?Rails ?Struts 基本的动作层ơ结构?/font>



?3. Rails ?Struts 的动作层ơ结?/font>
 (tng)Rails ?Struts 的动作层ơ结? src=
动作是模型还是控制器Q?/font>

ActionController 从技术上讲是 MVC 模式的控制器的一部分Q因为它们对客户发v的事件进行响应。但是,在小型应用程序中Q开发h员通常在这些类中对域或业务逻辑q行~码Q所以在q些情况下,也可以把它们看作是模型的一部分。最?jng)_践徏议:(x)应当把域逻辑从控制器中抽象出来,攄在它自己的特定于域的cM?/font>

Struts 要求开发h员扩?execute()Q以处理h。通常Q每??3 演示?jin)三个特定动作?x)DeleteOrderAction ?execute() Ҏ(gu)Q传递给它许多有用的对象Q其中包?HTTP h和响应对象?code>ActionMapping 包含映射的配|信息,像 ?2 ?XML 所描述的那栗?/font>

ActionForward 对象QStruts 用这个对象来定对请求(h)l进行处理的lg。一般来_(d)q个lg是一?JSP 面Q但?Action 的单一实例Qƈ允许多个U程调用它的 Action 实例。但是因为可以在多个U程之间׃n单一对象Q所以必遵守适当的线E注意事,因ؓ(f)其他U程可能?x)破坏在q个动作中保持状态的实例变量?/font>

?Rails 中,必须扩展 ActionController 的实例池化;相反Q它为每个请求创建新的实例。虽然这Ҏ(gu)能可能有负面媄(jing)响,但是它可以让开发变得更Ҏ(gu)。开发h员(sh)需要关?Struts 中存在的U程问题Q因此,?x)话、请求、标题和参数都可以作?ActionController q是一个将特定域逻辑的所有处理组合在一L(fng)合理场所。Struts ?ActionController 则是_粒度的Q它?yu)具体的工作单元模拟Z些方法?/font>

清单 1 ? 清单 2 分别演示?jin)典型?Struts 动作和典型的 Rails 动作

?1 提供?jin)对两种?gu)的逻辑程的比较,q演CZ(jin)清单 1 和清? 2 的特定行中发生的事情。研I?execute() Ҏ(gu)?delete Ҏ(gu)Q可以看出它们基本上是相同的?/font>



?1. execute() ?delete Ҏ(gu)比较
步骤 Struts Rails
框架调用动作 ?03Q?/b> ?07Q?/b> 从请求中(g)索到?ID ?06-07Q?/b>从请求对象中取出 ?08Q?/b>从所有参数的实例哈希中取?/font>
从数据库删除订单记录 ?09?4-24Q?/b>调用 ?09Q?/b>?ActiveRecord 删除记录
重定向到列出剩余订单 ?11Q?/b>??2 中的 XML 映射昄Q?code>/listOrdersQ这是另一? ?10Q?/b>用将调用的下一动作的哈希来调用 list Ҏ(gu)




回页?/font>


持久性框?/font>

持久性框?/i> 用来在应用程序层和数据库之间来回Ud数据。Hibernate ?Rails 的持久性框架可以归cMؓ(f)对象/关系映射QORMQ工Pq意味着它们接受数据的对象视图,q将该视图映到关系数据库内的表中。用两U框架的目的都是Z(jin)减少与关pL据库有关的开发时间。但是, ?4 演示?jin)两者在设计和配|上的一些根本区别?



?4. Active Record ?Hibernate 持久性框架的比较 (tng)
 Active Record ?Hibernate 持久性框架的比较 (tng)

Hibernate

Hibernate Z Data Mapper 模式Q在q种模式中,特定的映器c?清单 3 昄?Hibernate 映射文g的一个实例?code>Order 对象映射?models.Item 的一对多关系?/font> 清单 4 昄? 清单 3. Order.hbm.xml
												...
01 <hibernate-mapping>
02    <class name="models.Order" table="ORDERS"
03        dynamic-update="true" dynamic-insert="false"
04        discriminator-value="null">
05
06 	<id name="id" column="id" type="java.lang.Long" 
07             unsaved-value="null">
08             <generator class="identity"/>
09         </id>
10 
11         <set name="items" lazy="false" inverse="false"
12            cascade="none" sort="unsorted">
13             <key column="id"/>
14             <one-to-many class="models.Item"/>
15         </set>
16 
17         <property name="name" type="java.lang.String"
18             update="true" insert="true"
19             access="property" column="name"/>
20     </class>
21 </hibernate-mapping>

										



清单 4. Order.java
												01 public class Order {
02    private Set items;
03     private String name;
04     private Long id;
05 
06     public Long getId() { return id;}
07 
08     public void setId(Long id) { this.id = id;}
09 	
10     public Set getItems() { return items;}
11 	
12     public void setItems(Set items) { this.items = items; }
13 	
14     public String getName() { return name; }
15 
16     public void setName(String name) { this.name = name; }
17 }

										

Active Record

反射和元~程

Wikipedia 中(请参? 参考资?/font> Q简要地?反射 定义为“程序在q行的时候检查和修改光U结构的能力”。在那里Q还?元编E?/i> 定义为“编写那些能够编写和操作其他其他E序Q或它们自己Q,其他程序作q数据的程序,或者编写那些完成其他程序在q行时所做的部分工作的程序。?/font>

以下代码实现反:(x)

																												01 obj = "some_string"
02 if obj.respond_to?('length'):
03   puts "obj length = #{obj.length}" 
03 end
>> obj length = 5

																										

q个代码实现元~程Q?/font>

																												01 class SomeClass
02 end
03 newMethod = %q{def msg() puts "A message!" end}
04 SomeClass.class_eval(newMethod)
05 aClass = SomeClass.new
06 aClass.msg
>> A message!

																										

Rails ?ORM 框架叫作 Active RecordQ它Z同名的设计模式。Martin Fowler ?Active Record 描述为“包装数据库表或视图中数据行的对象,装数据库访问,在数据上d域逻辑”。在 Rails 中,每个域对象都扩展提?CRUD 操作??Hibernate 一PActive Record 不需要映文Ӟ实际上,使用 Active Record 的开发h员(sh)需要对 getter ?setter、甚至类的属性进行编码。通过一些漂亮的词汇分析QActive Record 能够判断出,ORDERS 表。?Ruby 反射和元~程的组合,表的列可以变成对象的属性。访问器和调整器也添加了(jin)q来?/font>

清单 5 昄?Order cM中有一行代码定义了(jin)它与 has_many 是一个静(rn)态方法调用,W号 :items 发现 Item 对象映射回数据库中的 清单 5. order.rb
												01 class Order < ActiveRecord::Base
02	has_many :items
03 end

										

? 清单 5 那样~码?Order 上用的操作和属性的部分列表Q?



?2. ?Order 上可用的属性和操作
cL?/font> 实例Ҏ(gu) 属?/font>
  • ...



回页?/font>


l束?/font>

虽然 Ruby on Rails 是一个非常新、o(h)人兴奋的框架Qƈ且在 Web C֌中已l引起了(jin)Z相当的兴,但是它的核心(j)架构仍然遵@?J2EE 中发现的基本模式。开发把两个框架分开?Web 应用E序是一U合理的Ҏ(gu)。Rails 更喜Ƣ清楚的代码而不是配|文Ӟ?Ruby 语言的动态性质在运行时生成?jin)大部?i>道 代码。大多数 Rails 框架都是作ؓ(f)独立目创徏的,而且应用E序开发能够从一l同cȝ件受益。相比之下,典型?J2EE 堆栈們֐于构建在通常独立开发的最好的lg之上Q常常用 XML q行配置q将lgl合在一赗?/font>

那么Q是否应该考虑对下一?Web 应用E序使用 Rails 呢?嗯,Z么不呢?它是~写得很好的lg堆栈Q它们彼此之间工作得很好Qƈ且基于行业接受的企业模式。Ruby 语言支持快速开发,q过生大多数应用程序管道来d到框架。熟(zhn)?Java 世界中的 MVC ?ORM 框架的h们在?Rails 表达自己的思想时没有Q何困难?/font>

?J2EE 一起分发会(x)不会(x)有利?RailsQ绝对不要。J2EE 是一个已l设|好的标准,有许多固定的实现Q而且Q最重要的是Q它是一个经q验证的技术。我(zhn)下载一?Rails 的副本,q开始自己钻研它。许多可用的教程都是介绍性的Q这些教E可以让(zhn)立卛_始?Rails。再ơ声明,我ƈ不能保证(zhn)会(x)通过使用 Rails 得到快乐Q但是我敢打赌?zhn)会(x)感到满意?/font>



萝卜青菜 2006-11-27 17:10 发表评论
]]>
初学者如何开发出一个高质量的J2EEpȝQ?http://m.tkk7.com/aawanghuan/articles/82829.html萝卜青菜萝卜青菜Wed, 22 Nov 2006 09:18:00 GMThttp://m.tkk7.com/aawanghuan/articles/82829.htmlhttp://m.tkk7.com/aawanghuan/comments/82829.htmlhttp://m.tkk7.com/aawanghuan/articles/82829.html#Feedback0http://m.tkk7.com/aawanghuan/comments/commentRss/82829.htmlhttp://m.tkk7.com/aawanghuan/services/trackbacks/82829.html阅读全文

萝卜青菜 2006-11-22 17:18 发表评论
]]>
正则表达式语?/title><link>http://m.tkk7.com/aawanghuan/articles/76338.html</link><dc:creator>萝卜青菜</dc:creator><author>萝卜青菜</author><pubDate>Fri, 20 Oct 2006 02:56:00 GMT</pubDate><guid>http://m.tkk7.com/aawanghuan/articles/76338.html</guid><wfw:comment>http://m.tkk7.com/aawanghuan/comments/76338.html</wfw:comment><comments>http://m.tkk7.com/aawanghuan/articles/76338.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/aawanghuan/comments/commentRss/76338.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/aawanghuan/services/trackbacks/76338.html</trackback:ping><description><![CDATA[ <div class="11pt3vx" id="TitleRow" style="PADDING-RIGHT: 10px; PADDING-LEFT: 22px; PADDING-BOTTOM: 0px; PADDING-TOP: 0px"> <h1 class="dtH1"> <a title="jsgrpregexpsyntax" name="jsgrpregexpsyntax"> </a>正则表达式语?/h1> </div> <div class="hxxjhll" id="nstext"> <p>一个正则表辑ּ是由普通字W(例如字符 a ?zQ以?qing)特D字W(UCؓ(f)<em>元字W?/em>Q组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符丌Ӏ正则表辑ּ作ؓ(f)一个模板,某个字W模式与所搜烦(ch)的字W串q行匚w?/p> <p>q里有一些可能会(x)遇到的正则表辑ּCZQ?/p> <div id="rr3p1bb" class="tablediv"> <table class="dtTABLE" cellspacing="0"> <tbody> <tr> <th>JScript</th> <th>VBScript</th> <th>匚w</th> </tr> <tr> <td>/^\[ \t]*$/</td> <td>"^\[ \t]*$"</td> <td>匚w一个空白行?/td> </tr> <tr> <td>/\d{2}-\d{5}/</td> <td>"\d{2}-\d{5}"</td> <td>验证一个ID L(fng)是否׃?位数字,一个连字符以及(qing)一?位数字组成?/td> </tr> <tr> <td>/<(.*)>.*<\/\1>/</td> <td>"<(.*)>.*<\/\1>"</td> <td>匚w一?HTML 标记?/td> </tr> </tbody> </table> </div> <p>下表是元字符?qing)其在正则表辑ּ上下文中的行为的一个完整列表:(x)</p> <div id="lfdjjzp" class="tablediv"> <table class="dtTABLE" cellspacing="0"> <tbody> <tr> <th>字符</th> <th>描述</th> </tr> <tr> <td>\</td> <td>下一个字W标Cؓ(f)一个特D字W、或一个原义字W、或一?向后引用、或一个八q制转义W。例如,'n' 匚w字符 "n"?\n' 匚w一个换行符。序?'\\' 匚w "\" ?"\(" 则匹?"("?/td> </tr> <tr> <td>^</td> <td>匚w输入字符串的开始位|。如果设|了(jin) <strong>RegExp</strong> 对象?<strong>Multiline</strong> 属性,^ 也匹?'\n' ?'\r' 之后的位|?/td> </tr> <tr> <td>$</td> <td>匚w输入字符串的l束位置。如果设|了(jin)<strong>RegExp</strong> 对象?<strong>Multiline</strong> 属性,$ 也匹?'\n' ?'\r' 之前的位|?/td> </tr> <tr> <td>*</td> <td>匚w前面的子表达式零ơ或多次。例如,zo* 能匹?"z" 以及(qing) "zoo"? {h(hun)于{0,}?/td> </tr> <tr> <td>+</td> <td>匚w前面的子表达式一ơ或多次。例如,'zo+' 能匹?"zo" 以及(qing) "zoo"Q但不能匚w "z"? {h(hun)?{1,}?/td> </tr> <tr> <td>?</td> <td>匚w前面的子表达式零ơ或一ơ。例如,"do(es)?" 可以匚w "do" ?"does" 中的"do" ? {h(hun)?{0,1}?/td> </tr> <tr> <td>{<em>n</em>}</td> <td> <em>n</em> 是一个非负整数。匹配确定的 <em>n</em> ơ。例如,'o{2}' 不能匚w "Bob" 中的 'o'Q但是能匚w "food" 中的两个 o?/td> </tr> <tr> <td>{<em>n</em>,}</td> <td> <em>n</em> 是一个非负整数。至匹?em>n</em> ơ。例如,'o{2,}' 不能匚w "Bob" 中的 'o'Q但能匹?"foooood" 中的所?o?o{1,}' {h(hun)?'o+'?o{0,}' 则等价于 'o*'?/td> </tr> <tr> <td>{<em>n</em>,<em>m</em>}</td> <td> <em>m</em> ?<em>n</em> 均ؓ(f)非负整数Q其?em>n</em> <= <em>m</em>。最匹?<em>n</em> ơ且最多匹?<em>m</em> ơ。例如,"o{1,3}" 匹?"fooooood" 中的前三?o?o{0,1}' {h(hun)?'o?'。请注意在逗号和两个数之间不能有空根{?/td> </tr> <tr> <td>?</td> <td>当该字符紧跟在Q何一个其他限制符 (*, +, ?, {<em>n</em>}, {<em>n</em>,}, {<em>n</em>,<em>m</em>}) 后面Ӟ匚w模式是非贪婪的。非贪婪模式可能少的匹配所搜烦(ch)的字W串Q而默认的贪婪模式则尽可能多的匚w所搜烦(ch)的字W串。例如,对于字符?"oooo"Q?o+?' 匹配单?"o"Q?'o+' 匹配所?'o'?/td> </tr> <tr> <td>.</td> <td>匚w?"\n" 之外的Q何单个字W。要匚w包括 '\n' 在内的Q何字W,请用象 '[.\n]' 的模式?/td> </tr> <tr> <td>(<em>pattern</em>)</td> <td>匚w <em>pattern</em> q获取这一匚w。所获取的匹配可以从产生?Matches 集合得到Q在VBScript 中?<strong>SubMatches</strong> 集合Q在JScript 中则使用 <strong>$0</strong>?strong>$9</strong> 属性。要匚w圆括号字W,请?'\(' ?'\)'?/td> </tr> <tr> <td>(?:<em>pattern</em>)</td> <td>匚w <em>pattern</em> 但不获取匚wl果Q也是说这是一个非获取匚wQ不q行存储供以后用。这在?"? 字符 (|) 来组合一个模式的各个部分是很有用。例如, 'industr(?:y|ies) 是一个比 'industry|industries' 更简略的表达式?/td> </tr> <tr> <td>(?=<em>pattern</em>)</td> <td>正向预查Q在M匚w <em>pattern</em> 的字W串开始处匚w查找字符丌Ӏ这是一个非获取匚wQ也是_(d)该匹配不需要获取供以后使用。例如,'Windows (?=95|98|NT|2000)' 能匹?"Windows 2000" 中的 "Windows" Q但不能匚w "Windows 3.1" 中的 "Windows"。预查不消耗字W,也就是说Q在一个匹配发生后Q在最后一ơ匹配之后立卛_始下一ơ匹配的搜烦(ch)Q而不是从包含预查的字W之后开始?/td> </tr> <tr> <td>(?!<em>pattern</em>)</td> <td>负向预查Q在M不匹?<em>pattern</em> 的字W串开始处匚w查找字符丌Ӏ这是一个非获取匚wQ也是_(d)该匹配不需要获取供以后使用。例?Windows (?!95|98|NT|2000)' 能匹?"Windows 3.1" 中的 "Windows"Q但不能匚w "Windows 2000" 中的 "Windows"。预查不消耗字W,也就是说Q在一个匹配发生后Q在最后一ơ匹配之后立卛_始下一ơ匹配的搜烦(ch)Q而不是从包含预查的字W之后开?</td> </tr> <tr> <td> <em>x</em>|<em>y</em></td> <td>匚w <em>x</em> ?<em>y</em>。例如,'z|food' 能匹?"z" ?"food"?(z|f)ood' 则匹?"zood" ?"food"?/td> </tr> <tr> <td>[<em>xyz</em>]</td> <td>字符集合。匹配所包含的Q意一个字W。例如, '[abc]' 可以匚w "plain" 中的 'a'?/td> </tr> <tr> <td>[^<em>xyz</em>]</td> <td>负值字W集合。匹配未包含的Q意字W。例如, '[^abc]' 可以匚w "plain" 中的'p'?/td> </tr> <tr> <td>[<em>a-z</em>]</td> <td>字符范围。匹配指定范围内的Q意字W。例如,'[a-z]' 可以匚w 'a' ?'z' 范围内的L写字母字符?/td> </tr> <tr> <td>[^<em>a-z</em>]</td> <td>负值字W范围。匹配Q何不在指定范围内的Q意字W。例如,'[^a-z]' 可以匚wM不在 'a' ?'z' 范围内的L字符?/td> </tr> <tr> <td>\b</td> <td>匚w一个单词边界,也就是指单词和空格间的位|。例如, 'er\b' 可以匚w"never" 中的 'er'Q但不能匚w "verb" 中的 'er'?/td> </tr> <tr> <td>\B</td> <td>匚w非单词边界?er\B' 能匹?"verb" 中的 'er'Q但不能匚w "never" 中的 'er'?/td> </tr> <tr> <td>\c<em>x</em></td> <td>匚w?<em>x </em>指明的控制字W。例如, \cM 匚w一?Control-M 或回车符?em>x</em> 的值必Mؓ(f) A-Z ?a-z 之一。否则,?c 视ؓ(f)一个原义的 'c' 字符?/td> </tr> <tr> <td>\d</td> <td>匚w一个数字字W。等价于 [0-9]?/td> </tr> <tr> <td>\D</td> <td>匚w一个非数字字符。等价于 [^0-9]?/td> </tr> <tr> <td>\f</td> <td>匚w一个换늬。等价于 \x0c ?\cL?/td> </tr> <tr> <td>\n</td> <td>匚w一个换行符。等价于 \x0a ?\cJ?/td> </tr> <tr> <td>\r</td> <td>匚w一个回车符。等价于 \x0d ?\cM?/td> </tr> <tr> <td>\s</td> <td>匚wMI白字符Q包括空根{制表符、换늬{等。等价于 [ (tng)\f\n\r\t\v]?/td> </tr> <tr> <td>\S</td> <td>匚wM非空白字W。等价于 [^ (tng)\f\n\r\t\v]?/td> </tr> <tr> <td>\t</td> <td>匚w一个制表符。等价于 \x09 ?\cI?/td> </tr> <tr> <td>\v</td> <td>匚w一个垂直制表符。等价于 \x0b ?\cK?/td> </tr> <tr> <td>\w</td> <td>匚w包括下划U的M单词字符。等价于'[A-Za-z0-9_]'?/td> </tr> <tr> <td>\W</td> <td>匚wM非单词字W。等价于 '[^A-Za-z0-9_]'?/td> </tr> <tr> <td>\x<em>n</em></td> <td>匚w <em>n</em>Q其?<em>n</em> 为十六进制{义倹{十六进制{义值必Mؓ(f)定的两个数字长。例如,'\x41' 匚w "A"?\x041' 则等价于 '\x04' & "1"。正则表辑ּ中可以?ASCII ~码?</td> </tr> <tr> <td>\<em>num</em></td> <td>匚w <em>num</em>Q其?<em>num</em> 是一个正整数。对所获取的匹配的引用。例如,'(.)\1' 匚w两个q箋(hu)的相同字W?/td> </tr> <tr> <td>\<em>n</em></td> <td>标识一个八q制转义值或一个向后引用。如?\<em>n</em> 之前臛_ <em>n</em> 个获取的子表辑ּQ则 <em>n</em> 为向后引用。否则,如果 <em>n</em> 为八q制数字 (0-7)Q则 <em>n</em> Z个八q制转义倹{?/td> </tr> <tr> <td>\<em>nm</em></td> <td>标识一个八q制转义值或一个向后引用。如?\<em>nm</em> 之前臛_?<em>nm</em> 个获得子表达式,?<em>nm</em> 为向后引用。如?\<em>nm</em> 之前臛_?<em>n</em> 个获取,?<em>n</em> Z个后跟文?<em>m </em>的向后引用。如果前面的条g都不满Q若 <em>n</em> ?<em>m</em> 均ؓ(f)八进制数?(0-7)Q则 \<em>nm</em> 匹配八q制转义?<em>nm</em>?/td> </tr> <tr> <td>\<em>nml</em></td> <td>如果 <em>n</em> 为八q制数字 (0-3)Q且 <em>m</em> ?<em>l</em> 均ؓ(f)八进制数?(0-7)Q则匚w八进制{义?<em>nml?/em></td> </tr> <tr> <td>\u<em>n</em></td> <td>匚w <em>n</em>Q其?<em>n</em> 是一个用四个十六q制数字表示?Unicode 字符。例如, \u00A9 匚w版权W号 (©)?/td> </tr> </tbody> </table> </div> </div> <div id="57tp3f3" class="postfoot"> <div id="l11nxrh" class="em"> (tng)</div> </div> <img src ="http://m.tkk7.com/aawanghuan/aggbug/76338.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/aawanghuan/" target="_blank">萝卜青菜</a> 2006-10-20 10:56 <a href="http://m.tkk7.com/aawanghuan/articles/76338.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>正则表达式学?fn)日?http://m.tkk7.com/aawanghuan/articles/76339.html萝卜青菜萝卜青菜Fri, 20 Oct 2006 02:56:00 GMThttp://m.tkk7.com/aawanghuan/articles/76339.htmlhttp://m.tkk7.com/aawanghuan/comments/76339.htmlhttp://m.tkk7.com/aawanghuan/articles/76339.html#Feedback0http://m.tkk7.com/aawanghuan/comments/commentRss/76339.htmlhttp://m.tkk7.com/aawanghuan/services/trackbacks/76339.html
正则表达式学?fn)日?/a>
1、?”ؓ(f)通配W,表示M一个字W,例如Q“a.c”可以匹配“anc”、“abc”、“acc”;
2、“[]”,在[]内可以指定要求匹配的字符Q例如:(x)“a[nbc]c”可以匹配“anc”、“abc”、“acc?br />
Q但不可以匹配“ancc?a到z可以写成[a-z],0?可以写成[0-9];

3、数量限定符P表示匚wơ数Q或者叫做长度)(j)的符P(x)

包括Q?”—?ơ或者多?br />?”—?ơ或者多?br />?”—?ơ或??br />“{n}”——匹配nơ,n为整?br />“{n,m}”——匹配从n到m之间的某个数的次敎ͼn和m都是整数Q?br />“{n,}”——匹配n到无Ih之间Lơ数Q?br />“{,m}”——匹?到m之间Lơ数Q?br />他们攑ֈ匚w格式的后面:(x)
例如Q?br />?sh)话L(fng)Q?24Q?4820482Q?2484820482(假设前面3或?位,后面7或?位,q且中间的减号可有可?

都是W合规定的,那么可以用如下格式来匚wQ[0-9]{3,4} \-? [0-9]{7,8}Q?br />注意Q“\”ؓ(f)转义字符Q因为?”在正则表达式用有代表一个范围的意义Q例如:(x)前面所说的[0-9]Q?br />
所以它需要{义字W“\”进行{义才可用;
4、“^”ؓ(f)否符P表示不想匚w的符P例如Q[^z][a-z]+可以匚w所有除“z”开头的以外的所有字

W串Q长度大?Q因为?”表C大于等?的次敎ͼ从第二位开始都是小写英文字W)(j)Q?br />如果^攑ֈ[]的外边则表示以[]开头的字符Ԍ^[az][a-z]+表示a或者z开头的长度大于{于2的英文字W?br />
Ԍ
5、“|”或q算W,例如Qa[n|bc|cb]c可以匚w“abcc?“anc?“acbc”;
6、?”以它前面的字符l尾的;例如Qab+$可以被“abb”,“ab”匹配;
7、一些简单表C方法:(x)
\d表示[0-9];\D表示[^0-9];\w表示[A-Z0-9];\W表示[^A-Z0-9];\s表示[\t\n\r\f],是I格字符包括tab

Q空格等{?\S表示[^\t\n\r\f]Q就是非I格字符;
8、常用的匚wQ?br />匚w中文字符Q?“[\u4e00-\u9fa5]”;
匚w双字节字W?包括汉字在内)Q“[^\x00-\xff]”;
匚wI的正则表辑ּQ“\n[\s| ]*\r”;
匚wHTML标记的正则表辑ּQ?<(.*)>.*<\/\1>|<(.*) \/>/”;
匚w首尾I格的正则表辑ּQ?^\s*)|(\s*$)”;
匚w非负整数Q正整数 + 0Q:(x)“^\d+$”;  
匚w正整敎ͼ(x)“^[0-9]*[1-9][0-9]*$”;
匚w非正整数Q负整数 + 0Q:(x)“^((-\d+)|(0+))$”;
匚w负整敎ͼ(x)“^-[0-9]*[1-9][0-9]*$”;
匚w整数Q“^-?\d+$”;
匚w非负点敎ͼ正QҎ(gu) + 0Q:(x)“^\d+(\.\d+)?$?br />匚w正QҎ(gu)Q“^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*

))$”;
^((-\d+(\.\d+)?)|(0+(\.0+)?))$  //匚w非正点敎ͼ负QҎ(gu) + 0Q?
^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$  //匚w

负QҎ(gu)
匚w点敎ͼ(x)“^(-?\d+)(\.\d+)?$”;
匚w由数字?6个英文字母或者下划线l成的字W串Q“^\w+$”;
匚wemail地址Q“^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$”;
匚wurlQ“^[a-zA-z]+://匚w(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$?br />

萝卜青菜 2006-10-20 10:56 发表评论
]]>
正则表达式基知识 http://m.tkk7.com/aawanghuan/articles/76337.html萝卜青菜萝卜青菜Fri, 20 Oct 2006 02:55:00 GMThttp://m.tkk7.com/aawanghuan/articles/76337.htmlhttp://m.tkk7.com/aawanghuan/comments/76337.htmlhttp://m.tkk7.com/aawanghuan/articles/76337.html#Feedback0http://m.tkk7.com/aawanghuan/comments/commentRss/76337.htmlhttp://m.tkk7.com/aawanghuan/services/trackbacks/76337.html
 (tng)
 (tng)
正则表达式基知识
一个正则表辑ּ是由普通字W(例如字符 a ?zQ以?qing)特D字W(UCؓ(f)元字W)(j)l成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符丌Ӏ正则表辑ּ作ؓ(f)一个模板,某个字W模式与所搜烦(ch)的字W串q行匚w。如Q?

JScript VBScript 匚w
/^\[ \t]*$/ "^\[ \t]*$" 匚w一个空白行?
/\d{2}-\d{5}/ "\d{2}-\d{5}" 验证一个ID L(fng)是否׃?位数字,一个连字符以及(qing)一?位数字组成?
/<(.*)>.*<\/\1>/ "<(.*)>.*<\/\1>" 匚w一?HTML 标记?


下表是元字符?qing)其在正则表辑ּ上下文中的行为的一个完整列表:(x)
字符 描述
\ 下一个字W标Cؓ(f)一个特D字W、或一个原义字W、或一?向后引用、或一个八q制转义W。例如,'n' 匚w字符 "n"?\n' 匚w一个换行符。序?'\\' 匚w "\" ?"\(" 则匹?"("?
^ 匚w输入字符串的开始位|。如果设|了(jin) RegExp 对象?Multiline 属性,^ 也匹?'\n' ?'\r' 之后的位|?
$ 匚w输入字符串的l束位置。如果设|了(jin)RegExp 对象?Multiline 属性,$ 也匹?'\n' ?'\r' 之前的位|?
* 匚w前面的子表达式零ơ或多次。例如,zo* 能匹?"z" 以及(qing) "zoo"? {h(hun)于{0,}?
+ 匚w前面的子表达式一ơ或多次。例如,'zo+' 能匹?"zo" 以及(qing) "zoo"Q但不能匚w "z"? {h(hun)?{1,}?
? 匚w前面的子表达式零ơ或一ơ。例如,"do(es)?" 可以匚w "do" ?"does" 中的"do" ? {h(hun)?{0,1}?
{n} n 是一个非负整数。匹配确定的 n ơ。例如,'o{2}' 不能匚w "Bob" 中的 'o'Q但是能匚w "food" 中的两个 o?
{n,} n 是一个非负整数。至匹配n ơ。例如,'o{2,}' 不能匚w "Bob" 中的 'o'Q但能匹?"foooood" 中的所?o?o{1,}' {h(hun)?'o+'?o{0,}' 则等价于 'o*'?
{n,m} m ?n 均ؓ(f)非负整数Q其中n <= m。最匹?n ơ且最多匹?m ơ。例如,"o{1,3}" 匹?"fooooood" 中的前三?o?o{0,1}' {h(hun)?'o?'。请注意在逗号和两个数之间不能有空根{?
? 当该字符紧跟在Q何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面Ӟ匚w模式是非贪婪的。非贪婪模式可能少的匹配所搜烦(ch)的字W串Q而默认的贪婪模式则尽可能多的匚w所搜烦(ch)的字W串。例如,对于字符?"oooo"Q?o+?' 匹配单?"o"Q?'o+' 匹配所?'o'?
. 匚w?"\n" 之外的Q何单个字W。要匚w包括 '\n' 在内的Q何字W,请用象 '[.\n]' 的模式?
(pattern) 匚w pattern q获取这一匚w。所获取的匹配可以从产生?Matches 集合得到Q在VBScript 中?SubMatches 集合Q在JScript 中则使用 $0?9 属性。要匚w圆括号字W,请?'\(' ?'\)'?
(?:pattern) 匚w pattern 但不获取匚wl果Q也是说这是一个非获取匚wQ不q行存储供以后用。这在?"? 字符 (|) 来组合一个模式的各个部分是很有用。例如, 'industr(?:y|ies) 是一个比 'industry|industries' 更简略的表达式?
(?=pattern) 正向预查Q在M匚w pattern 的字W串开始处匚w查找字符丌Ӏ这是一个非获取匚wQ也是_(d)该匹配不需要获取供以后使用。例如,'Windows (?=95|98|NT|2000)' 能匹?"Windows 2000" 中的 "Windows" Q但不能匚w "Windows 3.1" 中的 "Windows"。预查不消耗字W,也就是说Q在一个匹配发生后Q在最后一ơ匹配之后立卛_始下一ơ匹配的搜烦(ch)Q而不是从包含预查的字W之后开始?
(?!pattern) 负向预查Q在M不匹?pattern 的字W串开始处匚w查找字符丌Ӏ这是一个非获取匚wQ也是_(d)该匹配不需要获取供以后使用。例?Windows (?!95|98|NT|2000)' 能匹?"Windows 3.1" 中的 "Windows"Q但不能匚w "Windows 2000" 中的 "Windows"。预查不消耗字W,也就是说Q在一个匹配发生后Q在最后一ơ匹配之后立卛_始下一ơ匹配的搜烦(ch)Q而不是从包含预查的字W之后开?
x|y 匚w x ?y。例如,'z|food' 能匹?"z" ?"food"?(z|f)ood' 则匹?"zood" ?"food"?
[xyz] 字符集合。匹配所包含的Q意一个字W。例如, '[abc]' 可以匚w "plain" 中的 'a'?
[^xyz] 负值字W集合。匹配未包含的Q意字W。例如, '[^abc]' 可以匚w "plain" 中的'p'?
[a-z] 字符范围。匹配指定范围内的Q意字W。例如,'[a-z]' 可以匚w 'a' ?'z' 范围内的L写字母字符?
[^a-z] 负值字W范围。匹配Q何不在指定范围内的Q意字W。例如,'[^a-z]' 可以匚wM不在 'a' ?'z' 范围内的L字符?
\b 匚w一个单词边界,也就是指单词和空格间的位|。例如, 'er\b' 可以匚w"never" 中的 'er'Q但不能匚w "verb" 中的 'er'?
\B 匚w非单词边界?er\B' 能匹?"verb" 中的 'er'Q但不能匚w "never" 中的 'er'?
\cx 匚w?x 指明的控制字W。例如, \cM 匚w一?Control-M 或回车符。x 的值必Mؓ(f) A-Z ?a-z 之一。否则,?c 视ؓ(f)一个原义的 'c' 字符?
\d 匚w一个数字字W。等价于 [0-9]?
\D 匚w一个非数字字符。等价于 [^0-9]?
\f 匚w一个换늬。等价于 \x0c ?\cL?
\n 匚w一个换行符。等价于 \x0a ?\cJ?
\r 匚w一个回车符。等价于 \x0d ?\cM?
\s 匚wMI白字符Q包括空根{制表符、换늬{等。等价于 [ \f\n\r\t\v]?
\S 匚wM非空白字W。等价于 [^ \f\n\r\t\v]?
\t 匚w一个制表符。等价于 \x09 ?\cI?
\v 匚w一个垂直制表符。等价于 \x0b ?\cK?
\w 匚w包括下划U的M单词字符。等价于'[A-Za-z0-9_]'?
\W 匚wM非单词字W。等价于 '[^A-Za-z0-9_]'?
\xn 匚w nQ其?n 为十六进制{义倹{十六进制{义值必Mؓ(f)定的两个数字长。例如,'\x41' 匚w "A"?\x041' 则等价于 '\x04' & "1"。正则表辑ּ中可以?ASCII ~码?
\num 匚w numQ其?num 是一个正整数。对所获取的匹配的引用。例如,'(.)\1' 匚w两个q箋(hu)的相同字W?
\n 标识一个八q制转义值或一个向后引用。如?\n 之前臛_ n 个获取的子表辑ּQ则 n 为向后引用。否则,如果 n 为八q制数字 (0-7)Q则 n Z个八q制转义倹{?
\nm 标识一个八q制转义值或一个向后引用。如?\nm 之前臛_?nm 个获得子表达式,?nm 为向后引用。如?\nm 之前臛_?n 个获取,?n Z个后跟文?m 的向后引用。如果前面的条g都不满Q若 n ?m 均ؓ(f)八进制数?(0-7)Q则 \nm 匹配八q制转义?nm?
\nml 如果 n 为八q制数字 (0-3)Q且 m ?l 均ؓ(f)八进制数?(0-7)Q则匚w八进制{义?nml?
\un 匚w nQ其?n 是一个用四个十六q制数字表示?Unicode 字符。例如, \u00A9 匚w版权W号 (©)?


下面看几个例子:(x)
"^The"Q表C所有以"The"开始的字符Ԍ"There"Q?The cat"{)(j)Q?
"of despair$"Q表C所以以"of despair"l尾的字W串Q?
"^abc$"Q表C开始和l尾都是"abc"的字W串——呵呵,只有"abc"自己?jin)?
"notice"Q表CZQ何包?notice"的字W串?

'*'Q?+'??'q三个符P表示一个或一序列字符重复出现的次数。它们分别表C“没有或
更多”,“一ơ或更多”还有“没有或一ơ”。下面是几个例子Q?

"ab*"Q表CZ个字W串有一个a后面跟着零个或若q个b。("a", "ab", "abbb",……)(j)Q?
"ab+"Q表CZ个字W串有一个a后面跟着臛_一个b或者更多;
"ab?"Q表CZ个字W串有一个a后面跟着零个或者一个bQ?
"a?b+$"Q表C在字符串的末尾有零个或一个a跟着一个或几个b?

也可以用范_(d)用大括号括vQ用以表C重复次数的范围?

"ab{2}"Q表CZ个字W串有一个a跟着2个bQ?abb"Q;
"ab{2,}"Q表CZ个字W串有一个a跟着臛_2个bQ?
"ab{3,5}"Q表CZ个字W串有一个a跟着3?个b?

h意,你必L定范围的下限Q如Q?{0,2}"而不?{,2}"Q。还有,你可能注意到?jin)?*'Q?+'?
'?'相当?{0,}"Q?{1,}"?{0,1}"?
q有一?'Q表C“或”操作:(x)

"hihello"Q表CZ个字W串里有"hi"或?hello"Q?
"(bcd)ef"Q表C?bef"?cdef"Q?
"(ab)*c"Q表CZ?a""b"混合的字W串后面跟一?c"Q?

'.'可以替代M字符Q?

"a.[0-9]"Q表CZ个字W串有一?a"后面跟着一个Q意字W和一个数字;
"^.{3}$"Q表C有L三个字符的字W串Q长度ؓ(f)3个字W)(j)Q?

Ҏ(gu)可C某些字W允许在一个字W串中的某一特定位置出现Q?

"[ab]"Q表CZ个字W串有一?a"?b"Q相当于"ab"Q;
"[a-d]"Q表CZ个字W串包含写?a'?d'中的一个(相当?abcd"或?[abcd]"Q;
"^[a-zA-Z]"Q表CZ个以字母开头的字符Ԍ
"[0-9]%"Q表CZ个百分号前有一位的数字Q?
",[a-zA-Z0-9]$"Q表CZ个字W串以一个逗号后面跟着一个字母或数字l束?

你也可以在方括号里用'^'表示不希望出现的字符Q?^'应在Ҏ(gu)号里的第一位。(如:(x)"%[^a-zA-Z]%"?
CZ个百分号中不应该出现字母Q?

Z(jin)逐字表达Q必d"^.$()*+?{\"q些字符前加上{UdW?\'?

h意在Ҏ(gu)号中Q不需要{义字W?br />
 (tng)

 (tng)



萝卜青菜 2006-10-20 10:55 发表评论
]]>
JScript ?VBScript 正则表达?Ҏ(gu)字符 http://m.tkk7.com/aawanghuan/articles/76336.html萝卜青菜萝卜青菜Fri, 20 Oct 2006 02:53:00 GMThttp://m.tkk7.com/aawanghuan/articles/76336.htmlhttp://m.tkk7.com/aawanghuan/comments/76336.htmlhttp://m.tkk7.com/aawanghuan/articles/76336.html#Feedback0http://m.tkk7.com/aawanghuan/comments/commentRss/76336.htmlhttp://m.tkk7.com/aawanghuan/services/trackbacks/76336.html JScript ?VBScript 正则表达?Ҏ(gu)字符 有不元字符在试囑֯其进行匹配时需要进行特D的处理。要匚wq些Ҏ(gu)字符Q必首先将q些字符转义Q也是在前面用一个反斜杠 (\)。下表给Z(jin)q些Ҏ(gu)字符?qing)其含义Q?br />
Ҏ(gu)字符 说明
$ 匚w输入字符串的l尾位置。如果设|了(jin) RegExp 对象?Multiline 属性,?$ 也匹?'\n' ?'\r'。要匚w $ 字符本nQ请使用 \$?
( ) 标记一个子表达式的开始和l束位置。子表达式可以获取供以后使用。要匚wq些字符Q请使用 \( ?\)?
* 匚w前面的子表达式零ơ或多次。要匚w * 字符Q请使用 \*?
+ 匚w前面的子表达式一ơ或多次。要匚w + 字符Q请使用 \+?
. 匚w除换行符 \n之外的Q何单字符。要匚w .Q请使用 \?
[ 标记一个中括号表达式的开始。要匚w [Q请使用 \[?
? 匚w前面的子表达式零ơ或一ơ,或指明一个非贪婪限定W。要匚w ? 字符Q请使用 \??
\ 下一个字W标Cؓ(f)或特D字W、或原义字符、或向后引用、或八进制{义符。例如, 'n' 匚w字符 'n'?\n' 匚w换行W。序?'\\' 匚w "\"Q?'\(' 则匹?"("?
^ 匚w输入字符串的开始位|,除非在方括号表达式中使用Q此时它表示不接受该字符集合。要匚w ^ 字符本nQ请使用 \^?
{ 标记限定W表辑ּ的开始。要匚w {Q请使用 \{?
| 指明两项之间的一个选择。要匚w |Q请使用 \|?


萝卜青菜 2006-10-20 10:53 发表评论
]]>
正则表达式概q?/title><link>http://m.tkk7.com/aawanghuan/articles/76335.html</link><dc:creator>萝卜青菜</dc:creator><author>萝卜青菜</author><pubDate>Fri, 20 Oct 2006 02:52:00 GMT</pubDate><guid>http://m.tkk7.com/aawanghuan/articles/76335.html</guid><wfw:comment>http://m.tkk7.com/aawanghuan/comments/76335.html</wfw:comment><comments>http://m.tkk7.com/aawanghuan/articles/76335.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/aawanghuan/comments/commentRss/76335.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/aawanghuan/services/trackbacks/76335.html</trackback:ping><description><![CDATA[     摘要: 正则表达式概q? 在前面已l涉?qing)?jin)一些正则表辑ּ的用法,现在系l地学习(fn)正则表达式的语法和用途。正则表辑ּ主要用于q行字符串的模式匚wQ例如判断一个字W串是否W合指定格式{。例如在windows下搜索文Ӟ可以用?”或者?”这L(fng)通配W。在正则表达式的语法中,有更多这L(fng)W号用于表示一个字W串的模式,?.1列出?jin)所有的Ҏ(gu)W号Q它们也被称为元字符? ...  <a href='http://m.tkk7.com/aawanghuan/articles/76335.html'>阅读全文</a><img src ="http://m.tkk7.com/aawanghuan/aggbug/76335.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/aawanghuan/" target="_blank">萝卜青菜</a> 2006-10-20 10:52 <a href="http://m.tkk7.com/aawanghuan/articles/76335.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SVN使用技?/title><link>http://m.tkk7.com/aawanghuan/articles/75840.html</link><dc:creator>萝卜青菜</dc:creator><author>萝卜青菜</author><pubDate>Wed, 18 Oct 2006 02:43:00 GMT</pubDate><guid>http://m.tkk7.com/aawanghuan/articles/75840.html</guid><wfw:comment>http://m.tkk7.com/aawanghuan/comments/75840.html</wfw:comment><comments>http://m.tkk7.com/aawanghuan/articles/75840.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/aawanghuan/comments/commentRss/75840.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/aawanghuan/services/trackbacks/75840.html</trackback:ping><description><![CDATA[ <div> <h2 class="title"> <br /> <a name="_Toc121547260"> </a> (tng)</h2> <div id="1x3bjrf" class="mybody"> <div id="dvptl3f" class="Section1"> <p class="a" style="TEXT-INDENT: 24pt"> <span style="FONT-FAMILY: ?hu)?>E序员编写程序的q程中,每个E序都会(x)有很多不同的版本Q这需要程序员很好的管理代码,在需要的旉可以取出需要的版本Qƈ且每个版本都有一个完整的说明?/span> </p> <p class="a" style="TEXT-INDENT: 24pt"> <span style="FONT-FAMILY: ?hu)?>我们使用</span>Sub Version<span style="FONT-FAMILY: ?hu)?>Q简U?/span>SVN<span style="FONT-FAMILY: ?hu)?>Q作为版本管理工兗这里着重介l?/span>SVN<span style="FONT-FAMILY: ?hu)?>作ؓ(f)跨^台的多h协作使用Ҏ(gu)。在多个E序员管理同一D代码的q程中,版本的管理显得尤为重要,使用</span>SVN<span style="FONT-FAMILY: ?hu)?>可以方便的进行分支、合qӞ记录下所有的版本?/span></p> <a name="_Toc121547261"> </a> <span> <span style="FONT-FAMILY: ?hu)?>基本配置</span> </span> <p class="a" style="TEXT-INDENT: 24pt"> <span style="FONT-FAMILY: ?hu)?>在开始某Y件、文档的开发与撰写Ӟ首先由配|管理负责h建立</span>SVN<span style="FONT-FAMILY: ?hu)?>仓库、用户名?qing)其权限Qƈ通知相关人员</span>SVN<span style="FONT-FAMILY: ?hu)?>仓库地址?/span>SVN<span style="FONT-FAMILY: ?hu)?>仓库负责人?/span></p> <a name="_Toc121547262"> </a> <p class="a" style="TEXT-INDENT: 24pt">SVN<span style="FONT-FAMILY: ?hu)?>仓库的负责h把工E的</span>tsvn:logminisize<span style="FONT-FAMILY: ?hu)?>讄?/span>1<span style="FONT-FAMILY: ?hu)?>Q以便强制注释。设|方法:(x)在你的工E文件夹右键</span>-><span style="FONT-FAMILY: ?hu)?>属性中Q进?/span>Subversion<span style="FONT-FAMILY: ?hu)?>标签Q选中</span>tsvn: logminisize<span style="FONT-FAMILY: ?hu)?>Q确保复选框</span>recursive<span style="FONT-FAMILY: ?hu)?>选中Q然后点?/span>Set<span style="FONT-FAMILY: ?hu)?>按钮把它的D?/span>1<span style="FONT-FAMILY: ?hu)?>Q其意思是指提交的注释最短长度ؓ(f)一个字。如图:(x)</span></p> <p class="a" style="MARGIN-LEFT: 60pt; TEXT-INDENT: 24pt"> <img height="541" src="file:///D:/Documents/其他技术文?SVN使用技?20-%20xyz黑板.files/image002.jpg" width="397" border="0" /> </p> <p class="MsoCaption"> <span style="FONT-FAMILY: ?hu)?>?/span> <span> <span>2</span> </span> <span>.</span> <span> <span>1</span> </span> </p> <a name="_Toc121547263"> </a> <span> <span style="FONT-FAMILY: ?hu)?>软g配置</span> </span> <p class="a" style="MARGIN-LEFT: 45pt; TEXT-INDENT: -21pt"> <span style="FONT-FAMILY: Wingdings"> <span>l<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal"> (tng) (tng) (tng) (tng) (tng) (tng) (tng) </span></span> </span> <span style="FONT-FAMILY: ?hu)?>忽略文g</span> </p> <p class="a" style="TEXT-INDENT: 24pt"> <span style="FONT-FAMILY: ?hu)?>?/span> <span>SVN </span> <span style="FONT-FAMILY: ?hu)?>?/span> <span>[Setting]</span> <span style="FONT-FAMILY: ?hu)?>?/span> <span>[General]</span> <span style="FONT-FAMILY: ?hu)?>?/span> <span style="FONT-FAMILY: ?hu)?>Q?/span> <span style="FONT-FAMILY: ?hu)?>讄需要忽略的文g以便忽略掉一些(f)时的、无用的文g</span> <span style="FONT-FAMILY: ?hu)?>Q?/span> <span style="FONT-FAMILY: ?hu)?>常被忽略的文件有</span> <span>*.opt *.ncb *.suo *.plg *.pch *.idb *.pdb *.scc *.obj Debug Release *.o *.bin *.out *.ilk *.aps debug release *.clw *.bak</span> <span style="FONT-FAMILY: ?hu)?>。每个程序员可以Ҏ(gu)自己的需要进行修改忽略文Ӟ上面只是使用</span>VC++<span style="FONT-FAMILY: ?hu)?>?/span>Tornado<span style="FONT-FAMILY: ?hu)?>~程时常用的一些忽略文件?/span><img height="371" src="file:///D:/Documents/其他技术文?SVN使用技?20-%20xyz黑板.files/image004.jpg" width="586" border="0" /></p> <p class="MsoCaption"> <span style="FONT-FAMILY: ?hu)?>?/span> <span> <span>2</span> </span> <span>.</span> <span> <span>2</span> </span> </p> <p class="a" style="TEXT-INDENT: 24pt"> <span style="FONT-FAMILY: ?hu)?>以上说的忽略文g是指全局的忽略文件?/span>SVN<span style="FONT-FAMILY: ?hu)?>q能在特定的目录中指定需要忽略的文g。忽略文件支持通配W?/span></p> <p class="a" style="MARGIN-LEFT: 45pt; TEXT-INDENT: -21pt"> <span style="FONT-FAMILY: Wingdings"> <span>l<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal"> (tng) (tng) (tng) (tng) (tng) (tng) (tng) </span></span> </span> <span style="FONT-FAMILY: ?hu)?>合ƈ比较工具</span> </p> <p class="a" style="TEXT-INDENT: 24pt"> <span style="FONT-FAMILY: ?hu)?>?/span>Merge Tool<span style="FONT-FAMILY: ?hu)?>中可以选择用来合ƈ的工P强烈推荐?/span>Araxis Merge<span style="FONT-FAMILY: ?hu)?>。在</span>[Setting]->[Diff]<span style="FONT-FAMILY: ?hu)?>中填?/span>"C:\Program Files\Araxis\Araxis Merge v6.5\Merge.exe"<span style="FONT-FAMILY: ?hu)?>Q在</span>[Setting]->[Merge]<span style="FONT-FAMILY: ?hu)?>的选项中,填入</span>"C:\Program Files\Araxis\Araxis Merge v6.5\Merge.exe" %theirs %mine %merged <span style="FONT-FAMILY: ?hu)?>Q其?/span>"C:\Program Files\Araxis\Araxis Merge v6.5\Merge.exe"<span style="FONT-FAMILY: ?hu)?>是指合ƈ工具的\径,</span>%theirs %mine %merged<span style="FONT-FAMILY: ?hu)?>分别?/span>..<span style="FONT-FAMILY: ?hu)?>要合ƈCq的分支Q主qԌ?qing)合q后的结果?/span></p> <p class="a" style="TEXT-INDENT: 24pt"> <img height="371" src="file:///D:/Documents/其他技术文?SVN使用技?20-%20xyz黑板.files/image006.jpg" width="586" border="0" /> </p> <p class="MsoCaption"> <span style="FONT-FAMILY: ?hu)?>?/span> <span> <span>2</span> </span> <span>.</span> <span> <span>3</span> </span> </p> <a name="_Toc121547264"> </a> <span> <span style="FONT-FAMILY: ?hu)?>仓库目录l构</span> </span> <p class="a" style="TEXT-INDENT: 24pt">SVN<span style="FONT-FAMILY: ?hu)?>仓库的负责h规划好仓库的目录l构。推荐的目录l构如下图所C?/span></p> <p class="a" style="TEXT-INDENT: 24pt"> <span style="FONT-FAMILY: ?hu)?>仓库的一U目录只有两个,分别?/span>code<span style="FONT-FAMILY: ?hu)?>?/span>doc<span style="FONT-FAMILY: ?hu)?>。其中,</span>doc<span style="FONT-FAMILY: ?hu)?>主要用来攄先期的文档,</span>code<span style="FONT-FAMILY: ?hu)?>主要用来攄工程的代码,也可以包含后期的文档?/span></p> <p class="a" style="TEXT-INDENT: 24pt"> <span style="FONT-FAMILY: ?hu)?>仓库的二U目录只可以?/span>branch<span style="FONT-FAMILY: ?hu)?>?/span>trunk<span style="FONT-FAMILY: ?hu)?>两个目录Q分别存放主q与分支?/span>trunk<span style="FONT-FAMILY: ?hu)?>目录下直接存攑ַE文件?/span>branch<span style="FONT-FAMILY: ?hu)?>目录下包括一些子目录分别对应各个分支?/span></p> <p class="MsoNormal" style="TEXT-ALIGN: center" align="center"> <span> <img height="445" src="file:///D:/Documents/其他技术文?SVN使用技?20-%20xyz黑板.files/image008.jpg" width="586" border="0" /> </span> </p> <p class="MsoCaption"> <span style="FONT-FAMILY: ?hu)?>?/span> <span> <span>2</span> </span> <span>.</span> <span> <span>4</span> </span> </p> <a name="_Toc121547265"> </a> <p class="a" style="TEXT-INDENT: 24pt"> <span style="FONT-FAMILY: ?hu)?>?/span> <span>SVN</span> <span style="FONT-FAMILY: ?hu)?>仓库中取Z码时</span> <span style="FONT-FAMILY: ?hu)?>Q一?/span> <span style="FONT-FAMILY: ?hu)?>不要把整个仓库取出来</span> <span style="FONT-FAMILY: ?hu)?>Q?/span> <span style="FONT-FAMILY: ?hu)?>而应该只取出</span> <span>trunk</span> <span style="FONT-FAMILY: ?hu)?>目录</span> <span style="FONT-FAMILY: ?hu)?>Q?/span> <span style="FONT-FAMILY: ?hu)?>或只取出</span> <span>branch</span> <span style="FONT-FAMILY: ?hu)?>下的某个分支目录</span> <span style="FONT-FAMILY: ?hu)?>Q比</span> <span style="FONT-FAMILY: ?hu)?>如上图中?/span> <span>svn:\\code\branch\xw_051206</span> <span style="FONT-FAMILY: ?hu)?>Q?/span> <span style="FONT-FAMILY: ?hu)?>?/span> </p> <a name="_Toc121547266"> </a> <a name="_Toc121547267"> </a> <p class="a" style="TEXT-INDENT: 24pt"> <span style="FONT-FAMILY: ?hu)?>一个项目会(x)有多个h共同合作开发完成。基本流E是Q?/span> </p> <p class="a" style="MARGIN-LEFT: 45pt; TEXT-INDENT: -21pt"> <span style="FONT-FAMILY: Wingdings"> <span>l<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal"> (tng) (tng) (tng) (tng) (tng) (tng) (tng) </span></span> </span> <span style="FONT-FAMILY: ?hu)?>各开发成员徏立自q分支Qƈ在此分支上开发;</span> </p> <p class="a" style="MARGIN-LEFT: 45pt; TEXT-INDENT: -21pt"> <span style="FONT-FAMILY: Wingdings"> <span>l<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal"> (tng) (tng) (tng) (tng) (tng) (tng) (tng) </span></span> </span> <span style="FONT-FAMILY: ?hu)?>各开发成员把分支合ƈCq上qŞ成较为稳定的版本Q?/span> </p> <p class="a" style="MARGIN-LEFT: 45pt; TEXT-INDENT: -21pt"> <span style="FONT-FAMILY: Wingdings"> <span>l<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal"> (tng) (tng) (tng) (tng) (tng) (tng) (tng) </span></span> </span> <span style="FONT-FAMILY: ?hu)?>各个成员重新从主q上建立新的分支Q在此分支上开?/span> <span>(</span> <span style="FONT-FAMILY: ?hu)?>卛_到第一?/span> <span>)</span> </p> <p class="a" style="MARGIN-LEFT: 45pt; TEXT-INDENT: -21pt"> <span style="FONT-FAMILY: Wingdings"> <span>l<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal"> (tng) (tng) (tng) (tng) (tng) (tng) (tng) </span></span> </span> <span style="FONT-FAMILY: ?hu)?>循环往(xin)复,直到工程l束?/span> </p> <p class="a" style="TEXT-INDENT: 24pt"> <span style="FONT-FAMILY: ?hu)?>下面我用一个例子来说明合作开发的基本程?/span> </p> <p class="a" style="TEXT-INDENT: 24pt"> <span style="FONT-FAMILY: ?hu)?>现在</span>xb<span style="FONT-FAMILY: ?hu)?>?/span>lzj<span style="FONT-FAMILY: ?hu)?>两个开发h员要共同开发一个工E?/span>onlytest<span style="FONT-FAMILY: ?hu)?>Q其q个工程的主q的</span>SVN<span style="FONT-FAMILY: ?hu)?>仓库地址如下图?/span></p> <p class="MsoNormal" style="TEXT-ALIGN: center" align="center"> <span> <img height="309" src="file:///D:/Documents/其他技术文?SVN使用技?20-%20xyz黑板.files/image010.jpg" width="450" border="0" /> </span> </p> <p class="MsoCaption"> <span style="FONT-FAMILY: ?hu)?>?/span> <span> <span>2</span> </span> <span>.</span> <span> <span>5</span> </span> </p> <a name="_Toc121547268"> </a> <p class="a" style="TEXT-INDENT: 24pt">xb<span style="FONT-FAMILY: ?hu)?>?/span>lzj<span style="FONT-FAMILY: ?hu)?>分别?/span>onlytest<span style="FONT-FAMILY: ?hu)?>q个工程中徏立两个分支,分别?/span>xb _051115<span style="FONT-FAMILY: ?hu)?>?/span>lz_051115<span style="FONT-FAMILY: ?hu)?>?/span></p> <p class="a" style="TEXT-INDENT: 24pt"> <span style="FONT-FAMILY: ?hu)?>在这里分支命名要采用</span>[<span style="COLOR: rgb(51,153,102); FONT-FAMILY: ?hu)?>姓名~写</span><span style="COLOR: rgb(51,153,102)">_6</span><span style="COLOR: rgb(51,153,102); FONT-FAMILY: ?hu)?>个数的日?/span><span style="COLOR: rgb(51,153,102)">_</span><span style="COLOR: rgb(51,153,102); FONT-FAMILY: ?hu)?>后缀</span>(<span style="FONT-FAMILY: ?hu)?>可?/span>)]<span style="FONT-FAMILY: ?hu)?>的Ş式,比如</span>xb_051208_1<span style="FONT-FAMILY: ?hu)?>Q?/span>xb_051212<span style="FONT-FAMILY: ?hu)?>之类的。创建完分支后我们可以看到这个工E的目录l构如下图所C:(x)</span></p> <p class="MsoNormal" style="TEXT-ALIGN: center" align="center"> <span> <img height="426" src="file:///D:/Documents/其他技术文?SVN使用技?20-%20xyz黑板.files/image012.jpg" width="586" border="0" /> </span> </p> <p class="MsoCaption"> <span style="FONT-FAMILY: ?hu)?>?/span> <span> <span>2</span> </span> <span>.</span> <span> <span>6</span> </span> <span style="FONT-FAMILY: ?hu)?>分支目录</span> </p> <p class="a" style="TEXT-INDENT: 24pt"> <span style="FONT-FAMILY: ?hu)?>建完之后Q?/span> xb<span style="FONT-FAMILY: ?hu)?>?/span>lzj<span style="FONT-FAMILY: ?hu)?>分别在本地取出对应的分支q行开发?/span></p> <a name="_Toc121547269"> </a> <p class="a" style="TEXT-INDENT: 24pt"> <span style="FONT-FAMILY: ?hu)?>?/span> <span style="FONT-FAMILY: ?hu)?>E序到达一个比较稳定的阶段Q就需要把分支合ƈCq上Q下面讲qC下合q的程?/span> </p> <p class="a" style="TEXT-INDENT: 24pt"> <span style="FONT-FAMILY: ?hu)?>在本节中l箋(hu)使用上一节中所C的工程?/span>SVN<span style="FONT-FAMILY: ?hu)?>仓库讲解?/span></p> <span> <span>1.2.3.1 </span> </span> <span>xb</span> <span style="FONT-FAMILY: 黑体">?/span> <span>lzj</span> <span style="FONT-FAMILY: 黑体">分别修改自己分支上的代码</span> <p class="a" style="TEXT-INDENT: 24pt"> <span style="FONT-FAMILY: ?hu)?>现在</span> <span style="FONT-FAMILY: ?hu)?>Q?/span> <span style="FONT-FAMILY: ?hu)?>d上的</span> <span>test_SVN.txt</span> <span style="FONT-FAMILY: ?hu)?>是空文档?/span> </p> <p class="a" style="TEXT-INDENT: 24pt"> <span style="FONT-FAMILY: ?hu)?>?/span> <span>xb</span> <span style="FONT-FAMILY: ?hu)?>?/span> <span>lzj</span> <span style="FONT-FAMILY: ?hu)?>修改提交?/span> <span style="FONT-FAMILY: ?hu)?>Q?/span> <span style="FONT-FAMILY: ?hu)?>两个分支?/span> <span>test_SVN.txt</span> <span style="FONT-FAMILY: ?hu)?>分别如下两图所C?/span> <span style="FONT-FAMILY: ?hu)?>Q?/span> </p> <p class="MsoNormal" style="TEXT-ALIGN: center" align="center"> <span> <img height="130" src="file:///D:/Documents/其他技术文?SVN使用技?20-%20xyz黑板.files/image014.jpg" width="321" border="0" /> </span> </p> <p class="MsoCaption"> <span style="FONT-FAMILY: ?hu)?>?/span> <span> <span>2</span> </span> <span>.</span> <span> <span>7</span> </span> <span>xb_051129</span> <span style="FONT-FAMILY: ?hu)?>分支下的</span> <span>test_SVN.txt</span> </p> <p class="MsoNormal" style="TEXT-ALIGN: center" align="center"> <span> <img height="130" src="file:///D:/Documents/其他技术文?SVN使用技?20-%20xyz黑板.files/image016.jpg" width="321" border="0" /> </span> </p> <p class="MsoCaption"> <span style="FONT-FAMILY: ?hu)?>?/span> <span> <span>2</span> </span> <span>.</span> <span> <span>8</span> </span> <span>lzj_051129</span> <span style="FONT-FAMILY: ?hu)?>分支下的</span> <span>test_SVN.txt</span> </p> <span> <span>1.2.3.2 </span> </span> <span>xb</span> <span style="FONT-FAMILY: 黑体">?/span> <span>xb_051129</span> <span style="FONT-FAMILY: 黑体">分支合ƈCq?/span> <p class="a" style="TEXT-INDENT: 24pt"> <span>xb</span> <span style="FONT-FAMILY: ?hu)?>先把d</span> <span>check out</span> <span style="FONT-FAMILY: ?hu)?>到本地。然后在d的目录上右键</span> <span style="FONT-FAMILY: ?hu)?>选择</span>svn->merge<span style="FONT-FAMILY: ?hu)?>Q弹出如下窗口:(x)</span></p> <p class="MsoNormal" style="TEXT-ALIGN: center" align="center"> <span> <img height="466" src="file:///D:/Documents/其他技术文?SVN使用技?20-%20xyz黑板.files/image018.jpg" width="524" border="0" /> </span> </p> <p class="MsoCaption"> <span style="FONT-FAMILY: ?hu)?>?/span> <span> <span>2</span> </span> <span>.</span> <span> <span>9</span> </span> <span style="FONT-FAMILY: ?hu)?>合ƈ对话?/span> </p> <p class="a" style="TEXT-INDENT: 24pt"> <span style="FONT-FAMILY: ?hu)?>此对话框的含义是?/span>From<span style="FONT-FAMILY: ?hu)?>指定的分支版本到</span>To<span style="FONT-FAMILY: ?hu)?>指定的分支版本之间的差异合ƈCq上?/span></p> <p class="a" style="TEXT-INDENT: 24pt"> <span style="FONT-FAMILY: ?hu)?>在这里分支选的?/span>xb_051129<span style="FONT-FAMILY: ?hu)?>。版本号的选定Ҏ(gu)是点?/span>From<span style="FONT-FAMILY: ?hu)?>中的</span>Show Log<span style="FONT-FAMILY: ?hu)?>Q在</span>Log<span style="FONT-FAMILY: ?hu)?>H口中按?/span>Ctrl<span style="FONT-FAMILY: ?hu)?>键,点击选择</span>”made a copy?span style="FONT-FAMILY: ?hu)?>之上的那个版本,以及(qing)最上的那个版本,?/span><span style="FONT-FAMILY: ?hu)?>?/span><span>2</span>.<span>11</span><span style="FONT-FAMILY: ?hu)?>所C。然后点ȝ定回C图中的对话框Q会(x)自动填写</span>From<span style="FONT-FAMILY: ?hu)?>?/span>To<span style="FONT-FAMILY: ?hu)?>中的</span>Revision<span style="FONT-FAMILY: ?hu)?>受?/span></p> <p class="MsoNormal" style="TEXT-INDENT: 21pt"> <span> <img height="581" src="file:///D:/Documents/其他技术文?SVN使用技?20-%20xyz黑板.files/image020.jpg" width="585" border="0" /> </span> </p> <p class="MsoCaption"> <a name="_Ref121716988"> </a> <span> <span> <span>2</span> </span> </span> <span> <span>.</span> </span> <span> <span> <span>10</span> </span> </span> <span style="FONT-FAMILY: ?hu)?>选择需要合q的版本</span> </p> <p class="a" style="TEXT-INDENT: 24pt"> <span style="FONT-FAMILY: ?hu)?>然后直接点击</span>merge<span style="FONT-FAMILY: ?hu)?>q行合ƈQ你也可以通过</span>dry run<span style="FONT-FAMILY: ?hu)?>来看是不是两者之间有差异。由于没有其它h修改dQ所以合q的很顺利,下图?/span>xb_051115<span style="FONT-FAMILY: ?hu)?>与主q合q后的结果。合q完毕之后,?/span>xb<span style="FONT-FAMILY: ?hu)?>对主q进行提交?/span></p> <p class="a" style="TEXT-INDENT: 24pt; TEXT-ALIGN: center" align="center"> <img height="130" src="file:///D:/Documents/其他技术文?SVN使用技?20-%20xyz黑板.files/image022.jpg" width="321" border="0" /> </p> <p class="MsoCaption"> <span style="FONT-FAMILY: ?hu)?>?/span> <span> <span>2</span> </span> <span>.</span> <span> <span>11</span> </span> <span style="FONT-FAMILY: ?hu)?>合ƈ后,d上的</span> <span>test_SVN.txt</span> </p> <p class="a" style="TEXT-INDENT: 24pt"> (tng)</p> <span> <span>1.2.3.3 </span> </span> <span>lzj</span> <span style="FONT-FAMILY: 黑体">?/span> <span>lzj_051129</span> <span style="FONT-FAMILY: 黑体">分支合ƈCqԌ解决冲突</span> <p class="a" style="TEXT-INDENT: 24pt">xb<span style="FONT-FAMILY: ?hu)?>合ƈ完毕之后Q?/span>lzj<span style="FONT-FAMILY: ?hu)?>要将他的分支合ƈCq上去,Ҏ(gu)同上。但是由?/span>xb<span style="FONT-FAMILY: ?hu)?>已经修改q主qԌ所以生了(jin)冲突Q会(x)弹出一个冲H对话框。双d话框中的产生冲突的文件名Q就可以调出工具Ҏ(gu)文gq行合ƈQ下图是我们?/span>merge<span style="FONT-FAMILY: ?hu)?>工具昄的界面?/span></p> <p class="MsoNormal"> <span> <img height="382" src="file:///D:/Documents/其他技术文?SVN使用技?20-%20xyz黑板.files/image023.jpg" width="585" border="0" /> </span> </p> <p class="MsoCaption"> <span style="FONT-FAMILY: ?hu)?>?/span> <span> <span>2</span> </span> <span>.</span> <span> <span>12</span> </span> </p> <p class="a" style="MARGIN-LEFT: 45pt; TEXT-INDENT: -21pt"> <span style="FONT-FAMILY: Wingdings"> <span>l<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal"> (tng) (tng) (tng) (tng) (tng) (tng) (tng) </span></span> </span> <span style="FONT-FAMILY: ?hu)?>首先比较W一个窗口与W二个窗口,把结果修改合q到W二个窗口?/span> </p> <p class="a" style="MARGIN-LEFT: 45pt; TEXT-INDENT: -21pt"> <span style="FONT-FAMILY: Wingdings"> <span>l<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal"> (tng) (tng) (tng) (tng) (tng) (tng) (tng) </span></span> </span> <span style="FONT-FAMILY: ?hu)?>然后保光标处于W二个窗口时Q点M图中U色圈圈所C的按钮。这样会(x)把第二个H口的内容全部复制到W三个容口。之后保存,退出?/span> </p> <p class="a" style="MARGIN-LEFT: 45pt; TEXT-INDENT: -21pt"> <span style="FONT-FAMILY: Wingdings"> <span>l<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal"> (tng) (tng) (tng) (tng) (tng) (tng) (tng) </span></span> </span> <span style="FONT-FAMILY: ?hu)?>然后在工E目录上点右键,q行</span>SVN->Resolved<span style="FONT-FAMILY: ?hu)?>。这样会(x)删除无用的(f)时文件?/span></p> <p class="a" style="MARGIN-LEFT: 45pt; TEXT-INDENT: -21pt"> <span style="FONT-FAMILY: Wingdings"> <span>l<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal"> (tng) (tng) (tng) (tng) (tng) (tng) (tng) </span></span> </span> <span style="FONT-FAMILY: ?hu)?>最后提交所作的修改Qƈd详细的注释?/span> </p> <a name="_Toc121547270"> </a> <a name="_Toc121547271"> </a> <span> <span style="FONT-FAMILY: ?hu)?>中的标签</span> </span> <p class="a" style="TEXT-INDENT: 24pt"> <span style="FONT-FAMILY: ?hu)?>?/span>CVS<span style="FONT-FAMILY: ?hu)?>不同Q?/span>SVN<span style="FONT-FAMILY: ?hu)?>时不用专门ؓ(f)目录d标签Q因?/span>SVN<span style="FONT-FAMILY: ?hu)?>也对目录q行版本理?/span></p> <p class="MsoNormal" style="TEXT-INDENT: 21pt"> <span style="FONT-FAMILY: ?hu)?>我们在提交时写好注释Q比如重要的版本提交时?/span> <span>051201</span> <span style="FONT-FAMILY: ?hu)?>之类的日期作为开_(d)(j)Q就可以通过注释来查找比较重要的目录版本P相当?/span> <span>CVS</span> <span style="FONT-FAMILY: ?hu)?>?/span> <span>VSS</span> <span style="FONT-FAMILY: ?hu)?>中的标签?/span> </p> <p class="MsoNormal" style="TEXT-INDENT: 21pt"> <span style="FONT-FAMILY: ?hu)?>另外Q每个工E都?x)有一个版本说明文Ӟ通过此文件可以查扑օ键版本?/span> </p> <a name="_Toc121547272"> </a> <p class="a" style="TEXT-INDENT: 24pt"> <span style="FONT-FAMILY: ?hu)?>你可以重命名、移动或删除你的文g或文件夹Q但请?/span>SVN<span style="FONT-FAMILY: ?hu)?>q行q些操作Q否则之前的版本信息?x)丢失?/span></p> <p class="a" style="TEXT-INDENT: 24pt"> <span style="FONT-FAMILY: ?hu)?>使用</span>SVN<span style="FONT-FAMILY: ?hu)?>删除、移动与重命名文件夹的方法是在文?/span>/<span style="FONT-FAMILY: ?hu)?>文g夹上点右键进?/span>SVN<span style="FONT-FAMILY: ?hu)?>操作Q或直接在资源浏览器中用右键拖放(?x)弹?/span>SVN<span style="FONT-FAMILY: ?hu)?>选项Q?/span></p> <p class="a" style="TEXT-INDENT: 24pt"> <span style="FONT-FAMILY: ?hu)?>文g的删除、移动与重命名之前,必须保证工作目录是最新的版本Q进行这些操作之后,需要进行提交?/span> </p> <span> <span>1.3.3 </span> </span> <span style="FONT-FAMILY: ?hu)?>版本的回退</span> <p class="a" style="TEXT-INDENT: 24pt"> <span style="FONT-FAMILY: ?hu)?>在代码的~写q程中,隑օ?x)有不尽人意的地方,你也讔(dng)R要回退到某一个版本,但是在这个过E中可能有一些文件你想保留,也有一些文件你不想保留Q这q扯到很复杂的版本理q程Q在q里l大家推荐几U方法?/span> </p> <p class="a" style="MARGIN-LEFT: 45pt; TEXT-INDENT: -21pt"> <span> <span>1.<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal"> (tng) (tng) (tng) (tng) (tng) (tng) (tng) </span></span> </span> <span style="FONT-FAMILY: ?hu)?>若是你编辑了(jin)工程Q在没有提交的前提下Q你x(chng)弃这些修改,你可以直接选择</span> <span>revert</span> <span style="FONT-FAMILY: ?hu)?>可以更新到工程的最新的版本?/span> </p> <p class="a" style="MARGIN-LEFT: 45pt; TEXT-INDENT: -21pt"> <span> <span>2.<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal"> (tng) (tng) (tng) (tng) (tng) (tng) (tng) </span></span> </span> <span style="FONT-FAMILY: ?hu)?>若是你想退回到某一个版本,你就可以直接选择</span> <span>update to reversion</span> <span style="FONT-FAMILY: ?hu)?>如图</span> <span>,</span> <span style="FONT-FAMILY: ?hu)?>q样我们可以把我们的版本回退C选中的版本去Q这U情况下</span> <span>SVN</span> <span style="FONT-FAMILY: ?hu)?>q没有显C出有什么冲H,q且新徏立的文g也还在,但是在这U情况下你ƈ不能直接在你回退后的版本上进行编辑,因ؓ(f)</span> <span>SVN</span> <span style="FONT-FAMILY: ?hu)?>的版本控制还是在最新的d上。我们需?/span> <span>update</span> <span style="FONT-FAMILY: ?hu)?>q解军_H?/span> <span> </span> </p> <p class="a" style="MARGIN-LEFT: 45pt; TEXT-INDENT: -21pt"> <span> <span>3.<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal"> (tng) (tng) (tng) (tng) (tng) (tng) (tng) </span></span> </span> <span style="FONT-FAMILY: ?hu)?>你可以直接选择</span> <span>revert changes from this revision</span> <span style="FONT-FAMILY: ?hu)?>如图Q这L(fng)话你可以直接解决冲突q提交。不q这U方法的不是,你新建的文g都没有了(jin)Q整个工E都回退C前的版本?jin)?/span> </p> <p class="a" style="MARGIN-LEFT: 45pt; TEXT-INDENT: -21pt"> <span> <span>4.<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal"> (tng) (tng) (tng) (tng) (tng) (tng) (tng) </span></span> </span> <span style="FONT-FAMILY: ?hu)?>我推荐的一U方法是Q直?/span> <span>export</span> <span style="FONT-FAMILY: ?hu)?>一个你需要的版本Q然后用?/span> <span>export</span> <span style="FONT-FAMILY: ?hu)?>的版本覆盖你的最新的版本Q这样你可以不丢失你新建的文gQ同时获?/span> <span>head</span> <span style="FONT-FAMILY: ?hu)?>?/span> <span>SVN</span> <span style="FONT-FAMILY: ?hu)?>控制文g?/span> </p> <p class="a" style="MARGIN-LEFT: 24pt; TEXT-INDENT: 0pt"> <span> <img height="563" src="file:///D:/Documents/其他技术文?SVN使用技?20-%20xyz黑板.files/image025.jpg" width="586" border="0" /> </span> </p> <p class="MsoCaption"> <span style="FONT-FAMILY: ?hu)?>?/span> <span> <span>13</span> </span> </p> <p class="MsoNormal"> <span> </span> (tng)</p> <a name="_Toc121547273"> </a> <p class="a" style="TEXT-INDENT: 24pt"> <span style="FONT-FAMILY: ?hu)?>每个工程?x)有很多个小模块Q当某个模块辑ֈE_的时候,你就需要提交一ơ,以免写下个模块代码的时候出C可恢复的错误?/span> </p> <p class="a" style="TEXT-INDENT: 24pt"> <span style="FONT-FAMILY: ?hu)?>每一ơ提交需要前Q需要通过</span>pclint<span style="FONT-FAMILY: ?hu)?>(g)查,保证是一个编译没有错误的版本。当提交比较E_的版本的时候,同时要修改你的版本号?/span></p> <p class="a" style="TEXT-INDENT: 24pt"> <a name="_Toc121547274"> </a> </p> <span> <span> <span>1.3.5 </span> </span> <span style="FONT-FAMILY: ?hu)?>版本说明文g</span> </span> <p class="a" style="TEXT-INDENT: 24pt"> <span style="FONT-FAMILY: ?hu)?>版本说明文g?/span>xml<span style="FONT-FAMILY: ?hu)?>表格Q可?/span>excel<span style="FONT-FAMILY: ?hu)?>~辑Q它?x)记录下关键的版本信息?/span></p> <p class="a" style="TEXT-INDENT: 24pt"> <span style="FONT-FAMILY: ?hu)?>版本说明文g内容如下表。发布版本是指用户对外公布的版本P后文中有详细描述Q?/span>Revision<span style="FONT-FAMILY: ?hu)?>?/span>SVN<span style="FONT-FAMILY: ?hu)?>内部的工E文件夹的版本号。一个发布版本可能对应多?/span>Revision<span style="FONT-FAMILY: ?hu)?>Q?/span></p> <table class="MsoTableGrid" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="0" border="1"> <tbody> <tr> <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0pt; BORDER-LEFT: windowtext 1pt solid; WIDTH: 65.4pt; PADDING-TOP: 0pt; BORDER-BOTTOM: windowtext 1pt solid" valign="top" width="87"> <p class="a" style="TEXT-INDENT: 0pt; TEXT-ALIGN: justify"> <span style="FONT-FAMILY: ?hu)?>发布版本</span> </p> </td> <td style="BORDER-RIGHT: 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0pt; BORDER-LEFT: medium none; WIDTH: 65.4pt; PADDING-TOP: 0pt; BORDER-BOTTOM: 1pt solid" valign="top" width="87"> <p class="a" style="TEXT-INDENT: 0pt; TEXT-ALIGN: justify">Revision </p> </td> <td style="BORDER-RIGHT: 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0pt; BORDER-LEFT: medium none; WIDTH: 312.6pt; PADDING-TOP: 0pt; BORDER-BOTTOM: 1pt solid" valign="top" width="417"> <p class="a" style="TEXT-INDENT: 0pt; TEXT-ALIGN: justify"> <span style="FONT-FAMILY: ?hu)?>详细说明</span> </p> </td> </tr> <tr> <td style="BORDER-RIGHT: 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0pt; BORDER-LEFT: 1pt solid; WIDTH: 65.4pt; PADDING-TOP: 0pt; BORDER-BOTTOM: 1pt solid" valign="top" width="87" rowspan="3"> <p class="a" style="TEXT-INDENT: 0pt; TEXT-ALIGN: justify">1,0,0,12</p> </td> <td style="BORDER-RIGHT: 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0pt; BORDER-LEFT: medium none; WIDTH: 65.4pt; PADDING-TOP: 0pt; BORDER-BOTTOM: 1pt solid" valign="top" width="87"> <p class="a" style="TEXT-INDENT: 0pt; TEXT-ALIGN: justify">76</p> </td> <td style="BORDER-RIGHT: 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0pt; BORDER-LEFT: medium none; WIDTH: 312.6pt; PADDING-TOP: 0pt; BORDER-BOTTOM: 1pt solid" valign="top" width="417"> <p class="MsoNormal" style="TEXT-ALIGN: justify"> <span style="FONT-FAMILY: ?hu)?>加入?jin)抗q扰日志Q需长时间测?/span> </p> <p class="MsoNormal" style="TEXT-ALIGN: justify"> <span style="FONT-FAMILY: ?hu)?>E序代码q行?jin)重构,已经调试通过</span> </p> </td> </tr> <tr> <td style="BORDER-RIGHT: 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0pt; BORDER-LEFT: medium none; WIDTH: 65.4pt; PADDING-TOP: 0pt; BORDER-BOTTOM: 1pt solid" valign="top" width="87"> <p class="a" style="TEXT-INDENT: 0pt; TEXT-ALIGN: justify">77</p> </td> <td style="BORDER-RIGHT: 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0pt; BORDER-LEFT: medium none; WIDTH: 312.6pt; PADDING-TOP: 0pt; BORDER-BOTTOM: 1pt solid" valign="top" width="417"> <p class="MsoNormal" style="TEXT-ALIGN: justify"> <span>xxx @#$%^&</span> </p> </td> </tr> <tr> <td style="BORDER-RIGHT: 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0pt; BORDER-LEFT: medium none; WIDTH: 65.4pt; PADDING-TOP: 0pt; BORDER-BOTTOM: 1pt solid" valign="top" width="87"> <p class="a" style="TEXT-INDENT: 0pt; TEXT-ALIGN: justify">78</p> </td> <td style="BORDER-RIGHT: 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0pt; BORDER-LEFT: medium none; WIDTH: 312.6pt; PADDING-TOP: 0pt; BORDER-BOTTOM: 1pt solid" valign="top" width="417"> <p class="a" style="TEXT-INDENT: 0pt; TEXT-ALIGN: justify"> <span style="FONT-FAMILY: ?hu)?>?/span>...</p> </td> </tr> <tr> <td style="BORDER-RIGHT: 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0pt; BORDER-LEFT: 1pt solid; WIDTH: 65.4pt; PADDING-TOP: 0pt; BORDER-BOTTOM: 1pt solid" valign="top" width="87"> <p class="a" style="TEXT-INDENT: 0pt; TEXT-ALIGN: justify">1,0,0,13</p> </td> <td style="BORDER-RIGHT: 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0pt; BORDER-LEFT: medium none; WIDTH: 65.4pt; PADDING-TOP: 0pt; BORDER-BOTTOM: 1pt solid" valign="top" width="87"> <p class="a" style="TEXT-INDENT: 0pt; TEXT-ALIGN: justify">81</p> </td> <td style="BORDER-RIGHT: 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0pt; BORDER-LEFT: medium none; WIDTH: 312.6pt; PADDING-TOP: 0pt; BORDER-BOTTOM: 1pt solid" valign="top" width="417"> <p class="a" style="TEXT-INDENT: 0pt; TEXT-ALIGN: justify"> <span style="FONT-FAMILY: ?hu)?>试q的E_版本</span> </p> </td> </tr> <tr> <td style="BORDER-RIGHT: 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0pt; BORDER-LEFT: 1pt solid; WIDTH: 65.4pt; PADDING-TOP: 0pt; BORDER-BOTTOM: 1pt solid" valign="top" width="87"> <p class="a" style="TEXT-INDENT: 0pt; TEXT-ALIGN: justify">1,0,0,14</p> </td> <td style="BORDER-RIGHT: 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0pt; BORDER-LEFT: medium none; WIDTH: 65.4pt; PADDING-TOP: 0pt; BORDER-BOTTOM: 1pt solid" valign="top" width="87"> <p class="a" style="TEXT-INDENT: 0pt; TEXT-ALIGN: justify">99</p> </td> <td style="BORDER-RIGHT: 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0pt; BORDER-LEFT: medium none; WIDTH: 312.6pt; PADDING-TOP: 0pt; BORDER-BOTTOM: 1pt solid" valign="top" width="417"> <p class="a" style="TEXT-INDENT: 0pt; TEXT-ALIGN: justify">fix some bug<span style="FONT-FAMILY: ?hu)?>Q没有测?/span></p> </td> </tr> <tr> <td style="BORDER-RIGHT: 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0pt; BORDER-LEFT: 1pt solid; WIDTH: 65.4pt; PADDING-TOP: 0pt; BORDER-BOTTOM: 1pt solid" valign="top" width="87"> <p class="a" style="TEXT-INDENT: 0pt; TEXT-ALIGN: justify"> (tng)</p> </td> <td style="BORDER-RIGHT: 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0pt; BORDER-LEFT: medium none; WIDTH: 65.4pt; PADDING-TOP: 0pt; BORDER-BOTTOM: 1pt solid" valign="top" width="87"> <p class="a" style="TEXT-INDENT: 0pt; TEXT-ALIGN: justify"> (tng)</p> </td> <td style="BORDER-RIGHT: 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0pt; BORDER-LEFT: medium none; WIDTH: 312.6pt; PADDING-TOP: 0pt; BORDER-BOTTOM: 1pt solid" valign="top" width="417"> <p class="a" style="TEXT-INDENT: 0pt; TEXT-ALIGN: justify"> (tng)</p> </td> </tr> </tbody> </table> <span> (tng)</span> </div> <table id="attachments"> <tbody> <tr> <th>附g</th> <th>大小</th> </tr> <tr class="dark"> <td> <a >svn版本理教程.rar</a> </td> <td>474.51 KB</td> </tr> </tbody> </table> </div> </div> <img src ="http://m.tkk7.com/aawanghuan/aggbug/75840.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/aawanghuan/" target="_blank">萝卜青菜</a> 2006-10-18 10:43 <a href="http://m.tkk7.com/aawanghuan/articles/75840.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://m.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> վ֩ģ壺 <a href="http://avyjj.com" target="_blank">ɫʮʮɫ</a>| <a href="http://zzyqr.com" target="_blank">׊ĴƵ</a>| <a href="http://yy9977.com" target="_blank">պƷһҳ</a>| <a href="http://zz1965.com" target="_blank">ۺϼ޵һҳ</a>| <a href="http://jdwx58.com" target="_blank">ѹۿĻ</a>| <a href="http://d8139.com" target="_blank">պһһ</a>| <a href="http://1314c.com" target="_blank">ƷþƵ</a>| <a href="http://chinaedubrand.com" target="_blank">avר</a>| <a href="http://gtja1668.com" target="_blank">׾Ʒһ </a>| <a href="http://96yizhi.com" target="_blank">þþ </a>| <a href="http://simupiao.com" target="_blank">þþþޱٸ </a>| <a href="http://wwwdd312.com" target="_blank">ŷɫƵ߹ۿ</a>| <a href="http://1444000.com" target="_blank">޸mv</a>| <a href="http://rr433.com" target="_blank">޾Ʒѹۿ</a>| <a href="http://ettedia.com" target="_blank">Ļav</a>| <a href="http://ziguang1688.com" target="_blank">ëƬѲ</a>| <a href="http://sswg2.com" target="_blank">ŮҺƵ</a>| <a href="http://vod8090.com" target="_blank">պ߹ۿ</a>| <a href="http://gisdn.com" target="_blank">˵Ƶwww</a>| <a href="http://cqkalai.com" target="_blank">ɫͼ.com</a>| <a href="http://hzsprfm.com" target="_blank">ƵԿ120</a>| <a href="http://www97544.com" target="_blank">˾Ʒþ޸岻</a>| <a href="http://yeyaweiban.com" target="_blank">СƵ߹ۿ</a>| <a href="http://jybelt.com" target="_blank">jizzѹۿ</a>| <a href="http://taoh2517.com" target="_blank">þ99޾Ʒۿ</a>| <a href="http://appmofun.com" target="_blank">ҰĻƵ</a>| <a href="http://www998xe.com" target="_blank">һAVٸӰ</a>| <a href="http://masfd.com" target="_blank">޹av뾫Ʒ</a>| <a href="http://shzzhsy.com" target="_blank">ƷѸþ</a>| <a href="http://0147222.com" target="_blank">ƷƬҹɫ</a>| <a href="http://fholaer.com" target="_blank">ձĻһ</a>| <a href="http://papapa97.com" target="_blank">þ99ȾƷѹۿţţ</a>| <a href="http://88ww99.com" target="_blank">2020þþƷۺһ</a>| <a href="http://34pmpm.com" target="_blank">ѹƵ߹ۿ</a>| <a href="http://sczssc.com" target="_blank">ˬִ̼վ</a>| <a href="http://91ptv.com" target="_blank">լоƷһ߹ۿ</a>| <a href="http://xmm5pkt.com" target="_blank">޹ƷƵ</a>| <a href="http://66qiqi.com" target="_blank">ѹۿҹ</a>| <a href="http://4eeyy.com" target="_blank">Ʒhdѹۿ</a>| <a href="http://ssdtsz.com" target="_blank">뾫Ʒ</a>| <a href="http://www-777768.com" target="_blank">ëbbw</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>