﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-HelloWorld 善战者,求之于势,不责于人;故能择人而任势。</title><link>http://www.blogjava.net/zhaochengming/</link><description> 知止而后有定，定而后能静，静而后能安，安而后能虑，虑而后能得。物有本末，事有终始。知所先后，则近道矣。</description><language>zh-cn</language><lastBuildDate>Thu, 30 Apr 2026 06:24:08 GMT</lastBuildDate><pubDate>Thu, 30 Apr 2026 06:24:08 GMT</pubDate><ttl>60</ttl><item><title>VB.Net 中 WithEvents、AddHandler</title><link>http://www.blogjava.net/zhaochengming/archive/2013/07/11/401451.html</link><dc:creator>helloworld2008</dc:creator><author>helloworld2008</author><pubDate>Thu, 11 Jul 2013 06:05:00 GMT</pubDate><guid>http://www.blogjava.net/zhaochengming/archive/2013/07/11/401451.html</guid><wfw:comment>http://www.blogjava.net/zhaochengming/comments/401451.html</wfw:comment><comments>http://www.blogjava.net/zhaochengming/archive/2013/07/11/401451.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhaochengming/comments/commentRss/401451.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhaochengming/services/trackbacks/401451.html</trackback:ping><description><![CDATA[<div>http://www.cnblogs.com/todd/archive/2008/06/20/1226516.html</div><img src ="http://www.blogjava.net/zhaochengming/aggbug/401451.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhaochengming/" target="_blank">helloworld2008</a> 2013-07-11 14:05 <a href="http://www.blogjava.net/zhaochengming/archive/2013/07/11/401451.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Console命令详解,让调试js代码变得更简单</title><link>http://www.blogjava.net/zhaochengming/archive/2013/02/22/395606.html</link><dc:creator>helloworld2008</dc:creator><author>helloworld2008</author><pubDate>Fri, 22 Feb 2013 11:40:00 GMT</pubDate><guid>http://www.blogjava.net/zhaochengming/archive/2013/02/22/395606.html</guid><wfw:comment>http://www.blogjava.net/zhaochengming/comments/395606.html</wfw:comment><comments>http://www.blogjava.net/zhaochengming/archive/2013/02/22/395606.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhaochengming/comments/commentRss/395606.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhaochengming/services/trackbacks/395606.html</trackback:ping><description><![CDATA[<div class="asset-body" style="margin: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;"><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;"><a href="http://getfirebug.com/" target="_blank" style="color: #1a356e; text-decoration: initial;">Firebug</a>是网页开发的利器，能够极大地提升工作效率。<br /></p></div><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">但是，它不太容易上手。我曾经翻译过一篇<a href="http://www.ruanyifeng.com/blog/2008/06/firebug_tutorial.html" target="_blank" style="color: #1a356e; text-decoration: initial;">《Firebug入门指南》</a>，介绍了一些基本用法。今天，继续介绍它的高级用法。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">===================================</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;"><strong>Firebug控制台详解</strong></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">作者：阮一峰<br />出处：http://www.ruanyifeng.com/blog/2011/03/firebug_console_tutorial.html</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;"><img src="http://image.beekka.com/blog/201103/bg2011032616.png" alt="" style="border: 0px;" /></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;"><br />控制台（Console）是Firebug的第一个面板，也是最重要的面板，主要作用是显示网页加载过程中产生各类信息。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;"><strong>一、显示信息的命令</strong></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">Firebug内置一个console对象，提供5种方法，用来显示信息。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">最简单的方法是console.log()，可以用来取代alert()或document.write()。比如，在网页脚本中使用console.log("Hello World")，加载时控制台就会自动显示如下内容。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;"><img src="http://image.beekka.com/blog/201103/bg2011032601.png" alt="" style="border: 0px;" /></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">另外，根据信息的不同性质，console对象还有4种显示信息的方法，分别是一般信息console.info()、除错信息console.debug()、警告提示console.warn()、错误提示console.error()。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">比如，在网页脚本中插入下面四行：</p><blockquote style="background-color: #ffffff; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px;"><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　console.info("这是info");</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　console.debug("这是debug");</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　console.warn("这是warn");</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　console.error("这是error");</p></blockquote><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">加载时，控制台会显示如下内容。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;"><img src="http://image.beekka.com/blog/201103/bg2011032602.png" alt="" style="border: 0px;" /></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">可以看到，不同性质的信息前面有不同的图标，并且每条信息后面都有超级链接，点击后跳转到网页源码的相应行。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;"><strong>二、占位符</strong></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">console对象的上面5种方法，都可以使用printf风格的占位符。不过，占位符的种类比较少，只支持字符（%s）、整数（%d或%i）、浮点数（%f）和对象（%o）四种。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">比如，</p><blockquote style="background-color: #ffffff; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px;"><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　console.log("%d年%d月%d日",2011,3,26);</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　console.log("圆周率是%f",3.1415926);</p></blockquote><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;"><img src="http://image.beekka.com/blog/201103/bg2011032603.png" alt="" style="border: 0px;" /></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">%o占位符，可以用来查看一个对象内部情况。比如，有这样一个对象：</p><blockquote style="background-color: #ffffff; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px;"><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　var dog = {} ;</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　dog.name = "大毛" ;</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　dog.color = "黄色";</p></blockquote><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">然后，对它使用o%占位符。</p><blockquote style="background-color: #ffffff; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px;"><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　console.log("%o",dog);</p></blockquote><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;"><img src="http://image.beekka.com/blog/201103/bg2011032604.png" alt="" style="border: 0px;" /></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;"><strong>三、分组显示</strong></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">如果信息太多，可以分组显示，用到的方法是console.group()和console.groupEnd()。</p><blockquote style="background-color: #ffffff; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px;"><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　console.group("第一组信息");</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　　　console.log("第一组第一条");</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　　　console.log("第一组第二条");</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　console.groupEnd();</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　console.group("第二组信息");</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　　　console.log("第二组第一条");</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　　　console.log("第二组第二条");</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　console.groupEnd();</p></blockquote><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;"><img src="http://image.beekka.com/blog/201103/bg2011032605.png" alt="" style="border: 0px;" /></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">点击组标题，该组信息会折叠或展开。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;"><img src="http://image.beekka.com/blog/201103/bg2011032606.png" alt="" style="border: 0px;" /></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;"><strong>四、console.dir()</strong></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">console.dir()可以显示一个对象所有的属性和方法。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">比如，现在为第二节的dog对象，添加一个bark()方法。</p><blockquote style="background-color: #ffffff; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px;"><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　dog.bark = function(){alert("汪汪汪");};</p></blockquote><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">然后，显示该对象的内容，</p><blockquote style="background-color: #ffffff; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px;"><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　console.dir(dog);</p></blockquote><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;"><img src="http://image.beekka.com/blog/201103/bg2011032607.png" alt="" style="border: 0px;" /></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;"><strong>五、console.dirxml()</strong></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">console.dirxml()用来显示网页的某个节点（node）所包含的html/xml代码。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">比如，先获取一个表格节点，</p><blockquote style="background-color: #ffffff; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px;"><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　var table = document.getElementById("table1");</p></blockquote><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">然后，显示该节点包含的代码。</p><blockquote style="background-color: #ffffff; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px;"><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　console.dirxml(table);</p></blockquote><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;"><img src="http://image.beekka.com/blog/201103/bg2011032608.png" alt="" style="border: 0px;" /></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;"><strong>六、console.assert()</strong></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">console.assert()用来判断一个表达式或变量是否为真。如果结果为否，则在控制台输出一条相应信息，并且抛出一个异常。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">比如，下面两个判断的结果都为否。</p><blockquote style="background-color: #ffffff; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px;"><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　var result = 0;</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　console.assert( result );</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　var year = 2000;</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　console.assert(year == 2011 );</p></blockquote><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;"><img src="http://image.beekka.com/blog/201103/bg2011032609.png" alt="" style="border: 0px;" /></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;"><strong>七、console.trace()</strong></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">console.trace()用来追踪函数的调用轨迹。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">比如，有一个加法器函数。</p><blockquote style="background-color: #ffffff; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px;"><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　function add(a,b){</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　　　return a+b;</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　}</p></blockquote><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">我想知道这个函数是如何被调用的，在其中加入console.trace()方法就可以了。</p><blockquote style="background-color: #ffffff; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px;"><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　function add(a,b){</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　　　console.trace();</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　　　return a+b;</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　}</p></blockquote><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">假定这个函数的调用代码如下：</p><blockquote style="background-color: #ffffff; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px;"><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　var x = add3(1,1);</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　function add3(a,b){return add2(a,b);}</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　function add2(a,b){return add1(a,b);}</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　function add1(a,b){return add(a,b);}</p></blockquote><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">运行后，会显示add()的调用轨迹，从上到下依次为add()、add1()、add2()、add3()。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;"><img src="http://image.beekka.com/blog/201103/bg2011032610.png" alt="" style="border: 0px;" /></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;"><strong>八、计时功能</strong></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">console.time()和console.timeEnd()，用来显示代码的运行时间。</p><blockquote style="background-color: #ffffff; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px;"><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　console.time("计时器一");</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　for(var i=0;i&lt;1000;i++){</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　　　for(var j=0;j&lt;1000;j++){}</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　}</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　console.timeEnd("计时器一");</p></blockquote><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;"><img src="http://image.beekka.com/blog/201103/bg2011032611.png" alt="" style="border: 0px;" /></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;"><strong>九、性能分析</strong></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">性能分析（Profiler）就是分析程序各个部分的运行时间，找出瓶颈所在，使用的方法是console.profile()。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">假定有一个函数Foo()，里面调用了另外两个函数funcA()和funcB()，其中funcA()调用10次，funcB()调用1次。</p><blockquote style="background-color: #ffffff; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px;"><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　function Foo(){</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　　　for(var i=0;i&lt;10;i++){funcA(1000);}</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　　　funcB(10000);</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　}</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　function funcA(count){</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　　　for(var i=0;i&lt;count;i++){}</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　}</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　function funcB(count){</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　　　for(var i=0;i&lt;count;i++){}</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　}</p></blockquote><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">然后，就可以分析Foo()的运行性能了。</p><blockquote style="background-color: #ffffff; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px;"><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　console.profile('性能分析器一');</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　Foo();</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">　　console.profileEnd();</p></blockquote><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">控制台会显示一张性能分析表，如下图。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;"><img src="http://image.beekka.com/blog/201103/bg2011032612.png" alt="" style="border: 0px;" /></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">标题栏提示，一共运行了12个函数，共耗时2.656毫秒。其中funcA()运行10次，耗时1.391毫秒，最短运行时间0.123毫秒，最长0.284毫秒，平均0.139毫秒；funcB()运行1次，耗时1.229ms毫秒。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">除了使用console.profile()方法，firebug还提供了一个"概况"（Profiler）按钮。第一次点击该按钮，"性能分析" 开始，你可以对网页进行某种操作（比如ajax操作），然后第二次点击该按钮，"性能分析"结束，该操作引发的所有运算就会进行性能分析。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;"><img src="http://image.beekka.com/blog/201103/bg2011032613.png" alt="" style="border: 0px;" /></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;"><strong>十、属性菜单</strong></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">控制台面板的名称后面，有一个倒三角，点击后会显示属性菜单。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;"><img src="http://image.beekka.com/blog/201103/bg2011032614.png" alt="" style="border: 0px;" /></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">默认情况下，控制台只显示Javascript错误。如果选中Javascript警告、CSS错误、XML错误都送上，则相关的提示信息都会显示。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">这里比较有用的是"显示XMLHttpRequests"，也就是显示ajax请求。选中以后，网页的所有ajax请求，都会在控制台面板显示出来。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">比如，点击一个<a href="http://developer.yahoo.com/yui/examples/datatable/dt_xhrlocalxml.html" target="_blank" style="color: #1a356e; text-decoration: initial;">YUI示例</a>，控制台就会告诉我们，它用ajax方式发出了一个GET请求，http请求和响应的头信息和内容主体，也都可以看到。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;"><img src="http://image.beekka.com/blog/201103/bg2011032615.png" alt="" style="border: 0px;" /></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;"><strong>[参考文献]</strong></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">*&nbsp;<a href="http://michaelsync.net/2007/09/09/firebug-tutorial-logging-profiling-and-commandline-part-i" target="_blank" style="color: #1a356e; text-decoration: initial;">Firebug Tutorial - Logging, Profiling and CommandLine (Part I)</a></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">*&nbsp;<a href="http://michaelsync.net/2007/09/10/firebug-tutorial-logging-profiling-and-commandline-part-ii" target="_blank" style="color: #1a356e; text-decoration: initial;">Firebug Tutorial - Logging, Profiling and CommandLine (Part II)</a></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, arial, 宋体; font-size: 13px; line-height: 25px; background-color: #ffffff;">（完）</p><img src ="http://www.blogjava.net/zhaochengming/aggbug/395606.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhaochengming/" target="_blank">helloworld2008</a> 2013-02-22 19:40 <a href="http://www.blogjava.net/zhaochengming/archive/2013/02/22/395606.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>excel加备注，转自http://blog.sina.com.cn/s/blog_4c27f00c0100dr4g.html</title><link>http://www.blogjava.net/zhaochengming/archive/2013/01/27/394816.html</link><dc:creator>helloworld2008</dc:creator><author>helloworld2008</author><pubDate>Sun, 27 Jan 2013 14:54:00 GMT</pubDate><guid>http://www.blogjava.net/zhaochengming/archive/2013/01/27/394816.html</guid><wfw:comment>http://www.blogjava.net/zhaochengming/comments/394816.html</wfw:comment><comments>http://www.blogjava.net/zhaochengming/archive/2013/01/27/394816.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/zhaochengming/comments/commentRss/394816.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhaochengming/services/trackbacks/394816.html</trackback:ping><description><![CDATA[<a href="http://blog.sina.com.cn/s/blog_4c27f00c0100dr4g.html">http://blog.sina.com.cn/s/blog_4c27f00c0100dr4g.html</a><img src ="http://www.blogjava.net/zhaochengming/aggbug/394816.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhaochengming/" target="_blank">helloworld2008</a> 2013-01-27 22:54 <a href="http://www.blogjava.net/zhaochengming/archive/2013/01/27/394816.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>InstantClient安装使用 转自http://freefancy.iteye.com/blog/422578</title><link>http://www.blogjava.net/zhaochengming/archive/2013/01/22/394539.html</link><dc:creator>helloworld2008</dc:creator><author>helloworld2008</author><pubDate>Tue, 22 Jan 2013 04:57:00 GMT</pubDate><guid>http://www.blogjava.net/zhaochengming/archive/2013/01/22/394539.html</guid><wfw:comment>http://www.blogjava.net/zhaochengming/comments/394539.html</wfw:comment><comments>http://www.blogjava.net/zhaochengming/archive/2013/01/22/394539.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhaochengming/comments/commentRss/394539.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhaochengming/services/trackbacks/394539.html</trackback:ping><description><![CDATA[<div id="blog_content" class="blog_content">
<p>&nbsp;</p>
<p>因oracle应用程序及其工具toad、PLSQL Developer等的部署很多,动辙要安装几百兆的Oracle Client实在很烦。</p>
<p>Instant client小而够用。这里共享出自己的经验，供同行参考，如果能给你帮助，荣幸之至。</p>
<p>&nbsp;</p>
<p>运行环境：windows XP sp3，新安装系统，从未安装过任何版本Oracle</p>
<p>&nbsp;</p>
<p>1、下载Instant Client</p>
<p>http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html</p>
<p>&nbsp;</p>
<p>找到与系统对应版本下载。</p>
<p>&nbsp;</p>
<p>这里以32位windows系统：</p>
<p>instantclient-basic-nt-11.2.0.3.0.zip</p>
<p>instantclient-sqlplus-nt-11.2.0.3.0.zip</p>
<p>&nbsp;</p>
<p>如果你只用客户端工具，不使用命令行下sqlplus，第二个包可以不用</p>
<p>&nbsp;</p>
<p>2、解压缩包到C:\instantclient_11_2</p>
<p>&nbsp;</p>
<p>3、设置变量：</p>
<p>NLS_lANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK（注意中间有空格，这个如果不设，toad查询中文会是乱码）</p>
<p>TNS_ADMIN=C:\instantclient_11_2</p>
<p>Path=C:\instantclient_11_2</p>
<p>&nbsp;</p>
<p>4、保存以下内容为注册表文件，导入注册表（路径部分，请自己修改）</p>
<p>&nbsp;</p>
<p>Windows Registry Editor Version 5.00</p>
<p>&nbsp;</p>
<p>[HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraClient10g_home]</p>
<p>"NLS_LANG"="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"</p>
<p>"ORACLE_BUNDLE_NAME"="Enterprise"</p>
<p>"ORACLE_GROUP_NAME"="Oracle - OraClient10g_home"</p>
<p>"ORACLE_HOME"="C:\\instantclient_11_2"</p>
<p>"ORACLE_HOME_KEY"="SOFTWARE\\ORACLE\\KEY_OraClient10g_home"</p>
<p>"ORACLE_HOME_NAME"="OraClient10g_home"</p>
<p>&nbsp;</p>
<p>5、建立tnsnames.ora，并保存到安装目录：C:\instantclient_11_2</p>
<p>&nbsp;</p>
<p>这个这里就不多说了</p>
<p>&nbsp;</p>
<p># tnsnames.ora Network Configuration File: D:\oracle\product\10.2.0\client_1\network\admin\tnsnames.ora</p>
<p># Generated by Oracle configuration tools.</p>
<p>&nbsp;</p>
<p>ORCL =</p>
<p>&nbsp; &nbsp;(DESCRIPTION =</p>
<p>&nbsp; &nbsp; &nbsp;(ADDRESS_LIST =</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp;(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))</p>
<p>&nbsp; &nbsp; &nbsp;)</p>
<p>&nbsp; &nbsp; &nbsp;(CONNECT_DATA =</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp;(SERVICE_NAME = orcl)</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>6、测试：</p>
<p>C:\Documents and Settings\Administrator&gt;sqlplus /nolog</p>
<p>&nbsp;</p>
<p>SQL*Plus: Release 11.2.0.3.0 Production on 星期六 4月 28 10:10:10 2012</p>
<p>&nbsp;</p>
<p>Copyright (c) 1982, 2010, Oracle. &nbsp;All rights reserved.</p>
<p>&nbsp;</p>
<p>SQL&gt; conn scott/tiger@orcl</p>
<p>已连接。</p>
<p>SQL&gt;</p>
<p>&nbsp;</p>
<p>至此，安装已经完成。toad、PLSQL Developer等工具，以及应用软件都可以正常使用了。</p>
<p>&nbsp;</p></div><img src ="http://www.blogjava.net/zhaochengming/aggbug/394539.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhaochengming/" target="_blank">helloworld2008</a> 2013-01-22 12:57 <a href="http://www.blogjava.net/zhaochengming/archive/2013/01/22/394539.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sqlserver多行转一行</title><link>http://www.blogjava.net/zhaochengming/archive/2013/01/17/394334.html</link><dc:creator>helloworld2008</dc:creator><author>helloworld2008</author><pubDate>Wed, 16 Jan 2013 17:24:00 GMT</pubDate><guid>http://www.blogjava.net/zhaochengming/archive/2013/01/17/394334.html</guid><wfw:comment>http://www.blogjava.net/zhaochengming/comments/394334.html</wfw:comment><comments>http://www.blogjava.net/zhaochengming/archive/2013/01/17/394334.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhaochengming/comments/commentRss/394334.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhaochengming/services/trackbacks/394334.html</trackback:ping><description><![CDATA[with TestTitle AS (select distinct Professional_name, member from sys_MemberOfRole,<br />(SELECT Professional_code,Professional_name,Professional_name+'指标填报人' AS RN,Professional_manager FROM bm_professional WHERE Professional_status=1 <br />&nbsp; AND Professional_code NOT IN&nbsp; (SELECT professional_code FROM bm_report_status WHERE status &lt;&gt; 0 AND object_code=15074 AND time_code='MO201211')) t <br />where rolename=t.RN and member in(select member from bm_menberofobject where objectForUser=15074))<br />SELECT&nbsp; Professional_name,&nbsp; STUFF(( SELECT',' + member&nbsp;&nbsp;&nbsp; FROM TestTitle subTitle WHERE Professional_name = TestTitle.Professional_name<img src ="http://www.blogjava.net/zhaochengming/aggbug/394334.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhaochengming/" target="_blank">helloworld2008</a> 2013-01-17 01:24 <a href="http://www.blogjava.net/zhaochengming/archive/2013/01/17/394334.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JQuery批量上传插件Uploadify使用详解及参数说明 </title><link>http://www.blogjava.net/zhaochengming/archive/2012/10/24/390164.html</link><dc:creator>helloworld2008</dc:creator><author>helloworld2008</author><pubDate>Wed, 24 Oct 2012 07:13:00 GMT</pubDate><guid>http://www.blogjava.net/zhaochengming/archive/2012/10/24/390164.html</guid><wfw:comment>http://www.blogjava.net/zhaochengming/comments/390164.html</wfw:comment><comments>http://www.blogjava.net/zhaochengming/archive/2012/10/24/390164.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhaochengming/comments/commentRss/390164.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhaochengming/services/trackbacks/390164.html</trackback:ping><description><![CDATA[<h1 class="postTitle"><a id="cb_post_title_url" class="postTitle2" href="http://www.cnblogs.com/pannysp/archive/2012/03/03/2378091.html"><font color="#6466b3">JQuery批量上传插件Uploadify使用详解及参数说明</font></a> </h1>
<div class="clear"></div>
<div class="postBody">
<div id="cnblogs_post_body">
<p>Uploadify是JQuery的一个上传插件，实现的效果非常不错，带进度显示。官方提供的实例是php版本的，您可以点击下面的链接进行浏览或下载。</p>
<ul><li><a href="http://www.uploadify.com/download" target="_blank"><font color="#6466b3">官方下载</font></a></li><li><a href="http://www.uploadify.com/documentation" target="_blank"><font color="#6466b3">官方文档</font></a></li><li><a href="http://www.uploadify.com/demo" target="_blank"><font color="#6466b3">官方演示</font></a></li></ul>
<p><strong>效果图：</strong></p>
<p>　　<a class="highslide  " title="效果图" href="http://www.touchsunlight.com/wp-content/uploads/2011/04/20110426232450-t.png" target="_blank"><img alt="效果图" src="http://www.touchsunlight.com/wp-content/uploads/2011/04/20110426232450.png" /></a></p>
<p>&nbsp;</p>
<p><strong>部署和代码介绍：</strong><strong>　　</strong></p>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a title="复制代码" onclick="copyCnblogsCode(this)" href="javascript:void(0);"><img alt="复制代码" src="http://common.cnblogs.com/images/copycode.gif" /></a></span></div><pre>JSP前台页面:<br /><br /><span style="color: #0000ff">&lt;</span><span style="color: #800000">script </span><span style="color: #ff0000">type</span><span style="color: #0000ff">="text/javascript"</span><span style="color: #0000ff">&gt;</span><span style="background-color: #f5f5f5; color: #000000"><br />   $(document).ready( </span><span style="background-color: #f5f5f5; color: #0000ff">function</span><span style="background-color: #f5f5f5; color: #000000">() {<br />   $(</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">#uploadify</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">).uploadify( {</span><span style="background-color: #f5f5f5; color: #008000">//</span><span style="background-color: #f5f5f5; color: #008000">初始化函数</span><span style="background-color: #f5f5f5; color: #008000"><br /></span><span style="background-color: #f5f5f5; color: #000000"><br />    </span><span style="background-color: #f5f5f5; color: #000000">'</span><span style="background-color: #f5f5f5; color: #000000">uploader</span><span style="background-color: #f5f5f5; color: #000000">'</span><span style="background-color: #f5f5f5; color: #000000"> :</span><span style="background-color: #f5f5f5; color: #000000">'</span><span style="background-color: #f5f5f5; color: #000000">uploadify.swf</span><span style="background-color: #f5f5f5; color: #000000">'</span><span style="background-color: #f5f5f5; color: #000000">,</span><span style="background-color: #f5f5f5; color: #008000">//</span><span style="background-color: #f5f5f5; color: #008000">flash文件位置，注意路径</span><span style="background-color: #f5f5f5; color: #008000"><br /></span><span style="background-color: #f5f5f5; color: #000000">'</span><span style="background-color: #f5f5f5; color: #000000">script</span><span style="background-color: #f5f5f5; color: #000000">'</span><span style="background-color: #f5f5f5; color: #000000"> :</span><span style="background-color: #f5f5f5; color: #000000">'</span><span style="background-color: #f5f5f5; color: #000000">servlet/Upload</span><span style="background-color: #f5f5f5; color: #000000">'</span><span style="background-color: #f5f5f5; color: #000000">,</span><span style="background-color: #f5f5f5; color: #008000">//</span><span style="background-color: #f5f5f5; color: #008000">后台处理的请求</span><span style="background-color: #f5f5f5; color: #008000"><br /></span><span style="background-color: #f5f5f5; color: #000000">'</span><span style="background-color: #f5f5f5; color: #000000">cancelImg</span><span style="background-color: #f5f5f5; color: #000000">'</span><span style="background-color: #f5f5f5; color: #000000"> :</span><span style="background-color: #f5f5f5; color: #000000">'</span><span style="background-color: #f5f5f5; color: #000000">images/cancel.png</span><span style="background-color: #f5f5f5; color: #000000">'</span><span style="background-color: #f5f5f5; color: #000000">,</span><span style="background-color: #f5f5f5; color: #008000">//</span><span style="background-color: #f5f5f5; color: #008000">取消按钮图片</span><span style="background-color: #f5f5f5; color: #008000"><br /></span><span style="background-color: #f5f5f5; color: #000000">'</span><span style="background-color: #f5f5f5; color: #000000">folder</span><span style="background-color: #f5f5f5; color: #000000">'</span><span style="background-color: #f5f5f5; color: #000000"> :</span><span style="background-color: #f5f5f5; color: #000000">'</span><span style="background-color: #f5f5f5; color: #000000">uploads</span><span style="background-color: #f5f5f5; color: #000000">'</span><span style="background-color: #f5f5f5; color: #000000">,</span><span style="background-color: #f5f5f5; color: #008000">//</span><span style="background-color: #f5f5f5; color: #008000">您想将文件保存到的路径</span><span style="background-color: #f5f5f5; color: #008000"><br /></span><span style="background-color: #f5f5f5; color: #000000">'</span><span style="background-color: #f5f5f5; color: #000000">queueID</span><span style="background-color: #f5f5f5; color: #000000">'</span><span style="background-color: #f5f5f5; color: #000000"> :</span><span style="background-color: #f5f5f5; color: #000000">'</span><span style="background-color: #f5f5f5; color: #000000">fileQueue</span><span style="background-color: #f5f5f5; color: #000000">'</span><span style="background-color: #f5f5f5; color: #000000">,</span><span style="background-color: #f5f5f5; color: #008000">//</span><span style="background-color: #f5f5f5; color: #008000">与下面的上传文件列表id对应</span><span style="background-color: #f5f5f5; color: #008000"><br /></span><span style="background-color: #f5f5f5; color: #000000">'</span><span style="background-color: #f5f5f5; color: #000000">queueSizeLimit</span><span style="background-color: #f5f5f5; color: #000000">'</span><span style="background-color: #f5f5f5; color: #000000"> :</span><span style="background-color: #f5f5f5; color: #000000">8</span><span style="background-color: #f5f5f5; color: #000000">,</span><span style="background-color: #f5f5f5; color: #008000">//</span><span style="background-color: #f5f5f5; color: #008000">上传文件的数量</span><span style="background-color: #f5f5f5; color: #008000"><br /></span><span style="background-color: #f5f5f5; color: #000000">'</span><span style="background-color: #f5f5f5; color: #000000">scriptData</span><span style="background-color: #f5f5f5; color: #000000">'</span><span style="background-color: #f5f5f5; color: #000000">:{</span><span style="background-color: #f5f5f5; color: #000000">'</span><span style="background-color: #f5f5f5; color: #000000">a</span><span style="background-color: #f5f5f5; color: #000000">'</span><span style="background-color: #f5f5f5; color: #000000">:</span><span style="background-color: #f5f5f5; color: #000000">'</span><span style="background-color: #f5f5f5; color: #000000">value1</span><span style="background-color: #f5f5f5; color: #000000">'</span><span style="background-color: #f5f5f5; color: #000000">,</span><span style="background-color: #f5f5f5; color: #000000">'</span><span style="background-color: #f5f5f5; color: #000000">b</span><span style="background-color: #f5f5f5; color: #000000">'</span><span style="background-color: #f5f5f5; color: #000000">:</span><span style="background-color: #f5f5f5; color: #000000">'</span><span style="background-color: #f5f5f5; color: #000000">value2</span><span style="background-color: #f5f5f5; color: #000000">'</span><span style="background-color: #f5f5f5; color: #000000">},</span><span style="background-color: #f5f5f5; color: #008000">//</span><span style="background-color: #f5f5f5; color: #008000">向后台传的数据</span><span style="background-color: #f5f5f5; color: #008000"><br /></span><span style="background-color: #f5f5f5; color: #000000">'</span><span style="background-color: #f5f5f5; color: #000000">fileDesc</span><span style="background-color: #f5f5f5; color: #000000">'</span><span style="background-color: #f5f5f5; color: #000000"> :</span><span style="background-color: #f5f5f5; color: #000000">'</span><span style="background-color: #f5f5f5; color: #000000">rar文件或zip文件</span><span style="background-color: #f5f5f5; color: #000000">'</span><span style="background-color: #f5f5f5; color: #000000">,</span><span style="background-color: #f5f5f5; color: #008000">//</span><span style="background-color: #f5f5f5; color: #008000">上传文件类型说明</span><span style="background-color: #f5f5f5; color: #008000"><br /></span><span style="background-color: #f5f5f5; color: #000000">'</span><span style="background-color: #f5f5f5; color: #000000">fileExt</span><span style="background-color: #f5f5f5; color: #000000">'</span><span style="background-color: #f5f5f5; color: #000000"> :</span><span style="background-color: #f5f5f5; color: #000000">'</span><span style="background-color: #f5f5f5; color: #000000">*.rar;*.zip</span><span style="background-color: #f5f5f5; color: #000000">'</span><span style="background-color: #f5f5f5; color: #000000">, </span><span style="background-color: #f5f5f5; color: #008000">//</span><span style="background-color: #f5f5f5; color: #008000">控制可上传文件的扩展名，启用本项时需同时声明fileDesc</span><span style="background-color: #f5f5f5; color: #008000"><br /></span><span style="background-color: #f5f5f5; color: #000000">'</span><span style="background-color: #f5f5f5; color: #000000">method</span><span style="background-color: #f5f5f5; color: #000000">'</span><span style="background-color: #f5f5f5; color: #000000">:</span><span style="background-color: #f5f5f5; color: #000000">'</span><span style="background-color: #f5f5f5; color: #000000">get</span><span style="background-color: #f5f5f5; color: #000000">'</span><span style="background-color: #f5f5f5; color: #000000">,</span><span style="background-color: #f5f5f5; color: #008000">//</span><span style="background-color: #f5f5f5; color: #008000">如果向后台传输数据，必须是get</span><span style="background-color: #f5f5f5; color: #008000"><br /></span><span style="background-color: #f5f5f5; color: #000000">'</span><span style="background-color: #f5f5f5; color: #000000">sizeLimit</span><span style="background-color: #f5f5f5; color: #000000">'</span><span style="background-color: #f5f5f5; color: #000000">:</span><span style="background-color: #f5f5f5; color: #000000">1000</span><span style="background-color: #f5f5f5; color: #000000">,</span><span style="background-color: #f5f5f5; color: #008000">//</span><span style="background-color: #f5f5f5; color: #008000">文件上传的大小限制，单位是字节</span><span style="background-color: #f5f5f5; color: #008000"><br /></span><span style="background-color: #f5f5f5; color: #000000">'</span><span style="background-color: #f5f5f5; color: #000000">auto</span><span style="background-color: #f5f5f5; color: #000000">'</span><span style="background-color: #f5f5f5; color: #000000"> :</span><span style="background-color: #f5f5f5; color: #0000ff">false</span><span style="background-color: #f5f5f5; color: #000000">,</span><span style="background-color: #f5f5f5; color: #008000">//</span><span style="background-color: #f5f5f5; color: #008000">是否自动上传</span><span style="background-color: #f5f5f5; color: #008000"><br /></span><span style="background-color: #f5f5f5; color: #000000">'</span><span style="background-color: #f5f5f5; color: #000000">multi</span><span style="background-color: #f5f5f5; color: #000000">'</span><span style="background-color: #f5f5f5; color: #000000"> :</span><span style="background-color: #f5f5f5; color: #0000ff">true</span><span style="background-color: #f5f5f5; color: #000000">,<br />    </span><span style="background-color: #f5f5f5; color: #000000">'</span><span style="background-color: #f5f5f5; color: #000000">simUploadLimit</span><span style="background-color: #f5f5f5; color: #000000">'</span><span style="background-color: #f5f5f5; color: #000000"> :</span><span style="background-color: #f5f5f5; color: #000000">2</span><span style="background-color: #f5f5f5; color: #000000">,</span><span style="background-color: #f5f5f5; color: #008000">//</span><span style="background-color: #f5f5f5; color: #008000">同时上传文件的数量</span><span style="background-color: #f5f5f5; color: #008000"><br /></span><span style="background-color: #f5f5f5; color: #000000">'</span><span style="background-color: #f5f5f5; color: #000000">buttonText</span><span style="background-color: #f5f5f5; color: #000000">'</span><span style="background-color: #f5f5f5; color: #000000"> :</span><span style="background-color: #f5f5f5; color: #000000">'</span><span style="background-color: #f5f5f5; color: #000000">BROWSE</span><span style="background-color: #f5f5f5; color: #000000">'</span><span style="background-color: #f5f5f5; color: #000000">,</span><span style="background-color: #f5f5f5; color: #008000">//</span><span style="background-color: #f5f5f5; color: #008000">浏览按钮图片</span><span style="background-color: #f5f5f5; color: #008000"><br /></span><span style="background-color: #f5f5f5; color: #000000">'</span><span style="background-color: #f5f5f5; color: #000000">onComplete</span><span style="background-color: #f5f5f5; color: #000000">'</span><span style="background-color: #f5f5f5; color: #000000">: </span><span style="background-color: #f5f5f5; color: #0000ff">function</span><span style="background-color: #f5f5f5; color: #000000">(event, queueID, fileObj,serverData,data) {</span><span style="background-color: #f5f5f5; color: #008000">//</span><span style="background-color: #f5f5f5; color: #008000">当上传完成后的回调函数，ajax方式哦~~</span><span style="background-color: #f5f5f5; color: #008000"><br /></span><span style="background-color: #f5f5f5; color: #000000">     alert(data.speed); <br />    }<br />   });<br />});<br /><br /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">script</span><span style="color: #0000ff">&gt;</span><br /><br /><br /><br /><span style="color: #0000ff">&lt;</span><span style="color: #800000">script </span><span style="color: #ff0000">type</span><span style="color: #0000ff">="text/javascript"</span><span style="color: #ff0000"> src</span><span style="color: #0000ff">="js/jquery-1.3.2.min.js"</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">script</span><span style="color: #0000ff">&gt;</span><br /><span style="color: #0000ff">&lt;</span><span style="color: #800000">script </span><span style="color: #ff0000">type</span><span style="color: #0000ff">="text/javascript"</span><span style="color: #ff0000"> src</span><span style="color: #0000ff">="js/swfobject.js"</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">script</span><span style="color: #0000ff">&gt;</span><br /><span style="color: #0000ff">&lt;</span><span style="color: #800000">script </span><span style="color: #ff0000">type</span><span style="color: #0000ff">="text/javascript"</span><span style="color: #ff0000"> src</span><span style="color: #0000ff">="js/jquery.uploadify.v2.1.0.min.js"</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">script</span><span style="color: #0000ff">&gt;</span><br /><br /><span style="color: #0000ff">&lt;</span><span style="color: #800000">div </span><span style="color: #ff0000">id</span><span style="color: #0000ff">="fileQueue"</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">div</span><span style="color: #0000ff">&gt;</span><br /><span style="color: #0000ff">&lt;</span><span style="color: #800000">input </span><span style="color: #ff0000">type</span><span style="color: #0000ff">="file"</span><span style="color: #ff0000"> name</span><span style="color: #0000ff">="uploadify"</span><span style="color: #ff0000"> id</span><span style="color: #0000ff">="uploadify"</span> <span style="color: #0000ff">/&gt;</span><br /><span style="color: #0000ff">&lt;</span><span style="color: #800000">p</span><span style="color: #0000ff">&gt;</span><br />    <span style="color: #0000ff">&lt;</span><span style="color: #800000">a </span><span style="color: #ff0000">href</span><span style="color: #0000ff">="javascript:jQuery('#uploadify').uploadifyUpload()"</span><span style="color: #0000ff">&gt;</span>开始上传<span style="color: #0000ff">&lt;/</span><span style="color: #800000">a</span><span style="color: #0000ff">&gt;</span><span style="color: #ff0000">&amp;nbsp;</span><br />    <span style="color: #0000ff">&lt;</span><span style="color: #800000">a </span><span style="color: #ff0000">href</span><span style="color: #0000ff">="javascript:jQuery('#uploadify').uploadifyClearQueue()"</span><span style="color: #0000ff">&gt;</span>取消所有上传<span style="color: #0000ff">&lt;/</span><span style="color: #800000">a</span><span style="color: #0000ff">&gt;</span><br /><span style="color: #0000ff">&lt;/</span><span style="color: #800000">p</span><span style="color: #0000ff">&gt;</span><br /><br />java后台：<br /><br />String savePath = this.getServletConfig().getServletContext().getRealPath("");<br /><br />   savePath = savePath + "/uploads/";<br /><br />   File f1 = new File(savePath);<br /><br />   System.out.println(savePath);<br /><br />   if (!f1.exists()) {<br /><br />    f1.mkdirs();<br /><br />   }<br /><br />   DiskFileItemFactory fac = new DiskFileItemFactory();<br /><br />   ServletFileUpload upload = new ServletFileUpload(fac);<br /><br />   upload.setHeaderEncoding("utf-8");<br /><br />   List fileList = null;<br /><br />   try {<br /><br />    fileList = upload.parseRequest(request);<br /><br />   } catch (FileUploadException ex) {<br /><br />    ex.printStackTrace();<br />    return;<br /><br />   }<br /><br />   Iterator it = fileList.iterator();<br /><br />   while (it.hasNext()) {<br /><br />    FileItem item = (FileItem) it.next();<br /><br />    if (!item.isFormField()) {<br /><br />     name = item.getName();<br /><br />     long size = item.getSize();<br /><br />     String type = item.getContentType();<br /><br />     if (name == null || name.trim().equals("")) {<br /><br />      continue;<br /><br />     }<br /><br />     // 扩展名格式：<br /><br />     if (name.lastIndexOf(".") &gt;= 0) {<br /><br />      extName = name.substring(name.lastIndexOf("."));<br /><br />     }<br /><br />     File file = null;<br /><br />     do {<br /><br />      // 生成文件名：<br /><br />      name = UUID.randomUUID().toString();<br /><br />      file = new File(savePath + name + extName);<br /><br />     } while (file.exists());<br /><br />     File saveFile = new File(savePath + name + extName);<br /><br />     try {<br /><br />      item.write(saveFile);<br /><br />     } catch (Exception e) {<br /><br />      e.printStackTrace();<br /><br />     }<br /><br />    }<br /><br />   }<br /><br />   response.getWriter().print(name + extName);<br /><br />代码很好懂，不讲解了。</pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a title="复制代码" onclick="copyCnblogsCode(this)" href="javascript:void(0);"><img alt="复制代码" src="http://common.cnblogs.com/images/copycode.gif" /></a></span></div></div>
<p><strong><br /><br /></strong></p>
<p><strong>下面是官方英文文档的一些翻译。此文档是2.14版本的，现在出了3.0版本，属性和事件名称有改变，注意参考JS文件</strong></p>
<p><strong>Uploadify属性</strong></p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="120"><strong>属性名</strong></td>
<td valign="top" width="110"><strong>类型</strong></td>
<td valign="top" width="338"><strong>说明</strong></td></tr>
<tr>
<td valign="top" width="120"><a href="http://www.uploadify.com/documentation/options/auto/"><font color="#6466b3">auto</font></a></td>
<td valign="top" width="110">boolean</td>
<td valign="top" width="338">添加到队列后自动上传</td></tr>
<tr>
<td valign="top" width="120"><a href="http://www.uploadify.com/documentation/options/buttonimg/"><font color="#6466b3">buttonImg</font></a></td>
<td valign="top" width="110">string</td>
<td valign="top" width="338">浏览按钮的背景图片</td></tr>
<tr>
<td valign="top" width="120"><a href="http://www.uploadify.com/documentation/options/buttontext/"><font color="#6466b3">buttonText</font></a></td>
<td valign="top" width="110">string</td>
<td valign="top" width="338">浏览按钮的显示文字</td></tr>
<tr>
<td valign="top" width="120"><a href="http://www.uploadify.com/documentation/options/cancelimg/"><font color="#6466b3">cancelImg</font></a></td>
<td valign="top" width="110">string</td>
<td valign="top" width="338">取消上传按钮的图片</td></tr>
<tr>
<td valign="top" width="120"><a href="http://www.uploadify.com/documentation/options/checkscript/"><font color="#6466b3">checkScript</font></a></td>
<td valign="top" width="110">string</td>
<td valign="top" width="338">服务端用来检查文件是否重名的脚本</td></tr>
<tr>
<td valign="top" width="120"><a href="http://www.uploadify.com/documentation/options/displaydata/"><font color="#6466b3">displayData</font></a></td>
<td valign="top" width="110">string</td>
<td valign="top" width="338">上传时显示的提示（percentage百分比/speed速度）</td></tr>
<tr>
<td valign="top" width="120"><a href="http://www.uploadify.com/documentation/options/expressinstall/"><font color="#6466b3">expressInstall</font></a></td>
<td valign="top" width="110">string</td>
<td valign="top" width="338">安装swf的文件(expressInstall.swf)路径</td></tr>
<tr>
<td valign="top" width="120"><a href="http://www.uploadify.com/documentation/options/filedataname/"><font color="#6466b3">fileDataName</font></a></td>
<td valign="top" width="110">string</td>
<td valign="top" width="338">重定义的input的名称（后台）</td></tr>
<tr>
<td valign="top" width="120"><a href="http://www.uploadify.com/documentation/options/filedesc/"><font color="#6466b3">fileDesc</font></a></td>
<td valign="top" width="110">string</td>
<td valign="top" width="338">文件打开对话框中的文件类型描述</td></tr>
<tr>
<td valign="top" width="120"><a href="http://www.uploadify.com/documentation/options/fileext/"><font color="#6466b3">fileExt</font></a></td>
<td valign="top" width="110">string</td>
<td valign="top" width="338">可允许上传的文件类型</td></tr>
<tr>
<td valign="top" width="120"><a href="http://www.uploadify.com/documentation/options/folder/"><font color="#6466b3">folder</font></a></td>
<td valign="top" width="110">string</td>
<td valign="top" width="338">文件存储的文件夹</td></tr>
<tr>
<td valign="top" width="120"><a href="http://www.uploadify.com/documentation/options/height/"><font color="#6466b3">height</font></a></td>
<td valign="top" width="110">integer</td>
<td valign="top" width="338">浏览按钮的高度</td></tr>
<tr>
<td valign="top" width="120"><a href="http://www.uploadify.com/documentation/options/hidebutton/"><font color="#6466b3">hideButton</font></a></td>
<td valign="top" width="110">boolean</td>
<td valign="top" width="338">是否隐藏浏览按钮</td></tr>
<tr>
<td valign="top" width="120"><a href="http://www.uploadify.com/documentation/options/method/"><font color="#6466b3">method</font></a></td>
<td valign="top" width="110">string</td>
<td valign="top" width="338">表单提交方式（post/get）</td></tr>
<tr>
<td valign="top" width="120"><a href="http://www.uploadify.com/documentation/options/multi/"><font color="#6466b3">multi</font></a></td>
<td valign="top" width="110">boolean</td>
<td valign="top" width="338">是否允许上传多个文件</td></tr>
<tr>
<td valign="top" width="120"><a href="http://www.uploadify.com/documentation/options/queueid/"><font color="#6466b3">queueID</font></a></td>
<td valign="top" width="110">string</td>
<td valign="top" width="338">上传队列的元素的ID</td></tr>
<tr>
<td valign="top" width="120"><a href="http://www.uploadify.com/documentation/options/queuesizelimit/"><font color="#6466b3">queueSizeLimit</font></a></td>
<td valign="top" width="110">integer</td>
<td valign="top" width="338">上传队列大小</td></tr>
<tr>
<td valign="top" width="120"><a href="http://www.uploadify.com/documentation/options/removecompleted/"><font color="#6466b3">removeCompleted</font></a></td>
<td valign="top" width="110">boolean</td>
<td valign="top" width="338">完成上传时是否自动删除</td></tr>
<tr>
<td valign="top" width="120"><a href="http://www.uploadify.com/documentation/options/rollover/"><font color="#6466b3">rollover</font></a></td>
<td valign="top" width="110">boolean</td>
<td valign="top" width="338">当鼠标移上时产生特效</td></tr>
<tr>
<td valign="top" width="120"><a href="http://www.uploadify.com/documentation/options/script/"><font color="#6466b3">script</font></a></td>
<td valign="top" width="110">string</td>
<td valign="top" width="338">上传表单提交的目标脚本</td></tr>
<tr>
<td valign="top" width="120"><a href="http://www.uploadify.com/documentation/options/scriptaccess/"><font color="#6466b3">scriptAccess</font></a></td>
<td valign="top" width="110">string</td>
<td valign="top" width="338">swf的文件地址</td></tr>
<tr>
<td valign="top" width="120"><a href="http://www.uploadify.com/documentation/options/scriptdata/"><font color="#6466b3">scriptData</font></a></td>
<td valign="top" width="110">JSON</td>
<td valign="top" width="338">提交给后台的附加信息</td></tr>
<tr>
<td valign="top" width="120"><a href="http://www.uploadify.com/documentation/options/simuploadlimit/"><font color="#6466b3">simUploadLimit</font></a></td>
<td valign="top" width="110">integer</td>
<td valign="top" width="338">同时可上传的文件实例数</td></tr>
<tr>
<td valign="top" width="120"><a href="http://www.uploadify.com/documentation/options/sizelimit/"><font color="#6466b3">sizeLimit</font></a></td>
<td valign="top" width="110">integer</td>
<td valign="top" width="338">每文件的最大大小</td></tr>
<tr>
<td valign="top" width="120"><a href="http://www.uploadify.com/documentation/options/uploader/"><font color="#6466b3">uploader</font></a></td>
<td valign="top" width="110">string</td>
<td valign="top" width="338">uploadify上传的swf文件路径</td></tr>
<tr>
<td valign="top" width="120"><a href="http://www.uploadify.com/documentation/options/width/"><font color="#6466b3">width</font></a></td>
<td valign="top" width="110">integer</td>
<td valign="top" width="338">浏览按钮的宽度</td></tr>
<tr>
<td valign="top" width="120"><a href="http://www.uploadify.com/documentation/options/wmode/"><font color="#6466b3">wmode</font></a></td>
<td valign="top" width="110">string</td>
<td valign="top" width="338">flash文件的wmode模式</td></tr></tbody></table>
<p><strong>Uploadify事件</strong></p>
<div>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="104"><strong>事件名</strong></td>
<td valign="top" width="265"><strong>参数</strong></td>
<td valign="top" width="230"><strong>说明</strong></td></tr>
<tr>
<td valign="top" width="104"><a href="http://www.uploadify.com/documentation/events/onallcomplete/"><font color="#6466b3">onAllComplete</font></a></td>
<td valign="top" width="265">function(event,data)</td>
<td valign="top" width="230">当所有文件上传完毕时触发</td></tr>
<tr>
<td valign="top" width="104"><a href="http://www.uploadify.com/documentation/events/oncancel/"><font color="#6466b3">onCancel</font></a></td>
<td valign="top" width="265">function(event,ID,fileObj,data)</td>
<td valign="top" width="230">当某文件被取消上传时触发</td></tr>
<tr>
<td valign="top" width="104"><a href="http://www.uploadify.com/documentation/events/oncheck/"><font color="#6466b3">onCheck</font></a></td>
<td valign="top" width="265">function()</td>
<td valign="top" width="230">当开始上传时检查是否重名</td></tr>
<tr>
<td valign="top" width="104"><a href="http://www.uploadify.com/documentation/events/onclearqueue/"><font color="#6466b3">onClearQueue</font></a></td>
<td valign="top" width="265">function(event)</td>
<td valign="top" width="230">当执行uploadifyClearQueue()后执行</td></tr>
<tr>
<td valign="top" width="104"><a href="http://www.uploadify.com/documentation/events/oncomplete-2/"><font color="#6466b3">onComplete</font></a></td>
<td valign="top" width="265">function(event, ID, fileObj, response, data)</td>
<td valign="top" width="230">当某文件上传完毕时触发</td></tr>
<tr>
<td valign="top" width="104"><a href="http://www.uploadify.com/documentation/events/onerror/"><font color="#6466b3">onError</font></a></td>
<td valign="top" width="265">function(event,ID,fileObj,errorObj)</td>
<td valign="top" width="230">当上传时有错误返回时触发</td></tr>
<tr>
<td valign="top" width="104"><a href="http://www.uploadify.com/documentation/events/oninit/"><font color="#6466b3">onInit</font></a></td>
<td valign="top" width="265">function()</td>
<td valign="top" width="230">当uploadify实例加载完毕时触发</td></tr>
<tr>
<td valign="top" width="104"><a href="http://www.uploadify.com/documentation/events/onopen/"><font color="#6466b3">onOpen</font></a></td>
<td valign="top" width="265">function(event,ID,fileObj)</td>
<td valign="top" width="230">当某文件开始上传时触发</td></tr>
<tr>
<td valign="top" width="104"><a href="http://www.uploadify.com/documentation/events/onprogess/"><font color="#6466b3">onProgress</font></a></td>
<td valign="top" width="265">function(event,ID,fileObj,data)</td>
<td valign="top" width="230">当某文件上传进度改变时触发</td></tr>
<tr>
<td valign="top" width="104"><a href="http://www.uploadify.com/documentation/events/onqueuefull/"><font color="#6466b3">onQueueFull</font></a></td>
<td valign="top" width="265">function(event,queueSizeLimit)</td>
<td valign="top" width="230">当上传队列达到限制时触发</td></tr>
<tr>
<td valign="top" width="104"><a href="http://www.uploadify.com/documentation/events/onselect/"><font color="#6466b3">onSelect</font></a></td>
<td valign="top" width="265">function(event,ID,fileObj)</td>
<td valign="top" width="230">每个文件被添加到上传队列时触发</td></tr>
<tr>
<td valign="top" width="104"><a href="http://www.uploadify.com/documentation/events/onselectonce/"><font color="#6466b3">onSelectOnce</font></a></td>
<td valign="top" width="265">function(event,data)</td>
<td valign="top" width="230">一次文件被添加到上传队列时触发</td></tr>
<tr>
<td valign="top" width="104"><a href="http://www.uploadify.com/documentation/events/onready/"><font color="#6466b3">onSWFReady</font></a></td>
<td valign="top" width="265">function()</td>
<td valign="top" width="230">当flash加载完毕时触发</td></tr></tbody></table></div>
<p><strong>Uploadify方法</strong></p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="168"><strong>方法名</strong></td>
<td valign="top" width="400"><strong>说明</strong></td></tr>
<tr>
<td valign="top" width="168"><a href="http://www.uploadify.com/documentation/methods/uploadify/"><font color="#6466b3">.uploadify()</font></a></td>
<td valign="top" width="400">创建Uploadify的实例</td></tr>
<tr>
<td valign="top" width="168"><a href="http://www.uploadify.com/documentation/methods/uploadifycancel/"><font color="#6466b3">.uploadifyCancel()</font></a></td>
<td valign="top" width="400">从上传队列中移除一个文件</td></tr>
<tr>
<td valign="top" width="168"><a href="http://www.uploadify.com/documentation/methods/uploadifyclearqueue/"><font color="#6466b3">.uploadifyClearQueue()</font></a></td>
<td valign="top" width="400">清空上传队列</td></tr>
<tr>
<td valign="top" width="168"><a href="http://www.uploadify.com/documentation/methods/uploadifysettings/"><font color="#6466b3">.uploadifySettings()</font></a></td>
<td valign="top" width="400">修改Uploadify实例的属性</td></tr>
<tr>
<td valign="top" width="168"><a href="http://www.uploadify.com/documentation/methods/uploadifyupload/"><font color="#6466b3">.uploadifyUpload()</font></a></td></tr></tbody></table></div></div><img src ="http://www.blogjava.net/zhaochengming/aggbug/390164.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhaochengming/" target="_blank">helloworld2008</a> 2012-10-24 15:13 <a href="http://www.blogjava.net/zhaochengming/archive/2012/10/24/390164.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>tomcat 内存设置</title><link>http://www.blogjava.net/zhaochengming/archive/2012/10/12/389485.html</link><dc:creator>helloworld2008</dc:creator><author>helloworld2008</author><pubDate>Fri, 12 Oct 2012 11:02:00 GMT</pubDate><guid>http://www.blogjava.net/zhaochengming/archive/2012/10/12/389485.html</guid><wfw:comment>http://www.blogjava.net/zhaochengming/comments/389485.html</wfw:comment><comments>http://www.blogjava.net/zhaochengming/archive/2012/10/12/389485.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhaochengming/comments/commentRss/389485.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhaochengming/services/trackbacks/389485.html</trackback:ping><description><![CDATA[<div>rem ----- Execute The Requested Command ---------------------------------------</div>
<div>set JAVA_OPTS=%JAVA_OPTS% -server -Xms800m -Xmx4800m -XX:MaxNewSize=256m &nbsp;&nbsp;</div>
<div>echo Using CATALINA_BASE: &nbsp; %CATALINA_BASE%</div>
<div>echo Using CATALINA_HOME: &nbsp; %CATALINA_HOME%</div>
<div>echo Using CATALINA_TMPDIR: %CATALINA_TMPDIR%<br /><br /><br />tomcat的内存可设置大小是根据jvm可配置的内存大小相关，32位一般支持1.5g，64位支持不限。<br />java -Xmx1G&nbsp; -version 可以调整数字，测试可修改的大小。</div><img src ="http://www.blogjava.net/zhaochengming/aggbug/389485.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhaochengming/" target="_blank">helloworld2008</a> 2012-10-12 19:02 <a href="http://www.blogjava.net/zhaochengming/archive/2012/10/12/389485.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>淘宝（大数据库应用）</title><link>http://www.blogjava.net/zhaochengming/archive/2012/09/11/387432.html</link><dc:creator>helloworld2008</dc:creator><author>helloworld2008</author><pubDate>Tue, 11 Sep 2012 01:36:00 GMT</pubDate><guid>http://www.blogjava.net/zhaochengming/archive/2012/09/11/387432.html</guid><wfw:comment>http://www.blogjava.net/zhaochengming/comments/387432.html</wfw:comment><comments>http://www.blogjava.net/zhaochengming/archive/2012/09/11/387432.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhaochengming/comments/commentRss/387432.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhaochengming/services/trackbacks/387432.html</trackback:ping><description><![CDATA[<a href="http://blog.sina.com.cn/s/blog_69a39f8e01013ny3.html">http://blog.sina.com.cn/s/blog_69a39f8e01013ny3.html</a><img src ="http://www.blogjava.net/zhaochengming/aggbug/387432.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhaochengming/" target="_blank">helloworld2008</a> 2012-09-11 09:36 <a href="http://www.blogjava.net/zhaochengming/archive/2012/09/11/387432.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>.用友数据量过大造成软件缓慢的优化策略 </title><link>http://www.blogjava.net/zhaochengming/archive/2012/07/12/382845.html</link><dc:creator>helloworld2008</dc:creator><author>helloworld2008</author><pubDate>Thu, 12 Jul 2012 01:49:00 GMT</pubDate><guid>http://www.blogjava.net/zhaochengming/archive/2012/07/12/382845.html</guid><wfw:comment>http://www.blogjava.net/zhaochengming/comments/382845.html</wfw:comment><comments>http://www.blogjava.net/zhaochengming/archive/2012/07/12/382845.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhaochengming/comments/commentRss/382845.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhaochengming/services/trackbacks/382845.html</trackback:ping><description><![CDATA[我们有一些客户的数据库是巨量数据，特别是用到生产管理的模块，千万行甚至亿行记录都不足为奇。如此情况下，数据库运行速度将受到严重影响，打开一个账表半小时甚至两小时，做一个计划要两天两夜，客户抱怨不断，服务人员焦头烂额，总不能叫客户都去买大型计算机吧。<br /><br /><br />其实是有办法可以大大提升数据库运行效率的，这要求我们的服务人员要学会数据库日常维护的高级技巧，而且是必须学会。<br /><br />下面是数据库效率提升技巧的全面内容，建议所有服务人员自行练习并用在实际工作中，要求熟练掌握。<br /><br /><br /><strong>技巧一：重建索引</strong><br />效率提升指数：高<br /><br />特点：一二三买单，灰常的快，一下就弄完可以走人了。<br /><br />案例：某超市T1商贸宝 百万行级数据，原速度五秒，重建索引后两秒不到，速度提升近一倍。不要小看这几秒，对超市来讲，那意味着不必要排长队。<br /><br /><br />由于数据库日常写操作频繁，索引的工作效率会越来越低，速度自然大受影响，很多客户会有这种感觉，前半年还非常快，后半年就受不了了。刚刚到年底，正好是出报告、查资料的年关，偏偏软件慢得要命，服务人员也别想有好日子过，陪着加班吧，就算解决不了问题，也让人家心理舒服点。这样的日子可以过去了。<br /><br /><br />命令1：DBCC DBREINDEX (表名称,"",70) ---针对主要影响速度的表，一般如rdrecords、salebillvouchs、pp_mrpdetails、pp_rmrpdetails<br />说明：只对主要表操作，影响速度的当然是这几个大表，速度解决问题，也不影响客户使用<br /><br /><br />命令2：exec sp_msforeachtable "DBCC DBREINDEX(""?"")" ---数据库所有表重建索引<br />说明：不太建议，除非太咸了<br /><br /><br />特别指出，重建索引前必须断网，以保证所有客户端无人在操作软件，你懂的<br /><br /><br /><br /><strong>技巧二：表分区 </strong><br /><br />效率提升指数：超高<br /><br />特点：慢工出快活。硬盘越多，它就越快，所有硬盘一起转当然快；CPU越多，它就更快，sqlserver的引擎对这个有优化设计；设计得越合理，它就灰常滴快，例如历史数据按年存放，因为你一般不用嘛，那数据库只对你要操作的部分分区检索，自然飞快。<br />还有，必须得是sql2005及以上版本，人家买的ERP你还装sql2000，去死吧。<br /><br />案例：NC、U8 10.0，是的，它们用的就是表分区，所以数据越海，速度也越Hi<br /><br /><br />没有做表分区之前，客户是痛苦的，你也得痛苦，因为你不明白几万元的服务器怎么就玩不转一个T6，但NC这么海却可以在宽带上溜溜的跑？U8 10.0还不分年度裤呢，咱一个年度还用爬的？如果我说可以提升五倍甚至更高的速度，你信不信？反正我是信了。<br /><br />真的。<br /><br /><br />这个有点点难，因为要求有更多的数据库知识，不过初中生的水平也够用了，来吧。<br /><br />1.为数据库建个文件组（可以建多个），最好是存放于不同磁盘上。这样效率得以最大化，想一想吧，我们查一个年度所有收发记录，三个硬盘一起转，是不是原来速度的三倍？ <br /><br />ALTER DATABASE 数据库名 ADD FILEGROUP 文件组名<br /><br />2.一个文件组可放置多个文件，下面，只为一个文件组分配一个文件，类推吧。<br /><br /><br />ALTER DATABASE 数据库名 ADD FILE (NAME = N"文件组名", FILENAME = N"存放路径",SIZE = 5MB , FILEGROWTH = 10% ) TO FILEGROUP 文件组名 <br /><br />3.创建分区函数。这个函数是本文件组专有的，再建其它的文件组还得再搞一个。主要是设定，包括预设现有的数据从哪里开始水平分割，比如我们假设U8 10.0的上一年度最后一行rdrecords记录的Id是5000000，那么就可以设定这个值，这以内的记录会切割保存到第一个分区中。<br /><br />CREATE PARTITION FUNCTION [函数名] (int) AS RANGE LEFT FOR VALUES (5000000,8274249,12000000)<br />此句表示，分三个区存放原先的数据<br /><br />4.将分区函数绑定到分区架构上 <br /><br />CREATE PARTITION SCHEME [架构名]<br />AS PARTITION [函数名]<br />TO ([PRIMARY],[文件组名],[PRIMARY],[文件组名],[PRIMARY],[文件组名])<br /><br />5.删除表的主键，必须删除，表担心，主键可以再建的 <br />ALTER TABLE 数据表名称 DROP CONSTRAINT [主键]<br /><br />6.删除聚集索引，如果有的话，我还没找到命令，现在是手动删除的<br /><br />7.开始做表分区 <br /><br />ALTER TABLE 数据表名称 add CONSTRAINT [主键] PRIMARY KEY CLUSTERED (主键字段名)<br />ON [SHEME_rdrec](主键字段名)<br /><br />你看，这不是恢复了主键吗<br />不过还是得手动恢复原来的聚集索引，这个我再查查语句吧<br /><br /><br /><br /><strong>特别提出：</strong><br />数据库收缩并不能提高数据库的读取效率，正相反，它反而更慢了。原因，是收缩后数据库内部的数据存储发生位移，也就是索引变得更低效。<br />这种情况下，必须再做一次索引重建，但我发现似乎只要收缩了以后，数据库都慢，重建索引也恢复不到原来的速度，一下想不明白道理，而且做的测试次数也有限。<br />(转帖于:http://bbs.iufida.com/thread-174625-1-1.html)<img src ="http://www.blogjava.net/zhaochengming/aggbug/382845.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhaochengming/" target="_blank">helloworld2008</a> 2012-07-12 09:49 <a href="http://www.blogjava.net/zhaochengming/archive/2012/07/12/382845.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>待整理</title><link>http://www.blogjava.net/zhaochengming/archive/2012/07/02/381966.html</link><dc:creator>helloworld2008</dc:creator><author>helloworld2008</author><pubDate>Mon, 02 Jul 2012 02:11:00 GMT</pubDate><guid>http://www.blogjava.net/zhaochengming/archive/2012/07/02/381966.html</guid><wfw:comment>http://www.blogjava.net/zhaochengming/comments/381966.html</wfw:comment><comments>http://www.blogjava.net/zhaochengming/archive/2012/07/02/381966.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhaochengming/comments/commentRss/381966.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhaochengming/services/trackbacks/381966.html</trackback:ping><description><![CDATA[（1）.cmd下不能用，应该是path的问题 <br /><br />我的电脑-&gt; 属性-&gt; 高级-&gt; 环境变量 <br />看看系统变量的path中这个是不是还在：%SystemRoot%\<strong style="background-color: #ff66ff; color: black">system32</strong>;%SystemRoot%;%SystemRoot%\<strong style="background-color: #ff66ff; color: black">System32</strong>\Wbem; <br />不在就加进去，记住，别删了原来的！ <br />双击一闪而过，正常，执行完了当然退出，它执行速度快嘛<br /><br /><img src ="http://www.blogjava.net/zhaochengming/aggbug/381966.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhaochengming/" target="_blank">helloworld2008</a> 2012-07-02 10:11 <a href="http://www.blogjava.net/zhaochengming/archive/2012/07/02/381966.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sqlserver经典查询练习</title><link>http://www.blogjava.net/zhaochengming/archive/2012/07/01/381914.html</link><dc:creator>helloworld2008</dc:creator><author>helloworld2008</author><pubDate>Sun, 01 Jul 2012 06:26:00 GMT</pubDate><guid>http://www.blogjava.net/zhaochengming/archive/2012/07/01/381914.html</guid><wfw:comment>http://www.blogjava.net/zhaochengming/comments/381914.html</wfw:comment><comments>http://www.blogjava.net/zhaochengming/archive/2012/07/01/381914.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhaochengming/comments/commentRss/381914.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhaochengming/services/trackbacks/381914.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: --创建测试数据create table Student(S# varchar(10),Sname nvarchar(10),Sage datetime,Ssex nvarchar(10))insert into Student values('01' , N'赵雷' , '1990-01-01' , N'男')insert into Student values('02' , N'钱...&nbsp;&nbsp;<a href='http://www.blogjava.net/zhaochengming/archive/2012/07/01/381914.html'>阅读全文</a><img src ="http://www.blogjava.net/zhaochengming/aggbug/381914.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhaochengming/" target="_blank">helloworld2008</a> 2012-07-01 14:26 <a href="http://www.blogjava.net/zhaochengming/archive/2012/07/01/381914.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SqlServer函数</title><link>http://www.blogjava.net/zhaochengming/archive/2012/06/28/381740.html</link><dc:creator>helloworld2008</dc:creator><author>helloworld2008</author><pubDate>Thu, 28 Jun 2012 14:57:00 GMT</pubDate><guid>http://www.blogjava.net/zhaochengming/archive/2012/06/28/381740.html</guid><wfw:comment>http://www.blogjava.net/zhaochengming/comments/381740.html</wfw:comment><comments>http://www.blogjava.net/zhaochengming/archive/2012/06/28/381740.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhaochengming/comments/commentRss/381740.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhaochengming/services/trackbacks/381740.html</trackback:ping><description><![CDATA[<span class="headline-content">字符串函数</span>　　1 字符串函数 
<div class="spctrl" paragraphindex="1"></div>　　1.1 长度与分析用 
<div class="spctrl" paragraphindex="2"></div>　　datalength(Char_expr) 返回字符串包含字符数,但不包含后面的空格 
<div class="spctrl" paragraphindex="3"></div>　　substring(expression,start,length) 不多说了,取子串 
<div class="spctrl" paragraphindex="4"></div>　　right(char_expr,int_expr) 返回字符串右边int_expr个字符 
<div class="spctrl" paragraphindex="5"></div>　　1.2 字符操作类 
<div class="spctrl" paragraphindex="6"></div>　　upper(char_expr) 转为大写 
<div class="spctrl" paragraphindex="7"></div>　　lower(char_expr) 转为小写 
<div class="spctrl" paragraphindex="8"></div>　　space(int_expr) 生成int_expr个空格 
<div class="spctrl" paragraphindex="9"></div>　　replicate(char_expr,int_expr)复制字符串int_expr次 
<div class="spctrl" paragraphindex="10"></div>　　reverse(char_expr) 反转字符串 
<div class="spctrl" paragraphindex="11"></div>　　stuff(char_expr1,start,length,char_expr2) 将字符串char_expr1中的从 
<div class="spctrl" paragraphindex="12"></div>　　start开始的length个字符用char_expr2代替 
<div class="spctrl" paragraphindex="13"></div>　　ltrim(char_expr) rtrim(char_expr) 取掉空格 
<div class="spctrl" paragraphindex="14"></div>　　ascii(char) char(ascii) 两函数对应,取<a href="http://baike.baidu.com/view/812.htm" target="_blank">ascii码</a>,根据ascii吗取字符 
<div class="spctrl" paragraphindex="15"></div>　　1.3 字符串查找 
<div class="spctrl" paragraphindex="16"></div>　　charindex(char_expr,expression) 返回char_expr的起始位置 
<div class="spctrl" paragraphindex="17"></div>　　patindex("%pattern%",expression) 返回指定模式的起始位置,否则为0 
<h3 class="headline-2 bk-sidecatalog-title" sizset="39" sizcache="0" paragraphindex="18"><a name="1_1"></a><a name="sub2279638_1_1"></a><span class="headline-content">数学函数</span></h3>　　trunc(45.923，1) 按指定精度截断十进制数 结果：45.9 
<div class="spctrl" paragraphindex="19"></div>　　mod(1600,300) 求除法余数 结果：100 
<div class="spctrl" paragraphindex="20"></div>　　abs(numeric_expr) 求<a href="http://baike.baidu.com/view/220956.htm" target="_blank">绝对值</a> 
<div class="spctrl" paragraphindex="21"></div>　　ceiling(numeric_expr) 取大于等于指定值的最小整数 
<div class="spctrl" paragraphindex="22"></div>　　avg（numeric_expr）取平均数 
<div class="spctrl" paragraphindex="23"></div>　　exp(float_expr) 取指数 
<div class="spctrl" paragraphindex="24"></div>　　floor(numeric_expr) 小于等于指定值得最大整数 
<div class="spctrl" paragraphindex="25"></div>　　pi() 3.1415926......... 
<div class="spctrl" paragraphindex="26"></div>　　power(numeric_expr,power) 返回power次方 
<div class="spctrl" paragraphindex="27"></div>　　rand([int_expr]) 随机数产生器 
<div class="spctrl" paragraphindex="28"></div>　　round(numeric_expr,int_expr) 安int_expr规定的精度四舍五入 
<div class="spctrl" paragraphindex="29"></div>　　sign(int_expr) 根据正数,0,负数,,返回+1,0,-1 
<div class="spctrl" paragraphindex="30"></div>　　sqrt(float_expr) 平方根 
<div class="bpctrl" paragraphindex="31"></div>
<h2 class="headline-1 bk-sidecatalog-title" sizset="42" sizcache="0" titleindex="1"><span class="text_edit editable-title" data-edit-id="2279638:2279638:2"><a class="nslog:1019" href="http://baike.baidu.com/view/2279638.htm#">编辑本段</a></span><a name="2"></a><a name="sub2279638_2"></a><span class="headline-content">日期、时间函数</span></h2>　　getdate() 返回日期 
<div class="spctrl" paragraphindex="32"></div>　　datename(datepart,date_expr) 返回名称如 June 
<div class="spctrl" paragraphindex="33"></div>　　datepart(datepart,date_expr) 取日期一部份 
<div class="spctrl" paragraphindex="34"></div>　　datediff(datepart,date_expr1.dateexpr2) 日期差 
<div class="spctrl" paragraphindex="35"></div>　　dateadd(datepart,number,date_expr) 返回日期加上 number 
<div class="spctrl" paragraphindex="36"></div>　　上述函数中datepart的 
<div class="spctrl" paragraphindex="37"></div>　　写法 取值和意义 
<div class="spctrl" paragraphindex="38"></div>　　yy 1753-9999 年份 
<div class="spctrl" paragraphindex="39"></div>　　qq 1-4 刻 
<div class="spctrl" paragraphindex="40"></div>　　mm 1-12 月 
<div class="spctrl" paragraphindex="41"></div>　　dy 1-366 日 
<div class="spctrl" paragraphindex="42"></div>　　dd 1-31 日 
<div class="spctrl" paragraphindex="43"></div>　　wk 1-54 周 
<div class="spctrl" paragraphindex="44"></div>　　dw 1-7 周几 
<div class="spctrl" paragraphindex="45"></div>　　hh 0-23 小时 
<div class="spctrl" paragraphindex="46"></div>　　mi 0-59 分钟 
<div class="spctrl" paragraphindex="47"></div>　　ss 0-59 秒 
<div class="spctrl" paragraphindex="48"></div>　　ms 0-999 毫秒 
<div class="spctrl" paragraphindex="49"></div>　　日期转换 
<div class="spctrl" paragraphindex="50"></div>　　convert() 
<div class="bpctrl" paragraphindex="51"></div>
<h2 class="headline-1 bk-sidecatalog-title" sizset="44" sizcache="0" titleindex="2"><span class="text_edit editable-title" data-edit-id="2279638:2279638:3"><a class="nslog:1019" href="http://baike.baidu.com/view/2279638.htm#">编辑本段</a></span><a name="3"></a><a name="sub2279638_3"></a><span class="headline-content">系统、其他函数</span></h2>　　suser_name() 用户登录名 
<div class="spctrl" paragraphindex="52"></div>　　user_name() 用户在数据库中的名字 
<div class="spctrl" paragraphindex="53"></div>　　user 用户在数据库中的名字 
<div class="spctrl" paragraphindex="54"></div>　　show_role() 对当前用户起作用的规则 
<div class="spctrl" paragraphindex="55"></div>　　db_name() 数据库名 
<div class="spctrl" paragraphindex="56"></div>　　object_name(obj_id) 数据库对象名 
<div class="spctrl" paragraphindex="57"></div>　　col_name(obj_id,col_id) 列名 
<div class="spctrl" paragraphindex="58"></div>　　col_length(objname,colname) 列长度 
<div class="spctrl" paragraphindex="59"></div>　　valid_name(char_expr) 是否是有效<a href="http://baike.baidu.com/view/390932.htm" target="_blank">标识符</a> 
<div style="clear: both" class="bpctrl" paragraphindex="60"></div><img src ="http://www.blogjava.net/zhaochengming/aggbug/381740.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhaochengming/" target="_blank">helloworld2008</a> 2012-06-28 22:57 <a href="http://www.blogjava.net/zhaochengming/archive/2012/06/28/381740.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sqlserver sql常用函数,语法 </title><link>http://www.blogjava.net/zhaochengming/archive/2012/06/28/381739.html</link><dc:creator>helloworld2008</dc:creator><author>helloworld2008</author><pubDate>Thu, 28 Jun 2012 14:50:00 GMT</pubDate><guid>http://www.blogjava.net/zhaochengming/archive/2012/06/28/381739.html</guid><wfw:comment>http://www.blogjava.net/zhaochengming/comments/381739.html</wfw:comment><comments>http://www.blogjava.net/zhaochengming/archive/2012/06/28/381739.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhaochengming/comments/commentRss/381739.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhaochengming/services/trackbacks/381739.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: --&nbsp;返回一个表中所有的字段select&nbsp;name&nbsp;from&nbsp;syscolumns&nbsp;where&nbsp;id=object_id('tb_usertable_online')--&nbsp;获取最近添加的标识列的值set&nbsp;@rs&nbsp;=&nbsp;@@identity--&nbsp;print&nbsp;len('abcdef')...&nbsp;&nbsp;<a href='http://www.blogjava.net/zhaochengming/archive/2012/06/28/381739.html'>阅读全文</a><img src ="http://www.blogjava.net/zhaochengming/aggbug/381739.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhaochengming/" target="_blank">helloworld2008</a> 2012-06-28 22:50 <a href="http://www.blogjava.net/zhaochengming/archive/2012/06/28/381739.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Apache2.2.X+Tomcat5.x使用mod_proxy方式集群</title><link>http://www.blogjava.net/zhaochengming/archive/2012/06/27/381600.html</link><dc:creator>helloworld2008</dc:creator><author>helloworld2008</author><pubDate>Wed, 27 Jun 2012 06:38:00 GMT</pubDate><guid>http://www.blogjava.net/zhaochengming/archive/2012/06/27/381600.html</guid><wfw:comment>http://www.blogjava.net/zhaochengming/comments/381600.html</wfw:comment><comments>http://www.blogjava.net/zhaochengming/archive/2012/06/27/381600.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhaochengming/comments/commentRss/381600.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhaochengming/services/trackbacks/381600.html</trackback:ping><description><![CDATA[<p>使用Apache做集群及负载均衡的方式一般有两种：mod_jk和mod_proxy两种。 <br /><br />&nbsp;&nbsp;&nbsp; 本人尝试过用mod_jk的方式配置过，但都不是很成功，apache2.2.x后已经将mod_proxy集成进来，无需使用其他软件、插件，通过配置就可以完成与tomcat的集成。下面讲述以mod_proxy方式配置情况：&nbsp;<br /><br />&nbsp;&nbsp;&nbsp; 环境：windowsxp,apache2.2.x,tomcat5.5,jdk1.5.0，tomcat放在同一台机器上，3份。 <br /><br />&nbsp;&nbsp;&nbsp; 安装过程略。。。，以下讲述配置过程&nbsp;<br /><br />&nbsp;&nbsp;&nbsp; 1、Apache配置 <br /><br />&nbsp;&nbsp;&nbsp; 1.1 httpd.conf配置 <br /><br />&nbsp;&nbsp;&nbsp;&nbsp; 修改APACHE的配置文件D:\Apache \conf\httpd.conf <br />将以下Module的注释去掉，这里并没有使用mod_jk.so进行apache和tomcat的链接，从2.X以后apache自身已集成了mod_jk.so的功能。只需简单的把下面几行去掉注释，就相当于以前用mod_jk.so比较繁琐的配置了。这里主要采用了代理的方法，就这么简单。&nbsp;<br />&nbsp;&nbsp;&nbsp;</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Xml代码 <a title="复制代码" href="http://anreddy.iteye.com/blog/1099728#"><img alt="复制代码" src="http://anreddy.iteye.com/images/icon_copy.gif" /></a>&nbsp;<a title="收藏这段代码" href="javascript:void()"><img class="star" alt="收藏代码" src="http://anreddy.iteye.com/images/icon_star.png" /><img style="display: none" class="spinner" src="http://anreddy.iteye.com/images/spinner.gif"  alt="" /></a></div></div>
<ol class="dp-xml"><li><span>LoadModule&nbsp;proxy_module&nbsp;modules/mod_proxy.so&nbsp; &nbsp;&nbsp;</span></li><li><span>LoadModule&nbsp;proxy_connect_module&nbsp;modules/mod_proxy_connect.so&nbsp; &nbsp;&nbsp;</span></li><li><span>LoadModule&nbsp;proxy_ftp_module&nbsp;modules/mod_proxy_ftp.so&nbsp; &nbsp;&nbsp;</span></li><li><span>LoadModule&nbsp;proxy_http_module&nbsp;modules/mod_proxy_http.so&nbsp; &nbsp;&nbsp;</span></li><li><span>LoadModule&nbsp;proxy_ajp_module&nbsp;modules/mod_proxy_ajp.so&nbsp; &nbsp;&nbsp;</span></li><li><span>LoadModule&nbsp;proxy_balancer_module&nbsp;modules/mod_proxy_balancer.so&nbsp;&nbsp;&nbsp;</span></li></ol></div><pre style="display: none" class="xml" title="Apache2.2.X+Tomcat5.x使用mod_proxy方式集群" pre_index="0" source_url="http://anreddy.iteye.com/blog/1099728" codeable_type="Blog" codeable_id="1099728" name="code">    LoadModule proxy_module modules/mod_proxy.so 
    LoadModule proxy_connect_module modules/mod_proxy_connect.so 
    LoadModule proxy_ftp_module modules/mod_proxy_ftp.so 
    LoadModule proxy_http_module modules/mod_proxy_http.so 
    LoadModule proxy_ajp_module modules/mod_proxy_ajp.so 
    LoadModule proxy_balancer_module modules/mod_proxy_balancer.so 
</pre>
<p>&nbsp;<br /><br />&nbsp;&nbsp;&nbsp; 再找到加上index.jsp修改成，我项目的默认欢迎页面是index.jsp，记得与前一个之前用空隔分隔。&nbsp;<br />&nbsp;&nbsp;&nbsp;</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Xml代码 <a title="复制代码" href="http://anreddy.iteye.com/blog/1099728#"><img alt="复制代码" src="http://anreddy.iteye.com/images/icon_copy.gif" /></a>&nbsp;<a title="收藏这段代码" href="javascript:void()"><img class="star" alt="收藏代码" src="http://anreddy.iteye.com/images/icon_star.png" /><img style="display: none" class="spinner" src="http://anreddy.iteye.com/images/spinner.gif"  alt="" /></a></div></div>
<ol class="dp-xml"><li><span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">IfModule</span></font></strong><span>&nbsp;dir_module</span><span class="tag"><strong><font color="#006699">&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;DirectoryIndex&nbsp;index.html&nbsp;index.jsp&nbsp;main.html &nbsp;&nbsp;</span></li><li><span></span><strong><font color="#006699"><span class="tag">&lt;/</span><span class="tag-name">IfModule</span><span class="tag">&gt;</span></font></strong><span>&nbsp;&nbsp;</span></span></li></ol></div><pre style="display: none" class="xml" title="Apache2.2.X+Tomcat5.x使用mod_proxy方式集群" pre_index="1" source_url="http://anreddy.iteye.com/blog/1099728" codeable_type="Blog" codeable_id="1099728" name="code">&lt;IfModule dir_module&gt;
    DirectoryIndex index.html index.jsp main.html
&lt;/IfModule&gt;</pre>
<p>&nbsp;<br />&nbsp;&nbsp; 接着找到以下这两行，把下面一行的#号去掉，表示将 conf/extra/httpd-vhosts.conf配置文件加进来&nbsp;<br /><br />&nbsp;&nbsp;</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Xml代码 <a title="复制代码" href="http://anreddy.iteye.com/blog/1099728#"><img alt="复制代码" src="http://anreddy.iteye.com/images/icon_copy.gif" /></a>&nbsp;<a title="收藏这段代码" href="javascript:void()"><img class="star" alt="收藏代码" src="http://anreddy.iteye.com/images/icon_star.png" /><img style="display: none" class="spinner" src="http://anreddy.iteye.com/images/spinner.gif"  alt="" /></a></div></div>
<ol class="dp-xml"><li><span>#&nbsp;Virtual&nbsp;hosts&nbsp; &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;Include&nbsp;conf/extra/httpd-vhosts.conf&nbsp;&nbsp;&nbsp;</span></li></ol></div><pre style="display: none" class="xml" title="Apache2.2.X+Tomcat5.x使用mod_proxy方式集群" pre_index="2" source_url="http://anreddy.iteye.com/blog/1099728" codeable_type="Blog" codeable_id="1099728" name="code"># Virtual hosts 
   Include conf/extra/httpd-vhosts.conf 
</pre>
<p>&nbsp;<br />&nbsp;&nbsp; 最后，在文件最后加上以下内容，表示打开反向代理。 这个很重要，我的项目之前就是没有加上这几行，只能显示index.jsp页面的内容，登录成功后去不能正确跳转到相关页面，还是返回到index.jsp页面。反向代理可以基于一整个站点，也可以基于一个目录。&nbsp;<br /><br />&nbsp;</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Xml代码 <a title="复制代码" href="http://anreddy.iteye.com/blog/1099728#"><img alt="复制代码" src="http://anreddy.iteye.com/images/icon_copy.gif" /></a>&nbsp;<a title="收藏这段代码" href="javascript:void()"><img class="star" alt="收藏代码" src="http://anreddy.iteye.com/images/icon_star.png" /><img style="display: none" class="spinner" src="http://anreddy.iteye.com/images/spinner.gif"  alt="" /></a></div></div>
<ol class="dp-xml"><li><span>ProxyRequests&nbsp;Off &nbsp;&nbsp;</span></li><li><span></span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">Proxy</span></font></strong><span>&nbsp;*:80</span><span class="tag"><strong><font color="#006699">&gt;</font></strong></span><span>&nbsp; &nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;Order&nbsp;deny,allow&nbsp; &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;Allow&nbsp;from&nbsp;all&nbsp; &nbsp;&nbsp;</span></li><li><span></span><strong><font color="#006699"><span class="tag">&lt;/</span><span class="tag-name">Proxy</span><span class="tag">&gt;</span></font></strong><span>&nbsp;&nbsp;&nbsp;</span></span></li></ol></div><pre style="display: none" class="xml" title="Apache2.2.X+Tomcat5.x使用mod_proxy方式集群" pre_index="3" source_url="http://anreddy.iteye.com/blog/1099728" codeable_type="Blog" codeable_id="1099728" name="code">ProxyRequests Off
&lt;Proxy *:80&gt; 
	Order deny,allow 
	Allow from all 
&lt;/Proxy&gt; </pre>
<p>&nbsp;<br />&nbsp;&nbsp;&nbsp; 2.2 http-vhost.conf配置 <br /><br />&nbsp;&nbsp; 修改conf/extra/httpd-vhosts.conf <br /><br />&nbsp;&nbsp; 在文件最后加上以下代码<br />&nbsp;&nbsp;</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Xml代码 <a title="复制代码" href="http://anreddy.iteye.com/blog/1099728#"><img alt="复制代码" src="http://anreddy.iteye.com/images/icon_copy.gif" /></a>&nbsp;<a title="收藏这段代码" href="javascript:void()"><img class="star" alt="收藏代码" src="http://anreddy.iteye.com/images/icon_star.png" /><img style="display: none" class="spinner" src="http://anreddy.iteye.com/images/spinner.gif"  alt="" /></a></div></div>
<ol class="dp-xml"><li><span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">VirtualHost</span></font></strong><span>&nbsp;*:80</span><span class="tag"><strong><font color="#006699">&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;ServerAdmin&nbsp;habibliu@gmail.com &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;ServerName&nbsp;localhost &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;ServerAlias&nbsp;localhost &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;ProxyPass&nbsp;/&nbsp;balancer://cluster/&nbsp;</span><span class="attribute"><font color="#ff0000">stickysession</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">JSESSIONID</font></span><span>|jsessionid&nbsp;</span><span class="attribute"><font color="#ff0000">nofailover</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">On</font></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;ProxyPassReverse&nbsp;/&nbsp;balancer://cluster/ &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">proxy</span></font></strong><span>&nbsp;balancer://cluster</span><span class="tag"><strong><font color="#006699">&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BalancerMember&nbsp;ajp://127.0.0.1:8009&nbsp;</span><span class="attribute"><font color="#ff0000">loadfactor</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">1</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">route</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">s1</font></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BalancerMember&nbsp;ajp://127.0.0.1:8109&nbsp;</span><span class="attribute"><font color="#ff0000">loadfactor</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">1</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">route</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">s2</font></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BalancerMember&nbsp;ajp://127.0.0.1:8209&nbsp;</span><span class="attribute"><font color="#ff0000">loadfactor</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">1</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">route</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">s3</font></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;/</span><span class="tag-name">proxy</span><span class="tag">&gt;</span></font></strong><span>&nbsp;&nbsp;</span></span></li><li><span></span><strong><font color="#006699"><span class="tag">&lt;/</span><span class="tag-name">VirtualHost</span><span class="tag">&gt;</span></font></strong><span>&nbsp;&nbsp;</span></span></li></ol></div><pre style="display: none" class="xml" title="Apache2.2.X+Tomcat5.x使用mod_proxy方式集群" pre_index="4" source_url="http://anreddy.iteye.com/blog/1099728" codeable_type="Blog" codeable_id="1099728" name="code">&lt;VirtualHost *:80&gt;
	ServerAdmin habibliu@gmail.com
	ServerName localhost
	ServerAlias localhost
	ProxyPass / balancer://cluster/ stickysession=JSESSIONID|jsessionid nofailover=On
	ProxyPassReverse / balancer://cluster/
	&lt;proxy balancer://cluster&gt;
		BalancerMember ajp://127.0.0.1:8009 loadfactor=1 route=s1
		BalancerMember ajp://127.0.0.1:8109 loadfactor=1 route=s2
		BalancerMember ajp://127.0.0.1:8209 loadfactor=1 route=s3
	&lt;/proxy&gt;
&lt;/VirtualHost&gt;</pre>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp; 说明： <br />&nbsp;&nbsp; 均衡器粘连会话名称。该值常常会被设置为类似JSESSIONID或者PHPSESSIONID之类的值，他依赖于支持会话的后端应用服务器。如果后端服务器使用不同的cookie名称或者URL编码的ID（像servlet容器），使用|来分开他们。第一个部分针对cookie，第二个针对路径。 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 每次请求都按照负载均衡配置的节点次序依次请求到不同的Tomcat上。尤其是当我们通过jvmRoute 和route 做了绑定之后，信息更加准确。但是，仔细观察，每次请求的SessionID都是不一样！ 对于纯<strong>Web</strong>应用，尤其是依靠SessionID区分唯一用户的应用，这将是一场噩梦&#8212;&#8212;解决了服务器压力均衡问题，却带来了SessionID不唯一问题！这就需要SessionID绑定，或者说叫做&#8220;会话复制&#8221;。 stickySession 粘性会话，根据这一属性，<strong>浏览器</strong>将通过cookie绑定SeesionID。如果这个时候再次访问http://localhost/zlex ，你会发现，页面不会来回跳转了！ <br /><br />&nbsp;&nbsp;&nbsp;&nbsp; 引用：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br /><br />sticky模式 <br />利用负载均衡器的sticky模式的方式把所有同一session的请求都发送到相同的Tomcat节点。这样不同用户的请求就被平均分配到集群 中各个tomcat节点上，实现负载均衡的能力。这样做的缺点是没有灾难恢复的能力。一旦一个节点发生故障，这个节点上所有的session信息全部丢 失； <br />同一用户同一session只和一个webServer交互，一旦这个webserver发生故障，本次session将丢失，用户不能继续使用 ! <br />&nbsp;&nbsp; BalancerMember 是负载均衡参与的成员定义，与tomcat的ajp协议通讯。上面红色的端口号分别是三个tomcat的conf/server.xml中的配置的AJP/1.3协议连接器，由于在同一台机器上部署，所以三个tomcat中的这个端口都要改成不一样的，我这里分别改成8009,8109,8209。紧接着是route设置，值与每个tomcat的配置对应上，下面会说明。 <br />&nbsp;&nbsp; 2、Tomcat的配置说明 <br />&nbsp;&nbsp; 1、server.xml配置 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 修改%TOMCAT_HOME%\conf\server.xml <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 由于三个tomcat都部署在一台机器上，所以相关会引起冲突的端口都要改，分别是： <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; shutdow,http connector,ajp connector，以下是三个tomcat server.xml文件中三个端口的配置清单： <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tomcat s1: </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" href="http://anreddy.iteye.com/blog/1099728#"><img alt="复制代码" src="http://anreddy.iteye.com/images/icon_copy.gif" /></a>&nbsp;<a title="收藏这段代码" href="javascript:void()"><img class="star" alt="收藏代码" src="http://anreddy.iteye.com/images/icon_star.png" /><img style="display: none" class="spinner" src="http://anreddy.iteye.com/images/spinner.gif"  alt="" /></a></div></div>
<ol class="dp-j"><li><span>&lt;Server&nbsp;port=</span><span class="string">"8905"</span><span>&nbsp;shutdown=</span><span class="string">"SHUTDOWN"</span><span>&nbsp;debug=</span><span class="string">"0"</span><span>&gt; &nbsp;&nbsp;</span></li><li><span>.... &nbsp;&nbsp;</span></li><li><span>&nbsp;&lt;Connector&nbsp;port=</span><span class="string">"9000"</span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxThreads=</span><span class="string">"150"</span><span>&nbsp;minSpareThreads=</span><span class="string">"25"</span><span>&nbsp;maxSpareThreads=</span><span class="string">"75"</span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;enableLookups=</span><span class="string">"false"</span><span>&nbsp;redirectPort=</span><span class="string">"8443"</span><span>&nbsp;acceptCount=</span><span class="string">"100"</span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;debug=</span><span class="string">"0"</span><span>&nbsp;connectionTimeout=</span><span class="string">"20000"</span><span>&nbsp; &nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disableUploadTimeout=</span><span class="string">"true"</span><span>&nbsp;/&gt; &nbsp;&nbsp;</span></span></li><li><span>.... &nbsp;&nbsp;</span></li><li><span>&nbsp;&lt;Connector&nbsp;port=</span><span class="string">"8009"</span><span>&nbsp; &nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;enableLookups=</span><span class="string">"false"</span><span>&nbsp;redirectPort=</span><span class="string">"8443"</span><span>&nbsp;debug=</span><span class="string">"0"</span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;protocol=</span><span class="string">"AJP/1.3"</span><span>&nbsp;/&gt;&nbsp;&nbsp;</span></span></li></ol></div><pre style="display: none" class="java" title="Apache2.2.X+Tomcat5.x使用mod_proxy方式集群" pre_index="5" source_url="http://anreddy.iteye.com/blog/1099728" codeable_type="Blog" codeable_id="1099728" name="code">&lt;Server port="8905" shutdown="SHUTDOWN" debug="0"&gt;
....
 &lt;Connector port="9000"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" redirectPort="8443" acceptCount="100"
               debug="0" connectionTimeout="20000" 
               disableUploadTimeout="true" /&gt;
....
 &lt;Connector port="8009" 
               enableLookups="false" redirectPort="8443" debug="0"
               protocol="AJP/1.3" /&gt;</pre>
<p>&nbsp;<br />&nbsp;&nbsp; Tomcat s2&nbsp;<br />&nbsp;&nbsp; </p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Xml代码 <a title="复制代码" href="http://anreddy.iteye.com/blog/1099728#"><img alt="复制代码" src="http://anreddy.iteye.com/images/icon_copy.gif" /></a>&nbsp;<a title="收藏这段代码" href="javascript:void()"><img class="star" alt="收藏代码" src="http://anreddy.iteye.com/images/icon_star.png" /><img style="display: none" class="spinner" src="http://anreddy.iteye.com/images/spinner.gif"  alt="" /></a></div></div>
<ol class="dp-xml"><li><span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">Server</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">port</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"8915"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">shutdown</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"SHUTDOWN"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">debug</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"0"</font></span><span class="tag"><strong><font color="#006699">&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>.... &nbsp;&nbsp;</span></li><li><span>&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">Connector</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">port</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"9100"</font></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute"><font color="#ff0000">maxThreads</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"150"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">minSpareThreads</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"25"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">maxSpareThreads</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"75"</font></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute"><font color="#ff0000">enableLookups</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"false"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">redirectPort</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"8443"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">acceptCount</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"100"</font></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute"><font color="#ff0000">debug</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"0"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">connectionTimeout</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"20000"</font></span><span>&nbsp; &nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute"><font color="#ff0000">disableUploadTimeout</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"true"</font></span><span>&nbsp;</span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>.... &nbsp;&nbsp;</span></li><li><span>&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">Connector</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">port</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"8109"</font></span><span>&nbsp; &nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute"><font color="#ff0000">enableLookups</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"false"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">redirectPort</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"8443"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">debug</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"0"</font></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute"><font color="#ff0000">protocol</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"AJP/1.3"</font></span><span>&nbsp;</span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li></ol></div><pre style="display: none" class="xml" title="Apache2.2.X+Tomcat5.x使用mod_proxy方式集群" pre_index="6" source_url="http://anreddy.iteye.com/blog/1099728" codeable_type="Blog" codeable_id="1099728" name="code">&lt;Server port="8915" shutdown="SHUTDOWN" debug="0"&gt;
....
 &lt;Connector port="9100"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" redirectPort="8443" acceptCount="100"
               debug="0" connectionTimeout="20000" 
               disableUploadTimeout="true" /&gt;
....
 &lt;Connector port="8109" 
               enableLookups="false" redirectPort="8443" debug="0"
               protocol="AJP/1.3" /&gt;</pre>
<p>&nbsp;<br />&nbsp;&nbsp;&nbsp; Tomcat s3 </p>
<p>&nbsp;&nbsp;&nbsp; </p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Xml代码 <a title="复制代码" href="http://anreddy.iteye.com/blog/1099728#"><img alt="复制代码" src="http://anreddy.iteye.com/images/icon_copy.gif" /></a>&nbsp;<a title="收藏这段代码" href="javascript:void()"><img class="star" alt="收藏代码" src="http://anreddy.iteye.com/images/icon_star.png" /><img style="display: none" class="spinner" src="http://anreddy.iteye.com/images/spinner.gif"  alt="" /></a></div></div>
<ol class="dp-xml"><li><span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">Server</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">port</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"8925"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">shutdown</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"SHUTDOWN"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">debug</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"0"</font></span><span class="tag"><strong><font color="#006699">&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>.... &nbsp;&nbsp;</span></li><li><span>&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">Connector</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">port</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"9200"</font></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute"><font color="#ff0000">maxThreads</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"150"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">minSpareThreads</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"25"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">maxSpareThreads</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"75"</font></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute"><font color="#ff0000">enableLookups</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"false"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">redirectPort</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"8443"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">acceptCount</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"100"</font></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute"><font color="#ff0000">debug</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"0"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">connectionTimeout</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"20000"</font></span><span>&nbsp; &nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute"><font color="#ff0000">disableUploadTimeout</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"true"</font></span><span>&nbsp;</span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>.... &nbsp;&nbsp;</span></li><li><span>&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">Connector</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">port</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"8209"</font></span><span>&nbsp; &nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute"><font color="#ff0000">enableLookups</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"false"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">redirectPort</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"8443"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">debug</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"0"</font></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute"><font color="#ff0000">protocol</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"AJP/1.3"</font></span><span>&nbsp;</span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li></ol></div><pre style="display: none" class="xml" title="Apache2.2.X+Tomcat5.x使用mod_proxy方式集群" pre_index="7" source_url="http://anreddy.iteye.com/blog/1099728" codeable_type="Blog" codeable_id="1099728" name="code">&lt;Server port="8925" shutdown="SHUTDOWN" debug="0"&gt;
....
 &lt;Connector port="9200"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" redirectPort="8443" acceptCount="100"
               debug="0" connectionTimeout="20000" 
               disableUploadTimeout="true" /&gt;
....
 &lt;Connector port="8209" 
               enableLookups="false" redirectPort="8443" debug="0"
               protocol="AJP/1.3" /&gt;</pre>
<p>&nbsp;</p>
<p><br />&nbsp;&nbsp; 以上的AJP端口与apache http-vhost.conf中的BalancerMember 的ajp端口对应。 <br />&nbsp;&nbsp;&nbsp; 接着找到的，加上jvmRoute="xx"属性，xx要与apache http-vhost.conf中的BalancerMember 的ajp route定义一致。以下是三个tomcat的engine设置&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;Tomcat s1&nbsp;<br />&nbsp;&nbsp;&nbsp; </p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Xml代码 <a title="复制代码" href="http://anreddy.iteye.com/blog/1099728#"><img alt="复制代码" src="http://anreddy.iteye.com/images/icon_copy.gif" /></a>&nbsp;<a title="收藏这段代码" href="javascript:void()"><img class="star" alt="收藏代码" src="http://anreddy.iteye.com/images/icon_star.png" /><img style="display: none" class="spinner" src="http://anreddy.iteye.com/images/spinner.gif"  alt="" /></a></div></div>
<ol class="dp-xml"><li><span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">Engine</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"Catalina"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">defaultHost</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"localhost"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">debug</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"0"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">jvmRoute</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"s1"</font></span><span class="tag"><strong><font color="#006699">&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li></ol></div><pre style="display: none" class="xml" title="Apache2.2.X+Tomcat5.x使用mod_proxy方式集群" pre_index="8" source_url="http://anreddy.iteye.com/blog/1099728" codeable_type="Blog" codeable_id="1099728" name="code"> &lt;Engine name="Catalina" defaultHost="localhost" debug="0" jvmRoute="s1"&gt;</pre>
<p>&nbsp;<br />&nbsp;&nbsp; Tomcat s2 </p>
<p>&nbsp;&nbsp;&nbsp; </p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Xml代码 <a title="复制代码" href="http://anreddy.iteye.com/blog/1099728#"><img alt="复制代码" src="http://anreddy.iteye.com/images/icon_copy.gif" /></a>&nbsp;<a title="收藏这段代码" href="javascript:void()"><img class="star" alt="收藏代码" src="http://anreddy.iteye.com/images/icon_star.png" /><img style="display: none" class="spinner" src="http://anreddy.iteye.com/images/spinner.gif"  alt="" /></a></div></div>
<ol class="dp-xml"><li><span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">Engine</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"Catalina"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">defaultHost</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"localhost"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">debug</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"0"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">jvmRoute</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"s2"</font></span><span class="tag"><strong><font color="#006699">&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li></ol></div><pre style="display: none" class="xml" title="Apache2.2.X+Tomcat5.x使用mod_proxy方式集群" pre_index="9" source_url="http://anreddy.iteye.com/blog/1099728" codeable_type="Blog" codeable_id="1099728" name="code"> &lt;Engine name="Catalina" defaultHost="localhost" debug="0" jvmRoute="s2"&gt;</pre>
<p>&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp; Tomcat s3&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp; </p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Xml代码 <a title="复制代码" href="http://anreddy.iteye.com/blog/1099728#"><img alt="复制代码" src="http://anreddy.iteye.com/images/icon_copy.gif" /></a>&nbsp;<a title="收藏这段代码" href="javascript:void()"><img class="star" alt="收藏代码" src="http://anreddy.iteye.com/images/icon_star.png" /><img style="display: none" class="spinner" src="http://anreddy.iteye.com/images/spinner.gif"  alt="" /></a></div></div>
<ol class="dp-xml"><li><span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">Engine</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"Catalina"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">defaultHost</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"localhost"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">debug</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"0"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">jvmRoute</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"s3"</font></span><span class="tag"><strong><font color="#006699">&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li></ol></div><pre style="display: none" class="xml" title="Apache2.2.X+Tomcat5.x使用mod_proxy方式集群" pre_index="10" source_url="http://anreddy.iteye.com/blog/1099728" codeable_type="Blog" codeable_id="1099728" name="code"> &lt;Engine name="Catalina" defaultHost="localhost" debug="0" jvmRoute="s3"&gt;</pre>
<p>&nbsp;<br />&nbsp;&nbsp;&nbsp; 接着到到Cluster配置段，将这一段的注释符号去掉，如下：&nbsp;<br />&nbsp;</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Xml代码 <a title="复制代码" href="http://anreddy.iteye.com/blog/1099728#"><img alt="复制代码" src="http://anreddy.iteye.com/images/icon_copy.gif" /></a>&nbsp;<a title="收藏这段代码" href="javascript:void()"><img class="star" alt="收藏代码" src="http://anreddy.iteye.com/images/icon_star.png" /><img style="display: none" class="spinner" src="http://anreddy.iteye.com/images/spinner.gif"  alt="" /></a></div></div>
<ol class="dp-xml"><li><span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">Cluster</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">className</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"org.apache.catalina.cluster.tcp.SimpleTcpCluster"</font></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute"><font color="#ff0000">managerClassName</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"org.apache.catalina.cluster.session.DeltaManager"</font></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute"><font color="#ff0000">expireSessionsOnShutdown</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"false"</font></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute"><font color="#ff0000">useDirtyFlag</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"true"</font></span><span class="tag"><strong><font color="#006699">&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">Membership</span></font></strong><span>&nbsp; &nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute"><font color="#ff0000">className</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"org.apache.catalina.cluster.mcast.McastService"</font></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute"><font color="#ff0000">mcastAddr</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"228.0.0.4"</font></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute"><font color="#ff0000">mcastPort</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"45564"</font></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute"><font color="#ff0000">mcastFrequency</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"500"</font></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute"><font color="#ff0000">mcastDropTime</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"3000"</font></span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">Receiver</span></font></strong><span>&nbsp; &nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute"><font color="#ff0000">className</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"org.apache.catalina.cluster.tcp.ReplicationListener"</font></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute"><font color="#ff0000">tcpListenAddress</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"auto"</font></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute"><font color="#ff0000">tcpListenPort</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"4001"</font></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute"><font color="#ff0000">tcpSelectorTimeout</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"100"</font></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute"><font color="#ff0000">tcpThreadCount</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"6"</font></span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">Sender</span></font></strong><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute"><font color="#ff0000">className</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"org.apache.catalina.cluster.tcp.ReplicationTransmitter"</font></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute"><font color="#ff0000">replicationMode</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"pooled"</font></span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">Valve</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">className</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"org.apache.catalina.cluster.tcp.ReplicationValve"</font></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute"><font color="#ff0000">filter</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">".*\.gif;.*\.js;.*\.jpg;.*\.htm;.*\.html;.*\.txt;"</font></span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">Deployer</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">className</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"org.apache.catalina.cluster.deploy.FarmWarDeployer"</font></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute"><font color="#ff0000">tempDir</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"/tmp/war-temp/"</font></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute"><font color="#ff0000">deployDir</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"/tmp/war-deploy/"</font></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute"><font color="#ff0000">watchDir</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"/tmp/war-listen/"</font></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute"><font color="#ff0000">watchEnabled</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"false"</font></span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;/</span><span class="tag-name">Cluster</span><span class="tag">&gt;</span></font></strong><span>&nbsp;&nbsp;</span></span></li></ol></div><pre style="display: none" class="xml" title="Apache2.2.X+Tomcat5.x使用mod_proxy方式集群" pre_index="11" source_url="http://anreddy.iteye.com/blog/1099728" codeable_type="Blog" codeable_id="1099728" name="code">&lt;Cluster className="org.apache.catalina.cluster.tcp.SimpleTcpCluster"
                 managerClassName="org.apache.catalina.cluster.session.DeltaManager"
                 expireSessionsOnShutdown="false"
                 useDirtyFlag="true"&gt;

            &lt;Membership 
                className="org.apache.catalina.cluster.mcast.McastService"
                mcastAddr="228.0.0.4"
                mcastPort="45564"
                mcastFrequency="500"
                mcastDropTime="3000"/&gt;

            &lt;Receiver 
                className="org.apache.catalina.cluster.tcp.ReplicationListener"
                tcpListenAddress="auto"
                tcpListenPort="4001"
                tcpSelectorTimeout="100"
                tcpThreadCount="6"/&gt;

            &lt;Sender
                className="org.apache.catalina.cluster.tcp.ReplicationTransmitter"
                replicationMode="pooled"/&gt;

            &lt;Valve className="org.apache.catalina.cluster.tcp.ReplicationValve"
                   filter=".*\.gif;.*\.js;.*\.jpg;.*\.htm;.*\.html;.*\.txt;"/&gt;
                   
            &lt;Deployer className="org.apache.catalina.cluster.deploy.FarmWarDeployer"
                      tempDir="/tmp/war-temp/"
                      deployDir="/tmp/war-deploy/"
                      watchDir="/tmp/war-listen/"
                      watchEnabled="false"/&gt;
        &lt;/Cluster&gt;</pre>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp; 注意：如果同一台设备上有多个tomcat,这个tcpListenPort就中设置不同的端口号，以免冲突。 <br />&nbsp;&nbsp;&nbsp; 所以三个tomcat的这个端口分别是4001、4002、4003。 <br />&nbsp;&nbsp;&nbsp; <br />3、其它配置 <br />&nbsp;&nbsp;&nbsp; 执行以上步骤基本已经可以成功了，当然还要设置你的webapp,这个不在此累赘了。当然最好还要设置JAVA_HOME,PATH,CLASSPATH这些环境变量，比如将%JAVA_HOME%\lib\tools.jar和%JAVA_HOME%\lib\rt.jar两个包加到类路径内。 <br />&nbsp;&nbsp; 还有&lt;distributable/&gt;元素，有些文章说还要将元素加到项目的web.xml文件中，我也加了，但没有验证它的存在对运行有没有影响，大家如果碰到问题，也不防加上。 </p><img src ="http://www.blogjava.net/zhaochengming/aggbug/381600.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhaochengming/" target="_blank">helloworld2008</a> 2012-06-27 14:38 <a href="http://www.blogjava.net/zhaochengming/archive/2012/06/27/381600.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>事务日志已满和'PRIMARY' 文件组已满的解决方案 .    http://blog.csdn.net/jwdream2008/article/details/5703780</title><link>http://www.blogjava.net/zhaochengming/archive/2012/05/30/379562.html</link><dc:creator>helloworld2008</dc:creator><author>helloworld2008</author><pubDate>Wed, 30 May 2012 07:37:00 GMT</pubDate><guid>http://www.blogjava.net/zhaochengming/archive/2012/05/30/379562.html</guid><wfw:comment>http://www.blogjava.net/zhaochengming/comments/379562.html</wfw:comment><comments>http://www.blogjava.net/zhaochengming/archive/2012/05/30/379562.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhaochengming/comments/commentRss/379562.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhaochengming/services/trackbacks/379562.html</trackback:ping><description><![CDATA[<h3><span class="link_title"><a href="http://blog.csdn.net/jwdream2008/article/details/5703780">事务日志已满和'PRIMARY' 文件组已满的解决方案 </a></span></h3>
<div class="article_manage"><span class="link_postdate">2010-06-30 10:23</span> <span class="link_view" title="阅读次数">1297人阅读</span> <span class="link_comments" title="评论次数"><a href="http://blog.csdn.net/jwdream2008/article/details/5703780#comments">评论</a>(0)</span> <span class="link_collect"><a title="收藏" href="javascript:void(0);">收藏</a></span> <span class="link_report"><a title="举报" href="http://blog.csdn.net/jwdream2008/article/details/5703780#report">举报</a></span> </div>
<div id="article_content" class="article_content">
<p>&nbsp;&nbsp; 昨天突然有客户反应系统无法正常的操作了！感到很震惊啊，系统一直运行正常啊，怎么会突然出问题。于是赶紧跟踪调查终于发现了问题的根源。</p>
<p>&nbsp;问题一：数据库 'XXXX' 的事务日志已满。若要查明无法重用日志中的空间的原因，请参阅 sys.databases 中的&nbsp;&nbsp; log_reuse_wait_desc 列</p>
<p>&nbsp; 问题二：无法为数据库 'XXX' 中的对象 ''PK_tbl_XXXX' 分配空间，因为 'PRIMARY' 文件组已满。请删除不需要的文件、删除文件组中的对象、将其他文件添加到文件组或为文件组中的现有文件启用自动增长，以便增加可用磁盘空间。"</p>
<p>&nbsp; 对于解决这两个问题的解决方案如下（在网上搜索了一把，问题解决了。现在整理了如下）：</p>
<p>&nbsp;<span style="color: #ff0000"><strong>问题一的解决方法：</strong></span></p>
<p><strong>方法1：&nbsp; </strong><span style="color: #000000"><strong>MSSQL2005日志的收缩</strong><br /></span><span style="color: #800000; font-weight: bold">１</span><span style="color: #000000">.右键在清除日志的数据库，如&#8220;TestDB&#8221;，点击</span><span style="color: #ff0000">[</span><span style="color: #ff0000">新建查询（Q）</span><span style="color: #ff0000">]</span><span style="color: #000000"><br /></span><span style="color: #800000; font-weight: bold">２</span><span style="color: #000000">.输入以下SQL语句，其中&#8220;TestDB&#8221;是数据库名称<br /></span><span style="color: #0000ff">&nbsp;&nbsp; DUMP</span><span style="color: #000000"> </span><span style="color: #0000ff">TRANSACTION</span><span style="color: #000000"> TestDB </span><span style="color: #0000ff">WITH</span><span style="color: #000000"> NO_LOG３.执行该SQL，成功后继续以下操作<br /></span><span style="color: #800000; font-weight: bold">４</span><span style="color: #000000">.右键该数据库节点，点击</span><span style="color: #ff0000">[</span><span style="color: #ff0000">任务（T）</span><span style="color: #ff0000">]</span><span style="color: #000000"> </span><span style="color: #808080">-&gt;</span><span style="color: #000000"> </span><span style="color: #ff0000">[</span><span style="color: #ff0000">收缩（S）</span><span style="color: #ff0000">]</span><span style="color: #000000"> </span><span style="color: #808080">-&gt;</span><span style="color: #000000"> </span><span style="color: #ff0000">[</span><span style="color: #ff0000">文件（F）</span><span style="color: #ff0000">]</span><span style="color: #000000"><br /></span><span style="color: #800000; font-weight: bold">５</span><span style="color: #000000">.在弹出的&#8220;收缩文件&#8221;对话框中，将&#8220;文件类型（T）&#8221;选为&#8220;日志&#8221;，将&#8220;收缩操作&#8221;选中&#8220;在释放未使用的空间前重新组织页（O）&#8221;<br /></span><span style="color: #800000; font-weight: bold">６</span><span style="color: #000000">.在&#8220;将文件收缩到（K）&#8221;文本框中输入后面提示的最小大小的数值，点击</span><span style="color: #ff0000">[</span><span style="color: #ff0000">确定</span><span style="color: #ff0000">]</span><span style="color: #000000">即可。</span></p>
<p>&nbsp;</p>
<p><span style="color: #000000"><strong><span style="color: #333333">方法2：下面的所有库名都指你要处理的数据库的库名</span></strong><span style="color: #000000"><br /></span><span style="color: #800000; font-weight: bold">1</span><span style="color: #000000">.清空日志<br /></span><span style="color: #0000ff">DUMP</span><span style="color: #000000"> </span><span style="color: #0000ff">TRANSACTION</span><span style="color: #000000"> 库名 </span><span style="color: #0000ff">WITH</span><span style="color: #000000"> NO_LOG<br /></span><span style="color: #800000; font-weight: bold">2</span><span style="color: #000000">.截断事务日志：<br /></span><span style="color: #0000ff">BACKUP</span><span style="color: #000000"> </span><span style="color: #ff00ff">LOG</span><span style="color: #000000"> 库名 </span><span style="color: #0000ff">WITH</span><span style="color: #000000"> NO_LOG<br /></span><span style="color: #800000; font-weight: bold">3</span><span style="color: #000000">.收缩数据库文件(如果不压缩,数据库的文件不会减小<br />企业管理器</span><span style="color: #008080">--</span><span style="color: #008080">右键你要压缩的数据库--所有任务--收缩数据库--收缩文件</span><span style="color: #008080"><br />--</span><span style="color: #008080">选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了</span><span style="color: #008080"><br />--</span><span style="color: #008080">选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了</span><span style="color: #008080"><br /></span><span style="color: #000000"><br />也可以用SQL语句来完成 <br /></span><span style="color: #008080">--</span><span style="color: #008080">收缩数据库</span><span style="color: #008080"><br /></span><span style="color: #0000ff">DBCC</span><span style="color: #000000"> SHRINKDATABASE(库名)<br /></span><span style="color: #008080">--</span><span style="color: #008080">收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles</span><span style="color: #008080"><br /></span><span style="color: #0000ff">DBCC</span><span style="color: #000000"> SHRINKFILE(</span><span style="color: #800000; font-weight: bold">1</span><span style="color: #000000">)<br /></span><span style="color: #800000; font-weight: bold">4</span><span style="color: #000000">.为了最大化的缩小日志文件(如果是sql </span><span style="color: #800000; font-weight: bold">7.0</span><span style="color: #000000">,这步只能在查询分析器中进行)<br />a.分离数据库:<br />企业管理器</span><span style="color: #008080">--</span><span style="color: #008080">服务器--数据库--右键--分离数据库</span><span style="color: #000000"><br />b.在我的电脑中删除LOG文件</span></span></p>
<p><span style="color: #000000"><span style="color: #000000">c.附加数据库:<br />企业管理器</span><span style="color: #008080">--</span><span style="color: #008080">服务器--数据库--右键--附加数据库</span><span style="color: #000000"><br />此法将生成新的LOG，大小只有500多K<br />或用代码： <br />下面的示例分离 pubs，然后将 pubs 中的一个文件附加到当前服务器。<br />a.分离<br /></span><span style="color: #0000ff">EXEC</span><span style="color: #000000"> sp_detach_db </span><span style="color: #008000">@dbname</span><span style="color: #000000"> </span><span style="color: #808080">=</span><span style="color: #000000"> </span><span style="color: #ff0000">'</span><span style="color: #ff0000">库名</span><span style="color: #ff0000">'</span><span style="color: #000000"><br />b.删除日志文件<br />c.再附加<br /></span><span style="color: #0000ff">EXEC</span><span style="color: #000000"> sp_attach_single_file_db </span><span style="color: #008000">@dbname</span><span style="color: #000000"> </span><span style="color: #808080">=</span><span style="color: #000000"> </span><span style="color: #ff0000">'</span><span style="color: #ff0000">库名</span><span style="color: #ff0000">'</span><span style="color: #000000">, <br /></span><span style="color: #008000">@physname</span><span style="color: #000000"> </span><span style="color: #808080">=</span><span style="color: #000000"> </span><span style="color: #ff0000">'</span><span style="color: #ff0000">c:/Program Files/Microsoft SQL Server/MSSQL/Data/库名.mdf</span><span style="color: #ff0000">'</span><span style="color: #000000"><br /></span><span style="color: #800000; font-weight: bold">5</span><span style="color: #000000">.为了以后能自动收缩,做如下设置:<br />企业管理器</span><span style="color: #008080">--</span><span style="color: #008080">服务器--右键数据库--属性--选项--选择"自动收缩"</span><span style="color: #000000"><br /></span><span style="color: #008080">--</span><span style="color: #008080">SQL语句设置方式:</span><span style="color: #008080"><br /></span><span style="color: #0000ff">EXEC</span><span style="color: #000000"> sp_dboption </span><span style="color: #ff0000">'</span><span style="color: #ff0000">库名</span><span style="color: #ff0000">'</span><span style="color: #000000">, </span><span style="color: #ff0000">'</span><span style="color: #ff0000">autoshrink</span><span style="color: #ff0000">'</span><span style="color: #000000">, </span><span style="color: #ff0000">'</span><span style="color: #ff0000">TRUE</span><span style="color: #ff0000">'</span><span style="color: #000000"><br /></span><span style="color: #800000; font-weight: bold">6</span><span style="color: #000000">.如果想以后不让它日志增长得太大<br />企业管理器</span><span style="color: #008080">--</span><span style="color: #008080">服务器--右键数据库--属性--事务日志</span><span style="color: #008080"><br />--</span><span style="color: #008080">将文件增长限制为xM(x是你允许的最大数据文件大小)</span><span style="color: #000000"><br /></span><span style="color: #008080">--</span><span style="color: #008080">SQL语句的设置方式:</span><span style="color: #008080"><br /></span><span style="color: #0000ff">alter</span><span style="color: #000000"> </span><span style="color: #0000ff">database</span><span style="color: #000000"> 库名 modify </span><span style="color: #0000ff">file</span><span style="color: #000000">(name</span><span style="color: #808080">=</span><span style="color: #000000">逻辑文件名,maxsize</span><span style="color: #808080">=</span><span style="color: #800000; font-weight: bold">20</span><span style="color: #000000">)</span></span></p>
<p><span style="color: #000000"><span style="color: #000000"><span style="color: #ff0000">特别注意</span>：<span style="color: #008080">--</span><span style="color: #008080">最好备份日志，以后可通过日志恢复数据。。。</span><span style="color: #008080"><br /></span><span style="color: #000000">以下为日志处理方法<br />一般不建议做第4,6两步<br />第4步不安全,有可能损坏数据库或丢失数据<br />第6步如果日志达到上限,则以后的数据库处理会失败,在清理日志后才能恢复.<br /></span></span></span></p>
<p><span style="color: #000000"><span style="color: #ff0000"><strong>问题二的解决方案：</strong></span></span></p>
<p><span style="color: #000000"><span style="color: #000000">解决方法：<br />1.检查你的磁盘剩余空间是否足够,如果没有磁盘剩余空间,则清理磁盘,腾出空间</span></span></p>
<p><span style="color: #000000"><span style="color: #000000">2.检查你的磁盘分区格式<br />如果是FAT16,则数据文件最大只能是2G<br />如果是FAT32,则数据文件最大只能是4G<br />改为NTFS分区则没有这种限制</span></span></p>
<p><span style="color: #000000"><span style="color: #000000">3.检查一下你有没有限制数据库文件的大小<br />企业管理器--右键你的数据库--属性--文件增长限制--如果有限制大小,取消限制</span></span></p>
<p><span style="color: #000000"><span style="color: #000000">4.检查你的SQL版本,如果你用MSDE,则限制了数据文件最大是2G</span></span></p>
<p><span style="color: #000000"><span style="color: #000000">5.你也可以为 primary 组添加新的数据文件来解决这个问题<br />alter database 库名 add file(NAME = 逻辑文件名,FILENAME = 'c:/实际文件名.ndf'</span></span></p>
<p><span style="color: #000000"><span style="color: #000000">&nbsp;或者 选中数据库-&gt;属性-&gt;文件：添加一个新文件</span></span><span style="color: #000000"><br /></span></p></div><img src ="http://www.blogjava.net/zhaochengming/aggbug/379562.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhaochengming/" target="_blank">helloworld2008</a> 2012-05-30 15:37 <a href="http://www.blogjava.net/zhaochengming/archive/2012/05/30/379562.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>QQ空间技术架构之深刻揭密  http://www.infoq.com/cn/articles/qzone-architecture?utm_source=bshare&amp;utm_campaign=bshare&amp;utm_medium=qzone&amp;bsh_bid=97043184</title><link>http://www.blogjava.net/zhaochengming/archive/2012/05/30/379502.html</link><dc:creator>helloworld2008</dc:creator><author>helloworld2008</author><pubDate>Tue, 29 May 2012 16:32:00 GMT</pubDate><guid>http://www.blogjava.net/zhaochengming/archive/2012/05/30/379502.html</guid><wfw:comment>http://www.blogjava.net/zhaochengming/comments/379502.html</wfw:comment><comments>http://www.blogjava.net/zhaochengming/archive/2012/05/30/379502.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhaochengming/comments/commentRss/379502.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhaochengming/services/trackbacks/379502.html</trackback:ping><description><![CDATA[<p>4.26日晚间，腾讯大讲堂&#183;深圳首站《QQ空间技术架构之峥嵘岁月》活动在腾讯总部腾讯大厦多功能厅举办，腾讯Web前端研发领域专家、腾讯最早的专职Web开发团队核心成员、Qzone核心架构研发总监徐晓在两小时的演讲中揭开了QQ空间技术架构背后的秘密。</p>
<p>正式分享之前，徐晓介绍了QQ空间目前的海量服务数据规模（图1）：</p>
<ol><li>拥有5.5亿的活跃用户</li><li>过万台的设备</li><li>数千万级别的同时在线</li><li>数十亿级别的全站PV</li><li>P级的UGC存储量</li><li>每天千亿级别的服务请求</li></ol>
<p><img alt="" src="http://www.infoq.com/resource/articles/qzone-architecture/zh/resources/image2.png" width="550" _href="img://image2.png" _p="true" /></p>
<p><strong>图1&#8212;&#8212;QQ空间海量服务数据规模</strong></p>
<p>接下来，徐晓把QQ空间成长和发展的历程分成三个阶段：石器时代、冷兵器时代和现代战争时代，分享了QQ空间从开始甚至难以生存，到逐步发展成国内最大的SNS社区产品背后的酸甜苦辣。</p>
<h2>石器时代&#8211;从十万在线到百万在线</h2>
<p>石器时代是QQ空间1.0到3.0稳健上线的过程。</p>
<p>徐晓说：&#8220;QQ空间在石器时代遇到的最大难题就是如何生存？如何让这个襁褓中的产品活下来？如何积累第一批宝贵的用户资源？&#8221;， 2005年QQ空间首发，最初是采用传统的发放邀请码的方式征集第一批用户。第一款QQ空间是嵌在独立的客户端软件中，看似是个客户端，其实是一个浏览器内核，里面都是HTML页面，以网站的方式存在。 当初的架构非常简单，采用了Apache搭建Web Server，Mysql保存最终数据。用户通过{uin}.qzone.qq.com(uin就是用户的QQ号码)这样的方式访问自己的空间。最开始上线时，仅邀请了电信用户。但上线之后才发现很多北方网通用户也非常希望来体验。但如果让北方网通用户跨网来访问电信的服务，那将是一个非常糟糕的体验。因为当时的跨网之间的带宽是非常有限的。</p>
<p>为了满足网通用户的需求，QQ空间团队在网通搭建了一套与电信一模一样的服务，电信的用户数据只存在电信的服务器上，网通用户数据只存在网通服务器上。看似异地分布，其实两部分数据是互相独立、不能冗余的。在用户注册开通空间时，就确定了他的数据存在于哪个服务器上。</p>
<p>用户访问空间的逻辑抽象来说是这样的（如图2）：用户通过浏览器发起请求访问我们的第一个CGI，这个CGI再串行的获取用户数据，比如：装扮数据，日志数据等。等获取到全部数据之后，这个CGI再将所有的数据拼装成一个完整的HTML页面输出给用户。</p>
<p><img alt="" src="http://www.infoq.com/resource/articles/qzone-architecture/zh/resources/image3.png" width="550" _href="img://image3.png" _p="true" /></p>
<p><strong>图2&#8212;&#8212;Qzone2.0典型载入逻辑</strong></p>
<p>但同时，空间第一版的独立客户端也带来了各种问题和烦恼：</p>
<p><strong>第一：非常不利于定位问题。</strong></p>
<p>一旦页面元素填写失败，定位问题将是一件麻烦的事情。因为它不是Web页面，所以只能用其他抓包软件，比如Ethereal（Wireshark的前身）来抓取网络包做分析。但那个时候网络抓包工具的能力还比较弱，没有高亮和HTML语法检测等功能，所以整体环境比较受限。</p>
<p><strong>第二：服务接入层压力大。</strong></p>
<p>由于不仅要接受用户的请求，还要向后访问不同的数据。当后端某一个接口超时严重的情况下，很多用户的请求都会被挂起。这样就会消耗更多的连接资源，对Web服务器CPU的消耗很大。</p>
<p><strong>第三：服务集群没有发挥出应有的服务能力</strong></p>
<p>当时共用30-40台服务器，也只能支持50万左右的用户。无奈之下，团队想了一个没办法的办法：有意限制超过五十万用户，提出了一个排队等待机制，学习海底捞模式，当在线人数达到50w的时候，QQ空间会给用户展示一个Flash小游戏，让用户在等待的时候玩小游戏。</p>
<p>针对当时存在的种种问题，团队做了以下改进来解决：</p>
<p><strong>第一：采用Web RIA。</strong></p>
<p>当时大量使用了Ajax技术来减轻服务器的负载。其中一个极端的例子是：整个空间首页都是采用JS绘制，这样能够将用户访问的CGI足够轻量化。尽量简化了CGI逻辑，让CGI程序运行更加强壮、效率更高。同时，当服务异常时，还可以通过JS脚本绘制一个错误信息给予用户提示。而且，采用JS开发效率更高，调试更方便。 Web RIA化后，降低了服务器CPU消耗的40%，节约了DC的输出带宽约30%（部分JS脚本都可以被浏览器Cache住）。</p>
<p><strong>第二：采用动静分离策略。</strong></p>
<p>静态资源都放在自研的Web服务器qhttpd上，它具备当时ApacheSelect模型的两个数量级以上的接入能力。</p>
<p><strong>第三：采用自研的Web Server：Qzhttp，主要用于动态分离的动态服务的需要。</strong></p>
<p>由于Qzhttp是腾讯自研的、轻量的、更适合业务自己逻辑的Web Server，从而保证了它的高性能，它的接入能力比Apache (非FastCGI模式)提高了3倍。</p>
<p><strong>石器时代做的最大的优化：</strong></p>
<p>当用户申请QQ空间多个服务时，每个服务都有独立的存储和处理逻辑。只有当所有的服务处理完成，才会由QQ空间框架服务器返回给用户。这样对于同时依赖日志、相册、音乐、留言的服务就会产生两大问题：</p>
<ol><li>短板效应一损俱损；</li><li>具体业务容量无法差异化。</li></ol>
<p>针对这两个问题，做了首页载入性能优化及首页内容静态化系统两方面的优化：</p>
<p>研究用户访问模型。拉取展现与UGC内容的变更比例是7：1。用户之间互访频繁，看他人与看自己的比例是5：1.。通过以上数据，可以看出用户的UGC更新很少，但是用户之间互相访问很频繁。根据用户的这种访问模型，空间团队研发了一套静态化系统（图3）。这套系统会将用户首页的内容全部Cache，然后根据用户的访问，以及用户自己UGC内容的更改，采用一定策略更新静态化系统的Cache数据。 通过增加首页内容静态化系统，首页展现速度从5s提升到3s，用户也不用再玩小游戏进行等待。同时在设备没有扩容的前提下，同时在线用户访问数突破100w。</p>
<p><img alt="" src="http://www.infoq.com/resource/articles/qzone-architecture/zh/resources/image4.png" width="550" _href="img://image4.png" _p="true" /></p>
<p><strong>图3&#8212;首页内容静态化系统</strong></p>
<p>通过不断的改进和优化，QQ空间3.0于2006年中稳健上线。</p>
<h2>冷兵器时代&#8212;&#8212;功能的磨砺</h2>
<p>冷兵器时代是在线人数从百万阵营向千万阵营过渡的过程。这个阶段做的更多的是功能的磨砺，提高可用性的过程。</p>
<p>但与此同时，QQ空间团队又面临了新的问题：</p>
<ol><li>网通，教育网用户体验很差；</li><li>版本迭代快速，导致外网bug不断；版本发布之后，所有开发必须留守2个小时；</li><li>后端服务质量不稳定，导致服务经常宕机。</li></ol>
<p>之前有谈到，空间的用户数据是分布在电信与网通两套体系中的。但由于公司在网通的服务设备有限，随着用户量的不断增加，很快就达到了网通设备服务的上限。网通不能扩容设备，但用户量还在不断增加。面对这种情况，只好将网通和电信的数据合并为一套。当网通用户访问服务的时候，会通过一个代理将用户的请求转发到内网电信服务上。采用这种方式，提供了一套通用的解决方案，可以解决海外，网通，教育网，铁通等运营商的问题。</p>
<p>但这种跨网访问的静态资源下载量非常大，静态资源请求次数 : CGI请求数接近10：1，所以采用CDN提供静态资源下载，来提高用户访问速度。具体逻辑是：根据用户客户端IP判断用户属于哪一个ISP服务商，通过URL方式将用户的静态资源访问定向到该ISP的服务设备上。</p>
<p>这样，跳出CDN系统的拘束、优化思路，解决了大部分教育网用户问题，同时多级支持的思路成为公共方案。 但同时还是有很多的故障：</p>
<ol><li>低ARPU、低成本、低价机器、大集群</li><li>版本迭代快每周发布版本</li><li>用户对故障和低效的容忍度非常低 通过调研，我们发现用户对Web的容忍度是很低的（如图4）：</li></ol>
<p><img alt="" src="http://www.infoq.com/resource/articles/qzone-architecture/zh/resources/image5.png" width="550" _href="img://image5.png" _p="true" /></p>
<p><strong>图4&#8212;&#8212;用户容忍度曲线</strong></p>
<p>一般页面在1s内打开，用户会感觉体验非常流畅。所以我们通过以下策略来保证服务质量：</p>
<ol><li>区分关键路径,对关键路径的服务质量我们要求4个9以上，非关键路径的服务失败之后做有损体验；</li><li>采用动态超时时间控制算法，保证整个程序在可控的时间内做出响应；</li><li>多级容错机制，从后端服务到CGI，到前台JS脚本都对错误做了容错处理；</li><li>采用柔性可用策略,失败接口采用默认数据。</li></ol>
<p>为了保证版本的服务质量，空间采用了灰度发布策略。新特性可能按照用户尾号发布,每次新特性只对一小部分人可见。一段时间内的用户反馈后，不断修复和改进问题，再逐步扩大用户群对新特性的可见性，最后新特性才对全量用户可见。同时，也通过控制JS版本号来达到了灰度发布的目的。</p>
<p>通过这些优化，QQ空间成功踏入千万级在线的阵营，QQ空间5.0正式上线。其中主要变化：后端服务进行了重构，前端页面也进行了优化。</p>
<h2>现代战争时代&#8211;数千万在线向亿级在线</h2>
<p>经过反复的改进和优化，QQ空间服务质量大幅提高，但是，新的问题还是随之而来：</p>
<p>不满足于发日志、传照片的用户，想要玩游戏、使用某些web工具。同时，公司其它团队要在QQ空间上开发应用，但QQ空间的应用配置都写死在QQ空间平台逻辑里面。为配合其他团队上线，发版本需要一周，工作不可并行，非常耗时，受到了很大挑战。针对这种情况，我们采取了两大措施：平台和应用架构分离（如图5）、简单配置后上线（如图6）。</p>
<p><img alt="" src="http://www.infoq.com/resource/articles/qzone-architecture/zh/resources/image6.png" width="550" _href="img://image6.png" _p="true" /></p>
<p><strong>图5&#8212;&#8212;平台和应用架构分离</strong></p>
<p><img alt="" src="http://www.infoq.com/resource/articles/qzone-architecture/zh/resources/image7.png" width="550" _href="img://image7.png" _p="true" /></p>
<p><strong>图6&#8212;&#8212;简单配置后上线</strong></p>
<p><strong>如果某天深圳的IDC不可用了怎么办？</strong></p>
<p>为了解决这个问题，空间团队做了全国IDC的异地部署，采用&#8220;一点写，多点读&#8221;模式的架构模型，将服务部署到深圳、上海、天津和西安。深圳是一个写入点，通过QQ空间自己的一套同步系统同步到全国各个IDC（如图7）。同时QQ空间提供了全方位的立体监控，7*24小时对服务做监控。</p>
<p><img alt="" src="http://www.infoq.com/resource/articles/qzone-architecture/zh/resources/image8.png" width="550" _href="img://image8.png" _p="true" /></p>
<p><strong>图7&#8212;&#8212;IDC分布</strong></p>
<p><strong>如何快速发现和解决用户的问题？</strong></p>
<p>定位用户问题需要花很大的时间成本，这就要求团队做很多的监控工作：服务器流量监控、接口调用监控、前端测速监控、前端调用错误监控。</p>
<p>同时，在千万级到亿级在线的过程中，团队要有全国甚至全球的分布和匹配分布的运营能力；出问题可以快速切割，全方位的立体化监控能力；各个逻辑层持续优化能力。只有持续优化，用户才能感知到性能的增加，用户才会增加。</p>
<p>经过无数次的推敲和不断优化，QQ空间的服务能力已经能够支持千万级别的用户在线请求，并且能够给用户提供7*24小时的不间断服务。向亿级在线阵营冲刺也将指日可待！</p>
<h2>总结</h2>
<p><strong>百万在线：</strong></p>
<p>当时如何撑住服务，让用户进来，从而积累QQ空间第一批用户，根据用户模型进行优化，让QQ空间架构有更好的接入能力，做到高性能。</p>
<p><strong>千万在线：</strong></p>
<p>通过各层的柔性服务和灰度发布的策略，让服务更加稳定，让用户数量级再上一个新台阶。</p>
<p><strong>亿级在线：</strong></p>
<p>服务要有更灵活、更敏捷的变更手段。同时有更好的监控和可运营的能力。</p>
<p><img alt="" src="http://www.infoq.com/resource/articles/qzone-architecture/zh/resources/image9.png" width="550" _href="img://image9.png" _p="true" /></p>
<p>接下来是半个小时的Q&amp;A环节，同学们踊跃提问，徐晓做出了详细专业的解答。最后，徐晓和大家分享了&#8220;腾讯《海量服务之道》系列的优质课程和秉承的原则&#8221;：</p>
<p><img alt="" src="http://www.infoq.com/resource/articles/qzone-architecture/zh/resources/image10.png" width="550" _href="img://image10.png" _p="true" /></p>
<p>Qzone是全球第二大SNS社区，仅次于Facebook。徐晓说：&#8220;海量服务的价值观和用户对我们的厚爱造就了现在的QQ空间。我们会持续的发展，攻克各种难题，不断前进。&#8221;</p>
<p>4月26日21:00，两个小时的QQ空间技术架构分享圆满结束！</p>
<p>欢迎大家继续期待腾讯大讲堂对外讲座&#183;第八期《云网络能带给我们什么》 。更多精彩，尽在腾讯大讲堂：<a href="http://djt.qq.com/">DJT.QQ.COM</a>。</p>
<hr />

<p>给InfoQ中文站投稿或者参与内容翻译工作，请邮件至<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#101;&#100;&#105;&#116;&#111;&#114;&#115;&#64;&#99;&#110;&#46;&#105;&#110;&#102;&#111;&#113;&#46;&#99;&#111;&#109;">editors@cn.infoq.com</a>。也欢迎大家通过新浪微博（<a href="http://www.weibo.com/infoqchina">@InfoQ</a>）或者腾讯微博（<a href="http://t.qq.com/infoqchina">@InfoQ</a>）关注我们，并与我们的编辑和其他读者朋友交流。</p><img src ="http://www.blogjava.net/zhaochengming/aggbug/379502.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhaochengming/" target="_blank">helloworld2008</a> 2012-05-30 00:32 <a href="http://www.blogjava.net/zhaochengming/archive/2012/05/30/379502.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sqlserver删除日志</title><link>http://www.blogjava.net/zhaochengming/archive/2012/05/29/379462.html</link><dc:creator>helloworld2008</dc:creator><author>helloworld2008</author><pubDate>Tue, 29 May 2012 09:41:00 GMT</pubDate><guid>http://www.blogjava.net/zhaochengming/archive/2012/05/29/379462.html</guid><wfw:comment>http://www.blogjava.net/zhaochengming/comments/379462.html</wfw:comment><comments>http://www.blogjava.net/zhaochengming/archive/2012/05/29/379462.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhaochengming/comments/commentRss/379462.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhaochengming/services/trackbacks/379462.html</trackback:ping><description><![CDATA[backup log upd364 with NO_LOG<br />backup log upd364 with TRUNCATE_ONLY<br />DBCC SHRINKDATABASE(upd364) <img src ="http://www.blogjava.net/zhaochengming/aggbug/379462.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhaochengming/" target="_blank">helloworld2008</a> 2012-05-29 17:41 <a href="http://www.blogjava.net/zhaochengming/archive/2012/05/29/379462.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java特殊字符处理 StringEscapeUtils </title><link>http://www.blogjava.net/zhaochengming/archive/2012/05/04/377382.html</link><dc:creator>helloworld2008</dc:creator><author>helloworld2008</author><pubDate>Fri, 04 May 2012 07:01:00 GMT</pubDate><guid>http://www.blogjava.net/zhaochengming/archive/2012/05/04/377382.html</guid><wfw:comment>http://www.blogjava.net/zhaochengming/comments/377382.html</wfw:comment><comments>http://www.blogjava.net/zhaochengming/archive/2012/05/04/377382.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/zhaochengming/comments/commentRss/377382.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhaochengming/services/trackbacks/377382.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Search &nbsp; Browse &nbsp; Javadoc Search &nbsp; Javadoc Browse &nbsp; More  Java Source Code Display&nbsp;/* * Licensed to the Apache Software Foundation (ASF) under one or more * co...&nbsp;&nbsp;<a href='http://www.blogjava.net/zhaochengming/archive/2012/05/04/377382.html'>阅读全文</a><img src ="http://www.blogjava.net/zhaochengming/aggbug/377382.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhaochengming/" target="_blank">helloworld2008</a> 2012-05-04 15:01 <a href="http://www.blogjava.net/zhaochengming/archive/2012/05/04/377382.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>常用正则表达式例子</title><link>http://www.blogjava.net/zhaochengming/archive/2012/02/26/370798.html</link><dc:creator>helloworld2008</dc:creator><author>helloworld2008</author><pubDate>Sun, 26 Feb 2012 12:04:00 GMT</pubDate><guid>http://www.blogjava.net/zhaochengming/archive/2012/02/26/370798.html</guid><wfw:comment>http://www.blogjava.net/zhaochengming/comments/370798.html</wfw:comment><comments>http://www.blogjava.net/zhaochengming/archive/2012/02/26/370798.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/zhaochengming/comments/commentRss/370798.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhaochengming/services/trackbacks/370798.html</trackback:ping><description><![CDATA[<p>&nbsp;</p>
<p>package com.test;</p>
<p>import java.util.regex.Matcher;<br />import java.util.regex.Pattern;</p>
<p>public class PatternTest {<br />&nbsp;<br />&nbsp;private static void test0() {<br />&nbsp;&nbsp;String str = "&lt;biao&gt;&lt;&gt;c&lt;b&gt;x";<br />&nbsp;&nbsp;Pattern pattern;<br />&nbsp;&nbsp;Matcher matcher;<br />&nbsp;&nbsp;// 贪婪: 最长匹配 .* : 输出: &lt;biao&gt;&lt;&gt;c&lt;b&gt;<br />&nbsp;&nbsp;pattern = Pattern.compile("&lt;.*&gt;");<br />&nbsp;&nbsp;matcher = pattern.matcher(str);<br />&nbsp;&nbsp;while (matcher.find()) {<br />&nbsp;&nbsp;System.out.println(matcher.group());<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;// 不知是否非贪婪 .*? : 输出: &lt;biao&gt;, &lt;&gt;, &lt;b&gt;<br />&nbsp;&nbsp;pattern = Pattern.compile("&lt;.*?&gt;");<br />&nbsp;&nbsp;matcher = pattern.matcher(str);<br />&nbsp;&nbsp;while (matcher.find()) {<br />&nbsp;&nbsp;System.out.println(matcher.group());<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;// 使用组, 输出&lt;&gt;里的内容, 输出: 'biao', ' ', 'b'<br />&nbsp;&nbsp;// 0组代表整个表达式, 子组从1开始<br />&nbsp;&nbsp;pattern = Pattern.compile("&lt;(.*?)&gt;");<br />&nbsp;&nbsp;matcher = pattern.matcher(str);<br />&nbsp;&nbsp;while (matcher.find()) {<br />&nbsp;&nbsp;System.out.println("&gt;&gt;"+matcher.group(1));<br />&nbsp;&nbsp;} <br />&nbsp;}<br />&nbsp;<br />&nbsp;/** 查找以Java开头的任意字符串 */<br />&nbsp;public static void test1() {<br />&nbsp;&nbsp;Pattern pattern = Pattern.compile("^Java.*");<br />&nbsp;&nbsp;Matcher m = pattern.matcher("Java哈哈");<br />&nbsp;&nbsp;System.out.println(m.find());<br />&nbsp;}<br />&nbsp;<br />&nbsp;/** 以多条件分割字符串 */<br />&nbsp;public static void test2() {<br />&nbsp;&nbsp;Pattern pattern = Pattern.compile("[,|\\+]+");<br />&nbsp;&nbsp;String str[] = pattern.split("Java+ Hello World&nbsp; Java,Hello,,World|Sun");<br />&nbsp;&nbsp;if(str != null) {<br />&nbsp;&nbsp;&nbsp;for(String s : str) {<br />&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("&gt;&gt; " +s);<br />&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;}<br />&nbsp;}</p>
<p>&nbsp;/** 文字替换 */<br />&nbsp;public static void test3() {<br />&nbsp;&nbsp;Pattern pattern = Pattern.compile("abc*");<br />&nbsp;&nbsp;Matcher matcher = pattern.matcher("xabcccc测试abd, abcce");<br />&nbsp;&nbsp;String str = matcher.replaceAll("(?)");<br />&nbsp;&nbsp;System.out.println(str);<br />&nbsp;}<br />&nbsp;<br />&nbsp;/** 文字替换(替换字符)&nbsp; 结果将会是&nbsp; x(?)测试(?)d, (?) */<br />&nbsp;public static void test4() {<br />&nbsp;&nbsp;Pattern pattern = Pattern.compile("123|4(567)");<br />&nbsp;&nbsp;Matcher matcher = pattern.matcher("0123456789abcde");<br />&nbsp;&nbsp;StringBuffer sb = new StringBuffer();<br />&nbsp;&nbsp;while(matcher.find()) {<br />&nbsp;&nbsp;&nbsp;System.out.println(matcher.group(0));<br />&nbsp;&nbsp;&nbsp;System.out.println(matcher.group(1));<br />&nbsp;&nbsp;&nbsp;System.out.println("&gt;&gt;"+ matcher.start()+":"+matcher.end());<br />&nbsp;&nbsp;&nbsp;matcher.appendReplacement(sb, "(?)");<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;matcher.appendTail(sb);<br />&nbsp;&nbsp;System.out.println(sb);<br />&nbsp;}<br />&nbsp;<br />&nbsp;public static void test5() {<br />&nbsp;&nbsp;String regEx="B(ond)";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String str="My name is Bond. James Bond.";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Pattern p=Pattern.compile(regEx);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Matcher matcher=p.matcher(str);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(matcher.find()){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(matcher.groupCount());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(matcher.start());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String group_0 = matcher.group(0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String group_1 = matcher.group(1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("Group 0 " + group_0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("Group 1 " + group_1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(str);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;}<br />&nbsp;<br />&nbsp;// 验证是否为邮箱地址<br />&nbsp;public static void test6() {<br />&nbsp;&nbsp;String str="<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#112;&#111;&#110;&#108;&#105;&#110;&#101;&#64;&#121;&#97;&#104;&#111;&#111;&#46;&#99;&#111;&#109;&#46;&#99;&#110;&#46;&#106;&#99;&#87;&#101;">ponline@yahoo.com.cn.jcWe</a>--_*"; <br />&nbsp;&nbsp;Pattern pattern = <br />&nbsp;&nbsp;Pattern.compile("[\\w\\.\\-]+@([\\w\\-]+\\.)+[\\w\\-]+"); <br />&nbsp;&nbsp;Matcher matcher = pattern.matcher(str); <br />&nbsp;&nbsp;System.out.println(matcher.matches()); <br />&nbsp;}<br />&nbsp;<br />&nbsp;/** 去除html 标记&nbsp; */<br />&nbsp;public static void test7() {<br />&nbsp;&nbsp;Pattern pattern = Pattern.compile(".+?"); <br />&nbsp;&nbsp;Matcher matcher = pattern.matcher("&lt;a 测试 href=\"index.html\"&gt;主页&lt;/a&gt;"); <br />&nbsp;&nbsp;matcher.find();<br />&nbsp;&nbsp;System.out.println(matcher.group());<br />&nbsp;&nbsp;String string = matcher.replaceFirst(""); <br />&nbsp;&nbsp;System.out.println(string); <br />&nbsp;}<br />&nbsp;<br />&nbsp;/** 查找html 中对应条件字符串 **/<br />&nbsp;public static void test8() {<br />&nbsp;&nbsp;Pattern pattern = Pattern.compile("href=\"(.+?)\""); <br />&nbsp;&nbsp;Matcher matcher = pattern.matcher("&lt;a href=\"index.html\"&gt;主页&lt;/a&gt;"); <br />&nbsp;&nbsp;if(matcher.find()) <br />&nbsp;&nbsp;&nbsp; System.out.println(matcher.group(1)); <br />&nbsp;}<br />&nbsp;/** 截取http://地址&nbsp; **/<br />&nbsp;public static void test9() {<br />&nbsp;&nbsp;Pattern pattern = Pattern.compile("(<a href="http://|https://){1">http://|https://){1</a>}.+"); <br />&nbsp;&nbsp;Matcher matcher = pattern.matcher("dsdsds&lt;<a href="http://dfhf.\\sd">http://dfhf.\\sd</a>-: s//国家gfg-ffdfd&gt;fdf"); <br />&nbsp;&nbsp;StringBuffer buffer = new StringBuffer(); <br />&nbsp;&nbsp;while(matcher.find()){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; buffer.append(matcher.group());&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; buffer.append("\r\n");&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(buffer.toString()); <br />&nbsp;&nbsp;}<br />&nbsp;}<br />&nbsp;<br />&nbsp;/** 替换指定{}中文字&nbsp; **/<br />&nbsp;public static void test10() {<br />&nbsp;&nbsp;String str = "Java目前的发展史是由{0}年-{1}年"; <br />&nbsp;&nbsp;String[][] object={new String[]{"<a href="file://%7b0//%7D%22,%221995%22%7D,new" href_cetemp='file://\\{0\\}","1995"},new'>\\{0\\}","1995"},new</a> String[]{"<a href="file://%7b1//%7D%22,%222007" href_cetemp='file://\\{1\\}","2007'>\\{1\\}","2007</a>"}}; <br />&nbsp;&nbsp;System.out.println(replace(str,object)); <br />&nbsp;}<br />&nbsp;<br />&nbsp;public static String replace(String sourceString, String[][] object) {<br />&nbsp;&nbsp;String temp=sourceString;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int i=0;i&lt;object.length;i++){ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String[] result=(String[])object[i]; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Pattern&nbsp;&nbsp;&nbsp; pattern = Pattern.compile(result[0]); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Matcher matcher = pattern.matcher(temp); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; temp=matcher.replaceAll(result[1]); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return temp; <br />&nbsp;}<br />&nbsp;<br />&nbsp;public static void main(String[] args) throws Exception{<br />&nbsp;&nbsp;PatternTest.test10();<br />&nbsp;</p>
<p>&nbsp;}<br />}<br /></p>
<p>&nbsp;</p><img src ="http://www.blogjava.net/zhaochengming/aggbug/370798.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhaochengming/" target="_blank">helloworld2008</a> 2012-02-26 20:04 <a href="http://www.blogjava.net/zhaochengming/archive/2012/02/26/370798.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>测试视频教程</title><link>http://www.blogjava.net/zhaochengming/archive/2011/12/19/366785.html</link><dc:creator>helloworld2008</dc:creator><author>helloworld2008</author><pubDate>Mon, 19 Dec 2011 09:57:00 GMT</pubDate><guid>http://www.blogjava.net/zhaochengming/archive/2011/12/19/366785.html</guid><wfw:comment>http://www.blogjava.net/zhaochengming/comments/366785.html</wfw:comment><comments>http://www.blogjava.net/zhaochengming/archive/2011/12/19/366785.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhaochengming/comments/commentRss/366785.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhaochengming/services/trackbacks/366785.html</trackback:ping><description><![CDATA[<strong>白盒测试</strong><br /><ul><li><a href="http://v.youku.com/v_show/id_XMjc0NzEwNjM2.html">等价类划分测试1 &nbsp; </a><br /></li><li><a href="http://v.youku.com/v_show/id_XMjc2MjQ5MjY0.html">等价类划分测试2</a></li></ul><ul><li><a href="http://v.youku.com/v_show/id_XMzAyMjY5NTgw.html">边界值分析法测试1</a></li><li><a href="http://v.youku.com/v_show/id_XMzAyMjc1MzUy.html">边界值分析法测试2</a></li><li><a href="http://v.youku.com/v_show/id_XMzAyMjc1Mjc2.html">边界值分析法测试3</a><br /></li></ul><ul><li><a href="http://v.youku.com/v_show/id_XMzAyMzQ1NTEy.html">因果图测试法1</a></li><li><a href="http://v.youku.com/v_show/id_XMzAyMzQ1NTcy.html">因果图测试法2</a></li><li><a href="http://v.youku.com/v_show/id_XMzAyMzQ2MDQw.html">因果图测试法3</a></li></ul><ul><li><a href="http://v.youku.com/v_show/id_XMzAyMzU5ODk2.html">决策表测试法1</a></li><li><a href="http://v.youku.com/v_show/id_XMzAyMzU3NTg4.html">决策表测试法2</a></li><li><a href="http://v.youku.com/v_show/id_XMzAyMzU5NzQw.html">决策表测试法3</a></li></ul><ul><a href="http://v.youku.com/v_show/id_XMzAxNDkwNTUy.html"><li>错误推测法1</li><li>错误推测法2<br /></li></a><li><a href="http://v.youku.com/v_show/id_XMzAxNTAxMjky.html">错误推测法3</a></li></ul><strong><br /><br />黑盒测试</strong><br /><ul><li><a href="http://v.youku.com/v_show/id_XMzAwOTU1OTY4.html">软件测试流程1</a></li><li><a href="http://v.youku.com/v_show/id_XMzAwOTY0Nzk2.html">软件测试流程2</a></li><li><a href="http://v.youku.com/v_show/id_XMzAwOTcxODI0.html">软件测试流程3</a></li></ul><ul><li><a href="http://v.youku.com/v_show/id_XMzAyMTc4Nzcy.html">功能测试实战1</a></li><li><a href="http://v.youku.com/v_show/id_XMzAyMjY1NTcy.html">功能测试实战2</a></li><li><a href="http://v.youku.com/v_show/id_XMzAyMjYxNTIw.html">功能测试实战3</a></li><li><a href="http://v.youku.com/v_show/id_XMzAyMjY0OTU2.html">功能测试实战4</a></li><li><a href="http://v.youku.com/v_show/id_XMzAyMjY1NzI0.html">功能测试实战5</a><br /></li></ul><ul><li><a href="http://v.youku.com/v_show/id_XMzAyMjYyODQw.html">系统权限测试</a></li></ul><ul><li><a href="http://v.youku.com/v_show/id_XMzAyMTc2Mzcy.html">常用功能点测试1</a></li><li><a href="http://v.youku.com/v_show/id_XMzAyMTc3MTY4.html">常用功能点测试2</a></li></ul><ul><li><a href="http://v.youku.com/v_show/id_XMzAxNTk2MTA4.html">常用控件测试1</a></li><li><a href="http://v.youku.com/v_show/id_XMzAxNzY3ODY0.html">常用控件测试2</a></li><li><a href="http://v.youku.com/v_show/id_XMzAxNzY4OTg0.html">常用控件测试3</a><br /></li></ul><img src ="http://www.blogjava.net/zhaochengming/aggbug/366785.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhaochengming/" target="_blank">helloworld2008</a> 2011-12-19 17:57 <a href="http://www.blogjava.net/zhaochengming/archive/2011/12/19/366785.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAX-WS + Spring integration example (轉自http://www.mkyong.com/webservices/jax-ws/jax-ws-spring-integration-example/）</title><link>http://www.blogjava.net/zhaochengming/archive/2011/10/10/360406.html</link><dc:creator>helloworld2008</dc:creator><author>helloworld2008</author><pubDate>Mon, 10 Oct 2011 09:14:00 GMT</pubDate><guid>http://www.blogjava.net/zhaochengming/archive/2011/10/10/360406.html</guid><wfw:comment>http://www.blogjava.net/zhaochengming/comments/360406.html</wfw:comment><comments>http://www.blogjava.net/zhaochengming/archive/2011/10/10/360406.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/zhaochengming/comments/commentRss/360406.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhaochengming/services/trackbacks/360406.html</trackback:ping><description><![CDATA[<div><p>Here&#8217;s a guide to show you how to integrate Spring with JAX-WS, as mention in this link : <a href="http://jax-ws-commons.java.net/spring/" target="_blank">http://jax-ws-commons.java.net/spring/</a>.  Upon finishing this tutorial, you will create a simple HelloWorld web  service (JAX-WS), and DI a bean into the web service via Spring.</p><h4>1. Project Folder</h4><p>See the final project folder structure.</p><div> <img src="http://www.mkyong.com/wp-content/uploads/2011/03/jaxws-spring-folder-structure.png" alt="jaxws-spring-folder-structure" title="jaxws-spring-folder-structure" width="353" height="456" /></div><h4>2. Project Dependencies</h4><div><div style="margin:20px 0;">   </div></div><p>Use Maven to get all the library dependencies. The key to integrate Spring with JAX-WS is via <strong>jaxws-spring.jar</strong>.</p><p><em>File : pom.xml</em></p><div><div style="margin:20px 0">   </div></div><div><div><pre style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;project</span> <span style="color: #000066;">xmlns</span>=<span style="color: #ff0000;">"http://maven.apache.org/POM/4.0.0"</span> </span> <span style="color: #009900;">  <span style="color: #000066;">xmlns:xsi</span>=<span style="color: #ff0000;">"http://www.w3.org/2001/XMLSchema-instance"</span></span> <span style="color: #009900;">  <span style="color: #000066;">xsi:schemaLocation</span>=<span style="color: #ff0000;">"http://maven.apache.org/POM/4.0.0 </span> <span style="color: #009900;">  http://maven.apache.org/maven-v4_0_0.xsd"</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>   <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;modelVersion<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>4.0.0<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/modelVersion<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>   <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>com.mkyong<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>   <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>WebServicesExample<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>   <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;packaging<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>war<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/packaging<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>   <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>1.0-SNAPSHOT<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>   <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>WebServicesExample Maven Webapp<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>   <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;url<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>http://maven.apache.org<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/url<span style="color: #000000; font-weight: bold;">&gt;</span></span></span> &nbsp;   <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;repositories<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>     <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;repository<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>       <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;id<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>java.net<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/id<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>       <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;url<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>http://download.java.net/maven/2<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/url<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>     <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/repository<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>   <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/repositories<span style="color: #000000; font-weight: bold;">&gt;</span></span></span> &nbsp;   <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dependencies<span style="color: #000000; font-weight: bold;">&gt;</span></span></span> &nbsp;         <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dependency<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>                 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>junit<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>                 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>junit<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>                 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>3.8.1<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>                 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;scope<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>test<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/scope<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>         <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dependency<span style="color: #000000; font-weight: bold;">&gt;</span></span></span> &nbsp; 	<span style="color: #808080; font-style: italic;">&lt;!-- Spring framework --&gt;</span>  	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dependency<span style="color: #000000; font-weight: bold;">&gt;</span></span></span> 		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>org.springframework<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span> 		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>spring<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span> 		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>2.5.6<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span> 	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dependency<span style="color: #000000; font-weight: bold;">&gt;</span></span></span> &nbsp;         <span style="color: #808080; font-style: italic;">&lt;!-- JAX-WS --&gt;</span>  	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dependency<span style="color: #000000; font-weight: bold;">&gt;</span></span></span> 	  	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>com.sun.xml.ws<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span> 	        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>jaxws-rt<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span> 	        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>2.2.3<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span> 	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dependency<span style="color: #000000; font-weight: bold;">&gt;</span></span></span> &nbsp;  	<span style="color: #808080; font-style: italic;">&lt;!-- Library from java.net, integrate Spring with JAX-WS --&gt;</span>  	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dependency<span style="color: #000000; font-weight: bold;">&gt;</span></span></span> 		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>org.jvnet.jax-ws-commons.spring<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span> 		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>jaxws-spring<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span> 		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>1.8<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span> 		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;exclusions<span style="color: #000000; font-weight: bold;">&gt;</span></span></span> 		  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;exclusion<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>            		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>org.springframework<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>       			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>spring-core<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>         	  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/exclusion<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>         	  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;exclusion<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>            		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>org.springframework<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>       			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>spring-context<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>         	  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/exclusion<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>         	  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;exclusion<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>            		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>com.sun.xml.stream.buffer<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>       			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>streambuffer<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>         	  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/exclusion<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>         	  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;exclusion<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>            		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>org.jvnet.staxex<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>       			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>stax-ex<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>         	  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/exclusion<span style="color: #000000; font-weight: bold;">&gt;</span></span></span> 		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/exclusions<span style="color: #000000; font-weight: bold;">&gt;</span></span></span> 	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dependency<span style="color: #000000; font-weight: bold;">&gt;</span></span></span> &nbsp;   <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dependencies<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>   <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;build<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>     <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;finalName<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>web services<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/finalName<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>     <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;plugins<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;plugin<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>org.apache.maven.plugins<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>maven-compiler-plugin<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>2.3.1<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;configuration<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>                <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;source<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>1.6<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/source<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>                <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;target<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>1.6<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/target<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/configuration<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/plugin<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>     <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/plugins<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>   <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/build<span style="color: #000000; font-weight: bold;">&gt;</span></span></span> <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/project<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div><div> <strong>Note</strong><br /> The jaxws-spring&#8217;s pom.xml has a lot of unnecessary dependencies, you may need to exclude it via &lt;/exclusions&gt; tag.</div><h4>3. JAX-WS Hello World</h4><p>A simple JAX-WS example, and dependency inject (DI) &#8220;HelloWorldBo&#8221; via Spring.</p><p><em>File : HelloWorldWS.java</em></p><div><div><pre style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">package</span> <span style="color: #006699;">com.mkyong.ws</span><span style="color: #339933;">;</span> &nbsp; <span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.jws.WebMethod</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.jws.WebService</span><span style="color: #339933;">;</span> &nbsp; <span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">com.mkyong.bo.HelloWorldBo</span><span style="color: #339933;">;</span> &nbsp; @WebService <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> HelloWorldWS<span style="color: #009900;">{</span> &nbsp; 	<span style="color: #666666; font-style: italic;">//DI via Spring</span> 	HelloWorldBo helloWorldBo<span style="color: #339933;">;</span> &nbsp; 	@WebMethod<span style="color: #009900;">(</span>exclude<span style="color: #339933;">=</span><span style="color: #000066; font-weight: bold;">true</span><span style="color: #009900;">)</span> 	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> setHelloWorldBo<span style="color: #009900;">(</span>HelloWorldBo helloWorldBo<span style="color: #009900;">)</span> <span style="color: #009900;">{</span> 		<span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">helloWorldBo</span> <span style="color: #339933;">=</span> helloWorldBo<span style="color: #339933;">;</span> 	<span style="color: #009900;">}</span> &nbsp; 	@WebMethod<span style="color: #009900;">(</span>operationName<span style="color: #339933;">=</span><span style="color: #0000ff;">"getHelloWorld"</span><span style="color: #009900;">)</span> 	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> getHelloWorld<span style="color: #009900;">(</span><span style="color: #009900;">)</span> <span style="color: #009900;">{</span> &nbsp; 		<span style="color: #000000; font-weight: bold;">return</span> helloWorldBo.<span style="color: #006633;">getHelloWorld</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span> &nbsp; 	<span style="color: #009900;">}</span> &nbsp; <span style="color: #009900;">}</span></pre></div></div><h4>4. Beans</h4><p>Here&#8217;s the HelloWorldBo class, with a <code>getHelloWorld()</code> method to return a simple string.</p><p><em>File : HelloWorldBo.java</em></p><div><div><pre style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">package</span> <span style="color: #006699;">com.mkyong.bo</span><span style="color: #339933;">;</span> &nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">interface</span> HelloWorldBo<span style="color: #009900;">{</span> &nbsp; 	<span style="color: #003399;">String</span> getHelloWorld<span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span> &nbsp; <span style="color: #009900;">}</span></pre></div></div><p><em>File : HelloWorldBoImpl.java</em></p><div><div><pre style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">package</span> <span style="color: #006699;">com.mkyong.bo.impl</span><span style="color: #339933;">;</span> &nbsp; <span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">com.mkyong.bo.HelloWorldBo</span><span style="color: #339933;">;</span> &nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> HelloWorldBoImpl <span style="color: #000000; font-weight: bold;">implements</span> HelloWorldBo<span style="color: #009900;">{</span> &nbsp; 	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> getHelloWorld<span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #009900;">{</span> 		<span style="color: #000000; font-weight: bold;">return</span> <span style="color: #0000ff;">"JAX-WS + Spring!"</span><span style="color: #339933;">;</span> 	<span style="color: #009900;">}</span> &nbsp; <span style="color: #009900;">}</span></pre></div></div><h4>5. Spring Beans Configuration</h4><p>Spring beans configuration file to bind URL pattern &#8220;<strong>/hello</strong>&#8221; to &#8220;<strong>com.mkyong.ws.HelloWorldWS</strong>&#8221; web service class.</p><p><em>File : applicationContext.xml</em></p><div><div><pre style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">"1.0"</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">"UTF-8"</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span> <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;beans</span> <span style="color: #000066;">xmlns</span>=<span style="color: #ff0000;">"http://www.springframework.org/schema/beans"</span></span> <span style="color: #009900;">       <span style="color: #000066;">xmlns:xsi</span>=<span style="color: #ff0000;">"http://www.w3.org/2001/XMLSchema-instance"</span></span> <span style="color: #009900;">       <span style="color: #000066;">xmlns:ws</span>=<span style="color: #ff0000;">"http://jax-ws.dev.java.net/spring/core"</span></span> <span style="color: #009900;">       <span style="color: #000066;">xmlns:wss</span>=<span style="color: #ff0000;">"http://jax-ws.dev.java.net/spring/servlet"</span></span> <span style="color: #009900;">       <span style="color: #000066;">xsi:schemaLocation</span>=<span style="color: #ff0000;">"http://www.springframework.org/schema/beans</span> <span style="color: #009900;">       http://www.springframework.org/schema/beans/spring-beans-2.5.xsd</span> <span style="color: #009900;">       http://jax-ws.dev.java.net/spring/core</span> <span style="color: #009900;">        http://jax-ws.dev.java.net/spring/core.xsd</span> <span style="color: #009900;">        http://jax-ws.dev.java.net/spring/servlet</span> <span style="color: #009900;">        http://jax-ws.dev.java.net/spring/servlet.xsd"</span></span> <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&gt;</span></span> &nbsp;     <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;wss:binding</span> <span style="color: #000066;">url</span>=<span style="color: #ff0000;">"/hello"</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>         <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;wss:service<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>             <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;ws:service</span> <span style="color: #000066;">bean</span>=<span style="color: #ff0000;">"#helloWs"</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>         <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/wss:service<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>     <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/wss:binding<span style="color: #000000; font-weight: bold;">&gt;</span></span></span> &nbsp;     <span style="color: #808080; font-style: italic;">&lt;!-- Web service methods --&gt;</span>     <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bean</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">"helloWs"</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">"com.mkyong.ws.HelloWorldWS"</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>     	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">"helloWorldBo"</span> <span style="color: #000066;">ref</span>=<span style="color: #ff0000;">"HelloWorldBo"</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>     <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/bean<span style="color: #000000; font-weight: bold;">&gt;</span></span></span> &nbsp;     <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bean</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">"HelloWorldBo"</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">"com.mkyong.bo.impl.HelloWorldBoImpl"</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span> &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/beans<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div><div> <strong>Note</strong><br /> With this jaxws-spring integration mechanism, the <strong>sun-jaxws.xml</strong> file is no longer required.</div><h4>6. web.xml</h4><p>In web.xml, declares &#8220;<code>com.sun.xml.ws.transport.http.servlet.WSSpringServlet</code>&#8220;, and link it to &#8220;<code>/hello</code>&#8220;.</p><div><div><pre style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;web-app</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">"WebApp_ID"</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">"2.4"</span> </span> <span style="color: #009900;">	<span style="color: #000066;">xmlns</span>=<span style="color: #ff0000;">"http://java.sun.com/xml/ns/j2ee"</span> </span> <span style="color: #009900;">	<span style="color: #000066;">xmlns:xsi</span>=<span style="color: #ff0000;">"http://www.w3.org/2001/XMLSchema-instance"</span> </span> <span style="color: #009900;">	<span style="color: #000066;">xsi:schemaLocation</span>=<span style="color: #ff0000;">"http://java.sun.com/xml/ns/j2ee </span> <span style="color: #009900;">	http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"</span><span style="color: #000000; font-weight: bold;">&gt;</span></span> &nbsp; 	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;display-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Spring + JAX-WS<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/display-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span> &nbsp; 	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;servlet<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>     	        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;servlet-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>jaxws-servlet<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/servlet-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>     	       <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;servlet-class<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>     		          com.sun.xml.ws.transport.http.servlet.WSSpringServlet     	        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/servlet-class<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>   	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/servlet<span style="color: #000000; font-weight: bold;">&gt;</span></span></span> &nbsp; 	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;servlet-mapping<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>                 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;servlet-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>jaxws-servlet<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/servlet-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>                 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;url-pattern<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>/hello<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/url-pattern<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>          <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/servlet-mapping<span style="color: #000000; font-weight: bold;">&gt;</span></span></span> &nbsp;          <span style="color: #808080; font-style: italic;">&lt;!-- Register Spring Listener --&gt;</span>   	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;listener<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>     	        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;listener-class<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>     		     org.springframework.web.context.ContextLoaderListener     	        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/listener-class<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>   	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/listener<span style="color: #000000; font-weight: bold;">&gt;</span></span></span> &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/web-app<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div><h4>7. Demo</h4><p>Start the project, and access the deployed web service via URL &#8220;<strong>/hello</strong>&#8220;, for example <em>http://localhost:8080/WebServicesExample/hello?wsdl</em></p><div> <img src="http://www.mkyong.com/wp-content/uploads/2011/03/jaxws-spring-demo.png" alt="jaxws-spring-demo" title="jaxws-spring-demo" width="639" height="391" /></div><div> Download it &#8211; <a href="http://www.mkyong.com/wp-content/uploads/2011/03/JAX-WS-Spring-Integration-Example.zip">JAX-WS-Spring-Integration-Example.zip</a> (10KB)</div></div><img src ="http://www.blogjava.net/zhaochengming/aggbug/360406.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhaochengming/" target="_blank">helloworld2008</a> 2011-10-10 17:14 <a href="http://www.blogjava.net/zhaochengming/archive/2011/10/10/360406.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Groovy入门教程(一) </title><link>http://www.blogjava.net/zhaochengming/archive/2011/10/08/360191.html</link><dc:creator>helloworld2008</dc:creator><author>helloworld2008</author><pubDate>Sat, 08 Oct 2011 06:42:00 GMT</pubDate><guid>http://www.blogjava.net/zhaochengming/archive/2011/10/08/360191.html</guid><wfw:comment>http://www.blogjava.net/zhaochengming/comments/360191.html</wfw:comment><comments>http://www.blogjava.net/zhaochengming/archive/2011/10/08/360191.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/zhaochengming/comments/commentRss/360191.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhaochengming/services/trackbacks/360191.html</trackback:ping><description><![CDATA[<div>http://wenku.baidu.com/view/bca803b91a37f111f1855bc1.html</div><img src ="http://www.blogjava.net/zhaochengming/aggbug/360191.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhaochengming/" target="_blank">helloworld2008</a> 2011-10-08 14:42 <a href="http://www.blogjava.net/zhaochengming/archive/2011/10/08/360191.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts 2.0的Action讲解 轉自http://www.blogjava.net/max/archive/2006/10/25/77157.html</title><link>http://www.blogjava.net/zhaochengming/archive/2011/09/28/359723.html</link><dc:creator>helloworld2008</dc:creator><author>helloworld2008</author><pubDate>Wed, 28 Sep 2011 10:07:00 GMT</pubDate><guid>http://www.blogjava.net/zhaochengming/archive/2011/09/28/359723.html</guid><wfw:comment>http://www.blogjava.net/zhaochengming/comments/359723.html</wfw:comment><comments>http://www.blogjava.net/zhaochengming/archive/2011/09/28/359723.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/zhaochengming/comments/commentRss/359723.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhaochengming/services/trackbacks/359723.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 有Struts 1.x经验的朋友都知道Action是Struts的核心内容，当然Struts 2.0也不例外。不过，Struts 1.x与Struts 2.0的Action模型很大的区别。 		 				 						 								 										&nbsp; 										Struts 1.x 										Stuts 2.0 								 								 					...&nbsp;&nbsp;<a href='http://www.blogjava.net/zhaochengming/archive/2011/09/28/359723.html'>阅读全文</a><img src ="http://www.blogjava.net/zhaochengming/aggbug/359723.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhaochengming/" target="_blank">helloworld2008</a> 2011-09-28 18:07 <a href="http://www.blogjava.net/zhaochengming/archive/2011/09/28/359723.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Velocity语法  轉自 http://www.blogjava.net/alexwan/archive/2008/06/07/206473.html</title><link>http://www.blogjava.net/zhaochengming/archive/2011/09/28/359724.html</link><dc:creator>helloworld2008</dc:creator><author>helloworld2008</author><pubDate>Wed, 28 Sep 2011 10:07:00 GMT</pubDate><guid>http://www.blogjava.net/zhaochengming/archive/2011/09/28/359724.html</guid><wfw:comment>http://www.blogjava.net/zhaochengming/comments/359724.html</wfw:comment><comments>http://www.blogjava.net/zhaochengming/archive/2011/09/28/359724.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhaochengming/comments/commentRss/359724.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhaochengming/services/trackbacks/359724.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1.&nbsp;&nbsp;&nbsp;&nbsp; 变量 (1)变量的定义： #set($name = "hello")&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;说明：velocity中变量是弱类型的。 当使用#set 指令时，括在双引号中的字面字符串将解析和重新解释，如下所示： #set($directoryRoot = "www" ) #set($templateName ...&nbsp;&nbsp;<a href='http://www.blogjava.net/zhaochengming/archive/2011/09/28/359724.html'>阅读全文</a><img src ="http://www.blogjava.net/zhaochengming/aggbug/359724.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhaochengming/" target="_blank">helloworld2008</a> 2011-09-28 18:07 <a href="http://www.blogjava.net/zhaochengming/archive/2011/09/28/359724.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>StringUtils方法全集  本文来自CSDN博客，转载请标明出处：http://blog.csdn.net/fishnotears/archive/2010/11/16/6012953.aspx</title><link>http://www.blogjava.net/zhaochengming/archive/2011/09/26/359500.html</link><dc:creator>helloworld2008</dc:creator><author>helloworld2008</author><pubDate>Mon, 26 Sep 2011 04:57:00 GMT</pubDate><guid>http://www.blogjava.net/zhaochengming/archive/2011/09/26/359500.html</guid><wfw:comment>http://www.blogjava.net/zhaochengming/comments/359500.html</wfw:comment><comments>http://www.blogjava.net/zhaochengming/archive/2011/09/26/359500.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhaochengming/comments/commentRss/359500.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhaochengming/services/trackbacks/359500.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: org.apache.commons.lang.StringUtils中方法的操作对象是java.lang.String类型的对象，是JDK提供 的String类型操作方法的补充，并且是null安全的(即如果输入参数String为null则不会抛出NullPointerException， 而是做了相应处理，例如，如果输入为null则返回也是null等，具体可以查看源代码)。 除了构造器，Stri...&nbsp;&nbsp;<a href='http://www.blogjava.net/zhaochengming/archive/2011/09/26/359500.html'>阅读全文</a><img src ="http://www.blogjava.net/zhaochengming/aggbug/359500.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhaochengming/" target="_blank">helloworld2008</a> 2011-09-26 12:57 <a href="http://www.blogjava.net/zhaochengming/archive/2011/09/26/359500.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>svn external</title><link>http://www.blogjava.net/zhaochengming/archive/2011/08/08/356013.html</link><dc:creator>helloworld2008</dc:creator><author>helloworld2008</author><pubDate>Mon, 08 Aug 2011 03:53:00 GMT</pubDate><guid>http://www.blogjava.net/zhaochengming/archive/2011/08/08/356013.html</guid><wfw:comment>http://www.blogjava.net/zhaochengming/comments/356013.html</wfw:comment><comments>http://www.blogjava.net/zhaochengming/archive/2011/08/08/356013.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhaochengming/comments/commentRss/356013.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhaochengming/services/trackbacks/356013.html</trackback:ping><description><![CDATA[<a href="http://cb.esast.com/cb/wiki/29777">http://cb.esast.com/cb/wiki/29777</a><br /><br />
<div class="scrollable gainLayout">
<table class="wikilayout">
<tbody>
<tr>
<td class="main">
<div class="wikiPageContent"><span id="pagecontent">
<h2 id="section-SvnExternal+_E7_94_A8_E6_B3_95">svn:external 用法</h2>
<p>&nbsp;</p>
<div class="toc">
<div class="collapsebox">
<h4>Table of Contents</h4>
<ul><li class="toclevel-1"><a class="wikipage" href="http://cb.esast.com/cb/wiki/29777#section-SvnExternal+_E7_94_A8_E6_B3_95">svn:external 用法</a></li><li class="toclevel-2"><a class="wikipage" href="http://cb.esast.com/cb/wiki/29777#section-_E5_AE_89_E8_A3_85+TortoiseSVN">安装 TortoiseSVN</a></li><li class="toclevel-2"><a class="wikipage" href="http://cb.esast.com/cb/wiki/29777#section-SvnExternals+_E8_AF_AD_E6_B3_95">svn:externals 语法</a></li><li class="toclevel-2"><a class="wikipage" href="http://cb.esast.com/cb/wiki/29777#section-_E5_B8_B8_E8_A7_84_E8_AE_BE_E7_BD_AE">常规设置</a></li><li class="toclevel-3"><a class="wikipage" href="http://cb.esast.com/cb/wiki/29777#section-_E8_8C_83_E4_BE_8B_E4_B8_80">范例一</a></li><li class="toclevel-3"><a class="wikipage" href="http://cb.esast.com/cb/wiki/29777#section-_E8_8C_83_E4_BE_8B_E4_BA_8C">范例二</a></li><li class="toclevel-3"><a class="wikipage" href="http://cb.esast.com/cb/wiki/29777#section-_E8_8C_83_E4_BE_8B_E4_B8_89">范例三</a></li><li class="toclevel-2"><a class="wikipage" href="http://cb.esast.com/cb/wiki/29777#section-_E9_AB_98_E7_BA_A7_E8_AE_BE_E7_BD_AE">高级设置</a></li><li class="toclevel-3"><a class="wikipage" href="http://cb.esast.com/cb/wiki/29777#section-_E8_8C_83_E4_BE_8B_E5_9B_9B">范例四</a></li><li class="toclevel-3"><a class="wikipage" href="http://cb.esast.com/cb/wiki/29777#section-_E8_8C_83_E4_BE_8B_E4_BA_94">范例五</a></li><li class="toclevel-3"><a class="wikipage" href="http://cb.esast.com/cb/wiki/29777#section-_E8_8C_83_E4_BE_8B_E5_85_AD">范例六</a></li><li class="toclevel-3"><a class="wikipage" href="http://cb.esast.com/cb/wiki/29777#section-_E8_8C_83_E4_BE_8B_E4_B8_83">范例七</a> </li></ul></div></div>
<p>&nbsp;</p>
<p>如果您有 2 个项目是使用共同开发的方式，且其中一个项目会使用到另一个项目中某部分的程序代码，在此种情況下就可以使用 svn:externals 属来设置。 </p>
<p>例如：A 公司是制作 IC 晶片的厂商，B 公司会向 A 公司购买 IC 晶片来加工，而这些晶片里也都会使用程序代码，可能这些程序代码会有些 Bug，如果 A 公司有许多间合作的厂商，或是有多样的程序代码产品，当 A 公司修改了 Bug 而 B 公司或其它的合作公司会知道修改了哪些 Bug 吗？那么这些合作公司要如何使这些程序代码和 A 公司的程序代码同步？这时就可以使用 svn:external 属性来设置，当 B 公司或其它公司设置好 svn:externals 属性，他们只要每次去更新就会看到 A 公司有修改了哪些 Bug 了。因此， svn:externals 属性的设置可以帮助公司间或是同事间的合作便利性，可消除多种复杂的情況增加效率。 </p>
<p>接下來为您详细介绍 svn:externals 的设置方式。 </p>
<h3 id="section-_E5_AE_89_E8_A3_85+TortoiseSVN">安装 TortoiseSVN</h3>
<p>请使用 TortoiseSVN 来设置 svn:external 属性，TortoiseSVN 工具可在<a class="external" href="http://tortoisesvn.net/downloads">http://tortoisesvn.net/downloads</a><img class="outlink" alt="" src="http://cb.esast.com/cb/images/out.png" />下载。 </p>
<h3 id="section-SvnExternals+_E8_AF_AD_E6_B3_95">svn:externals 语法</h3>
<h3 id="section-_E5_B8_B8_E8_A7_84_E8_AE_BE_E7_BD_AE">常规设置</h3>
<p>最基本的设置，是使用下面的语法，版本库位置和目录名称可以对调： </p><pre class="wiki">版本库位置 目录名称
例如：http://localhost/svn test

目录名称 版本库位置
例如：test http://localhost/svn
</pre>
<p>假如您要设置的目录名称及版本库中的目录名称如 "test svn" 中间有空白的，可以使用下面的语法： </p><pre class="wiki">http://localhost/svn/test%20svn "test svn"
</pre>
<p>版本库的目录名称中有空白以 "%20" 代替，如果是客户端上的目录名称请加上<strong> "" </strong>符号。 </p>
<p>如果您要设置目录中的某一版本，可以使用下面的语法： </p><pre class="wiki">-r5 http://localhost/svn/project1 test/abc
</pre>
<p><strong>-r5 </strong>是设置http://localhost/svn/project1的第 5 版，可在 5 的地方设为您要的版本，您也可将要设置的客户端目录设置为某个目录的子目录如上面的 test/abc。 </p>
<p>
<h4 id="section-_E8_8C_83_E4_BE_8B_E4_B8_80">范例一</h4>
<p>假设我们目前有 2 个项目分別是 A_project 和 B_project，而这 2 个项目的架构如下： </p><pre class="wiki">A_project                                                  B_project
     |－tags                                                   |－tags
     |－branches                                              |－branches
     |－trunk                                                  |－trunk
           |－docs                                                   |－docs
           |－libs                                                    |－libs
           |－src              　　    　                          |－src
                |－part_a &#8594; a1,a2,a3,a4,a5   　　　　　　　　|－part_c &#8594; c1,c2,c3
                |－part_b &#8594; b1,b2,b3,b4,b5,b6 　 　  　           |－part_d &#8594; d1,d2,d3
                |－part_f &#8594; f1,f2,f3,f4   　                            |－part_e &#8594; e1,e2
                                                              　           |－part_g &#8594; g1,g2,g3
</pre>
<p>我们将 A_project 和 B_project签出，目前将这 2 个 签出到桌面： </p>
<p>
<table class="wikitable" border="1">
<tbody>
<tr>
<td><span><img title="[!checka.PNG!]" src="http://cb.esast.com/cb/displayDocument/checka.PNG?doc_id=29802&amp;history=false&amp;notification=false"  alt="" /></span></td>
<td rowspan="2">&#8594; </td>
<td rowspan="2"><span><img title="[!svn1.PNG!]" src="http://cb.esast.com/cb/displayDocument/svn1.PNG?doc_id=29778&amp;history=false&amp;notification=false"  alt="" /></span></td></tr>
<tr>
<td><span><img title="[!checkb.PNG!]" src="http://cb.esast.com/cb/displayDocument/checkb.PNG?doc_id=29803&amp;history=false&amp;notification=false"  alt="" /></span></td></tr></tbody></table></p>
<p>接下來我们要做的动作是将 A_project/trunk 下的 src 目录设置 svn:externals 属性，设置的目录为 B_project/trunk/src 下的 part_c 目录。 </p>
<p>首先，我们使用资源管理器先把目录移到 A_project/trunk ，然后在 src 目录点击右键 &#8594; 选择 "TortoiseSVN" &#8594; "Properties"： </p>
<p><span><img title="[!svn2.PNG!]" src="http://cb.esast.com/cb/displayDocument/svn2.PNG?doc_id=29779&amp;history=false&amp;notification=false"  alt="" /></span> </p>
<p>选择 "New..." 按钮： </p>
<p><span><img title="[!svn3.PNG!]" src="http://cb.esast.com/cb/displayDocument/svn3.PNG?doc_id=29780&amp;history=false&amp;notification=false"  alt="" /></span> </p>
<p>请先在 Property name 选择 svn:externals ，然后在 Property value 键入以下语法： </p><pre class="wiki">名称 另一项目目录的版本库位置

例如：part_c https://localhost/svn/B_project/trunk/src/part_c
</pre>
<p>下面的 "Apply property recursively" 选项，如果勾选了，則在 A_project/trunk/src 下的所有目录底下都會新增一個 part_c 的目录，如果沒有勾选，则只会在 A_project/trunk/src 目录下新增 part_c 目录，在这里我们不勾选此选项，设置完后请按下 OK 按钮： </p>
<p><span><img title="[!svn4.PNG!]" src="http://cb.esast.com/cb/displayDocument/svn4.PNG?doc_id=29781&amp;history=false&amp;notification=false"  alt="" /></span> </p>
<p>按下 OK 按钮后，就会在前一个画面新增 svn:externals 属性： </p>
<p><span><img title="[!svn5.PNG!]" src="http://cb.esast.com/cb/displayDocument/svn5.PNG?doc_id=29782&amp;history=false&amp;notification=false"  alt="" /></span> </p>
<ul><li>Import...:可将之前导出的属性文件导入。</li><li>Export...:导出成属性文件，扩展名为：*.svnprops。</li><li>Save...:储存为Binary文件，可以使用Load按钮来设置。</li><li>Remove:移除设置好的属性。</li><li>Edit...:编辑属性。</li><li>New...:新增属性。 </li></ul>
<p>按下 OK 按钮后，您就会看到 src 目录出现 "!" 的icon： </p>
<p><span><img title="[!svn6.PNG!]" src="http://cb.esast.com/cb/displayDocument/svn6.PNG?doc_id=29783&amp;history=false&amp;notification=false"  alt="" /></span> </p>
<p>再将此变更提交，然后再更新，您会看到以下结果： </p>
<p><span><img title="[!svn7.PNG!]" src="http://cb.esast.com/cb/displayDocument/svn7.PNG?doc_id=29784&amp;history=false&amp;notification=false"  alt="" /></span> </p>
<p>在 A_project/trunk/src 目录下新增了 part_c 目录的所有内容，而 part_c 目录的版本为 6，这是 B_project 的目前版本。而在下面的版本10是目前 A_project 的版本。 </p>
<p>如果您到 A_project/trunk/src 下的内容，会看到新增了一个 part_c 目录： </p>
<p><span><img title="[!svn8.PNG!]" src="http://cb.esast.com/cb/displayDocument/svn8.PNG?doc_id=29785&amp;history=false&amp;notification=false"  alt="" /></span> </p>
<h4 id="section-_E8_8C_83_E4_BE_8B_E4_BA_8C">范例二</h4>
<p>A_project/trunk/src 设置了 svn:external 属性，在 src 下新增了 part_c 目录，其目标为 B_project/trunk/src/part_c，而这二个 part_c 目录是有关联的，如果您在 A_project 的 part_c 产生变更，則 B_project 的 part_c 就会有一样的变更(在更新后)，反之，如果您在 B_project 的 part_c 产生变更，则此变更也会反映在 A_project 的 part_c 上，接下來我们來示范此例子： </p>
<p>首先我们在 A_project 的 part_c 产生一个变更，我们来产生一个新的文件，名称为 c4： </p>
<p><span><img title="[!svn9.PNG!]" src="http://cb.esast.com/cb/displayDocument/svn9.PNG?doc_id=29786&amp;history=false&amp;notification=false"  alt="" /></span> </p>
<p>然后将此变更提交，则产生下图结果： </p>
<p><span><img title="[!svn10.PNG!]" src="http://cb.esast.com/cb/displayDocument/svn10.PNG?doc_id=29787&amp;history=false&amp;notification=false"  alt="" /></span> </p>
<p>在<span class="interwikilink"><a class="interwikilink" title="[WIKIPAGE:29777] Status: --; Last Modified: shuminlin (二月 25 13:19); Locked: N/A" href="http://cb.esast.com/cb/wiki/29777#section-_E8_8C_83_E4_BE_8B_E4_B8_80">范例一</a></span> part_c 最后的版本为 6，在这里您会看到版本变为 7，如果您在 src 的目录下使用更新的选项，则会看到 A_project 的版本仍然是 10，因为此次的变更可以说是和 A_project 无关，所以 A_project 的版本沒有变动。 </p>
<p>如果您再到 B_project 使用更新的选项，则会看到下图结果： </p>
<p><span><img title="[!svn11.PNG!]" src="http://cb.esast.com/cb/displayDocument/svn11.PNG?doc_id=29788&amp;history=false&amp;notification=false"  alt="" /></span> </p>
<p>您会看到在 part_c 目录下新增了 c4 文件，且版本变为 7。 </p>
<p>我们再做一个例子。 </p>
<p>这次在 A_project/trunk/src/part_a 新增一个文件 a6，也在 A_project/trunk/src/part_c 新增另一个文件 c5： </p>
<p>
<table class="wikitable" border="1">
<tbody>
<tr class="odd">
<th>A_project/trunk/src/part_a</th>
<th>A_paroject/trunk/src/part_c</th></tr>
<tr>
<td><span><img title="[!svn12.PNG!]" src="http://cb.esast.com/cb/displayDocument/svn12.PNG?doc_id=29789&amp;history=false&amp;notification=false"  alt="" /></span></td>
<td><span><img title="[!svn13.PNG!]" src="http://cb.esast.com/cb/displayDocument/svn13.PNG?doc_id=29790&amp;history=false&amp;notification=false"  alt="" /></span></td></tr></tbody></table>
<p>然后再将此次变更提交，最后您会看到下图的结果： </p>
<p><span><img title="[!svn14.PNG!]" src="http://cb.esast.com/cb/displayDocument/svn14.PNG?doc_id=29791&amp;history=false&amp;notification=false"  alt="" /></span> </p>
<p>part_c 目录版本变为 8，A_project的版本变为 11。 </p>
<p>如果您在 B_project 使用更新，则会看到下图的结果： </p>
<p><span><img title="[!svn15.PNG!]" src="http://cb.esast.com/cb/displayDocument/svn15.PNG?doc_id=29792&amp;history=false&amp;notification=false"  alt="" /></span> </p>
<h4 id="section-_E8_8C_83_E4_BE_8B_E4_B8_89">范例三</h4>
<p>在此范例示范在<span class="interwikilink"><a class="interwikilink" title="[WIKIPAGE:29777] Status: --; Last Modified: shuminlin (二月 25 13:19); Locked: N/A" href="http://cb.esast.com/cb/wiki/29777#section-_E5_B8_B8_E8_A7_84_E8_AE_BE_E7_BD_AE">常规设置</a></span>有提到的语法。 </p>
<p>我们在<span class="interwikilink"><a class="interwikilink" title="[WIKIPAGE:29777] Status: --; Last Modified: shuminlin (二月 25 13:19); Locked: N/A" href="http://cb.esast.com/cb/wiki/29777#section-_E8_8C_83_E4_BE_8B_E4_B8_80">范例一</a></span>及<span class="interwikilink"><a class="interwikilink" title="[WIKIPAGE:29777] Status: --; Last Modified: shuminlin (二月 25 13:19); Locked: N/A" href="http://cb.esast.com/cb/wiki/29777#section-_E8_8C_83_E4_BE_8B_E4_BA_8C">范例二</a></span>皆有示范过下面的范例，所以在此就不再示范： </p><pre class="wiki">http://localhost/svn test
</pre>
<p>但您也可以使用下面的语法來试试看： </p><pre class="wiki">test http://localhost/svn
</pre>
<p>接下來我们示范此语法： </p><pre class="wiki">http://localhost/svn/test%20svn "test svn"
</pre>
<p>我们先在 B_project/trunk/src 下新增一个 part h 目录，然后将此变更提交： </p>
<p><span><img title="[!svn16.PNG!]" src="http://cb.esast.com/cb/displayDocument/svn16.PNG?doc_id=29793&amp;history=false&amp;notification=false"  alt="" /></span> </p>
<p>在 A_project/trunk/src 按右键选择 TortoiseSVN &#8594; Properties，选择 New 按钮并设置 svn:externals 属性的变量为： </p><pre class="wiki">https://localhost/svn/B_project/trunk/src/part%20h "part h"
</pre>
<p>中间 <strong>%20</strong> 代表的是空格，后面的 part h 目录因为中间有空格，所以需加上 <strong>" "</strong> ，键入完后将此变更提交并更新，您就会看到在 A_project/trunk/src 目录下多了一个 part h 目录： </p>
<p><span><img title="[!svn17.PNG!]" src="http://cb.esast.com/cb/displayDocument/svn17.PNG?doc_id=29794&amp;history=false&amp;notification=false"  alt="" /></span> </p>
<p>再來是关联某一版本的语法： </p><pre class="wiki">-r5 http://localhost/svn/project1 test/abc
</pre>
<p>在 B_project/trunk/src 按右键选择 TortoiseSVN &#8594; Properties，选择 New 按钮并设置 svn:externals 属性的变量为： </p><pre class="wiki">-r5 https://localhost/svn/A_project/trunk/src src_r5
</pre>
<p>键入完后将此变更提交并更新，您就会看到 src_r5 目录的版本为 5： </p>
<p><span><img title="[!svn18.PNG!]" src="http://cb.esast.com/cb/displayDocument/svn18.PNG?doc_id=29795&amp;history=false&amp;notification=false"  alt="" /></span> 
<h3 id="section-_E9_AB_98_E7_BA_A7_E8_AE_BE_E7_BD_AE">高级设置</h3>
<p>&nbsp;</p>
<p>除了常规设置的语法外，另外就是可以使用<strong>类似相对路径</strong>的设置方式，此种方式分为下面 4 种： </p>
<ul><li>关联父目录，使用符号为 <strong>"../"</strong>，依照您目前所设置的目录位置来设置。</li><li>关联根目录，使用符号为 <strong>"^/"</strong>，直接将目录移到版本库的根目录来设置。</li><li>关联 URL scheme，使用符号为 <strong>"//"</strong>，取代 URL 前面的 http://、https://、svn+ssh://。</li><li>关联 Server hostname，使用符号为 <strong>"/"</strong>，取代 URL 的hostname和前面的 http://、https://、svn+ssh://。 </li></ul>
<h4 id="section-_E8_8C_83_E4_BE_8B_E5_9B_9B">范例四</h4>
<p>在此范例，我们示范如何使用 <strong>"../"</strong>。 </p>
<p>首先，我们在 A_project/trunk/src 目录下新增 part_i 目录，然后将此变更提交： </p>
<p><span><img title="[!svn19.PNG!]" src="http://cb.esast.com/cb/displayDocument/svn19.PNG?doc_id=29796&amp;history=false&amp;notification=false"  alt="" /></span> </p>
<p>然后我们在 B_project/trunk/src 目录设置 svn:externals 属性，键入如下： </p><pre class="wiki">../../../A_project/trunk/src/part_i part_i
</pre>
<p>其实此路径同等於 "https://localhost/svn/A_project/trunk/src/part_i"，因为是设置 src 目录，第一次的 ../ 是回到 trunk 目录，第二次的 ../ 是回到 B_project 目录，第三次的 ../ 就是回到 svn，然后再指定 A_project/trunk/src 目录下的 part_i，使用此语法的诀窍，就是要知道自己所设置的目前目录和目标目录的路径关系。 </p>
<p>键入完后，将此变更提交后更新，就会在 B_project/trunk/src 目录下看到 part_i： </p>
<p><span><img title="[!svn20.PNG!]" src="http://cb.esast.com/cb/displayDocument/svn20.PNG?doc_id=29797&amp;history=false&amp;notification=false"  alt="" /></span> </p>
<div class="information">此语法只适合使用在 Repository 在相同 Server 的情況。 </div>
<h4 id="section-_E8_8C_83_E4_BE_8B_E4_BA_94">范例五</h4>
<p>在此范例，我们示范如何使用 <strong>"^/"</strong>。 </p>
<p>首先，我们在 A_project/trunk/src 目录下的 docs 目录设置 svn:externals 属性，设置如下： </p><pre class="wiki">^/../B_project/trunk/docs projectb/docs
</pre>
<p>此路径同等於 "https://localhost/svn/B_project/trunk/docs"，<strong>^/</strong> 符号会直接跳到版本库的根目录，所以在这里会跳到 A_project 目录，后面的 ../ 会回到 svn，然后再指定 B_project/trunk/docs 目录，而后面的 projectb/docs，是会将 B_project/trunk/docs 目录放在 A_project/trunk/src/docs/<strong>projectb/docs</strong> 目录，链入完后您就会在 A_project/trunk/src/docs/projectb 目录下看到 docs 目录： </p>
<p><span><img title="[!svn21.PNG!]" src="http://cb.esast.com/cb/displayDocument/svn21.PNG?doc_id=29798&amp;history=false&amp;notification=false"  alt="" /></span> </p>
<div class="information">此语法只适合使用在版本库在相同服务器的情況。 </div>
<h4 id="section-_E8_8C_83_E4_BE_8B_E5_85_AD">范例六</h4>
<p>在此范例我们示范如何使用 <strong>"//"</strong>。 </p>
<p>首先，我们在 A_project/trunk/libs 目录设置 svn:external 属性，设置如下： </p><pre class="wiki">//192.168.1.2/svn/project2/trunk/libs "project2 libs"
</pre>
<p><strong>//</strong>是取代 URL 前面的 http://、https://、svn+ssh://，依照您签出時是使用哪一种协议來取代，像此例的 A_projet 在当初签出时所使用的协议是 https://，所以此路径为 "https://192.168.1.2/svn/project2/trunk/libs"。 </p>
<p>键入完成后将此变更提交后更新，您即可在 A_project/trunk/libs 目录下看到 project2 libs 目录： </p>
<p><span><img title="[!svn22.PNG!]" src="http://cb.esast.com/cb/displayDocument/svn22.PNG?doc_id=29799&amp;history=false&amp;notification=false"  alt="" /></span> </p>
<div class="information">此语法可使用在不同服务器的版本库，但您必须确定不同的 服务器所使用的协议都是一样的。 </div>
<h4 id="section-_E8_8C_83_E4_BE_8B_E4_B8_83">范例七</h4>
<p>在此范例我们示范如何使用 <strong>"/"</strong>。 </p>
<p>首先，我们在 B_projet/trunk/libs 目录设置 svn:externals 属性，设置如下： </p><pre class="wiki">/svn/A_project/trunk/libs "projecta libs"
</pre>
<p><strong>/</strong> 是取代 URL 前面的协议和hostname，依照您设置目录所 签出的 URL 來取代，所以在这里所取代的是 "https://localhost"，因此这里所设置的路径就是 "https://localhost/svn/A_project/trunk/libs"。 </p>
<p>键入完后请将此变更提交后更新，您即可以在 B_project/trunk/libs 目录下看到 projecta libs 目录： </p>
<p><span><img title="[!svn23.PNG!]" src="http://cb.esast.com/cb/displayDocument/svn23.PNG?doc_id=29800&amp;history=false&amp;notification=false"  alt="" /></span> </p>
<div class="information">此语法只适合使用在版本库在同一个服务器的情況。 </div>
<p>但在这里要特別注意的是：当您再去打开 projecta libs 目录时，会在此目录下看到 project2 libs，因为在<span class="interwikilink"><a class="interwikilink" title="[WIKIPAGE:29777] Status: --; Last Modified: shuminlin (二月 25 13:19); Locked: N/A" href="http://cb.esast.com/cb/wiki/29777#section-_E8_8C_83_E4_BE_8B_E5_85_AD">范例六</a></span>我们有设置 A_project/trunk/libs 目录关联到 https://192.168.1.2/svn/project2/trunk/libs，目录名称为 project2 libs，在此范例我们将 B_project/trunk/libs 目录关联到 A_project/trunk/libs，目录名称为 projecta libs： </p>
<p><span><img title="[!svn24.PNG!]" src="http://cb.esast.com/cb/displayDocument/svn24.PNG?doc_id=29801&amp;history=false&amp;notification=false"  alt="" /></span> </p>
<p>所以这告诉我们，如果您要设置的关联目录下，还有关联其它的目录，都会被一并被带进您要设置的目录底下，如果您要设置的目录不想要有其它的关联，那么您就必须去特別注意这一点。 </p></span></div></td>
<td class="navigation">
<div class="wikiNavigationBar noPrint">
<div id="wikiNavigationBarInner"><span style="white-space: normal">
<h2 id="section-RSS">RSS</h2>
<div class="ajaxplugin" id="ajaxplugin_2baa">
<div class="wikichartbox" style="moz-box-shadow: 0 0 1em silver; webkit-box-shadow: 0 0 1em silver; box-shadow: 0 0 1em silver">
<table>
<thead>
<tr>
<th colspan="2">活动流 <a title="数据餵入此活动流" href="http://cb.esast.com/cb/rss/activityStream.spr?projectId=353&amp;filter=commit%2Cissue%2Cwikipage%2Cdocument%2Cbuild%2Cforum&amp;max=20&amp;cssStyle=-moz-box-shadow%3A+0+0+1em+silver%3B+-webkit-box-shadow%3A+0+0+1em+silver%3B+box-shadow%3A+0+0+1em+silver%3B&amp;originatePage=%252Fwiki%252F29777&amp;CB_TOKEN=11-F5-2A-CA-F9-BA-E3-FA-60-B9-36-84-66-64-2F-8D-F-5D-D6-F-81-AE-59-3" target="_blank"><img style="margin-left: 5px" src="http://cb.esast.com/cb/images/rss.gif"  alt="" /></a> </th></tr></thead>
<tbody>
<tr>
<td class="separator" colspan="2"><strong>八月 01</strong> </td></tr>
<tr class="even" valign="top">
<td><a href="http://cb.esast.com/cb/userdata.do?user_id=1"><img class="smallPhoto photoBox" title="jeffery" src="http://cb.esast.com/cb/user/photo/1"  alt="" /> </a></td>
<td class="stretched" title="Project: DevToolNotes"><a title="JDiff.zip" href="http://cb.esast.com/cb/doc/22716">JDiff.zip</a> <span style="color: #333333">已更新 由</span> <a href="http://cb.esast.com/cb/userdata.do?user_id=1">jeffery</a> <br />
<div class="subtext excerpt">Modified: content, description</div><span class="subtext">八月 01 05:23 <span class="separator">&#8226;</span> <small>[DOC:22716]</small> </span></td></tr>
<tr class="odd" valign="top">
<td><a href="http://cb.esast.com/cb/userdata.do?user_id=1"><img class="smallPhoto photoBox" title="jeffery" src="http://cb.esast.com/cb/user/photo/1"  alt="" /> </a></td>
<td class="stretched" title="Project: DevToolNotes"><a title="JavaTWO-HudsonBuild範例與測試環境架設" href="http://cb.esast.com/cb/wiki/34766">JavaTWO-HudsonBuild範例與測試環境架設</a> <span style="color: #333333">已更新 由</span> <a href="http://cb.esast.com/cb/userdata.do?user_id=1">jeffery</a> <br />
<div class="subtext excerpt">Modified: content</div><span class="subtext">八月 01 05:19 <span class="separator">&#8226;</span> <small>[WIKIPAGE:34766]</small> </span></td></tr>
<tr class="even" valign="top">
<td><a href="http://cb.esast.com/cb/userdata.do?user_id=1"><img class="smallPhoto photoBox" title="jeffery" src="http://cb.esast.com/cb/user/photo/1"  alt="" /> </a></td>
<td class="stretched" title="Project: DevToolNotes"><a title="CalculatorApp.zip" href="http://cb.esast.com/cb/doc/34786">CalculatorApp.zip</a> <span style="color: #333333">已更新 由</span> <a href="http://cb.esast.com/cb/userdata.do?user_id=1">jeffery</a> <br />
<div class="subtext excerpt">Modified: description</div><span class="subtext">八月 01 05:17 <span class="separator">&#8226;</span> <small>[DOC:34786]</small> </span></td></tr>
<tr class="odd" valign="top">
<td><a href="http://cb.esast.com/cb/userdata.do?user_id=1"><img class="smallPhoto photoBox" title="jeffery" src="http://cb.esast.com/cb/user/photo/1"  alt="" /> </a></td>
<td class="stretched" title="Project: DevToolNotes"><a title="CalculatorApp.zip" href="http://cb.esast.com/cb/doc/34786">CalculatorApp.zip</a> <span style="color: #009900">已上传 由</span> <a href="http://cb.esast.com/cb/userdata.do?user_id=1">jeffery</a> <br />
<div class="subtext excerpt">Demo Source code, Hudson/Jenkins測試環境可參考[WIKIPAGE:34766]</div><span class="subtext">八月 01 05:16 <span class="separator">&#8226;</span> <small>[DOC:34786]</small> </span></td></tr>
<tr class="even" valign="top">
<td><a href="http://cb.esast.com/cb/userdata.do?user_id=1"><img class="smallPhoto photoBox" title="jeffery" src="http://cb.esast.com/cb/user/photo/1"  alt="" /> </a></td>
<td class="stretched" title="Project: DevToolNotes"><a title="JavaTwoHudson.pdf" href="http://cb.esast.com/cb/doc/34785">JavaTwoHudson.pdf</a> <span style="color: #009900">已上传 由</span> <a href="http://cb.esast.com/cb/userdata.do?user_id=1">jeffery</a> <br />
<div class="subtext excerpt">使用Hudson打造屬於你自己的軟體建構機器人</div><span class="subtext">八月 01 05:11 <span class="separator">&#8226;</span> <small>[DOC:34785]</small> </span></td></tr>
<tr>
<td class="separator" colspan="2"><strong>七月 27</strong> </td></tr>
<tr class="odd" valign="top">
<td><a href="http://cb.esast.com/cb/userdata.do?user_id=1"><img class="smallPhoto photoBox" title="jeffery" src="http://cb.esast.com/cb/user/photo/1"  alt="" /> </a></td>
<td class="stretched" title="Project: DevToolNotes"><a title="JavaTWO-HudsonBuild範例與測試環境架設" href="http://cb.esast.com/cb/wiki/34766">JavaTWO-HudsonBuild範例與測試環境架設</a> <span style="color: #333333">已更新 由</span> <a href="http://cb.esast.com/cb/userdata.do?user_id=1">jeffery</a> <br />
<div class="subtext excerpt">Modified: content</div><span class="subtext">七月 27 20:57 <span class="separator">&#8226;</span> <small>[WIKIPAGE:34766]</small> </span></td></tr>
<tr class="even" valign="top">
<td><a href="http://cb.esast.com/cb/userdata.do?user_id=1"><img class="smallPhoto photoBox" title="jeffery" src="http://cb.esast.com/cb/user/photo/1"  alt="" /> </a></td>
<td class="stretched" title="Project: DevToolNotes"><a title="JavaTWO-HudsonBuild範例與測試環境架設" href="http://cb.esast.com/cb/wiki/34766">JavaTWO-HudsonBuild範例與測試環境架設</a> <span style="color: #446699">附件已添加 由</span> <a href="http://cb.esast.com/cb/userdata.do?user_id=1">jeffery</a> <br />
<div class="subtext excerpt">Network diagram<br />2011-07-26_1734.png</div><span class="subtext">七月 27 20:30 <span class="separator">&#8226;</span> <small>[DOC:34766]</small> </span></td></tr>
<tr class="odd" valign="top">
<td><a href="http://cb.esast.com/cb/userdata.do?user_id=1"><img class="smallPhoto photoBox" title="jeffery" src="http://cb.esast.com/cb/user/photo/1"  alt="" /> </a></td>
<td class="stretched" title="Project: DevToolNotes"><a title="JavaTWO-HudsonBuild範例與測試環境架設" href="http://cb.esast.com/cb/wiki/34766">JavaTWO-HudsonBuild範例與測試環境架設</a> <span style="color: #333333">已更新 由</span> <a href="http://cb.esast.com/cb/userdata.do?user_id=1">jeffery</a> <br />
<div class="subtext excerpt">Modified: content</div><span class="subtext">七月 27 20:30 <span class="separator">&#8226;</span> <small>[WIKIPAGE:34766]</small> </span></td></tr>
<tr class="even" valign="top">
<td><a href="http://cb.esast.com/cb/userdata.do?user_id=1"><img class="smallPhoto photoBox" title="jeffery" src="http://cb.esast.com/cb/user/photo/1"  alt="" /> </a></td>
<td class="stretched" title="Project: DevToolNotes"><a title="JavaTWO-HudsonBuild範例與測試環境架設" href="http://cb.esast.com/cb/wiki/34766">JavaTWO-HudsonBuild範例與測試環境架設</a> <span style="color: #009900">已创建 由</span> <a href="http://cb.esast.com/cb/userdata.do?user_id=1">jeffery</a> <br /><span class="subtext">七月 27 12:05 <span class="separator">&#8226;</span> <small>[WIKIPAGE:34766]</small> </span></td></tr>
<tr>
<td class="separator" colspan="2"><strong>七月 26</strong> </td></tr>
<tr class="odd" valign="top">
<td><a href="http://cb.esast.com/cb/userdata.do?user_id=1"><img class="smallPhoto photoBox" title="jeffery" src="http://cb.esast.com/cb/user/photo/1"  alt="" /> </a></td>
<td class="stretched" title="Project: DevToolNotes"><a title="ANT" href="http://cb.esast.com/cb/wiki/22002">ANT</a> <span style="color: #333333">已更新 由</span> <a href="http://cb.esast.com/cb/userdata.do?user_id=1">jeffery</a> <br />
<div class="subtext excerpt">Modified: content</div><span class="subtext">七月 26 20:22 <span class="separator">&#8226;</span> <small>[WIKIPAGE:22002]</small> </span></td></tr>
<tr class="even" valign="top">
<td><a href="http://cb.esast.com/cb/userdata.do?user_id=1"><img class="smallPhoto photoBox" title="jeffery" src="http://cb.esast.com/cb/user/photo/1"  alt="" /> </a></td>
<td class="stretched" title="Project: DevToolNotes"><a title="ANT+ Cobertura" href="http://cb.esast.com/cb/wiki/34759">ANT+ Cobertura</a> <span style="color: #009900">已创建 由</span> <a href="http://cb.esast.com/cb/userdata.do?user_id=1">jeffery</a> <br /><span class="subtext">七月 26 20:20 <span class="separator">&#8226;</span> <small>[WIKIPAGE:34759]</small> </span></td></tr>
<tr>
<td class="separator" colspan="2"><strong>七月 17</strong> </td></tr>
<tr class="odd" valign="top">
<td><a href="http://cb.esast.com/cb/userdata.do?user_id=1"><img class="smallPhoto photoBox" title="jeffery" src="http://cb.esast.com/cb/user/photo/1"  alt="" /> </a></td>
<td class="stretched" title="Project: DevToolNotes"><a title="FindBugs與Ant" href="http://cb.esast.com/cb/wiki/22894">FindBugs與Ant</a> <span style="color: #333333">已更新 由</span> <a href="http://cb.esast.com/cb/userdata.do?user_id=1">jeffery</a> <br />
<div class="subtext excerpt">Modified: content</div><span class="subtext">七月 17 10:08 <span class="separator">&#8226;</span> <small>[WIKIPAGE:22894]</small> </span></td></tr>
<tr>
<td class="separator" colspan="2"><strong>六月 14</strong> </td></tr>
<tr class="even" valign="top">
<td><a href="http://cb.esast.com/cb/userdata.do?user_id=1"><img class="smallPhoto photoBox" title="jeffery" src="http://cb.esast.com/cb/user/photo/1"  alt="" /> </a></td>
<td class="stretched" title="Project: DevToolNotes"><a title="XCode-ObjectiveC的測試框架" href="http://cb.esast.com/cb/wiki/33942">XCode-ObjectiveC的測試框架</a> <span style="color: #333333">已更新 由</span> <a href="http://cb.esast.com/cb/userdata.do?user_id=1">jeffery</a> <br />
<div class="subtext excerpt">Modified: content</div><span class="subtext">六月 14 18:05 <span class="separator">&#8226;</span> <small>[WIKIPAGE:33942]</small> </span></td></tr>
<tr class="odd" valign="top">
<td><a href="http://cb.esast.com/cb/userdata.do?user_id=1"><img class="smallPhoto photoBox" title="jeffery" src="http://cb.esast.com/cb/user/photo/1"  alt="" /> </a></td>
<td class="stretched" title="Project: DevToolNotes"><a title="TDD" href="http://cb.esast.com/cb/wiki/23050">TDD</a> <span style="color: #333333">已更新 由</span> <a href="http://cb.esast.com/cb/userdata.do?user_id=1">jeffery</a> <br />
<div class="subtext excerpt">Modified: content</div><span class="subtext">六月 14 18:01 <span class="separator">&#8226;</span> <small>[WIKIPAGE:23050]</small> </span></td></tr>
<tr class="even" valign="top">
<td><a href="http://cb.esast.com/cb/userdata.do?user_id=1"><img class="smallPhoto photoBox" title="jeffery" src="http://cb.esast.com/cb/user/photo/1"  alt="" /> </a></td>
<td class="stretched" title="Project: DevToolNotes"><a title="XCode-ObjectiveC的測試框架" href="http://cb.esast.com/cb/wiki/33942">XCode-ObjectiveC的測試框架</a> <span style="color: #333333">已更新 由</span> <a href="http://cb.esast.com/cb/userdata.do?user_id=1">jeffery</a> <br />
<div class="subtext excerpt">Modified: content</div><span class="subtext">六月 14 18:00 <span class="separator">&#8226;</span> <small>[WIKIPAGE:33942]</small> </span></td></tr>
<tr class="odd" valign="top">
<td><a href="http://cb.esast.com/cb/userdata.do?user_id=1"><img class="smallPhoto photoBox" title="jeffery" src="http://cb.esast.com/cb/user/photo/1"  alt="" /> </a></td>
<td class="stretched" title="Project: DevToolNotes"><a title="TDD" href="http://cb.esast.com/cb/wiki/23050">TDD</a> <span style="color: #333333">已更新 由</span> <a href="http://cb.esast.com/cb/userdata.do?user_id=1">jeffery</a> <br />
<div class="subtext excerpt">Modified: content</div><span class="subtext">六月 14 17:56 <span class="separator">&#8226;</span> <small>[WIKIPAGE:23050]</small> </span></td></tr>
<tr class="even" valign="top">
<td><a href="http://cb.esast.com/cb/userdata.do?user_id=1"><img class="smallPhoto photoBox" title="jeffery" src="http://cb.esast.com/cb/user/photo/1"  alt="" /> </a></td>
<td class="stretched" title="Project: DevToolNotes"><a title="XCode-ObjectiveC的測試框架" href="http://cb.esast.com/cb/wiki/33942">XCode-ObjectiveC的測試框架</a> <span style="color: #333333">已更新 由</span> <a href="http://cb.esast.com/cb/userdata.do?user_id=1">jeffery</a> <br />
<div class="subtext excerpt">Modified: name, description, versions - Modified: content</div><span class="subtext">六月 14 17:56 <span class="separator">&#8226;</span> <small>[WIKIPAGE:33942]</small> </span></td></tr>
<tr class="odd" valign="top">
<td><a href="http://cb.esast.com/cb/userdata.do?user_id=1"><img class="smallPhoto photoBox" title="jeffery" src="http://cb.esast.com/cb/user/photo/1"  alt="" /> </a></td>
<td class="stretched" title="Project: DevToolNotes"><a title="XCode-ObjectiveC的測試框架" href="http://cb.esast.com/cb/wiki/33942">XCode-ObjectiveC的測試框架</a> <span style="color: #009900">已创建 由</span> <a href="http://cb.esast.com/cb/userdata.do?user_id=1">jeffery</a> <br /><span class="subtext">六月 14 17:55 <span class="separator">&#8226;</span> <small>[WIKIPAGE:33942]</small> </span></td></tr>
<tr>
<td class="separator" colspan="2"><strong>五月 23</strong> </td></tr>
<tr class="even" valign="top">
<td><a href="http://cb.esast.com/cb/userdata.do?user_id=1"><img class="smallPhoto photoBox" title="jeffery" src="http://cb.esast.com/cb/user/photo/1"  alt="" /> </a></td>
<td class="stretched" title="Project: DevToolNotes"><a title="EGit基本功能操作" href="http://cb.esast.com/cb/wiki/24805">EGit基本功能操作</a> <span style="color: #333333">已更新 由</span> <a href="http://cb.esast.com/cb/userdata.do?user_id=1">jeffery</a> <br />
<div class="subtext excerpt">Modified: content</div><span class="subtext">五月 23 11:46 <span class="separator">&#8226;</span> <small>[WIKIPAGE:24805]</small> </span></td></tr>
<tr>
<td class="separator" colspan="2"><strong>五月 04</strong> </td></tr>
<tr class="odd" valign="top">
<td><a href="http://cb.esast.com/cb/userdata.do?user_id=1"><img class="smallPhoto photoBox" title="jeffery" src="http://cb.esast.com/cb/user/photo/1"  alt="" /> </a></td>
<td class="stretched" title="Project: DevToolNotes"><a title="Git" href="http://cb.esast.com/cb/wiki/21961">Git</a> <span style="color: #333333">已更新 由</span> <a href="http://cb.esast.com/cb/userdata.do?user_id=1">jeffery</a> <br />
<div class="subtext excerpt">Modified: content</div><span class="subtext">五月 04 18:47 <span class="separator">&#8226;</span> <small>[WIKIPAGE:21961]</small> </span></td></tr></tbody></table></div></div></span>
<div class="propertiesBar"><a class="wikiNavigationLink" onclick="launch_url('/cb/proj/wiki/editWikiPage.spr;jsessionid=FE5FDA97FC8815FF1F598FDAC99B2B77?doc_id=10003&amp;forward_doc_id=29777',null); return false" href="http://cb.esast.com/cb/proj/wiki/editWikiPage.spr;jsessionid=FE5FDA97FC8815FF1F598FDAC99B2B77?doc_id=10003&amp;forward_doc_id=29777">编辑 </a><a class="wikiNavigationLink" href="http://cb.esast.com/cb/proj/wiki/displayWikiPageProperties.spr;jsessionid=FE5FDA97FC8815FF1F598FDAC99B2B77?doc_id=10003&amp;forward_doc_id=29777">属性 </a></div></div></div></td></tr></tbody></table></div><img src ="http://www.blogjava.net/zhaochengming/aggbug/356013.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhaochengming/" target="_blank">helloworld2008</a> 2011-08-08 11:53 <a href="http://www.blogjava.net/zhaochengming/archive/2011/08/08/356013.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring提供了MethodNameResolver的三种方式 转自：http://www.360doc.com/content/10/0329/17/968587_20751507.shtml</title><link>http://www.blogjava.net/zhaochengming/archive/2011/07/29/355336.html</link><dc:creator>helloworld2008</dc:creator><author>helloworld2008</author><pubDate>Fri, 29 Jul 2011 08:00:00 GMT</pubDate><guid>http://www.blogjava.net/zhaochengming/archive/2011/07/29/355336.html</guid><wfw:comment>http://www.blogjava.net/zhaochengming/comments/355336.html</wfw:comment><comments>http://www.blogjava.net/zhaochengming/archive/2011/07/29/355336.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhaochengming/comments/commentRss/355336.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhaochengming/services/trackbacks/355336.html</trackback:ping><description><![CDATA[Spring提供了MethodNameResolver的三种方式：<br /><br />1 : ParameterMethodNameResolver,这个可以根据请求的参数来确定一个需要调用的方法。<br />例如，<a href="http://www.sf.net/index.view?testParam=testIt">http://www.sf.net/index.view?testParam=testIt</a>，这个请求会调用名称为testIt的处理方法。<br /><br />2 : InternalPathMethodNameResolver，这个可以根据请求的路径名称来调用相应的方法。<br />例如，<a href="http://www.sf.net/testing.view">http://www.sf.net/testing.view</a>,这个请求会调用testing方法。<br /><br />3 : PropertiesMethodNameResolver，这个可以根据一个URLs 映射列表来调用相应的方法。<br />例如，如果定义了/index/welcome.html=doIt，那么当请求为/index/welcome.html时，会调用doIt方法。在定义URLs时可以使用通配符。/**/welcom?.html <br /><br /><br />
<p><br />ParameterMethodNameResolver<br />InternalPathMethodNameResolver<br />PropertiesMethodNameResolver<br />配置web.xml<br />Java代码<br />1. &lt;servlet&gt;<br />2. &lt;servlet-name&gt;spring&lt;/servlet-name&gt;<br />3. &lt;servlet-class&gt;<br />4. org.springframework.web.servlet.DispatcherServlet<br />5. &lt;/servlet-class&gt;<br />6. &lt;load-on-startup&gt;2&lt;/load-on-startup&gt;<br />7. &lt;/servlet&gt;<br />8. &lt;servlet-mapping&gt;<br />9. &lt;servlet-name&gt;spring&lt;/servlet-name&gt;<br />10. &lt;url-pattern&gt;/spring/*&lt;/url-pattern&gt;<br />11. &lt;/servlet-mapping&gt;<br />定义一个Controller继承与MultiActionController<br />Java代码<br />1. package cn.iwoo.server.controller;<br />2.<br />3. import javax.servlet.http.HttpServletRequest;<br />4. import javax.servlet.http.HttpServletResponse;<br />5.<br />6. import org.springframework.web.servlet.ModelAndView;<br />7. import org.springframework.web.servlet.mvc.multiaction.MultiActionController;<br />8.<br />9. public class BController extends MultiActionController {<br />10. public ModelAndView doSearch(HttpServletRequest request, HttpServletResponse response) throws Exception {<br />11. System.out.println(this.getClass() + "." + "doSearch()");<br />12. return new ModelAndView("");<br />13. }<br />14. }<br />方法的定义必须符合下面的格式<br />Java代码<br />1. public (ModelAndView | Map | String | void) actionName(HttpServletRequest request, HttpServletResponse response);<br />定义ViewResolver<br />Java代码<br />1. &lt;bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"&gt;<br />热点推荐<br />中国民间魔术、原来如此<br />百张三维立体图<br />社交礼仪讲座<br />75<br />为什么要使用三家禽肉不能吃的中国各省人口排发人警醒：一个一个人的世界<br />新概念英语学习英语名人名言<br />经典感悟的十个现实生活中的你[原创<br />壮哉，<br />落伍没？盘点<br />宁静（音画）<br />给想干事的人以卫星电视初学者相关文章:<br />Spring架构设计-增强MultiActionController<br />MultiActionController绑定command<br />Spring的MultiActionController使用<br />推荐圈子: GT-Grid<br />更多相关推荐<br />Google<br />Java<br />Spring Wire<br />MVC<br />Compression Spring<br />关闭<br />MultiActionController与3种MethodNameResolver的配置<a href="http://www.360doc.com/content/10/0329/17/968587_20">http://www.360doc.com/content/10/0329/17/968587_20</a>...<br />第1页 共3页2011-07-29 15:59<br />&lt;property name="viewClass"&gt;&lt;value&gt;org.springframework.web.servlet.view.JstlView&lt;/2. value&gt;&lt;/property&gt;<br />3. &lt;property name="prefix"&gt;&lt;value&gt;/WEB-INF/jsp/&lt;/value&gt;&lt;/property&gt;<br />4. &lt;property name="suffix"&gt;&lt;value&gt;.jsp&lt;/value&gt;&lt;/property&gt;<br />5. &lt;/bean&gt;<br />定义UrlHandlerMapping<br />Java代码<br />1. &lt;bean id="urlHandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"&gt;<br />2. lt;property name="urlMap"&gt;<br />3. &lt;map&gt;<br />4. &lt;entry key="/b/*"&gt;&lt;ref bean="bController"&gt;&lt;/ref&gt;&lt;/entry&gt;<br />5. &lt;/map&gt;<br />6. lt;/property&gt;<br />7. &lt;/bean&gt;<br />定义MethodNameResolver<br />一共定义了3个不同类型的MethodNameResolver.<br />Java代码<br />1. &lt;!-- MethodNameResolver Definition --&gt;<br />&lt;bean id="bMethodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver"&gt;<br />2.<br />3. &lt;property name="paramName" value="method"&gt;&lt;/property&gt;<br />4. &lt;property name="logicalMappings"&gt;<br />5. &lt;props&gt;<br />6. &lt;prop key="doSearch"&gt;doSearch&lt;/prop&gt;<br />7. &lt;/props&gt;<br />8. &lt;/property&gt;<br />9. &lt;/bean&gt;<br />10.<br />&lt;bean id="cMethodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.InternalPathMethodNameResolver"&gt;<br />11.<br />12. &lt;/bean&gt;<br />13.<br />&lt;bean id="dMethodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver"&gt;<br />14.<br />15. &lt;property name="mappings"&gt;<br />16. &lt;value&gt;<br />17. /b/page.html=doSearch<br />18. &lt;/value&gt;<br />19. &lt;/property&gt;<br />20. &lt;/bean&gt;<br />定义Controller<br />Java代码<br />1. &lt;!-- Controller Definition --&gt;<br />2. &lt;bean id="bController" class="cn.iwoo.server.controller.BController"&gt;<br />3. &lt;!-- &lt;property name="methodNameResolver"&gt;&lt;ref local="bMethodNameResolver"/&gt;&lt;/property&gt; --&gt;<br />4. &lt;!-- &lt;property name="methodNameResolver"&gt;&lt;ref local="cMethodNameResolver"/&gt;&lt;/property&gt; --&gt;<br />5. &lt;property name="methodNameResolver"&gt;&lt;ref local="dMethodNameResolver"/&gt;&lt;/property&gt;<br />6. &lt;/bean&gt;<br />测试<br />下面是对应于不同MethodNameResolver的测试url.<br /><a href="http://localhost:9080/cn.iwoo/spring/b?method=doSearch">http://localhost:9080/cn.iwoo/spring/b?method=doSearch</a><br /><a href="http://localhost:9080/cn.iwoo/spring/b/doSearch">http://localhost:9080/cn.iwoo/spring/b/doSearch</a><br /><a href="http://localhost:9080/cn.iwoo/spring/b/page.html">http://localhost:9080/cn.iwoo/spring/b/page.html</a><br />注:/b/是我的controller的映射前缀,在PropertiesMethodNameResolver的mappings配置里面,网址必须是/b/开头,也就是controller的前缀也需<br />要写进去. 这是我测试的结果,不知是否必须这样.</p> <img src ="http://www.blogjava.net/zhaochengming/aggbug/355336.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhaochengming/" target="_blank">helloworld2008</a> 2011-07-29 16:00 <a href="http://www.blogjava.net/zhaochengming/archive/2011/07/29/355336.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在Extjs4应用中使用Ext.Loader</title><link>http://www.blogjava.net/zhaochengming/archive/2011/07/28/355233.html</link><dc:creator>helloworld2008</dc:creator><author>helloworld2008</author><pubDate>Thu, 28 Jul 2011 07:46:00 GMT</pubDate><guid>http://www.blogjava.net/zhaochengming/archive/2011/07/28/355233.html</guid><wfw:comment>http://www.blogjava.net/zhaochengming/comments/355233.html</wfw:comment><comments>http://www.blogjava.net/zhaochengming/archive/2011/07/28/355233.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/zhaochengming/comments/commentRss/355233.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhaochengming/services/trackbacks/355233.html</trackback:ping><description><![CDATA[<div><div><p>在EXTJS官网看到一片文章，讲的是Extjs.Loader的使用方法，文章非常详细的介绍了 Loader的机制及用法，感觉非常不错，但无奈英文实在太烂，就没转过来。昨天恰好在CSDN看到了这篇文章的译文，而译文的质量非常高，对译者的翻译 水平怎一个羡慕了得。废话不多说，正文开始。</p> <p>在开始之前，将英文原文链接放上来，英文水平高的可以看看原文哦。</p> <p>链接地址：<a target="_blank" href="http://www.sencha.com/blog/using-ext-loader-for-your-application/">www.sencha.com/blog/using-ext-loader-for-your-application/</a></p> <p>ExtJS 4.0是一个使用新的依赖系统的类加载系统。这两个强大的新功能允许你创建大量允许浏览器按需下载脚本代码的应用。</p> <p>今天，我们将通过建立一个小的使用新的类加载系统的应用程序来熟悉一下依赖管理系统。同时，我们将讨论Ext加载系统的各种配置项。</p> <p>在开始之前，我们先来看看将要实现的结果。这样做，可使我们确定需要扩展那些类。</p> <p><img alt="001" src="http://mhzg.net/upload/2011/6/30102044116.jpg" height="415" width="580" /></p> <p>应用会包括互相绑定的GridPanel和FormPanel，名称分别为UserGridPanel和UserFormPanel。 UserGridPanel的操作需要创建一个模型和Store。UserGridPanel和UserFormPanel将被渲染到一个名称为 UserEditorWindow的窗口，它扩张自ExtJS的Window类。所有这些类都会在命名空间MyApp下。</p> <p>在开始编码前，首先要确定目录结构，以下是使用命名空间组织的文件夹：</p> <p><img alt="002" src="http://mhzg.net/upload/2011/6/3010204684.jpg" height="246" width="269" /></p> <p>从上图可以看到，MyApp目录已经按照命名空间进拆分成几个目录。在完成开发的时候，我们的应用将会有一个如下图所示的内部依赖运行模型。</p> <p>（<span style="font-family: 宋体; color: #ff0000">尽管应用的目录构成很象ExtJS 4 MVC架构，事实上示例并没有使用它 </span>）</p> <p><img style="width: 600px;" alt="003" src="http://mhzg.net/upload/2011/6/30102047506.jpg" height="356" width="635" /></p> <p>现在开始编写index.html文件，这里需要包含应用需要的启动文件和应用的根文件(app.js)。</p> <div contenteditable="false"> <div contenteditable="false"> <div>&nbsp;</div> <ol><li><span>&lt;!DOCTYPE&nbsp;HTML&nbsp;PUBLIC&nbsp;&nbsp;"-//W3C//DTD&nbsp;HTML&nbsp;4.01//EN"&nbsp;"http://www.w3.org/TR/html4/strict.dtd"&gt; </span></li><li>&lt;html&gt; </li><li>&lt;head&gt; </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;title&gt;Ext&nbsp;4&nbsp;Loader&lt;/title&gt; </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;link&nbsp;rel="stylesheet"&nbsp;type="text/css"&nbsp;&nbsp;href="js/ext-4.0.1/resources/css/ext-all.css"&nbsp;/&gt; </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;script&nbsp;type="text/javascript"&nbsp;src="js/ext-4.0.1/ext-debug.js"&gt;&lt;/script&gt; </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;script&nbsp;type="text/javascript"&nbsp;src="js/MyApp/app.js"&gt;&lt;/script&gt; </li><li>&lt;/head&gt; </li><li>&lt;body&gt; </li><li>&lt;/body&gt; </li><li>&lt;/html&gt;</li></ol> </div>  <div contenteditable="false"> </div> </div> <p>index.html文件中需要使用link标记包含ExtJS 4的样式文件。包含ext-debug.js文件的javascript标记可能要修改多次，ext-all-debug.js文件是开发调试用的，而ext-all.js则是在发布产品时使用的。</p> <p>这里有几个选择，每个选择都有优缺点。</p> <p>以下是这些文件的说明：</p> <p>ext-all-debug-w-comments.js：带注释的的完整调试版本。文件比较大，加载时间比较长。</p> <p>ext-all-debug.js : 不带注释的完整调试版本。文件也比较大，但很适合调试。</p> <p>ext-all.js ；压缩后的完整版本，文件比较小。使用该版本调试很困难，因此一般在发布产品时才使用。</p> <p>ext-debug.js ： 该文件只包含ExtJS基础架构和空的结构。使用该文件，可以实现ExtJS类文件的远程加载，而且提供了很好的调试体验，不过代价是相当的慢。</p> <p>ext.js : ext-debug.js的压缩版本。</p> <p>我们的index.html将使用ext-debug.js文件，这是实现动态加载所需的最低要求。最后，我们将展示如何使用ext-all版本获取最好的结果。</p> <p>由于UserGridPanel 类要求模型和Store，因而，要先定义编写这些支持类。现在开始编写模型和Store：</p> <div contenteditable="false"> <div contenteditable="false"> <div>&nbsp;</div> <ol><li><span>Ext.define('MyApp.models.UserModel',&nbsp;{ </span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;extend&nbsp;&nbsp;&nbsp;:&nbsp;'Ext.data.Model', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;fields&nbsp;&nbsp;&nbsp;:&nbsp;[ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'firstName', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'lastName', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'dob', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'userName'</li><li>&nbsp;&nbsp;&nbsp;&nbsp;] </li><li>});</li></ol> </div>  <div contenteditable="false"> </div> </div> <p>以上代码扩展自Ext.data.Model，将创建UserModel 类。因为扩展自Ext.data.Model类，ExtJS会自动加载它，并在它加载后创建UserModel类。</p> <p>下一步，要创建扩展自Ext.data.Store的UserStore 类：</p> <div contenteditable="false"> <div contenteditable="false"> <div>&nbsp;</div> <ol><li><span>Ext.define('MyApp.stores.UserStore',&nbsp;{ </span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;extend&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;'Ext.data.Store', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;singleton&nbsp;:&nbsp;true, </li><li>&nbsp;&nbsp;&nbsp;&nbsp;requires&nbsp;&nbsp;:&nbsp;['MyApp.models.UserModel'], </li><li>&nbsp;&nbsp;&nbsp;&nbsp;model&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;'MyApp.models.UserModel', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;constructor&nbsp;:&nbsp;function()&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.callParent(arguments); </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.loadData([ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;firstName&nbsp;:&nbsp;'Louis', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lastName&nbsp;&nbsp;:&nbsp;'Dobbs', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dob&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;'12/21/34', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;userName&nbsp;&nbsp;:&nbsp;'ldobbs'</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}, </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;firstName&nbsp;:&nbsp;'Sam', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lastName&nbsp;&nbsp;:&nbsp;'Hart', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dob&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;'03/23/54', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;userName&nbsp;&nbsp;:&nbsp;'shart'</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}, </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;firstName&nbsp;:&nbsp;'Nancy', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lastName&nbsp;&nbsp;:&nbsp;'Garcia', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dob&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;'01/18/24', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;userName&nbsp;&nbsp;:&nbsp;'ngarcia'</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]); </li><li>&nbsp;&nbsp;&nbsp;&nbsp;} </li><li>});</li></ol> </div>  <div contenteditable="false"> </div> </div> <p>当创建单件模式的UserStore 时，需要在UserStore原型添加一个requires关键字，它会在类实例化前，为ExtJS提供一个类的请求列表。在这个示例，列表中只有UserModel 一个请求类。</p> <p>（实际上， 在Store的原型中定义了model为UserModel 类，ExtJS就会自动加载它。在requires关键字中列出的目的，是希望你的代码能自文档化（self-documenting），从而提醒你，UserModel 类是必须的 ）</p> <p>好了，UserGridPanel视图需要的基类已经创建了，现在可以创建UserGridPanel类了：</p> <div contenteditable="false"> <div contenteditable="false"> <div>&nbsp;</div> <ol><li><span>Ext.define('MyApp.views.UsersGridPanel',&nbsp;{ </span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;extend&nbsp;&nbsp;&nbsp;:&nbsp;'Ext.grid.Panel', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;alias&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;'widget.UsersGridPanel', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;requires&nbsp;:&nbsp;['MyApp.stores.UserStore'], </li><li>&nbsp;&nbsp;&nbsp;&nbsp;initComponent&nbsp;:&nbsp;function()&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.store&nbsp;&nbsp;&nbsp;=&nbsp;MyApp.stores.UserStore; </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.columns&nbsp;=&nbsp;this.buildColumns(); </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.callParent(); </li><li>&nbsp;&nbsp;&nbsp;&nbsp;}, </li><li>&nbsp;&nbsp;&nbsp;&nbsp;buildColumns&nbsp;:&nbsp;function()&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;[ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;header&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;'First&nbsp;Name', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataIndex&nbsp;:&nbsp;'firstName', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;70 </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}, </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;header&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;'Last&nbsp;Name', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataIndex&nbsp;:&nbsp;'lastName', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;70 </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}, </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;header&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;'DOB', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataIndex&nbsp;:&nbsp;'dob', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;70 </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}, </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;header&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;'Login', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataIndex&nbsp;:&nbsp;'userName', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;70 </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]; </li><li>&nbsp;&nbsp;&nbsp;&nbsp;} </li><li>});</li></ol> </div>  <div contenteditable="false"> </div> </div> <p>在上面代码中，要注意requires 关键字，看它是怎么增加UserStore 为请求类的。刚才，我们为GridPanel扩展和Store扩展配置了一个直接的依赖关系。</p> <p>下一步，我们要创建FormPanel扩展：</p> <div contenteditable="false"> <div contenteditable="false"> <div>&nbsp;</div> <ol><li><span>Ext.define('MyApp.views.UserFormPanel',&nbsp;{ </span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;extend&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;'Ext.form.Panel', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;alias&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;'widget.UserFormPanel', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;bodyStyle&nbsp;&nbsp;&nbsp;:&nbsp;'padding:&nbsp;10px;&nbsp;background-color:&nbsp;#DCE5F0;'&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+&nbsp;'&nbsp;border-left:&nbsp;none;', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;defaultType&nbsp;:&nbsp;'textfield', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;defaults&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;anchor&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;'-10', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;labelWidth&nbsp;:&nbsp;70 </li><li>&nbsp;&nbsp;&nbsp;&nbsp;}, </li><li>&nbsp;&nbsp;&nbsp;&nbsp;initComponent&nbsp;:&nbsp;function()&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.items&nbsp;=&nbsp;this.buildItems(); </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.callParent(); </li><li>&nbsp;&nbsp;&nbsp;&nbsp;}, </li><li>&nbsp;&nbsp;&nbsp;&nbsp;buildItems&nbsp;:&nbsp;function()&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;[ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fieldLabel&nbsp;:&nbsp;'First&nbsp;Name', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;'firstName'</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}, </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fieldLabel&nbsp;:&nbsp;'Last&nbsp;Name', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;'lastName'</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}, </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fieldLabel&nbsp;:&nbsp;'DOB', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;'dob'</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}, </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fieldLabel&nbsp;:&nbsp;'User&nbsp;Name', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;'userName'</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]; </li><li>&nbsp;&nbsp;&nbsp;&nbsp;} </li><li>});</li></ol> </div>  <div contenteditable="false"> </div> </div> <p>因为UserForm 不需要从服务器端请求任何类，因而不需要添加requires定义。</p> <p>应用快完成了，现在需要创建UserEditorWindow类和运行应用的app.js。以下是UserEditorWindow类的代码。因为要将Grid和表单绑定在一起，因而类代码有点长，请见谅：</p> <div contenteditable="false"> <div contenteditable="false"> <div>&nbsp;</div> <ol><li><span>Ext.define('MyApp.views.UserEditorWindow',&nbsp;{ </span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;extend&nbsp;&nbsp;&nbsp;:&nbsp;'Ext.Window', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;requires&nbsp;:&nbsp;['MyApp.views.UsersGridPanel','MyApp.views.UserFormPanel'], </li><li>&nbsp;&nbsp;&nbsp;&nbsp;height&nbsp;:&nbsp;200, </li><li>&nbsp;&nbsp;&nbsp;&nbsp;width&nbsp;&nbsp;:&nbsp;550, </li><li>&nbsp;&nbsp;&nbsp;&nbsp;border&nbsp;:&nbsp;false, </li><li>&nbsp;&nbsp;&nbsp;&nbsp;layout&nbsp;:&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type&nbsp;&nbsp;:&nbsp;'hbox', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;align&nbsp;:&nbsp;'stretch'</li><li>&nbsp;&nbsp;&nbsp;&nbsp;}, </li><li>&nbsp;&nbsp;&nbsp;&nbsp;initComponent&nbsp;:&nbsp;function()&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.items&nbsp;&nbsp;&nbsp;=&nbsp;this.buildItems(); </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.buttons&nbsp;=&nbsp;this.buildButtons(); </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.callParent(); </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.on('afterrender',&nbsp;this.onAfterRenderLoadForm,&nbsp;this); </li><li>&nbsp;&nbsp;&nbsp;&nbsp;}, </li><li>&nbsp;&nbsp;&nbsp;&nbsp;buildItems&nbsp;:&nbsp;function()&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;[ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xtype&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;'UsersGridPanel', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;280, </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;itemId&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;'userGrid', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;listeners&nbsp;:&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scope&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;this, </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;itemclick&nbsp;:&nbsp;this.onGridItemClick </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}, </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xtype&nbsp;&nbsp;:&nbsp;'UserFormPanel', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;itemId&nbsp;:&nbsp;'userForm', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flex&nbsp;&nbsp;&nbsp;:&nbsp;1 </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]; </li><li>&nbsp;&nbsp;&nbsp;&nbsp;}, </li><li>&nbsp;&nbsp;&nbsp;&nbsp;buildButtons&nbsp;:&nbsp;function()&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;[ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;'Save', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scope&nbsp;&nbsp;&nbsp;:&nbsp;this, </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;handler&nbsp;:&nbsp;this.onSaveBtn </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}, </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;'New', </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scope&nbsp;&nbsp;&nbsp;:&nbsp;this, </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;handler&nbsp;:&nbsp;this.onNewBtn </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]; </li><li>&nbsp;&nbsp;&nbsp;&nbsp;}, </li><li>&nbsp;&nbsp;&nbsp;&nbsp;onGridItemClick&nbsp;:&nbsp;function(view,&nbsp;record)&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;formPanel&nbsp;=&nbsp;this.getComponent('userForm'); </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;formPanel.loadRecord(record) </li><li>&nbsp;&nbsp;&nbsp;&nbsp;}, </li><li>&nbsp;&nbsp;&nbsp;&nbsp;onSaveBtn&nbsp;:&nbsp;function()&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;gridPanel&nbsp;&nbsp;=&nbsp;this.getComponent('userGrid'), </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gridStore&nbsp;&nbsp;=&nbsp;gridPanel.getStore(), </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;formPanel&nbsp;&nbsp;=&nbsp;this.getComponent('userForm'), </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;basicForm&nbsp;&nbsp;=&nbsp;formPanel.getForm(), </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currentRec&nbsp;=&nbsp;basicForm.getRecord(), </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;formData&nbsp;&nbsp;&nbsp;=&nbsp;basicForm.getValues(), </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;storeIndex&nbsp;=&nbsp;gridStore.indexOf(currentRec), </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;key; </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//loop&nbsp;through&nbsp;the&nbsp;record&nbsp;and&nbsp;set&nbsp;values </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currentRec.beginEdit(); </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(key&nbsp;in&nbsp;formData)&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currentRec.set(key,&nbsp;formData[key]); </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currentRec.endEdit(); </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currentRec.commit(); </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Add&nbsp;and&nbsp;select </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(storeIndex&nbsp;==&nbsp;-1)&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gridStore.add(currentRec); </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gridPanel.getSelectionModel().select(currentRec) </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} </li><li>&nbsp;&nbsp;&nbsp;&nbsp;}, </li><li>&nbsp;&nbsp;&nbsp;&nbsp;onNewBtn&nbsp;:&nbsp;function()&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;gridPanel&nbsp;=&nbsp;this.getComponent('userGrid'), </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;formPanel&nbsp;=&nbsp;this.getComponent('userForm'), </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newModel&nbsp;&nbsp;=&nbsp;Ext.ModelManager.create({},&nbsp; </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'MyApp.models.UserModel'); </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gridPanel.getSelectionModel().clearSelections(); </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;formPanel.getForm().loadRecord(newModel) </li><li>&nbsp;&nbsp;&nbsp;&nbsp;}, </li><li>&nbsp;&nbsp;&nbsp;&nbsp;onAfterRenderLoadForm&nbsp;:&nbsp;function()&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.onNewBtn(); </li><li>&nbsp;&nbsp;&nbsp;&nbsp;} </li><li>});</li></ol> </div>  <div contenteditable="false"> </div> </div> <p>UserEditorWindow 的代码包含了许多东西用来管理UserGridPanel和UserFormPanel类的整个绑定的声明周期。为了指示ExtJS在创建该类前加载这两个类，必须在requires列表里列出它们。</p> <p>现在完成最后一个文件app.js。为了最大限度地提高我们的学习，将有3次修改要做。首先从最简单配置开始，然后逐步添加。</p> <div contenteditable="false"> <div contenteditable="false"> <div>&nbsp;</div> <ol><li><span>Ext.Loader.setPath('MyApp',&nbsp;'js/MyApp'); </span></li><li>Ext.onReady(function()&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;Ext.create('MyApp.views.UserEditorWindow').show(); </li><li>});</li></ol> </div>  <div contenteditable="false"> </div> </div> <p>首先，app.js会在ExtJS添加MyApp命名空间的路径，这可通过调用Ext.loader.setPath方法实现，方法的第1个参数是命名空间，然后是加载文件与页面的相对路径。</p> <p>下一步，调用Ext.OnReady方法，传递一个包含Ext.create的匿名函数。Ext.create会在ExtJS  4.0初始化之后执行，以字符串形式传递的UserEditorWindow  类会被实例化。因为不需要指向实例和希望立即显示它，因而在后面串接了show方法的调用。</p> <p>如果你打开这个页面（<a href="http://moduscreate.com/senchaarticles/01/pass1.html">http://moduscreate.com/senchaarticles/01/pass1.html</a> ），你会看到UI渲染，但很慢，并且ExtJS会在Firebug中显示以下警告信息：</p> <p><img alt="004" src="http://mhzg.net/upload/2011/6/30103430116.jpg" height="54" width="543" /></p> <p>ExtJS提示我们没有使用加载系统最优化的方式。这是第二步要讨论的问题。然后，这是一个好的学习机会，要好好理由。</p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 我们需要配置Firebug在控制台中显示XHR请求，以便在控制台中看到所有请求，而不需要切换到网络面板。这样，我们不单可以观察到类依赖系统的工作情况，还可以从所有ExtJS类加载的文件中通过过滤方式找到我们要求这样的文件。</p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 在Firebug控制台过滤输入框中输入&#8220;User&#8221;，你会看到下图所示的结果。</p> <p><img style="width: 600px;" alt="005" src="http://mhzg.net/upload/2011/6/30103431569.jpg" height="177" width="636" />从图中可以看到，UserEditorWindow类第一个被加载，接着请求UserGridPanel。UserGridPanel 要求UserStore和UserModel类。最后加载UserFormPanel 类。</p> <p>我刚才提到，ExtJS提示了我们没有使用加载系统最优化的方式。这是因为依赖是在Ext.OnReady触发加载之后通过同步XHR请求确定的，而这不是有效的方式且难于调试。</p> <p>未来修正这个问题，可以修改app.js指示ExtJS先加载我们定义的类，这样即可提供性能又便于调试：</p> <div contenteditable="false"> <div contenteditable="false"> <div>&nbsp;</div> <ol><li><span>Ext.Loader.setPath('MyApp',&nbsp;'js/MyApp'); </span></li><li>Ext.require('MyApp.views.UserEditorWindow'); </li><li>Ext.onReady(function()&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;Ext.create('MyApp.views.UserEditorWindow').show(); </li><li>});</li></ol> </div>  <div contenteditable="false"> </div> </div> <p>为了快速加载我们定义的类和避免调试信息，可简单的在Ext.onReady前调用Ext.require，只是ExtJS请求 UserEditorWindow类。这将会让ExtJS在文档HEAD标记内注入一个script标记，运行资源在Ext.OnReady前加载。</p> <p>查看<a href="http://moduscreate.com/senchaarticles/01/pass2.html">http://moduscreate.com/senchaarticles/01/pass2.html</a> 可看到它是如何工作地。在页面加载后，你会注意到ExtJS没有在控制台显示警告信息了。</p> <p>我们所做的是让ExtJS框架和应用类延迟加载。虽然这样做调试很好，但是对于需要快速调试的情况，页面渲染时间会让你感到痛苦。为什么？</p> <p>原因很简单，因为这需要加载许多资源文件。在示例中，ExtJS发送了193个Javascript资源请求到web服务器，还有部分是在缓存中的：</p> <p><img style="width: 600px;" alt="006" src="http://mhzg.net/upload/2011/6/30103433569.jpg" height="283" width="636" /></p> <p>我们创建了6个Javascript文件（5个类文件和app.js），这意味着加载要求的ExtJS文件有187个请求。当你在本地做开发的时候，这个方案可行，但不是最理想的和效果最好的。</p> <p>解决这个问题，我们可以使用折中方案，通过ext-all-debug加载ExtJS框架，动态加载我们的类文件。要实现这个，需要修改两个文件。</p> <div contenteditable="false"> <div contenteditable="false"> <div>&nbsp;</div> <ol><li><span>&lt;script&nbsp;type="text/javascript"&nbsp;&nbsp;src="js/ext-4.0.1/ext-all-debug.js"&gt;&lt;/script&gt; </span></li></ol> </div>  <div contenteditable="false"> </div> </div> <p>首先，需要修改Index.html，使用ext-all-debug.js替换ext.debug.js。</p> <p>接着，修改app.js，开启Ext.Loader：</p> <div contenteditable="false"> <div contenteditable="false"> <div>&nbsp;</div> <ol><li><span>(function()&nbsp;{ </span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;Ext.Loader.setConfig({ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;enabled&nbsp;:&nbsp;true, </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;paths&nbsp;&nbsp;&nbsp;:&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyApp&nbsp;:&nbsp;'js/MyApp'</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp; </li><li>&nbsp;&nbsp;&nbsp;&nbsp;}); </li><li>&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;Ext.require('MyApp.views.UserEditorWindow'); </li><li>&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;Ext.onReady(function()&nbsp;{ </li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ext.create('MyApp.views.UserEditorWindow').show(); </li><li>&nbsp;&nbsp;&nbsp;&nbsp;}); </li><li>})();</li></ol> </div>  <div contenteditable="false"> </div> </div> <p>通过调用Loader.setConfig可开启Ext.Loader，需要传递一个匿名对象，它的eanbled属性设置为true，而命名空间设置为路径映射。</p> <p>通过编辑app.js，在本地开发环境下，应用将会在1秒内完成加载和渲染。</p> <p><img style="width: 600px;" alt="007" src="http://mhzg.net/upload/2011/6/30103436116.png" height="166" width="713" /></p> <p>源代码下载地址：<a title="http://moduscreate.com/senchaarticles/01/files.zip" href="http://moduscreate.com/senchaarticles/01/files.zip">http://moduscreate.com/senchaarticles/01/files.zip</a></p> <p>译文链接地址：<a target="_blank" href="http://blog.csdn.net/tianxiaode/archive/2011/06/28/6571589.aspx">blog.csdn.net/tianxiaode/archive/2011/06/28/6571589.aspx</a></p> </div></div><img src ="http://www.blogjava.net/zhaochengming/aggbug/355233.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhaochengming/" target="_blank">helloworld2008</a> 2011-07-28 15:46 <a href="http://www.blogjava.net/zhaochengming/archive/2011/07/28/355233.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ExtJs xtype一览</title><link>http://www.blogjava.net/zhaochengming/archive/2011/07/28/355230.html</link><dc:creator>helloworld2008</dc:creator><author>helloworld2008</author><pubDate>Thu, 28 Jul 2011 07:37:00 GMT</pubDate><guid>http://www.blogjava.net/zhaochengming/archive/2011/07/28/355230.html</guid><wfw:comment>http://www.blogjava.net/zhaochengming/comments/355230.html</wfw:comment><comments>http://www.blogjava.net/zhaochengming/archive/2011/07/28/355230.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhaochengming/comments/commentRss/355230.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhaochengming/services/trackbacks/355230.html</trackback:ping><description><![CDATA[<div><table align="center" border="1" cellpadding="2" width="750"><tbody><tr><td colspan="3"><strong>基本组件：</strong></td> </tr> <tr style="font-weight: bold; color: black; font-style: italic; background-color: #f5f9f0;"> <td>xtype</td> <td>Class</td> <td>描述</td> </tr> <tr> <td>button</td> <td>Ext.Button</td> <td>按钮</td> </tr> <tr> <td>splitbutton</td> <td>Ext.SplitButton</td> <td>带下拉菜单的按钮</td> </tr> <tr> <td>cycle</td> <td>Ext.CycleButton</td> <td>带下拉选项菜单的按钮</td> </tr> <tr> <td>buttongroup</td> <td>Ext.ButtonGroup</td> <td>编组按钮(Since 3.0)</td> </tr> <tr> <td>slider</td> <td>Ext.Slider</td> <td>滑动条</td> </tr> <tr> <td>progress</td> <td>Ext.ProgressBar</td> <td>进度条</td> </tr> <tr> <td>statusbar</td> <td>Ext.StatusBar</td> <td>状态条，2.2加进来，3.0 又去了</td> </tr> <tr> <td>colorpalette</td> <td>Ext.ColorPalette</td> <td>调色板</td> </tr> <tr> <td>datepicker</td> <td>Ext.DatePicker</td> <td>日期选择面板</td> </tr> <tr> <td colspan="3">&nbsp;</td> </tr> <tr> <td colspan="3">容器及数据类组件</td> </tr> <tr style="font-weight: bold; color: black; font-style: italic; background-color: #f5f9f0;"> <td style="color: black;">xtype</td> <td>Class</td> <td>描述</td> </tr> <tr> <td>window</td> <td>Ext.Window</td> <td>窗口</td> </tr> <tr> <td>viewport</td> <td>Ext.ViewPort</td> <td>视口，即浏览器的视口，能随之伸缩</td> </tr> <tr> <td>box</td> <td>Ext.BoxComponent</td> <td>盒子组件，相当于一个 &lt;div&gt;</td> </tr> <tr> <td>component</td> <td>Ext.Component</td> <td>组件</td> </tr> <tr> <td>container</td> <td>Ext.Container</td> <td>容器</td> </tr> <tr> <td>panel</td> <td>Ext.Panel</td> <td>面板</td> </tr> <tr> <td>tabpanel</td> <td>Ext.TabPanel</td> <td>选项面板</td> </tr> <tr> <td>treepanel</td> <td>Ext.tree.TreePanel</td> <td>树型面板</td> </tr> <tr> <td>flash</td> <td>Ext.FlashComponent</td> <td>显示 Flash 的组件(Since 3.0)</td> </tr> <tr> <td>grid</td> <td>Ext.grid.GridPanel</td> <td>表格</td> </tr> <tr> <td>editorgrid</td> <td>Ext.grid.EditorGridPanel</td> <td>可编辑的表格</td> </tr> <tr> <td>propertygrid</td> <td>Ext.grid.PropertyGrid</td> <td>属性表格</td> </tr> <tr> <td>editor</td> <td>Ext.Editor</td> <td>编辑器</td> </tr> <tr> <td>dataview</td> <td>Ext.DataView</td> <td>数据显示视图</td> </tr> <tr> <td>listview</td> <td>Ext.ListView</td> <td>列表视图</td> </tr> <tr> <td colspan="3">&nbsp;</td> </tr> <tr> <td colspan="3">工具栏组件：</td> </tr> <tr style="font-weight: bold; color: black; font-style: italic; background-color: #f5f9f0;"> <td>xtype</td> <td>Class</td> <td>描述</td> </tr> <tr> <td>paging</td> <td>Ext.PagingToolbar</td> <td>分页工具条</td> </tr> <tr> <td>toolbar</td> <td>Ext.Toolbar</td> <td>工具栏</td> </tr> <tr> <td>tbbutton</td> <td>Ext.Toolbar.Button</td> <td>工具栏按钮</td> </tr> <tr> <td>tbfill</td> <td>Ext.Toolbar.Fill</td> <td>工具栏填充区</td> </tr> <tr> <td>tbitem</td> <td>Ext.Toolbar.Item</td> <td>工具条项目</td> </tr> <tr> <td>tbseparator</td> <td>Ext.Toolbar.Separator</td> <td>工具栏分隔符</td> </tr> <tr> <td>tbspacer</td> <td>Ext.Toolbar.Spacer</td> <td>工具栏空白</td> </tr> <tr> <td>tbsplit</td> <td>Ext.Toolbar.SplitButton</td> <td>工具栏分隔按钮</td> </tr> <tr> <td>tbtext</td> <td>Ext.Toolbar.TextItem</td> <td>工具栏文本项</td> </tr> <tr> <td colspan="3">&nbsp;</td> </tr> <tr> <td colspan="3">菜单组件：</td> </tr> <tr style="font-weight: bold; color: black; font-style: italic; background-color: #f5f9f0;"> <td>xtype</td> <td>Class</td> <td>描述</td> </tr> <tr> <td>menu</td> <td>Ext.menu.Menu</td> <td>菜单</td> </tr> <tr> <td>colormenu</td> <td>Ext.menu.ColorMenu</td> <td>颜色选择菜单</td> </tr> <tr> <td>datemenu</td> <td>Ext.menu.DateMenu</td> <td>日期选择菜单</td> </tr> <tr> <td>menubaseitem</td> <td>BaseItem</td> <td>&nbsp;</td> </tr> <tr> <td>menucheckitem</td> <td>Ext.menu.CheckItem</td> <td>选项菜单项</td> </tr> <tr> <td>menuitem</td> <td>Ext.menu.Item</td> <td>&nbsp;</td> </tr> <tr> <td>menuseparator</td> <td>Ext.menu.Separator</td> <td>菜单分隔线</td> </tr> <tr> <td>menutextitem</td> <td>Ext.menu.TextItem</td> <td>文本菜单项</td> </tr> <tr> <td colspan="3">&nbsp;</td> </tr> <tr> <td colspan="3">表单及表单域组件：</td> </tr> <tr style="font-weight: bold; color: black; font-style: italic; background-color: #f5f9f0;"> <td>xtype</td> <td>Class</td> <td>描述</td> </tr> <tr> <td>form</td> <td>Ext.FormPanel/Ext.form.FormPanel</td> <td>表单面板</td> </tr> <tr> <td>checkbox</td> <td>Ext.form.Checkbox</td> <td>多选框</td> </tr> <tr> <td>combo</td> <td>Ext.form.ComboBox</td> <td>下拉框</td> </tr> <tr> <td>datefield</td> <td>Ext.form.DateField</td> <td>日期选择项</td> </tr> <tr> <td>timefield</td> <td>Ext.form.TimeField</td> <td>时间录入项</td> </tr> <tr> <td>field</td> <td>Ext.form.Field</td> <td>表单字段</td> </tr> <tr> <td>fieldset</td> <td>Ext.form.FieldSet</td> <td>表单字段组</td> </tr> <tr> <td>hidden</td> <td>Ext.form.Hidden</td> <td>表单隐藏域</td> </tr> <tr> <td>htmleditor</td> <td>Ext.form.HtmlEditor</td> <td>HTML 编辑器</td> </tr> <tr> <td>label</td> <td>Ext.form.Label</td> <td>标签</td> </tr> <tr> <td>numberfield</td> <td>Ext.form.NumberField</td> <td>数字编辑器</td> </tr> <tr> <td>radio</td> <td>Ext.form.Radio</td> <td>单选按钮</td> </tr> <tr> <td>textarea</td> <td>Ext.form.TextArea</td> <td>多行文本框</td> </tr> <tr> <td>textfield</td> <td>Ext.form.TextField</td> <td>表单文本框</td> </tr> <tr> <td>trigger</td> <td>Ext.form.TriggerField</td> <td>触发录入项</td> </tr> <tr> <td>checkboxgroup</td> <td>Ext.form.CheckboxGroup</td> <td>编组的多选框(Since 2.2)</td> </tr> <tr> <td>displayfield</td> <td>Ext.form.DisplayField</td> <td>仅显示，不校验/不被提交的文本框</td> </tr> <tr> <td>radiogroup</td> <td>Ext.form.RadioGroup</td> <td>编组的单选按钮(Since 2.2)</td> </tr> <tr> <td colspan="3">&nbsp;</td> </tr> <tr> <td colspan="3">图表组件：</td> </tr> <tr style="font-weight: bold; color: black; font-style: italic; background-color: #f5f9f0;"> <td>xtype</td> <td>Class</td> <td>描述</td> </tr> <tr> <td>chart</td> <td>Ext.chart.Chart</td> <td>图表组件</td> </tr> <tr> <td>barchart</td> <td>Ext.chart.BarChart</td> <td>柱状图</td> </tr> <tr> <td>cartsianchart</td> <td>Ext.chart.CartesianChart</td> <td>&nbsp;</td> </tr> <tr> <td>columnchart</td> <td>Ext.chart.ColumnChart</td> <td>&nbsp;</td> </tr> <tr> <td>linechart</td> <td>Ext.chart.LineChart</td> <td>连线图</td> </tr> <tr> <td>piechart</td> <td>Ext.chart.PieChart</td> <td>扇形图</td> </tr> <tr> <td colspan="3">&nbsp;</td> </tr> <tr> <td colspan="3">数据集 Store：</td> </tr> <tr style="font-weight: bold; color: black; font-style: italic; background-color: #f5f9f0;"> <td>xtype</td> <td>Class</td> <td>描述</td> </tr> <tr> <td>arraystore</td> <td>Ext.data.ArrayStore</td> <td>&nbsp;</td> </tr> <tr> <td>directstore</td> <td>Ext.data.DirectStore</td> <td>&nbsp;</td> </tr> <tr> <td>groupingstore</td> <td>Ext.data.GroupingStore</td> <td>&nbsp;</td> </tr> <tr> <td>jsonstore</td> <td>Ext.data.JsonStore</td> <td>&nbsp;</td> </tr> <tr> <td>simplestore</td> <td>Ext.data.SimpleStore</td> <td>&nbsp;</td> </tr> <tr> <td>store</td> <td>Ext.data.Store</td> <td>&nbsp;</td> </tr> <tr> <td>xmlstore</td> <td>Ext.data.XmlStore</td> <td>&nbsp;</td></tr></tbody></table></div><img src ="http://www.blogjava.net/zhaochengming/aggbug/355230.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhaochengming/" target="_blank">helloworld2008</a> 2011-07-28 15:37 <a href="http://www.blogjava.net/zhaochengming/archive/2011/07/28/355230.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring aop execution pointcut</title><link>http://www.blogjava.net/zhaochengming/archive/2011/07/25/355006.html</link><dc:creator>helloworld2008</dc:creator><author>helloworld2008</author><pubDate>Mon, 25 Jul 2011 09:36:00 GMT</pubDate><guid>http://www.blogjava.net/zhaochengming/archive/2011/07/25/355006.html</guid><wfw:comment>http://www.blogjava.net/zhaochengming/comments/355006.html</wfw:comment><comments>http://www.blogjava.net/zhaochengming/archive/2011/07/25/355006.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhaochengming/comments/commentRss/355006.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhaochengming/services/trackbacks/355006.html</trackback:ping><description><![CDATA[<span class="tcnt"><font size="5" face="微软雅黑"><br />
<p>Spring AOP 用户可能会经常使用 <code>execution</code> pointcut designator。执行表达式的格式如下：</p><pre>execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern) throws-pattern?)
</pre>
<p><span style="font-size: 14pt">除了返回类型模式（上面代码片断中的ret-type-pattern），名字模式和参数模式以外，所有的部分都是可选的。 返回类型模式决定了方法的返回类型必须依次匹配一个连接点。 你会使用的最频繁的返回类型模式是 </span><code><span style="font-size: 14pt">*</span></code><span style="font-size: 14pt"> ，它代表了匹配任意的返回类型。 一个全称限定的类型名将只会匹配返回给定类型的方法。名字模式匹配的是方法名。 你可以使用 </span><code><span style="font-size: 14pt">*</span></code><span style="font-size: 14pt"> 通配符作为所有或者部分命名模式。 参数模式稍微有点复杂：</span><code><span style="font-size: 14pt">()</span></code><span style="font-size: 14pt"> 匹配了一个不接受任何参数的方法， 而 </span><code><span style="font-size: 14pt">(..)</span></code><span style="font-size: 14pt"> 匹配了一个接受任意数量参数的方法（零或者更多）。 模式 </span><code><span style="font-size: 14pt">(*)</span></code><span style="font-size: 14pt"> 匹配了一个接受一个任何类型的参数的方法。 模式 </span><code><span style="font-size: 14pt">(*,String)</span></code><span style="font-size: 14pt"> 匹配了一个接受两个参数的方法，第一个可以是任意类型，第二个则必须是String类型。</span></p>
<p>下面给出一些常见切入点表达式的例子。</p>
<ul type="disc"><li>
<p>任意公共方法的执行：</p><pre>execution(public * *(..))</pre></li><li>
<p>任何一个以&#8220;set&#8221;开始的方法的执行：</p><pre>execution(* set*(..))</pre></li><li>
<p><code>AccountService</code> 接口的任意方法的执行：</p><pre>execution(* com.xyz.service.AccountService.*(..))</pre></li><li>
<p>定义在service包里的任意方法的执行：</p><pre>execution(* com.xyz.service.*.*(..))</pre></li><li>
<p>定义在service包或者子包里的任意方法的执行：</p><pre>execution(* com.xyz.service..*.*(..))</pre></li></ul><pre>&nbsp;<p>within(com.xyz.service.*)在service包或者子包里的任意连接点（在Spring AOP中只是方法执行） ：&nbsp;&nbsp; </p><p>within(com.xyz.service..*)实现了 AccountService 接口的代理对象的任意连接点（在Spring AOP中只是方法执行） ：&nbsp;&nbsp; </p><p>this(com.xyz.service.AccountService)'this'在binding form中用的更多：- 请常见以下讨论通知的章节中关于如何使得代理对象可以在通知体内访问到的部分。&nbsp;&nbsp;&nbsp; <br />实现了 AccountService 接口的目标对象的任意连接点（在Spring AOP中只是方法执行） ：&nbsp;&nbsp; <br />&nbsp; <br />target(com.xyz.service.AccountService)'target'在binding form中用的更多：- 请常见以下讨论通知的章节中关于如何使得目标对象可以在通知体内访问到的部分。&nbsp;&nbsp;&nbsp; <br />任何一个只接受一个参数，且在运行时传入的参数实现了 Serializable 接口的连接点 （在Spring AOP中只是方法执行）&nbsp;&nbsp;&nbsp; <br />&nbsp; <br />args(java.io.Serializable)'args'在binding form中用的更多：- 请常见以下讨论通知的章节中关于如何使得方法参数可以在通知体内访问到的部分。&nbsp;&nbsp;&nbsp; <br />请注意在例子中给出的切入点不同于 execution(* *(java.io.Serializable))： args只有在动态运行时候传入参数是可序列化的（Serializable）才匹配，而execution 在传入参数的签名声明的类型实现了 Serializable 接口时候匹配。&nbsp;&nbsp; <br />&nbsp; <br />有一个 @Transactional 注解的目标对象中的任意连接点（在Spring AOP中只是方法执行）&nbsp;&nbsp;&nbsp; </p><p>@target(org.springframework.transaction.annotation.Transactional)'@target' 也可以在binding form中使用：请常见以下讨论通知的章节中关于如何使得annotation对象可以在通知体内访问到的部分。&nbsp;&nbsp;&nbsp; <br />任何一个目标对象声明的类型有一个 @Transactional 注解的连接点（在Spring AOP中只是方法执行）&nbsp;&nbsp; </p><p>@within(org.springframework.transaction.annotation.Transactional)'@within'也可以在binding form中使用：- 请常见以下讨论通知的章节中关于如何使得annotation对象可以在通知体内访问到的部分。&nbsp;&nbsp;&nbsp; <br />任何一个执行的方法有一个 @Transactional annotation的连接点（在Spring AOP中只是方法执行）&nbsp;&nbsp;&nbsp; </p><p>@annotation(org.springframework.transaction.annotation.Transactional)'@annotation' 也可以在binding form中使用：- 请常见以下讨论通知的章节中关于如何使得annotation对象可以在通知体内访问到的部分。&nbsp;&nbsp;&nbsp; <br />任何一个接受一个参数，并且传入的参数在运行时的类型实现了 @Classified annotation的连接点（在Spring AOP中只是方法执行）&nbsp;&nbsp;&nbsp; <br />&nbsp;<br />@args(com.xyz.security.Classified)'@args'也可以在binding form中使用：- 请常见以下讨论通知的章节中关于如何使得annotation对象可以在通知体内访问到的部分。</p></pre></font></span><img src ="http://www.blogjava.net/zhaochengming/aggbug/355006.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhaochengming/" target="_blank">helloworld2008</a> 2011-07-25 17:36 <a href="http://www.blogjava.net/zhaochengming/archive/2011/07/25/355006.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>