﻿<?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-一手的小窝窝-文章分类-OTHER</title><link>http://www.blogjava.net/strive/category/17734.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 04 May 2007 04:00:57 GMT</lastBuildDate><pubDate>Fri, 04 May 2007 04:00:57 GMT</pubDate><ttl>60</ttl><item><title>我的网站开通了</title><link>http://www.blogjava.net/strive/articles/115276.html</link><dc:creator>一手的小窝窝</dc:creator><author>一手的小窝窝</author><pubDate>Fri, 04 May 2007 02:25:00 GMT</pubDate><guid>http://www.blogjava.net/strive/articles/115276.html</guid><wfw:comment>http://www.blogjava.net/strive/comments/115276.html</wfw:comment><comments>http://www.blogjava.net/strive/articles/115276.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/strive/comments/commentRss/115276.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/strive/services/trackbacks/115276.html</trackback:ping><description><![CDATA[
		<a href="http://www.oidn.net">http://www.oidn.net</a> / <a href="http://www.oidn.cn">http://www.oidn.cn</a> 已经开通了..<img src ="http://www.blogjava.net/strive/aggbug/115276.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/strive/" target="_blank">一手的小窝窝</a> 2007-05-04 10:25 <a href="http://www.blogjava.net/strive/articles/115276.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>做 固定表头的  很好用.</title><link>http://www.blogjava.net/strive/articles/86081.html</link><dc:creator>一手的小窝窝</dc:creator><author>一手的小窝窝</author><pubDate>Thu, 07 Dec 2006 06:02:00 GMT</pubDate><guid>http://www.blogjava.net/strive/articles/86081.html</guid><wfw:comment>http://www.blogjava.net/strive/comments/86081.html</wfw:comment><comments>http://www.blogjava.net/strive/articles/86081.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/strive/comments/commentRss/86081.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/strive/services/trackbacks/86081.html</trackback:ping><description><![CDATA[
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">html</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">body</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">div </span>
				<span style="COLOR: #ff0000">style</span>
				<span style="COLOR: #0000ff">="overflow:auto;height:100px;"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">table </span>
				<span style="COLOR: #ff0000">width</span>
				<span style="COLOR: #0000ff">="100%"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">TR </span>
				<span style="COLOR: #ff0000">style</span>
				<span style="COLOR: #0000ff">="position:relative;top:expression(this.offsetParent.scrollTop);background:navy;color:white;"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">TH </span>
				<span style="COLOR: #ff0000">nowrap</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">Header A</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">TH</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">TH </span>
				<span style="COLOR: #ff0000">nowrap</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">Header B</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">TH</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">TH </span>
				<span style="COLOR: #ff0000">nowrap</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">Header C</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">TH</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">TR</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">TR</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">TD</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">A</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">TD</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">TD</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">B</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">TD</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">TD</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">C</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">TD</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">TR</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">TR</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">TD</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">A</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">TD</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">TD</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">B</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">TD</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">TD</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">C</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">TD</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">TR</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">TR</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">TD</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">A</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">TD</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">TD</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">B</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">TD</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">TD</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">C</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">TD</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">TR</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">TR</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">TD</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">A</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">TD</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">TD</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">B</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">TD</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">TD</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">C</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">TD</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">TR</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">TR</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">TD</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">A</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">TD</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">TD</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">B</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">TD</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">TD</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">C</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">TD</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">TR</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">TR</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">TD</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">A</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">TD</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">TD</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">B</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">TD</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">TD</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">C</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">TD</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">TR</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">TR</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">TD</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">A</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">TD</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">TD</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">B</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">TD</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">TD</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">C</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">TD</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">TR</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">TR</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">TD</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">A</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">TD</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">TD</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">B</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">TD</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">TD</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">C</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">TD</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">TR</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">TR</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">TD</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">A</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">TD</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">TD</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">B</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">TD</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">TD</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">C</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">TD</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">TR</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">table</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">div</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> </span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">body</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">html</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
		</div>
<img src ="http://www.blogjava.net/strive/aggbug/86081.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/strive/" target="_blank">一手的小窝窝</a> 2006-12-07 14:02 <a href="http://www.blogjava.net/strive/articles/86081.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>天天学习才有进步</title><link>http://www.blogjava.net/strive/articles/85659.html</link><dc:creator>一手的小窝窝</dc:creator><author>一手的小窝窝</author><pubDate>Tue, 05 Dec 2006 11:43:00 GMT</pubDate><guid>http://www.blogjava.net/strive/articles/85659.html</guid><wfw:comment>http://www.blogjava.net/strive/comments/85659.html</wfw:comment><comments>http://www.blogjava.net/strive/articles/85659.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/strive/comments/commentRss/85659.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/strive/services/trackbacks/85659.html</trackback:ping><description><![CDATA[     对于人类的天生性情，比如恐惧，弱点，希望及种种倾向，都要表示同情。<br />    对于任何事情，都要设身处地地思考，在考虑事情的时候，要顾虑到他人的利益。<br />   表示反对意见的时候，不应该伤害到他人。<br />   对于事情的好坏，要有迅速的辨别能力，必要时，作必要的让步。<br />   切勿固执已见，你要记住，你的意见只是千万种意见中的一种。<br />   要有真挚仁慈的态度，这种态度，能够化敌为友。<br />   无论怎样难堪的事，要乐意承受。<br />   最重要的，便是有温和，快乐，和诚恳的态度。<img src ="http://www.blogjava.net/strive/aggbug/85659.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/strive/" target="_blank">一手的小窝窝</a> 2006-12-05 19:43 <a href="http://www.blogjava.net/strive/articles/85659.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>做人还是有问题</title><link>http://www.blogjava.net/strive/articles/85654.html</link><dc:creator>一手的小窝窝</dc:creator><author>一手的小窝窝</author><pubDate>Tue, 05 Dec 2006 10:59:00 GMT</pubDate><guid>http://www.blogjava.net/strive/articles/85654.html</guid><wfw:comment>http://www.blogjava.net/strive/comments/85654.html</wfw:comment><comments>http://www.blogjava.net/strive/articles/85654.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/strive/comments/commentRss/85654.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/strive/services/trackbacks/85654.html</trackback:ping><description><![CDATA[总是在反省：总是不会做人。也许是太年轻了吧。<img src ="http://www.blogjava.net/strive/aggbug/85654.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/strive/" target="_blank">一手的小窝窝</a> 2006-12-05 18:59 <a href="http://www.blogjava.net/strive/articles/85654.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>学数据结构遇到的 广义表问题 之前没学过。</title><link>http://www.blogjava.net/strive/articles/85181.html</link><dc:creator>一手的小窝窝</dc:creator><author>一手的小窝窝</author><pubDate>Sun, 03 Dec 2006 06:11:00 GMT</pubDate><guid>http://www.blogjava.net/strive/articles/85181.html</guid><wfw:comment>http://www.blogjava.net/strive/comments/85181.html</wfw:comment><comments>http://www.blogjava.net/strive/articles/85181.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/strive/comments/commentRss/85181.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/strive/services/trackbacks/85181.html</trackback:ping><description><![CDATA[
		<p style="LINE-HEIGHT: 150%">
				<font size="4">
						<b>广义表的概念</b>
				</font>
				<br />
				<br />    　广义表(Lists，又称列表)是线性表的推广。即广义表中放松对表元素的原子限制，容许它们具有其自身结构。<br /><font color="#ff0000"><br /></font><b>1、广义表定义</b><br />    　<b>广义表</b>是n(n≥0)个元素a<sub>1</sub>，a<sub>2</sub>，…，a<sub>i</sub>，…，a<sub>n</sub>的有限序列。<br />  其中：<br />    　①a<sub>i</sub>--或者是原子或者是一个广义表。<br />　  　②广义表通常记作：<br />              Ls=( a<sub>1</sub>，a<sub>2</sub>，…，a<sub>i</sub>，…，a<sub>n</sub>)。<br />　　  ③Ls是广义表的名字，n为它的<b>长度</b>。<br />　 　 ④若a<sub>i</sub>是广义表，则称它为Ls的<b>子表</b>。<br />  <font color="#ff0000">注意：</font><br />    　①广义表通常用圆括号括起来，用逗号分隔其中的元素。<br />    　②为了区分原子和广义表，书写时用大写字母表示<b>广义表</b>，用小写字母表示<b>原子</b>。<br />    　③若广义表Ls非空(n≥1)，则a<sub>l</sub>是LS的表头，其余元素组成的表(a<sub>1</sub>，a<sub>2</sub>，…，a<sub>n</sub>)称为Ls的表尾。<br />   　 ④广义表是递归定义的<br /><font color="#ff0000"><br /></font><b>2、广义表表示</b><br /><font color="#0000ff">（1）广义表常用表示</font><br />　　① E=()<br />     　E是一个空表，其长度为0。<br />　　② L=(a，b)<br />     　L是长度为2的广义表，它的两个元素都是原子，因此它是一个线性表<br />　　③ A=(x，L)=(x，(a，b))<br />     　A是长度为2的广义表，第一个元素是原子x，第二个元素是子表L。<br />　　④ B=(A，y)=((x，(a，b))，y)<br />　     B是长度为2的广义表，第一个元素是子表A，第二个元素是原子y。<br />　　⑤ C=(A，B)=((x，(a，b))，((x，(a，b))，y))<br />     　C的长度为2，两个元素都是子表。<br />　　⑥ D=(a，D)=(a，(a，(a，(…))))<br />     　D的长度为2，第一个元素是原子，第二个元素是D自身，展开后它是一个无限的广义表。<br /><br /><b>（2）广义表的深度</b><br />　　一个表的"深度"是指表展开后所含括号的层数。<br />  【例】表L、A、B、C的深度为分别为1、2、3、4，表D的深度为∞。<br /><br /><font color="#0000ff">（3）带名字的广义表表示</font><br />    　如果规定任何表都是有名字的，为了既表明每个表的名字，又说明它的组成，则可以在每个表的前面冠以该表的名字，于是上例中的各表又可以写成：<br />①E()<br />②L(a，b)<br />③A(x，L(a，b))<br />④B(A(x，L(a，b))，y)<br />⑤C(A(x，l(a，b))，B(A(x，L(a，b))，y))<br />⑥D(a，D(a，D(…)))<br /><br /><font color="#0000ff">（4）广义表的图形表示</font><br /><b>（a）广义表的图形表示：</b><br />   　 ①图中的分支结点对应广义表<br />   　 ②非分支结点一般是原子<br />    　③但空表对应的也是非分支结点。<br />　　<br /><b>（b）广义表的图形形状划分：</b><font color="#ff00ff"><br /></font>　　 ①与树对应的广义表称为纯表，它限制了表中成分的共享和递归<br />　 　②允许结点共享的表称再入表<br />  【例】上图(d),子表A是共享结点，它既是C的一个元素，又是子表B的元素；<br />　　 ③允许递归的表称为递归表<br />  【例】上图(e)，表D是其自身的子表。</p>
		<p style="LINE-HEIGHT: 150%">
				<font color="#0000ff">（5）递归表、再人表、纯表、线性表之间的关系满足：</font>
				<br />      <span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><span style="mso-text-raise: -4.0pt"><img height="21" src="http://student.zjzk.cn/course_ware/data_structure/web/guangyibiao/guangy1.gif" width="237" v:shapes="_x0000_i1025" /></span></span><br />  　  广义表不仅是线性表的推广，也是树的推广。<br /><font color="#ff0000"><br /></font><b>3、广义表运算</b><br />    　由于广义表是对线性表和树的推广，并且具有共享和递归特性的广义表可以和有向图(见第7章)建立对应，因此广义表的大部分运算与这些数据结构上的运算类似。<br />    　在此，只讨论广义表的两个特殊的基本运算：取表头head(Ls)和取表尾tail(Ls)。<br />    　根据表头、表尾的定义可知：任何一个非空广义表的表头是表中第一个元素，它可以是原子，也可以是子表，而其表尾必定是子表。<br />  【例】<br />      head(L)=a， tail(L)=(b)<br />      head(B)=A， tail(B)=(y)<br />  由于tail(L)是非空表，可继续分解得到：<br />      head(tail(L))=b， tail(tail(L))=()<br />  对非空表A和(y)，也可继续分解。<br />  <font color="#ff0000">注意:</font><br />    　广义表()和(())不同。前者是长度为0的空表，对其不能做求表头和表尾的运算；而后者是长度为l的非空表(只不过该表中惟一的一个元素是空表)，对其可进行分解，得到的表头和表尾均是空表()。<br /></p>
<img src ="http://www.blogjava.net/strive/aggbug/85181.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/strive/" target="_blank">一手的小窝窝</a> 2006-12-03 14:11 <a href="http://www.blogjava.net/strive/articles/85181.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Name 与 id 的区别</title><link>http://www.blogjava.net/strive/articles/85087.html</link><dc:creator>一手的小窝窝</dc:creator><author>一手的小窝窝</author><pubDate>Sat, 02 Dec 2006 13:04:00 GMT</pubDate><guid>http://www.blogjava.net/strive/articles/85087.html</guid><wfw:comment>http://www.blogjava.net/strive/comments/85087.html</wfw:comment><comments>http://www.blogjava.net/strive/articles/85087.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/strive/comments/commentRss/85087.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/strive/services/trackbacks/85087.html</trackback:ping><description><![CDATA[name原来是为了标识之用，但是现在根据规范，都建议用id来标识元素。但是name在以下用途是不能替代的：   <br />  1.   表单（form）的控件名，提交的数据都用控件的name而不是id来控制。因为有许多name会同时对应多个控件，比如checkbox和radio，而id必须是全文档中唯一的。此外浏览器会根据name来设定发送到服务器的request。因此如果用id，服务器是无法得到数据的。   <br />  2.   frame和window的名字，用于在其他frame或window指定target。   <br />    <br />  以下两者可以通用，但是强烈建议用id不要用name：   <br />  锚点，通常以前写作&lt;a   name="myname"&gt;，现在可以用任何的元素id来指定：&lt;div   id="myid"&gt;。   <br />    <br />  以下只能用id：   <br />  1.   label与form控件的关联，   <br />  &lt;label   for="MyInput"&gt;My   Input&lt;/label&gt;   <br />  &lt;input   id="MyInput"   type="text"&gt;   <br />  for属性指定与label关联的元素的id，不可用name替代。   <br />  2.   CSS的元素选择机制，以#MyId的方式指定应用样式的元素，不能用name替代。   <br />  3.   脚本中获得对象：   <br />  IE支持在脚本中直接以id（而不是name）引用该id标识的对象。例如上面的input，要在脚本中获得输入的内容，可以直接以MyInput.value来获得。   <br />  如果用DOM的话，则用document.getElementById("MyInput").value，如果要用name的话，通常先得到包含控件的form，例如document.forms[0]，然后从form再引用name，注意这样得到的是经过计算后将发送给服务器的值。   <br />    <br />  name与id的还有区别是：id要符合标识的要求，比如大小写敏感，最好不要包含下划线（因为不兼容CSS）。而name基本上没有什么要求，甚至可以用数字。<br /><img src ="http://www.blogjava.net/strive/aggbug/85087.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/strive/" target="_blank">一手的小窝窝</a> 2006-12-02 21:04 <a href="http://www.blogjava.net/strive/articles/85087.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Windows下配置邮件通知 </title><link>http://www.blogjava.net/strive/articles/85083.html</link><dc:creator>一手的小窝窝</dc:creator><author>一手的小窝窝</author><pubDate>Sat, 02 Dec 2006 12:35:00 GMT</pubDate><guid>http://www.blogjava.net/strive/articles/85083.html</guid><wfw:comment>http://www.blogjava.net/strive/comments/85083.html</wfw:comment><comments>http://www.blogjava.net/strive/articles/85083.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/strive/comments/commentRss/85083.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/strive/services/trackbacks/85083.html</trackback:ping><description><![CDATA[
		<p>在一个多人协作的环境中，每个人提交代码后，应该能通知其他人这个变化，邮件是一个最常见的方法。</p>
		<p>由于windows下不像linux一样都随机配备了sendmail等发送邮件的工具，所以我们需要在windows上选择一种smtp服务器，这里我使用了<a href="http://james.apache.org/">James</a>，一个Java的开源的开源项目，实现了完整的邮件系统。</p>
		<p> 本教程是<a class="latestnews" href="http://www.subversion.org.cn/index.php?option=com_content&amp;task=view&amp;id=82&amp;Itemid=9"><u><font color="#0000ff"> Windows下Subversion配置管理员指南</font></u></a>系列教程的一部分，各个教程采用相同的目录结构和路径，有助于大家阅读。</p>
		<p>版本库根目录: d:\svnroot ，其中有project1和project2两个版本库。<br />Subversion安装目录: d:\subversion</p>
		<p> </p>
		<h3>1，下载安装</h3>
		<h5>a. 下载安装JDK</h5>
		<p>因为James是Java程序，首先你的系统必须有Java运行环境，我们可以从Sun的官方网站下载，地址是<a href="http://java.sun.com/javase/downloads/index.jsp">http://java.sun.com/javase/downloads/index.jsp</a>。下载直接按照默认安装即可，我选择安装的位置是D:\jdk1.5.0_09，教程后面将会使用这个路径。</p>
		<h5>b. 下载安装James</h5>
		<p>James的官方网站是<a href="http://james.apache.org/">http://james.apache.org/</a>，我们可以在<a href="http://java.sun.com/javase/downloads/index.jsp">http://java.sun.com/javase/downloads/index.jsp</a>下载James的服务器版本，目前的最新版本是<a href="http://apache.justdn.org/james/server/binaries/james-2.3.0.zip">http://apache.justdn.org/james/server/binaries/james-2.3.0.zip</a>。</p>
		<p>下载后直接解压缩就行了，然后打开james-2.3.0\bin\run.bat，在@echo off后面增加下面的代码：<br />    set JAVA_HOME=D:\jdk1.5.0_09<br />然后直接运行一下run.bat，就会提示启动了邮件服务器，其中我们使用的就是smtp服务，这说明James安装成功。</p>
		<h5>c. 下载安装perl</h5>
		<p>我们这个教程会借用subversion官方网站提供的发送邮件脚本，是使用perl编写，所以我们需要下载perl的运行环境。<a href="http://www.activestate.com/store/productdetail.aspx?prdGuid=81fbce82-6bd5-49bc-a915-08d58c2648ca">http://www.activestate.com/store/productdetail.aspx?prdGuid=81fbce82-6bd5-49bc-a915-08d58c2648ca</a>下的<a href="http://downloads.activestate.com/ActivePerl/Windows/5.8/ActivePerl-5.8.8.819-MSWin32-x86-267479.msi">http://downloads.activestate.com/ActivePerl/Windows/5.8/ActivePerl-5.8.8.819-MSWin32-x86-267479.msi</a>。perl的安装位置与后面的教程无关，可以随意安装。</p>
		<h5>d. 下载commit-email.pl.in</h5>
		<p>官方网站的<a href="http://svn.collab.net/repos/svn/trunk/tools/hook-scripts/">http://svn.collab.net/repos/svn/trunk/tools/hook-scripts/</a>下提供了一些有用的钩子脚本下载，我们下载<a href="http://svn.collab.net/repos/svn/trunk/tools/hook-scripts/commit-email.pl.in">http://svn.collab.net/repos/svn/trunk/tools/hook-scripts/commit-email.pl.in</a>。</p>
		<h3>
				<br />2，配置验证James</h3>
		<p>在上一小节运行了run.bat后，可以看到如下的提示：</p>
		<pre>Using PHOENIX_HOME:   D:\tools\james-<span style="COLOR: #cc66cc">2</span>.<span style="COLOR: #cc66cc">3</span>.<span style="COLOR: #cc66cc">0</span>
Using PHOENIX_TMPDIR: D:\tools\james-<span style="COLOR: #cc66cc">2</span>.<span style="COLOR: #cc66cc">3</span>.<span style="COLOR: #cc66cc">0</span>\temp
Using JAVA_HOME:      D:\jdk1.<span style="COLOR: #cc66cc">5</span>.<span style="COLOR: #cc66cc">0</span>_<span style="COLOR: #cc66cc">09</span></pre>
		<pre>Phoenix <span style="COLOR: #cc66cc">4</span>.<span style="COLOR: #cc66cc">2</span></pre>
		<pre>James <a href="http://www.php.net/mail"><span style="COLOR: #000066">Mail</span></a> Server <span style="COLOR: #cc66cc">2</span>.<span style="COLOR: #cc66cc">3</span>.<span style="COLOR: #cc66cc">0</span>
Remote Manager Service started plain:<span style="COLOR: #cc66cc">4555</span>
POP3 Service started plain:<span style="COLOR: #cc66cc">110</span>
SMTP Service started plain:<span style="COLOR: #cc66cc">25</span>
NNTP Service started plain:<span style="COLOR: #cc66cc">119</span>
FetchMail Disabled</pre>
		<p>它告诉我们可以使用启动正常（不要关闭窗口），并且可以使用telnet进行管理，为此，我们在一个新命令行窗口中运行：</p>
		<pre>telnet <span style="COLOR: #cc66cc">127</span>.<span style="COLOR: #cc66cc">0</span>.<span style="COLOR: #cc66cc">0</span>.<span style="COLOR: #cc66cc">1</span><span style="COLOR: #cc66cc">4555</span></pre>
		<p>注意：这里127.0.0.1代表了我的本机地址，如果是在局域网中，可能这里是运行James服务器的ip地址。</p>
		<p>然后出现输入用户名和密码的提示，用户名和密码都输入root即可，提示登陆成功后，直接输入下面的命令，就可以添加一个帐户：</p>
		<pre>adduser rocksun rocksun</pre>
		<p>完成这个操作后，我们就可以使用我们的邮件客户端（outlook, foxmail）验证我们的James服务器，我想配置都不是问题，smtp和pop3服务器都输入“127.0.0.1”或运行James服务器主机的IP即可，用户名和密码都是rocksun，设置smtp发送无需认证。</p>
		<p>然后可以发送一个测试邮件，根据上面添加的用户信息，我们的邮件的目的地址是
<script language="JavaScript" type="text/javascript"><!-- 
var prefix = '&#109;a' + 'i&#108;' + '&#116;o'; 
var path = 'hr' + 'ef' + '='; 
var addy33881 = 'r&#111;cks&#117;n' + '&#64;' + '127' + '&#46;' + '0' + '&#46;' + '0' + '&#46;' + '1'; 
var addy_text33881 = 'r&#111;cks&#117;n' + '&#64;' + '127' + '&#46;' + '0' + '&#46;' + '0' + '&#46;' + '1'; 
document.write( '<a ' + path + '\'' + prefix + ':' + addy33881 + '\'>' ); 
document.write( addy_text33881 ); 
document.write( '<\/a>' ); 
//--></script><a href="mailto:rocksun@127.0.0.1">rocksun@127.0.0.1</a></p>
		<noscript>此邮件地址受spam bots保护，需要使用 Javascript 功能来查阅。 
      </noscript>，发送后你在选择收邮件，就应该能得到自己发送的邮件，然后我们可以继续进行了。<h3>3，编写钩子</h3><p>剩下的工作就很简单了，将commit-email.pl.in重命名为commit-email.pl，存放在D:\svnroot\下，然后找到下面这一行：</p><pre>my <span style="COLOR: #0000ff">$svnlook</span> = <span style="COLOR: #ff0000">"@SVN_BINDIR@/svnlook"</span>;</pre><p>修改为：</p><pre>my <span style="COLOR: #0000ff">$svnlook</span> = <span style="COLOR: #ff0000">"D:/Subversion/bin/svnlook.exe"</span>;</pre><p>然后来到D:\svnroot\project1\hooks下，创建一个post-commit.bat文件，内容如下：</p><address>set REPOS=%1<br />set REV=%2<br />D:\svnroot\commit-email.pl "%REPOS%" "%REV%"
<script language="JavaScript" type="text/javascript"><!-- 
var prefix = '&#109;a' + 'i&#108;' + '&#116;o'; 
var path = 'hr' + 'ef' + '='; 
var addy33881 = 'r&#111;cks&#117;n' + '&#64;' + '127' + '&#46;' + '0' + '&#46;' + '0' + '&#46;' + '1'; 
var addy_text33881 = 'r&#111;cks&#117;n' + '&#64;' + '127' + '&#46;' + '0' + '&#46;' + '0' + '&#46;' + '1'; 
document.write( '<a ' + path + '\'' + prefix + ':' + addy33881 + '\'>' ); 
document.write( addy_text33881 ); 
document.write( '<\/a>' ); 
//--></script><a href="mailto:rocksun@127.0.0.1">rocksun@127.0.0.1</a><noscript>此邮件地址受spam bots保护，需要使用 Javascript 功能来查阅。 </noscript>--from
<script language="JavaScript" type="text/javascript"><!-- 
var prefix = '&#109;a' + 'i&#108;' + '&#116;o'; 
var path = 'hr' + 'ef' + '='; 
var addy99757 = 'd&#97;&#105;j&#117;n' + '&#64;' + 'gm&#97;&#105;l' + '&#46;' + 'c&#111;m'; 
var addy_text99757 = 'd&#97;&#105;j&#117;n' + '&#64;' + 'gm&#97;&#105;l' + '&#46;' + 'c&#111;m'; 
document.write( '<a ' + path + '\'' + prefix + ':' + addy99757 + '\'>' ); 
document.write( addy_text99757 ); 
document.write( '<\/a>' ); 
//--></script><a href="mailto:daijun@gmail.com">daijun@gmail.com</a><noscript>此邮件地址受spam bots保护，需要使用 Javascript 功能来查阅。 </noscript></address><p>好了，在project1的工作拷贝里提交吧，然后看看你刚才配置的邮件客户端，有没有受到这次变更的邮件。</p><p> </p><img src ="http://www.blogjava.net/strive/aggbug/85083.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/strive/" target="_blank">一手的小窝窝</a> 2006-12-02 20:35 <a href="http://www.blogjava.net/strive/articles/85083.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Subversion的权限控制 </title><link>http://www.blogjava.net/strive/articles/85082.html</link><dc:creator>一手的小窝窝</dc:creator><author>一手的小窝窝</author><pubDate>Sat, 02 Dec 2006 12:34:00 GMT</pubDate><guid>http://www.blogjava.net/strive/articles/85082.html</guid><wfw:comment>http://www.blogjava.net/strive/comments/85082.html</wfw:comment><comments>http://www.blogjava.net/strive/articles/85082.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/strive/comments/commentRss/85082.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/strive/services/trackbacks/85082.html</trackback:ping><description><![CDATA[
		<p>在阅读本文之前，请确定你已经知道了Subversion基本的服务器管理，知道了svnserve或Apache的配置，清楚如何设置用户和密码。关于svnserve的配置可以看我们的《<a class="mostread" href="http://www.subversion.org.cn/index.php?option=com_content&amp;task=view&amp;id=56&amp;Itemid=9">Subversion快速入门教程</a>》和《<a class="mostread" href="http://www.subversion.org.cn/index.php?option=com_content&amp;task=view&amp;id=78&amp;Itemid=9">用Apache 和Subversion 搭建安全的版本控制环境</a>》，对于一些细节情参考<a href="http://www.subversion.org.cn/svnbook/">《使用Subversion进行版本控制》。</a></p>
		<p>作为一个配置管理员，需要管理用户的权限，本文主要介绍了使用Subversion的授权文件“authz-db”，同时为了叙述的清晰，我首先澄清一些概念。</p>
		<h3>1，认证（Authentication）和授权（Authorization）</h3>
		<p>这两个术语经常一起出现。其中认证的意思就是鉴别用户的身份，最常见的方式就是使用用户名和密码，授权就是判断用户是否具备某种操作的权限，在Subversion里提供了“authz-db”文件，实现了以路径为基础的授权，也就是判断用户是否有操作对应路径的权限，在Subversion 1.3之后，svnserve和Apache一样都可以使用“authz-db”文件。</p>
		<h3>
				<br />2. svnserve下的配置文件</h3>
		<p>因为本文是以svnserve为例的，所以先介绍一下版本库目录的结构：</p>
		<p>D:\SVNROOT\PROJECT1<br />├─conf<br />├─dav<br />├─db<br />│  ├─revprops<br />│  ├─revs<br />│  └─transactions<br />├─hooks<br />└─locks</p>
		<p>其中conf下面有三个文件：</p>
		<p>    authz<br />    passwd<br />    svnserve.conf</p>
		<p>其中的“svnserve.conf”是这个版本库的配置文件，当使用svnserve时，这个配置文件决定了使用什么认证和授权文件：</p>
		<p>    password-db = passwd<br />    authz-db = authz</p>
		<p>上面的配置说明使用“svnserve.conf”同目录的passwd和authz，其中的password-db指定了用户密码文件，authz-db是我们的授权文件，也就是我们本文主要介绍的文件。</p>
		<p>
				<font color="#ff0000">注意：使用Apache作为服务器时，根本就不会参考“svnserve.conf”文件的内容，而是会参考Apache的配置。</font>
		</p>
		<h3>
				<br />3，基于svnserve的版本库文件布局</h3>
		<p>使用svnserve时，为了管理的方便，应该使用相同的认证和授权文件，所以应该让所有版本库的配置文件svnserve.conf指向同一个password-db和authz-db文件。下面是一个多版本库的目录：<br />D:\SVNROOT<br />├─project1<br />│  ├─conf<br />│  ├─dav<br />│  ├─db<br />│  │  ├─revprops<br />│  │  ├─revs<br />│  │  └─transactions<br />│  ├─hooks<br />│  └─locks<br />└─project2<br />    ├─conf<br />    ├─dav<br />    ├─db<br />    │  ├─revprops<br />    │  ├─revs<br />    │  └─transactions<br />    ├─hooks<br />    └─locks<br />    <br />D:\SVNROOT下有两个目录project1和project2，都已经创建了版本库，所以我们修改每个conf目录下的svnserve.conf，使之指向同一个password-db和authz-db文件。</p>
		<pre>password-db = ..\..\passwd
authz-db = ..\..\authz</pre>
		<p>这样，D:\SVNROOT\passwd和D:\SVNROOT\authz就控制了所有版本库的svnserve访问。另外在后面的操作中要关闭匿名访问，应该去掉“anon-access = none”前的“#”号，保证只有认证用户可以访问。</p>
		<p>
				<font color="#ff0000">注意：还有一点需要注意，那就是svnserve的“realm”的值，在上面的设置下，应该保证所有的版本库使用相同的realm值，这样，对版本库的密码缓存可以在多个版本库之间共享，更多细节见<span class="sect2"><a href="http://www.subversion.org.cn/svn-ch-6-sect-2.html#svn-ch-6-sect-2.2"><u><font color="#0000ff">客户端凭证缓存</font></u></a></span>。</font>
		</p>
		<h3>4，测试用户和组说明</h3>
		<p>版本库禁止任何匿名用户的访问，只对认证用户有效。</p>
		<p>root:配置管理管理员，对版本库有完全的管理权限。</p>
		<p>p1_admin1:project1的管理员，对project1有完全权限。<br />p1_d1:project1的开发者，对project1的trunk有完全的权限，但是对其中的/trunk/admin目录没有任何权限。<br />p1_t1:project1的测试者，对project1的trunk有完全的读权限，但是对其中的/trunk/admin目录没有任何权限。</p>
		<p>p2_admin1:project2的管理员，对project2有完全权限。<br />p2_d1:project2的开发者，对project2的trunk有完全的权限，但是对其中的/trunk/admin目录没有任何权限。<br />p2_t1:project2的测试者，对project2的trunk有完全的读权限，但是对其中的/trunk/admin目录没有任何权限。</p>
		<p>
				<br />对应的组及组的用户：<br />p1_group_a:p1_admin1<br />p1_group_d:p1_d1<br />p1_group_t:p1_t1<br />p2_group_a:p2_admin1<br />p2_group_d:p2_d1<br />p2_group_t:p2_t1</p>
		<p>
				<br />5，修改D:\SVNROOT\passwd文件</p>
		<p>前面已经说过了，用户和密码文件应该是在D:\SVNROOT\passwd，所以我们为每一位用户设置权限，文件内容如下：</p>
		<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
				<pre>
						<span style="COLOR: #66cc66">[</span>users<span style="COLOR: #66cc66">]</span>
p1_admin1 = p1_admin1
p1_d1 = p1_d1
p1_t1 = p1_t1
         
p2_admin1 = p2_admin1
p2_d1 = p2_d1
p2_t1 = p2_t1</pre>
		</blockquote>
		<p>为了便于验证，所有密码和用户名一致，如果你使用的是其他认证方式，这一步可能不同，但是用户名应该都是一样的。</p>
		<p>6，配置授权，修改D:\SVNROOT\authz</p>
		<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
				<p>[groups]<br /># 定义组信息</p>
				<p>p1_group_a = p1_admin1<br />p1_group_d = p1_d1<br />p1_group_t = p1_t1</p>
				<p>p2_group_a = p2_admin1<br />p2_group_d = p2_d1<br />p2_group_t = p2_t1</p>
				<p>
						<br />[/]<br /># 指定所有的版本库默认只读，root可读写<br />* = r<br />root = rw</p>
				<p>
						<br />[project1:/]<br /># 指定对版本库project1根目录的权限<br />@p1_group_a = rw<br />@p1_group_d = rw<br />@p1_group_t = r</p>
				<p>[project1:/trunk/admin]<br /># 指定对版本库project1的/trunk/admin根目录的权限，<br /># p1_group_a读写，p1_group_d和p1_group_t没有任何权限。<br />@p1_group_a = rw<br />@p1_group_d = <br />@p1_group_t = </p>
				<p>
				</p>
				<p>[project2:/]<br /># 指定对版本库project2根目录的权限<br />@p2_group_a = rw<br />@p2_group_d = rw<br />@p2_group_t = r</p>
				<p>[project2:/trunk/admin]<br /># 指定对版本库project1的/trunk/admin根目录的权限<br />@p2_group_a = rw<br />@p2_group_d = <br />@p2_group_t = </p>
		</blockquote>
		<p>
				<br />经过以上设置以后，你会发现一些有趣的事情。当使用用户“p1_d1”，检出project1的trunk时，目录是空的，好像admin目录根本不存在一样，当使用p1_d1用户浏览版本库时，能够看到admin目录，但是其中的内容却无法看到。</p>
		<p>关于中文目录，也是没有问题的，只是注意要把authz文件转化为UTF-8格式，在我的WINXP的UltraEdit里显示的文件格式为U8-DOS，具体的做法是用UltraEdit打开authz文件，然后选择“文件-&gt;转换-&gt;ASCII转UTF-8”，然后保存。</p>
		<p>再复杂的情况也不过如此，在实际的工作中要首先规划好权限，只赋给用户最小的权限，保证以最小的配置实现最复杂的权限控制。</p>
<img src ="http://www.blogjava.net/strive/aggbug/85082.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/strive/" target="_blank">一手的小窝窝</a> 2006-12-02 20:34 <a href="http://www.blogjava.net/strive/articles/85082.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Subversion安装成service </title><link>http://www.blogjava.net/strive/articles/85079.html</link><dc:creator>一手的小窝窝</dc:creator><author>一手的小窝窝</author><pubDate>Sat, 02 Dec 2006 12:33:00 GMT</pubDate><guid>http://www.blogjava.net/strive/articles/85079.html</guid><wfw:comment>http://www.blogjava.net/strive/comments/85079.html</wfw:comment><comments>http://www.blogjava.net/strive/articles/85079.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/strive/comments/commentRss/85079.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/strive/services/trackbacks/85079.html</trackback:ping><description><![CDATA[
		<p>以前的svnserve要想成为windows服务，必须依赖于svnservice或其他工具。从Subversion1.4开始，Subversion本身就集成Windows服务的工具。<br /></p>
		<h3>1，安装svnservice</h3>
		<p>在Windows NT中（包括Windows XP, Windows 2000, Windows 2003 Server）本身包含了一个安装服务的工具，叫做"Service Control"，也就是sc.exe。</p>
		<p>例如我的Subversion安装在"D:\Subversion"，版本库在"D:\svnroot"，而我希望对应的Subversion服务名为svnservice，安装这个svn服务的命令就可以这样写：</p>
		<p>      sc create svnservice<br />      binpath= "D:\Subversion\bin\svnserve.exe --service -r D:\svnroot"<br />      displayname= "SVNService"<br />      depend= Tcpip<br />      <br />请注意，因为便于察看，上面的命令分为多行，但在实际执行时应该在一行里。另外，在以前启动svnserve时会使用"-d"选项，也就是守护进程模式，在这里不能使用，会导致服务无法启动。同样，"-i"和"-t"选项也不能使用。</p>
		<p>在命令行窗口执行完这个命令之后，服务还没有启动，你可以继续运行"net start svnservice"启动这个服务，然后使用"net stop svnservice"停止服务。</p>
		<p>另外还有两点需要小心处理。首先，如果路径中包括空格，一定要用“\”处理“"”号，例如上面的例子中如果svnserve.exe在“c:\program files\subversion\”中，则命令应该写为“binpath= "\"c:\program files\subversion\bin\svnserve.exe\"”（“”中的内容），整个命令如下，红色部分是改变部分：</p>
		<p>      sc create svnservice<br />      binpath= "<font color="#ff0000">\"D:\program files\Subversion\bin\svnserve.exe\"</font> --service -r D:\svnroot"<br />      displayname= "SVNService"<br />      depend= Tcpip<br />      <br />其次，sc对选项的格式还有要求，例如“depend= Tcpip”不能写为“depend = Tcpip”或“depend=Tcpip”，也就是“=”前不能有空各，而后面必须有空格。</p>
		<h3>
				<br />2，删除服务</h3>
		<p>如果服务安装的有问题，你可能需要删除服务。要删除前面添加的服务，只需要运行"sc delete svnservice"，"svnservice"就是我们创建服务时使用的名字。</p>
		<h3>
				<br />3，配置服务是自动启动</h3>
		<p>默认情况下安装的服务不会随Windows的启动而启动，为了使svn服务能够随Windows启动而启动，需要修改一下"sc create"命令（首先要删除），增加"start= auto"选项：</p>
		<p>      sc create svnservice<br />      binpath= "D:\Subversion\bin\svnserve.exe --service -r D:\svnroot"<br />      displayname= "SVNService"<br />      depend= Tcpip<br />      start= auto<br />      <br />当然你也可以使用图形化的工具修改服务的属性，你可以在“开始-&gt;运行...”中执行"services.msc"，然后在界面中修改。</p>
		<p>
				<br />链接：</p>
		<p>关于sc安装svn服务的详细信息，可以看看这篇文章：<br /><a href="http://svn.collab.net/repos/svn/tags/1.4.0/notes/windows-service.txt">http://svn.collab.net/repos/svn/tags/1.4.0/notes/windows-service.txt</a></p>
<img src ="http://www.blogjava.net/strive/aggbug/85079.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/strive/" target="_blank">一手的小窝窝</a> 2006-12-02 20:33 <a href="http://www.blogjava.net/strive/articles/85079.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Subversion备份 </title><link>http://www.blogjava.net/strive/articles/85081.html</link><dc:creator>一手的小窝窝</dc:creator><author>一手的小窝窝</author><pubDate>Sat, 02 Dec 2006 12:33:00 GMT</pubDate><guid>http://www.blogjava.net/strive/articles/85081.html</guid><wfw:comment>http://www.blogjava.net/strive/comments/85081.html</wfw:comment><comments>http://www.blogjava.net/strive/articles/85081.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/strive/comments/commentRss/85081.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/strive/services/trackbacks/85081.html</trackback:ping><description><![CDATA[
		<p>版本控制最关键的一件事是保证数据的安全性，不能因为磁盘损坏，程序故障造成版本库无可挽回的错误，为此必须制定较完备的备份策略。在Subversion中，我们有三种备份方式：完全备份，增量备份和同步版本库。<br /></p>
		<h3>1, 完全备份</h3>
		<p>最常见和简单的备份就是直接使用拷贝命令，将版本库目录拷贝到备份目录上，就可以了。但是这样不是很安全的方式，因为如果在拷贝时版本库发生变化，将会造成备份的结果不够准确，失去备份的作用，为此Subversion提供了“svnadmin hotcopy”命令，可以防止这种问题。</p>
		<p>还记得我们的版本库目录吗？</p>
		<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
				<p>D:\SVNROOT<br />├─project1<br />│  ├─conf<br />│  ├─dav<br />│  ├─db<br />│  │  ├─revprops<br />│  │  ├─revs<br />│  │  └─transactions<br />│  ├─hooks<br />│  └─locks<br />└─project2<br />    ├─conf<br />    ├─dav<br />    ├─db<br />    │  ├─revprops<br />    │  ├─revs<br />    │  └─transactions<br />    ├─hooks<br />    └─locks<br />    <br /></p>
		</blockquote>
		<p dir="ltr">如果要把project1备份到d:\svnrootbak目录下，只需要运行：</p>
		<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
				<p dir="ltr">svnadmin hotcopy d:\svnroot\project1 d:\svnrootbak\project1</p>
		</blockquote>
		<p dir="ltr">但是我们作为配置管理员，必须想办法优化这个过程，如果我们这个目录下有许多版本库，需要为每个版本库写这样一条语句备份，为此我写了下面的脚本，实现备份一个目录下的所有版本库。我们在D:\SVNROOT下创建了两个文件，simpleBackup.bat：</p>
		<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
				<p>@echo 正在备份版本库%1......<br />@%SVN_HOME%\bin\svnadmin hotcopy %1 %BACKUP_DIRECTORY%\%2<br />@echo 版本库%1成功备份到了%2！</p>
		</blockquote>
		<p>这个文件仅仅是对“svnadmin hotcopy”的包装，然后是backup.bat：</p>
		<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
				<p>echo off</p>
				<p>rem Subversion的安装目录<br />set SVN_HOME="D:\Subversion"</p>
				<p>rem 所有版本库的父目录<br />set SVN_ROOT=D:\svnroot</p>
				<p>rem 备份的目录<br />set BACKUP_SVN_ROOT=D:\svnrootbak</p>
				<p>set BACKUP_DIRECTORY=%BACKUP_SVN_ROOT%\%date:~0,10%<br />if exist %BACKUP_DIRECTORY% goto checkBack<br />echo 建立备份目录%BACKUP_DIRECTORY%&gt;&gt;%SVN_ROOT%/backup.log</p>
				<p>mkdir %BACKUP_DIRECTORY%</p>
				<p>rem 验证目录是否为版本库，如果是则取出名称备份<br />for /r %SVN_ROOT% %%I in (.) do @if exist "%%I\conf\svnserve.conf" %SVN_ROOT%\simpleBackup.bat "%%~fI" %%~nI<br />goto end</p>
				<p>:checkBack<br />echo 备份目录%BACKUP_DIRECTORY%已经存在，请清空。<br />goto end</p>
				<p>:end</p>
		</blockquote>
		<p>你在使用的时候，只需要修改backup.bat开头的三个路径，将两个脚本拷贝到“SVN_ROOT”下就可以了。根据以上的配置，你只需要运行backup.bat，就可以把“SVN_ROOT”下的版本库都备份到“BACKUP_SVN_ROOT”里，并且存放在备份所在日的目录里，例如“D:\svnrootbak\2006-10-22”。</p>
		<p>虽然这部分工作很简单，可是必须有人定时地去执行这个操作（例如每周一凌晨），为了避免发生遗忘的情况，我们可以将这个操作加入到系统的at任务当中去，例如还是上面的环境，为了安装at任务，我们运行：</p>
		<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
				<pre>at <span style="COLOR: #cc66cc">1</span>:<span style="COLOR: #cc66cc">00</span> /every:M D:\svnroot\backup.bat</pre>
		</blockquote>
		<p>这样在每周一凌晨1:00都会执行这个备份过程。当然备份在本机也是不安全的，你也许需要上传到别的机器，这个就要靠你自己去实现了。</p>
		<h3>
				<br />2, 增量备份</h3>
		<p>尽管完全备份非常简单，但是也是有代价的，当版本库非常巨大时，经常进行完全备份是不现实的，也并不必要，但是一旦版本库在备份之间发生问题，该如何呢，这里我们就用到了增量备份。</p>
		<p>增量备份通常要与完全备份结合使用，就像oracle数据库的归档日志，记录着每次Subversion提交的变化，然后在需要恢复时能够回到最新的可用状态。在我们这个例子中我们使用的是，svnadmin dump命令进行增量的备份，使用方法是：</p>
		<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
				<p>svnadmin dump project1 --revision 15 --incremental &gt; dumpfile2</p>
		</blockquote>
		<p>上面的命令实现了对修订版本15进行增量的备份，其中的输出文件dumpfile2只保存了修订版本15更改的内容。</p>
		<p>为了记录每次提交的结果，我们需要使用一项Subversion的特性--<a href="http://www.subversion.org.cn/svnbook/1.1/svn-ch-5-sect-2.html#svn-ch-5-sect-2.1"><u><font color="#800080">钩子（hook）</font></u></a>，看看我们的project1目录：</p>
		<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
				<p>├─project1<br />│  ├─conf<br />│  ├─dav<br />│  ├─db<br />│  │  ├─revprops<br />│  │  ├─revs<br />│  │  └─transactions<br />│  ├─hooks<br />│  └─locks</p>
		</blockquote>
		<p>其中的hooks目录里存放的就是钩子脚本，我们在此处只使用post-commit钩子，这个钩子会在每次提交之后执行，为了实现我们的备份功能，我们在hooks下建立一个文件post-commit.bat，内容如下：</p>
		<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
				<address>echo off<br />set SVN_HOME="C:\Program Files\Subversion"<br />set SVN_ROOT=D:\svnroot<br />set UNIX_SVN_ROOT=D:/svnroot<br />set DELTA_BACKUP_SVN_ROOT=D:\svnrootbak\delta</address>
				<address>set LOG_FILE=%1\backup.log<br />echo backup revision %2 &gt;&gt; %LOG_FILE%</address>
				<address>for /r %SVN_ROOT% %%I in (.) do if D:/svnroot/%%~nI == %1 %SVN_ROOT%\%%~nI\hooks\deltaBackup.bat %%~nI %2<br />goto end</address>
				<address>:end</address>
		</blockquote>
		<p>通过这个脚本，可以实现D:\svnroot下的版本库提交时自动增量备份到D:\svnrootbak\delta（确定这个目录存在），其中使用的deltaBackup.bat其实可以放在任何地方，只是对脚本的svnadmin dump的包装，内容如下：</p>
		<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
				<p>@echo 正在备份版本库%2......<br />%SVN_HOME%\bin\svnadmin dump %SVN_ROOT%\%1 --incremental --revision %2 &gt;&gt; %DELTA_BACKUP_SVN_ROOT%\%1.dump<br />@echo 版本库%2成功备份到了%3！</p>
		</blockquote>
		<p>以上两个脚本可以直接拷贝到project2的hooks目录下，不需要修改就可以实现project2的自动备份。</p>
		<p>以上的操作已经OK了，现在需要做的是将完全备份和增量备份结合起来，也就是在完全备份后清理增量备份的结果，使之只保存完全备份后的结果。</p>
		<p>当果真出现版本库的故障，就要求我们实现版本库的恢复操作了，这是用要使用svnadmin load命令，同时也需要上次的完全备份例如要把上次完全备份backuprepo，和之后的增量备份dumpfile：</p>
		<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
				<p>svnadmin load backuprepo &lt; dumpfile</p>
		</blockquote>
		<p>最后的结果，可以下载<a href="http://www.subversion.org.cn/images/stories/svnroot.rar">svnroot.rar</a>，将之解压缩到d:\下，然后修改几个bat文件的SVN_HOME就可以使用了。</p>
		<h3>3, 版本库同步</h3>
		<p>Subversion 1.4增加了同步机制，可以实现一个版本库同另一个版本库的同步（但好像只是单向的），我们可以用来实现版本库的备份或镜像。</p>
		<h5>3.1. 对目标库初始化</h5>
		<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
				<pre>svnsync init svn:<span style="COLOR: #808080; FONT-STYLE: italic">//localhost/project2 svn://localhost/project1 </span>
 </pre>
		</blockquote>
		<p>
				<font size="2">其中project2是目标的版本库，而project1是源版本库。其中的目标版本库必须为空，而且必须允许修订版本属性的修改，也就是在目标的版本库的hooks目录里添加一个文件pre-revprop-change.bat，内容为空即可。</font>
		</p>
		<h5>3.2. 同步project2到project1</h5>
		<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
				<pre>svnsync sync svn:<span style="COLOR: #808080; FONT-STYLE: italic">//localhost/project2 </span>
 </pre>
		</blockquote>
		<p>这时候你update一下你的project2的一个工作拷贝，就会发现有了project1的所有内容。如果project1又有提交，这时候project2的版本库无法看到最新的变化，还需要再运行一遍sync操作，这样才能将最新的变化同步。需要注意的是，目标版本库只能做成只读的，如果目标版本库发生了变更，则无法继续同步了。</p>
		<h5>3.3. 同步历史属性的修改</h5>
		<p>因为同步不会更新对历史属性的修改，所以svnsync还有子命令copy-revprops，可以同步某个版本的属性。</p>
		<h5>3.4. 钩子自动同步</h5>
		<p>希望在每次提交时同步，则需要在源版本库增加post-commit脚本，内容如下：</p>
		<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
				<pre>
						<a href="http://www.php.net/echo">
								<span style="COLOR: #000066">echo</span>
						</a> off
set SVN_HOME=<span style="COLOR: #ff0000">"D:<span style="FONT-WEIGHT: bold; COLOR: #000099">\S</span>ubversion"</span>
%SVN_HOME%\bin\svnsync sync  --non-interactive svn:<span style="COLOR: #808080; FONT-STYLE: italic">//localhost/project2 </span>
 </pre>
		</blockquote>
		<p>把以上内容存放为post-commit.bat，然后放到版本库project1下的hooks目录下，这样project1每次提交，都会引起project2的同步。<br /></p>
<img src ="http://www.blogjava.net/strive/aggbug/85081.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/strive/" target="_blank">一手的小窝窝</a> 2006-12-02 20:33 <a href="http://www.blogjava.net/strive/articles/85081.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>有必要准备一份 Eclipse 快捷键大全呵</title><link>http://www.blogjava.net/strive/articles/83829.html</link><dc:creator>一手的小窝窝</dc:creator><author>一手的小窝窝</author><pubDate>Mon, 27 Nov 2006 08:54:00 GMT</pubDate><guid>http://www.blogjava.net/strive/articles/83829.html</guid><wfw:comment>http://www.blogjava.net/strive/comments/83829.html</wfw:comment><comments>http://www.blogjava.net/strive/articles/83829.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/strive/comments/commentRss/83829.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/strive/services/trackbacks/83829.html</trackback:ping><description><![CDATA[
		<p>俗话说,工欲善其事，必先利其器,如果大家对开发程序稍微有点发烧的话,都知道快捷键对编程中有多大的作用了(当然当年Dos用natepad开发程序的除外了),我就是这样一个发烧友了,对各种IDE中的快捷功能颇感兴趣,尤其是对快捷键这一部分乐此不彼了.再加上Eclipse又是本人的最爱,因此Eclipse中的快捷键就是本人重视的重点了,当然,Eclipse的快捷键暂时不是最强的,本人见过快捷键最优秀的IDE还是当属IDEA了,里面的快捷键为程序员考虑的面面俱到,几乎到了只要你想不到,没有按不到的地步了(嘻,好像给它做广告了).不过说实话很多功能都是Eclipse借鉴Idea过来的了.但至今我发现在快捷键这方面和别的智能开发方面Eclipse还是稍逊一筹了(这仅仅是从Java IDE的角度),废话少说,直接就切入正题了.</p>
		<p>  今天写的这些快捷键都是本人在实际运用中总结出来的,自己感觉很实用,都是以自己的喜好程度来排列了,对于的Eclipse如果没有特别说明都使用有Eclipse3.0.X以上了,个别如果出现不符合的话要么是版本的问题,要么是和别的系统级的快捷键有冲突,譬如输入法的冲突了,这时就需要修改输入法了.下面的快捷键都是Eclipse特有的,尤其是针对Java Editer的,但有些对Eclipse里面的Text也是实用的了,下面就是这些快捷键了(住:这些快捷键随着自己学习不断的深入和Eclipse版本不断的提高会慢慢的完善的,有些太普通的就没有列出来,如Ctrl+A一类):</p>
		<p>Ctrl+1 快速修复(最经典的快捷键,就不用多说了)</p>
		<p>Ctrl+D: 删除当前行      </p>
		<p>Ctrl+Alt+↓ 复制当前行到下一行(复制增加)</p>
		<p>Ctrl+Alt+↑ 复制当前行到上一行(复制增加)</p>
		<p>Alt+↓  当前行和下面一行交互位置(特别实用,可以省去先剪切,再粘贴了)</p>
		<p>Alt+↑   当前行和上面一行交互位置(同上)</p>
		<p>Alt+←  前一个编辑的页面</p>
		<p>Alt+→  下一个编辑的页面(当然是针对上面那条来说了)</p>
		<p>Alt+Enter 显示当前选择资源(工程,or 文件 or文件)的属性</p>
		<p>Shift+Enter 在当前行的下一行插入空行(这时鼠标可以在当前行的任一位置,不一定是最后)</p>
		<p>Shift+Ctrl+Enter 在当前行插入空行(原理同上条)</p>
		<p>Ctrl+Q   定位到最后编辑的地方</p>
		<p>Ctrl+L  定位在某行  (对于程序超过100的人就有福音了)</p>
		<p>Ctrl+M 最大化当前的Edit或View (再按则反之)</p>
		<p>Ctrl+/   注释当前行,再按则取消注释</p>
		<p>Ctrl+O   快速显示 OutLine</p>
		<p>Ctrl+T   快速显示当前类的继承结构</p>
		<p>Ctrl+W  关闭当前Editer</p>
		<p>Ctrl+K   参照选中的Word快速定位到下一个</p>
		<p>Ctrl+E 快速显示当前Editer的下拉列表(如果当前页面没有显示的用黑体表示)</p>
		<p>Ctrl+/(小键盘) 折叠当前类中的所有代码</p>
		<p>Ctrl+×(小键盘) 展开当前类中的所有代码</p>
		<p>Ctrl+Space 代码助手完成一些代码的插入(但一般和输入法有冲突,可以修改输入法的热键,也可以暂用Alt+/来代替)</p>
		<p>Ctrl+Shift+E 显示管理当前打开的所有的View的管理器(可以选择关闭,激活等操作)</p>
		<p>Ctrl+J  正向增量查找(按下Ctrl+J后,你所输入的每个字母编辑器都提供快速匹配定位到某个单词,如果没有,则在stutes line中显示没有找到了,查一个单词时,特别实用,这个功能Idea两年前就有了)</p>
		<p>Ctrl+Shift+J 反向增量查找(和上条相同,只不过是从后往前查)</p>
		<p>Ctrl+Shift+F4 关闭所有打开的Editer</p>
		<p>Ctrl+Shift+X   把当前选中的文本全部变味小写</p>
		<p>Ctrl+Shift+Y   把当前选中的文本全部变为小写</p>
		<p>Ctrl+Shift+F  格式化当前代码</p>
		<p>Ctrl+Shift+P 定位到对于的匹配符(譬如{}) (从前面定位后面时,光标要在匹配符里面,后面到前面,则反之)</p>
		<p>下面的快捷键是重构里面常用的,本人就自己喜欢且常用的整理一下(注:一般重构的快捷键都是Alt+Shift开头的了)</p>
		<p>Alt+Shift+R 重命名 (是我自己最爱用的一个了,尤其是变量和类的Rename,比手工方法能节省很多劳动力)</p>
		<p>Alt+Shift+M 抽取方法 (这是重构里面最常用的方法之一了,尤其是对一大堆泥团代码有用)</p>
		<p>Alt+Shift+C 修改函数结构(比较实用,有N个函数调用了这个方法,修改一次搞定)</p>
		<p>Alt+Shift+L 抽取本地变量( 可以直接把一些魔法数字和字符串抽取成一个变量,尤其是多处调用的时候)</p>
		<p>Alt+Shift+F 把Class中的local变量变为field变量 (比较实用的功能)</p>
		<p>Alt+Shift+I 合并变量(可能这样说有点不妥Inline) </p>
		<p>Alt+Shift+V 移动函数和变量(不怎么常用)</p>
		<p>Alt+Shift+Z 重构的后悔药(Undo)</p>
		<p>
				<br />
				<br />
				<br />另一份<br /></p>
		<p>编辑<br />作用域 功能 快捷键 <br />全局 查找并替换 Ctrl+F <br />文本编辑器 查找上一个 Ctrl+Shift+K <br />文本编辑器 查找下一个 Ctrl+K <br />全局 撤销 Ctrl+Z <br />全局 复制 Ctrl+C <br />全局 恢复上一个选择 Alt+Shift+↓ <br />全局 剪切 Ctrl+X <br />全局 快速修正 Ctrl1+1 <br />全局 内容辅助 Alt+/ <br />全局 全部选中 Ctrl+A <br />全局 删除 Delete <br />全局 上下文信息 Alt+？<br />Alt+Shift+?<br />Ctrl+Shift+Space <br />Java编辑器 显示工具提示描述 F2 <br />Java编辑器 选择封装元素 Alt+Shift+↑ <br />Java编辑器 选择上一个元素 Alt+Shift+← <br />Java编辑器 选择下一个元素 Alt+Shift+→ <br />文本编辑器 增量查找 Ctrl+J <br />文本编辑器 增量逆向查找 Ctrl+Shift+J <br />全局 粘贴 Ctrl+V <br />全局 重做 Ctrl+Y <br /><br /><br />查看<br />作用域 功能 快捷键 <br />全局 放大 Ctrl+= <br />全局 缩小 Ctrl+- <br /><br /><br />窗口<br />作用域 功能 快捷键 <br />全局 激活编辑器 F12 <br />全局 切换编辑器 Ctrl+Shift+W <br />全局 上一个编辑器 Ctrl+Shift+F6 <br />全局 上一个视图 Ctrl+Shift+F7 <br />全局 上一个透视图 Ctrl+Shift+F8 <br />全局 下一个编辑器 Ctrl+F6 <br />全局 下一个视图 Ctrl+F7 <br />全局 下一个透视图 Ctrl+F8 <br />文本编辑器 显示标尺上下文菜单 Ctrl+W <br />全局 显示视图菜单 Ctrl+F10 <br />全局 显示系统菜单 Alt+- <br /><br /><br />导航<br />作用域 功能 快捷键 <br />Java编辑器 打开结构 Ctrl+F3 <br />全局 打开类型 Ctrl+Shift+T <br />全局 打开类型层次结构 F4 <br />全局 打开声明 F3 <br />全局 打开外部javadoc Shift+F2 <br />全局 打开资源 Ctrl+Shift+R <br />全局 后退历史记录 Alt+← <br />全局 前进历史记录 Alt+→ <br />全局 上一个 Ctrl+, <br />全局 下一个 Ctrl+. <br />Java编辑器 显示大纲 Ctrl+O <br />全局 在层次结构中打开类型 Ctrl+Shift+H <br />全局 转至匹配的括号 Ctrl+Shift+P <br />全局 转至上一个编辑位置 Ctrl+Q <br />Java编辑器 转至上一个成员 Ctrl+Shift+↑ <br />Java编辑器 转至下一个成员 Ctrl+Shift+↓ <br />文本编辑器 转至行 Ctrl+L <br /><br /><br />搜索<br />作用域 功能 快捷键 <br />全局 出现在文件中 Ctrl+Shift+U <br />全局 打开搜索对话框 Ctrl+H <br />全局 工作区中的声明 Ctrl+G <br />全局 工作区中的引用 Ctrl+Shift+G <br /><br /><br />文本编辑<br />作用域 功能 快捷键 <br />文本编辑器 改写切换 Insert <br />文本编辑器 上滚行 Ctrl+↑ <br />文本编辑器 下滚行 Ctrl+↓ <br /><br /><br />文件<br />作用域 功能 快捷键 <br />全局 保存 Ctrl+X <br />Ctrl+S <br />全局 打印 Ctrl+P <br />全局 关闭 Ctrl+F4 <br />全局 全部保存 Ctrl+Shift+S <br />全局 全部关闭 Ctrl+Shift+F4 <br />全局 属性 Alt+Enter <br />全局 新建 Ctrl+N <br /><br /><br />项目<br />作用域 功能 快捷键 <br />全局 全部构建 Ctrl+B <br /><br /><br />源代码<br />作用域 功能 快捷键 <br />Java编辑器 格式化 Ctrl+Shift+F <br />Java编辑器 取消注释 Ctrl+\ <br />Java编辑器 注释 Ctrl+/ <br />Java编辑器 添加导入 Ctrl+Shift+M <br />Java编辑器 组织导入 Ctrl+Shift+O <br />Java编辑器 使用try/catch块来包围 未设置，太常用了，所以在这里列出,建议自己设置。<br />也可以使用Ctrl+1自动修正。 <br /><br /><br />运行<br />作用域 功能 快捷键 <br />全局 单步返回 F7 <br />全局 单步跳过 F6 <br />全局 单步跳入 F5 <br />全局 单步跳入选择 Ctrl+F5 <br />全局 调试上次启动 F11 <br />全局 继续 F8 <br />全局 使用过滤器单步执行 Shift+F5 <br />全局 添加/去除断点 Ctrl+Shift+B <br />全局 显示 Ctrl+D <br />全局 运行上次启动 Ctrl+F11 <br />全局 运行至行 Ctrl+R <br />全局 执行 Ctrl+U <br /><br /><br />重构<br />作用域 功能 快捷键 <br />全局 撤销重构 Alt+Shift+Z <br />全局 抽取方法 Alt+Shift+M <br />全局 抽取局部变量 Alt+Shift+L <br />全局 内联 Alt+Shift+I <br />全局 移动 Alt+Shift+V <br />全局 重命名 Alt+Shift+R <br />全局 重做 Alt+Shift+Y <br /><br />热键篇：Template：Alt + /修改处：窗口-&gt;喜好设定-&gt;工作台-&gt;按键-&gt;编辑-&gt;内容辅助。个人习惯：Shift+SPACE(空白)。简易说明：编辑程序代码时，打sysout +Template启动键，就会自动出现：System.out.println(); 。设定Template的格式：窗口-&gt;喜好设定-&gt;Java-&gt;编辑器-&gt;模板。程序代码自动排版：Ctrl+Shift+F修改处：窗口-&gt;喜好设定-&gt;工作台-&gt;按键-&gt;程序代码-&gt;格式。个人习惯：Alt+Z。自动排版设定：窗口-&gt;喜好设定-&gt;Java-&gt;程序代码格式制作程序。样式页面-&gt;将插入tab(而非空格键)以内缩，该选项取消勾选，下面空格数目填4，这样在自动编排时会以空格4作缩排。快速执行程序：Ctrl + F11个人习惯：ALT+X修改处：窗口-&gt;喜好设定-&gt;工作台-&gt;按键-&gt;执行-&gt;启动前一次的启动作业。简易说明：第一次执行时，它会询问您执行模式，设置好后，以后只要按这个热键，它就会快速执行。<br /><alt+z(排版完)、atl+x(执行) />..我觉得很顺手^___^自动汇入所需要的类别：Ctrl+Shift+O简易说明：假设我们没有Import任何类别时，当我们在程序里打入：<br /><br />BufferedReader buf =<br />new BufferedReader(new InputStreamReader(System.in));<br /><br />此时Eclipse会警示说没有汇入类别，这时我们只要按下Ctrl+Shift+O，它就会自动帮我们Import类别。查看使用类别的原始码：Ctrl+鼠标左键点击简易说明：可以看到您所使用类别的原始码。将选取的文字批注起来：Ctrl+/简易说明：Debug时很方便。修改处：窗口-&gt;喜好设定-&gt;工作台-&gt;按键-&gt;程序代码-&gt;批注视景切换：Ctrl+F8个人习惯：Alt+S。修改处：窗口-&gt;喜好设定-&gt;工作台-&gt;按键-&gt;窗口-&gt;下一个视景。简易说明：可以方便我们快速切换编辑、除错等视景。密技篇：一套Eclipse可同时切换，英文、繁体、简体显示：<br />1.首先要先安装完中文化包。<br />2.在桌面的快捷方式后面加上参数即可，英文-&gt; -nl "zh_US"繁体-&gt; -nl "zh_TW"简体-&gt; -nl "zh_CN"。<br />(其它语系以此类推)像我2.1.2中文化后，我在我桌面的Eclipse快捷方式加入参数-n1 "zh_US"。<br />"C:\Program Files\eclipse\eclipse.exe" -n "zh_US"接口就会变回英文语系噜。利用Eclipse，在Word编辑文书时可不必将程序代码重新编排：将Eclipse程序编辑区的程序代码整个复制下来(Ctrl+C)，直接贴(Ctrl+V)到<br />Word或WordPad上，您将会发现在Word里的程序代码格式，跟Eclipse所设定的完全一样，包括字型、缩排、关键词颜色。我曾试过JBuilder、GEL、NetBeans...使用复制贴上时，只有缩排格式一样，字型、颜色等都不会改变。外挂篇：外挂安装：将外挂包下载回来后，将其解压缩后，您会发现features、<br />plugins这2个数据夹，将里面的东西都复制或移动到Eclipse的features、plugins数据夹内后，重新启动Eclipse即可。让Eclipse可以像JBuilderX一样使用拖拉方式建构GUI的外挂：<br />1.Jigloo SWT/Swing GUI Builder ：<a href="http://cloudgarden.com/jigloo/index.html">http://cloudgarden.com/jigloo/index.html</a>下载此版本：Jigloo plugin for Eclipse (using Java 1.4 or 1.5)安装后即可由档案-&gt;新建-&gt;其它-&gt;GUI Form选取要建构的GUI类型。<br /><br />2.Eclipse Visual Editor Project：<a href="http://www.eclipse.org/vep/">http://www.eclipse.org/vep/</a>点选下方Download Page，再点选Latest Release 0.5.0进入下载。除了VE-runtime-0.5.0.zip要下载外，以下这2个也要：<br />EMF build 1.1.1: (build page) (download zip) <br />GEF Build 2.1.2: (build page) (download zip) <br /><br />3.0 M8版本，请下载：<br />EMF build I200403250631<br />GEF Build I20040330<br />VE-runtime-1.0M1安装成功后，便可由File-&gt;New-&gt;Visual Class开始UI设计。安装成功后，即可由新建-&gt;Java-&gt;AWT与Swing里选择所要建构的GUI类型开始进行设计。VE必须配合着对应版本，才能正常使用，否则即使安装成功，使用上仍会有问题。使用Eclipse来开发JSP程序：外挂名称：lomboz(下载页面)<a href="http://forge.objectweb.org/project/showfiles.php?group_id=97">http://forge.objectweb.org/project/showfiles.php?group_id=97</a>请选择适合自己版本的lomboz下载，lomboz.212.p1.zip表示2.1.2版，<br />lomboz.3m7.zip表示M7版本....以此类推。<br />lomboz安装以及设置教学：Eclipse开发JSP-教学文件<br /><br />Java转exe篇：实现方式：Eclipse搭配JSmooth(免费)。<br />1.先由Eclipse制作包含Manifest的JAR。制作教学<br />2.使用JSmooth将做好的JAR包装成EXE。<br />JSmooth下载页面：<a href="http://jsmooth.sourceforge.net/index.php">http://jsmooth.sourceforge.net/index.php</a><br />3.制作完成的exe文件，可在有装置JRE的Windows上执行。<br /><br />Eclipse-Java编辑器最佳设定：编辑器字型设定：工作台-&gt;字型-&gt;Java编辑器文字字型。<br />(建议设定Courier New -regular 10)编辑器相关设定：窗口-&gt;喜好设定-&gt;Java-&gt;编辑器外观：显示行号、强调对称显示的方括号、强调显示现行行、显示打印边距，将其勾选，Tab宽度设4，打印编距字段设80。程序代码协助：采预设即可。语法：可设定关键词、字符串等等的显示颜色。附注：采预设即可。输入：全部字段都勾选。浮动说明：采预设即可。导览：采预设即可。使自动排版排出来的效果，最符合Java设计惯例的设定：自动排版设定：窗口-&gt;喜好设定-&gt;Java-&gt;程序代码制作格式。换行：全部不勾选。分行：行长度上限设：80。样式：只将强制转型后插入空白勾选。内缩空格数目：设为4。<br /><br />经常用到的Eclipse快捷键<br />存盘 Ctrl+s(一定记住)<br />注释代码 Ctrl+/<br />取消注释 Ctrl+\(Eclipse3已经都合并到Ctrl+/了)<br />代码辅助 Alt+/<br />快速修复 Ctrl+1<br />代码格式化 Ctrl+Shift+f<br />整理导入 Ctrl+Shift+o<br />切换窗口 Ctrl+f6&lt;可改为ctrl+tab方便&gt;<br />ctrl+shift+M 导入未引用的包<br />ctrl+w 关闭单个窗口<br />F3 跳转到类、变量的声明<br />F11 运行上次程序<br />Ctrl + F11 调试上次程序<br />Alt + 回下一个编辑点<br />ctrl+shift+T 查找工程中的类<br /></p>
<img src ="http://www.blogjava.net/strive/aggbug/83829.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/strive/" target="_blank">一手的小窝窝</a> 2006-11-27 16:54 <a href="http://www.blogjava.net/strive/articles/83829.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaScript中的正则表达</title><link>http://www.blogjava.net/strive/articles/83656.html</link><dc:creator>一手的小窝窝</dc:creator><author>一手的小窝窝</author><pubDate>Sun, 26 Nov 2006 12:11:00 GMT</pubDate><guid>http://www.blogjava.net/strive/articles/83656.html</guid><wfw:comment>http://www.blogjava.net/strive/comments/83656.html</wfw:comment><comments>http://www.blogjava.net/strive/articles/83656.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/strive/comments/commentRss/83656.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/strive/services/trackbacks/83656.html</trackback:ping><description><![CDATA[
		<h1>JavaScript中的正则表达式</h1>
		<span id="adcontent">
		</span>
		<p>正则表达式(regular expression)对象包含一个正则表达式模式(pattern)。它具有用正则表达式模式去匹配或代替一个串(string)中特定字符(或字符集合)的属性(properties)和方法(methods)。 要为一个单独的正则表达式添加属性,可以使用正则表达式构造函数(constructor function)，无论何时被调用的预设置的正则表达式拥有静态的属性(the predefined RegExp object has static properties that are set whenever any regular expression is used, 我不知道我翻得对不对，将原文列出，请自行翻译)。 </p>
		<ul>
				<li>创建： <br />一个文本格式或正则表达式构造函数 <br />文本格式： /pattern/flags <br />正则表达式构造函数： new RegExp("pattern"[,"flags"]); 
</li>
				<li>参数说明： <br />pattern -- 一个正则表达式文本 <br />flags -- 如果存在，将是以下值： <br />g: 全局匹配 <br />i: 忽略大小写 <br />gi: 以上组合</li>
		</ul>
		<p>[<font color="#ff0000">注意</font>] <em>文本格式的参数不用引号，而在用构造函数时的参数需要引号。如：/ab+c/i new RegExp("ab+c","i")是实现一样的功能。在构造函数中，一些特殊字符需要进行转意(在特殊字符前加"\")。如：re = new RegExp("\\w+") </em></p>
		<p>正则表达式中的特殊字符 </p>
		<p>
		</p>
		<table cellspacing="0" cellpadding="1" width="90%" bgcolor="#000000">
				<tbody>
						<tr>
								<td>
										<table cellspacing="1" cellpadding="3" width="100%" bgcolor="#ffffff">
												<tbody>
														<tr align="middle" bgcolor="#ccccff">
																<td>字符 </td>
																<td>含意 </td>
														</tr>
														<tr bgcolor="#dfdfdf">
																<td>\</td>
																<td>
																		<p>做为转意，即通常在"\"后面的字符不按原来意义解释，如/b/匹配字符"b"，当b前面加了反斜杆后/\b/，转意为匹配一个单词的边界。 <br />-或- <br />对正则表达式功能字符的还原，如"*"匹配它前面元字符0次或多次，/a*/将匹配a,aa,aaa，加了"\"后，/a\*/将只匹配"a*"。 </p>
																</td>
														</tr>
														<tr>
																<td>^ </td>
																<td>匹配一个输入或一行的开头，/^a/匹配"an A"，而不匹配"An a" </td>
														</tr>
														<tr bgcolor="#dfdfdf">
																<td>$ </td>
																<td>匹配一个输入或一行的结尾，/a$/匹配"An a"，而不匹配"an A" </td>
														</tr>
														<tr>
																<td>* </td>
																<td>匹配前面元字符0次或多次，/ba*/将匹配b,ba,baa,baaa </td>
														</tr>
														<tr bgcolor="#dfdfdf">
																<td>+ </td>
																<td>匹配前面元字符1次或多次，/ba*/将匹配ba,baa,baaa </td>
														</tr>
														<tr>
																<td>? </td>
																<td>匹配前面元字符0次或1次，/ba*/将匹配b,ba </td>
														</tr>
														<tr bgcolor="#dfdfdf">
																<td>(x) </td>
																<td>匹配x保存x在名为$1...$9的变量中 </td>
														</tr>
														<tr>
																<td>x|y </td>
																<td>匹配x或y </td>
														</tr>
														<tr bgcolor="#dfdfdf">
																<td>{n} </td>
																<td>精确匹配n次 </td>
														</tr>
														<tr>
																<td>{n,} </td>
																<td>匹配n次以上 </td>
														</tr>
														<tr bgcolor="#dfdfdf">
																<td>{n,m} </td>
																<td>匹配n-m次 </td>
														</tr>
														<tr>
																<td>[xyz] </td>
																<td>字符集(character set)，匹配这个集合中的任一一个字符(或元字符) </td>
														</tr>
														<tr bgcolor="#dfdfdf">
																<td>[^xyz] </td>
																<td>不匹配这个集合中的任何一个字符 </td>
														</tr>
														<tr>
																<td>[\b] </td>
																<td>匹配一个退格符</td>
														</tr>
														<tr bgcolor="#dfdfdf">
																<td>\b </td>
																<td>匹配一个单词的边界 </td>
														</tr>
														<tr>
																<td>\B </td>
																<td>匹配一个单词的非边界</td>
														</tr>
														<tr bgcolor="#dfdfdf">
																<td>\cX </td>
																<td>这儿，X是一个控制符，/\cM/匹配Ctrl-M </td>
														</tr>
														<tr>
																<td>\d </td>
																<td>匹配一个字数字符，/\d/ = /[0-9]/ </td>
														</tr>
														<tr bgcolor="#dfdfdf">
																<td>\D </td>
																<td>匹配一个非字数字符，/\D/ = /[^0-9]/ </td>
														</tr>
														<tr>
																<td>\n </td>
																<td>匹配一个换行符 </td>
														</tr>
														<tr bgcolor="#dfdfdf">
																<td>\r </td>
																<td>匹配一个回车符 </td>
														</tr>
														<tr>
																<td>\s </td>
																<td>匹配一个空白字符，包括\n,\r,\f,\t,\v等 </td>
														</tr>
														<tr bgcolor="#dfdfdf">
																<td>\S </td>
																<td>匹配一个非空白字符，等于/[^\n\f\r\t\v]/ </td>
														</tr>
														<tr>
																<td>\t </td>
																<td>匹配一个制表符 </td>
														</tr>
														<tr bgcolor="#dfdfdf">
																<td>\v </td>
																<td>匹配一个重直制表符 </td>
														</tr>
														<tr>
																<td>\w </td>
																<td>匹配一个可以组成单词的字符(alphanumeric，这是我的意译，含数字)，包括下划线，如[\w]匹配"$5.98"中的5，等于[a-zA-Z0-9] </td>
														</tr>
														<tr bgcolor="#dfdfdf">
																<td>\W </td>
																<td>匹配一个不可以组成单词的字符，如[\W]匹配"$5.98"中的$，等于[^a-zA-Z0-9]。</td>
														</tr>
												</tbody>
										</table>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<p>说了这么多了，我们来看一些正则表达式的实际应用的例子： </p>
		<blockquote style="MARGIN-RIGHT: 0px">
				<p>E-mail地址验证: <br /> function test_email(strEmail) { <br />  var myReg = /^[_a-z0-9]+@([_a-z0-9]+\.)+[a-z0-9]{2,3}$/; <br />  if(myReg.test(strEmail)) return true; <br />  return false; <br /> } <br />HTML代码的屏蔽 <br /> function mask_HTMLCode(strInput) { <br />   var myReg = /&lt;(\w+)&gt;/; <br />   return strInput.replace(myReg, "&amp;lt;$1&amp;gt;"); <br /> }</p>
		</blockquote>
		<p>
				<br /> </p>
		<p>
				<strong>正则表达式对象的属性及方法</strong>
				<br />　　预定义的正则表达式拥有有以下静态属性：input, multiline, lastMatch, lastParen, leftContext, rightContext和$1到$9。其中input和multiline可以预设置。其他属性的值在执行过exec或test方法后被根据不同条件赋以不同的值。许多属性同时拥有长和短(perl风格)的两个名字，并且，这两个名字指向同一个值。(JavaScript模拟perl的正则表达式) <br />正则表达式对象的属性 
</p>
		<table cellspacing="0" cellpadding="1" width="90%" bgcolor="#000000">
				<tbody>
						<tr>
								<td>
										<table cellspacing="1" cellpadding="1" width="100%" bgcolor="#ffffff">
												<tbody>
														<tr valign="center" bgcolor="#ccccff">
																<td>属性</td>
																<td>含义</td>
														</tr>
														<tr bgcolor="#dfdfdf">
																<td>$1...$9</td>
																<td>如果它(们)存在，是匹配到的子串 </td>
														</tr>
														<tr>
																<td>$_</td>
																<td>参见input </td>
														</tr>
														<tr bgcolor="#dfdfdf">
																<td>$*</td>
																<td>参见multiline </td>
														</tr>
														<tr>
																<td>$&amp;</td>
																<td>参见lastMatch </td>
														</tr>
														<tr bgcolor="#dfdfdf">
																<td>$+</td>
																<td>参见lastParen </td>
														</tr>
														<tr>
																<td>$`</td>
																<td>参见leftContext </td>
														</tr>
														<tr bgcolor="#dfdfdf">
																<td>$'　　　　　　　　　</td>
																<td>参见rightContext </td>
														</tr>
														<tr>
																<td>constructor　　　 </td>
																<td>创建一个对象的一个特殊的函数原型 </td>
														</tr>
														<tr bgcolor="#dfdfdf">
																<td>global　　　　　　 </td>
																<td>是否在整个串中匹配(bool型) </td>
														</tr>
														<tr>
																<td>ignoreCase　　　　</td>
																<td>匹配时是否忽略大小写(bool型) </td>
														</tr>
														<tr bgcolor="#dfdfdf">
																<td>input　　　　　　　</td>
																<td>被匹配的串 </td>
														</tr>
														<tr>
																<td>lastIndex　　　　 </td>
																<td>最后一次匹配的索引 </td>
														</tr>
														<tr bgcolor="#dfdfdf">
																<td>lastParen　　　　 </td>
																<td>最后一个括号括起来的子串 </td>
														</tr>
														<tr>
																<td>leftContext　　　 </td>
																<td>最近一次匹配以左的子串 </td>
														</tr>
														<tr bgcolor="#dfdfdf">
																<td>multiline　　　　 </td>
																<td>是否进行多行匹配(bool型) </td>
														</tr>
														<tr>
																<td>prototype　　　　 </td>
																<td>允许附加属性给对象 </td>
														</tr>
														<tr bgcolor="#dfdfdf">
																<td>rightContext　　　</td>
																<td>最近一次匹配以右的子串 </td>
														</tr>
														<tr>
																<td>source　　　　　　 </td>
																<td>正则表达式模式 </td>
														</tr>
														<tr bgcolor="#dfdfdf">
																<td>lastIndex　　　　 </td>
																<td>最后一次匹配的索引 </td>
														</tr>
												</tbody>
										</table>
								</td>
						</tr>
				</tbody>
		</table>
		<b>
				<br />正则表达式对象的方法 <br /></b>
		<table cellspacing="0" cellpadding="1" width="90%" bgcolor="#000000">
				<tbody>
						<tr>
								<td>
										<table cellspacing="1" cellpadding="1" width="100%" bgcolor="#ffffff">
												<tbody>
														<tr align="middle" bgcolor="#ccccff">
																<td>方法</td>
																<td>含义</td>
														</tr>
														<tr bgcolor="#dfdfdf">
																<td>compile　　　　　 </td>
																<td>正则表达式比较 </td>
														</tr>
														<tr>
																<td>exec　　　　　　　</td>
																<td>执行查找 </td>
														</tr>
														<tr bgcolor="#dfdfdf">
																<td>test　　　　　　　</td>
																<td>进行匹配 </td>
														</tr>
														<tr>
																<td>toSource　　　　　</td>
																<td>返回特定对象的定义(literal representing)，其值可用来创建一个新的对象。重载Object.toSource方法得到的。 </td>
														</tr>
														<tr bgcolor="#dfdfdf">
																<td>toString　　　　　</td>
																<td>返回特定对象的串。重载Object.toString方法得到的。 </td>
														</tr>
														<tr>
																<td>valueOf　　　　　 </td>
																<td>返回特定对象的原始值。重载Object.valueOf方法得到</td>
														</tr>
												</tbody>
										</table>
								</td>
						</tr>
				</tbody>
		</table>例子 <br />&lt;script language = "JavaScript"&gt; <br />var myReg = /(w+)s(w+)/; <br />var str  = "John Smith"; <br />var newstr = str.replace(myReg, "$2, $1"); <br />document.write(newstr); <br />&lt;/script&gt; <br />将输出"Smith, John" <img src ="http://www.blogjava.net/strive/aggbug/83656.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/strive/" target="_blank">一手的小窝窝</a> 2006-11-26 20:11 <a href="http://www.blogjava.net/strive/articles/83656.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>