﻿<?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-编程症候群</title><link>http://www.blogjava.net/huj/</link><description /><language>zh-cn</language><lastBuildDate>Sun, 12 Apr 2026 13:24:17 GMT</lastBuildDate><pubDate>Sun, 12 Apr 2026 13:24:17 GMT</pubDate><ttl>60</ttl><item><title>Ajax小结</title><link>http://www.blogjava.net/huj/archive/2006/10/31/78275.html</link><dc:creator>The One</dc:creator><author>The One</author><pubDate>Tue, 31 Oct 2006 07:03:00 GMT</pubDate><guid>http://www.blogjava.net/huj/archive/2006/10/31/78275.html</guid><wfw:comment>http://www.blogjava.net/huj/comments/78275.html</wfw:comment><comments>http://www.blogjava.net/huj/archive/2006/10/31/78275.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huj/comments/commentRss/78275.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huj/services/trackbacks/78275.html</trackback:ping><description><![CDATA[
		<p>这个月工作比较忙,再加上读了一本&lt;javascript权威指南&gt;,还有....所以没有心上来写blog,这个月最后一天了,赶上来补下作业,这个月主要研究了下ajax,其实对于ajax,年初兴起的时候玩过一阵,也做过一些东东,当时的技术也处在异步调用,返回xml,更新网页控件这个阶段,半年过去了,Prototype.js,DWR,TrimPath JSTemplate等技术的成熟,使ajax更平民化,使我们更容易在自已的系统中使用.以下总结一下这个月学到的东东,同时与以前使用ajax进行对比.<br />高级javascript总结<br />1.函数也是对象<br /></p>
		<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 id="Codehighlighter1_12_54_Open_Image" onclick="this.style.display='none'; Codehighlighter1_12_54_Open_Text.style.display='none'; Codehighlighter1_12_54_Closed_Image.style.display='inline'; Codehighlighter1_12_54_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
				<img id="Codehighlighter1_12_54_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_12_54_Closed_Text.style.display='none'; Codehighlighter1_12_54_Open_Image.style.display='inline'; Codehighlighter1_12_54_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				<span style="COLOR: #0000ff">var</span>
				<span style="COLOR: #000000"> myDog </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span id="Codehighlighter1_12_54_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_12_54_Open_Text">
						<span style="COLOR: #000000">{<br /><img id="Codehighlighter1_31_52_Open_Image" onclick="this.style.display='none'; Codehighlighter1_31_52_Open_Text.style.display='none'; Codehighlighter1_31_52_Closed_Image.style.display='inline'; Codehighlighter1_31_52_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_31_52_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_31_52_Closed_Text.style.display='none'; Codehighlighter1_31_52_Open_Image.style.display='inline'; Codehighlighter1_31_52_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    bark: </span>
						<span style="COLOR: #0000ff">function</span>
						<span style="COLOR: #000000">()</span>
						<span id="Codehighlighter1_31_52_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_31_52_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        alert('Woof</span>
								<span style="COLOR: #000000">!</span>
								<span style="COLOR: #000000">');<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
				<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_70_148_Open_Image" onclick="this.style.display='none'; Codehighlighter1_70_148_Open_Text.style.display='none'; Codehighlighter1_70_148_Closed_Image.style.display='inline'; Codehighlighter1_70_148_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_70_148_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_70_148_Closed_Text.style.display='none'; Codehighlighter1_70_148_Open_Image.style.display='inline'; Codehighlighter1_70_148_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span style="COLOR: #0000ff">var</span>
				<span style="COLOR: #000000"> myCat </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span id="Codehighlighter1_70_148_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_70_148_Open_Text">
						<span style="COLOR: #000000">{<br /><img id="Codehighlighter1_89_146_Open_Image" onclick="this.style.display='none'; Codehighlighter1_89_146_Open_Text.style.display='none'; Codehighlighter1_89_146_Closed_Image.style.display='inline'; Codehighlighter1_89_146_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_89_146_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_89_146_Closed_Text.style.display='none'; Codehighlighter1_89_146_Open_Image.style.display='inline'; Codehighlighter1_89_146_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    meow: </span>
						<span style="COLOR: #0000ff">function</span>
						<span style="COLOR: #000000">()</span>
						<span id="Codehighlighter1_89_146_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_89_146_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        alert('I am a lazy cat. I will not meow </span>
								<span style="COLOR: #0000ff">for</span>
								<span style="COLOR: #000000"> you.');<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
				<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> <br /><img id="Codehighlighter1_186_237_Open_Image" onclick="this.style.display='none'; Codehighlighter1_186_237_Open_Text.style.display='none'; Codehighlighter1_186_237_Closed_Image.style.display='inline'; Codehighlighter1_186_237_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_186_237_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_186_237_Closed_Text.style.display='none'; Codehighlighter1_186_237_Open_Image.style.display='inline'; Codehighlighter1_186_237_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span style="COLOR: #0000ff">function</span>
				<span style="COLOR: #000000"> annoyThePet(petFunction)</span>
				<span id="Codehighlighter1_186_237_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_186_237_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">let's see what the pet can do</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    petFunction();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000">annoy the dog:</span>
				<span style="COLOR: #008000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #000000">annoyThePet(myDog.bark);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000">annoy the cat:</span>
				<span style="COLOR: #008000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #000000">annoyThePet(myCat.meow);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
		</div>2.数组,对象成员<br />js中创建对象以及给对象动态创建成员<br /><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 id="Codehighlighter1_10_11_Open_Image" onclick="this.style.display='none'; Codehighlighter1_10_11_Open_Text.style.display='none'; Codehighlighter1_10_11_Closed_Image.style.display='inline'; Codehighlighter1_10_11_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_10_11_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_10_11_Closed_Text.style.display='none'; Codehighlighter1_10_11_Open_Image.style.display='inline'; Codehighlighter1_10_11_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> obj </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span id="Codehighlighter1_10_11_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_10_11_Open_Text"><span style="COLOR: #000000">{}</span></span><span style="COLOR: #000000">; </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">new, empty object</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">obj['member_1'] </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> '</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000"> is the member value';<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />obj['flag_2'] </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br /><img id="Codehighlighter1_136_156_Open_Image" onclick="this.style.display='none'; Codehighlighter1_136_156_Open_Text.style.display='none'; Codehighlighter1_136_156_Closed_Image.style.display='inline'; Codehighlighter1_136_156_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_136_156_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_136_156_Closed_Text.style.display='none'; Codehighlighter1_136_156_Open_Image.style.display='inline'; Codehighlighter1_136_156_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />obj['some_function'] </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">()</span><span id="Codehighlighter1_136_156_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_136_156_Open_Text"><span style="COLOR: #000000">{ </span><span id="Codehighlighter1_138_155_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id="Codehighlighter1_138_155_Open_Text"><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"> do something </span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div>以上代码等同 
<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 id="Codehighlighter1_10_114_Open_Image" onclick="this.style.display='none'; Codehighlighter1_10_114_Open_Text.style.display='none'; Codehighlighter1_10_114_Closed_Image.style.display='inline'; Codehighlighter1_10_114_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_10_114_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_10_114_Closed_Text.style.display='none'; Codehighlighter1_10_114_Open_Image.style.display='inline'; Codehighlighter1_10_114_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> obj </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span id="Codehighlighter1_10_114_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_10_114_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    member_1:'</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000"> is the member value',<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    flag_2: </span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">,<br /><img id="Codehighlighter1_92_112_Open_Image" onclick="this.style.display='none'; Codehighlighter1_92_112_Open_Text.style.display='none'; Codehighlighter1_92_112_Closed_Image.style.display='inline'; Codehighlighter1_92_112_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_92_112_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_92_112_Closed_Text.style.display='none'; Codehighlighter1_92_112_Open_Image.style.display='inline'; Codehighlighter1_92_112_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    some_function: </span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">()</span><span id="Codehighlighter1_92_112_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_92_112_Open_Text"><span style="COLOR: #000000">{ </span><span id="Codehighlighter1_94_111_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id="Codehighlighter1_94_111_Open_Text"><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"> do something </span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span></div><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: #000000">obj.some_function();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />obj['some_function']();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div>上面代码表示在对象中使用成员,类似于hash表中使用一个key.<br />3.在js中使用class
<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: #008000">//</span><span style="COLOR: #008000">defining a new class called Pet</span><span style="COLOR: #008000"><br /><img id="Codehighlighter1_66_107_Open_Image" onclick="this.style.display='none'; Codehighlighter1_66_107_Open_Text.style.display='none'; Codehighlighter1_66_107_Closed_Image.style.display='inline'; Codehighlighter1_66_107_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_66_107_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_66_107_Closed_Text.style.display='none'; Codehighlighter1_66_107_Open_Image.style.display='inline'; Codehighlighter1_66_107_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> Pet </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(petName, age)</span><span id="Codehighlighter1_66_107_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_66_107_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.name </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> petName;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.age </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> age;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">let's create an object of the Pet class</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> famousDog </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Pet('Santa\'s Little Helper', </span><span style="COLOR: #000000">15</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />alert('This pet is called ' </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> famousDog.name);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div>JS中类的继承一般通过<span class="code">prototype属性<br /><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 id="Codehighlighter1_38_113_Open_Image" onclick="this.style.display='none'; Codehighlighter1_38_113_Open_Text.style.display='none'; Codehighlighter1_38_113_Closed_Image.style.display='inline'; Codehighlighter1_38_113_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_38_113_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_38_113_Closed_Text.style.display='none'; Codehighlighter1_38_113_Open_Image.style.display='inline'; Codehighlighter1_38_113_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="COLOR: #000000">Pet.prototype.communicate </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">()</span><span id="Codehighlighter1_38_113_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_38_113_Open_Text"><span style="COLOR: #000000">{ <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    alert('I </span><span style="COLOR: #0000ff">do</span><span style="COLOR: #000000"> not know what I should say, but my name is ' </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.name);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div></span>用Prototype.js会简单一些,prototype.js这个框架的代码很值得一读,里面用到了很多高级的JS技巧,巧妙的设计的许多优秀的设计方案.<br /><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">var</span><span style="COLOR: #000000"> Pet </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> Class.create();<br /><img id="Codehighlighter1_42_251_Open_Image" onclick="this.style.display='none'; Codehighlighter1_42_251_Open_Text.style.display='none'; Codehighlighter1_42_251_Closed_Image.style.display='inline'; Codehighlighter1_42_251_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_42_251_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_42_251_Closed_Text.style.display='none'; Codehighlighter1_42_251_Open_Image.style.display='inline'; Codehighlighter1_42_251_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />Pet.prototype </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span id="Codehighlighter1_42_251_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_42_251_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">our 'constructor'</span><span style="COLOR: #008000"><br /><img id="Codehighlighter1_100_144_Open_Image" onclick="this.style.display='none'; Codehighlighter1_100_144_Open_Text.style.display='none'; Codehighlighter1_100_144_Closed_Image.style.display='inline'; Codehighlighter1_100_144_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_100_144_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_100_144_Closed_Text.style.display='none'; Codehighlighter1_100_144_Open_Image.style.display='inline'; Codehighlighter1_100_144_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span><span style="COLOR: #000000">    initialize: </span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(petName, age)</span><span id="Codehighlighter1_100_144_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_100_144_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.name </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> petName;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.age </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> age;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000">,<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    <br /><img id="Codehighlighter1_173_249_Open_Image" onclick="this.style.display='none'; Codehighlighter1_173_249_Open_Text.style.display='none'; Codehighlighter1_173_249_Closed_Image.style.display='inline'; Codehighlighter1_173_249_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_173_249_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_173_249_Closed_Text.style.display='none'; Codehighlighter1_173_249_Open_Image.style.display='inline'; Codehighlighter1_173_249_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    communicate: </span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">()</span><span id="Codehighlighter1_173_249_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_173_249_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        alert('I </span><span style="COLOR: #0000ff">do</span><span style="COLOR: #000000"> not know what I should say, but my name is ' </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.name);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000">;    <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span></div>4.将函数作为参数,类似于ruby的闭包写法<br /><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">var</span><span style="COLOR: #000000"> myArray </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> ['first', 'second', 'third'];<br /><img id="Codehighlighter1_79_143_Open_Image" onclick="this.style.display='none'; Codehighlighter1_79_143_Open_Text.style.display='none'; Codehighlighter1_79_143_Closed_Image.style.display='inline'; Codehighlighter1_79_143_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_79_143_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_79_143_Closed_Text.style.display='none'; Codehighlighter1_79_143_Open_Image.style.display='inline'; Codehighlighter1_79_143_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />myArray.each( </span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(item, index)</span><span id="Codehighlighter1_79_143_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_79_143_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    alert('The item </span><span style="COLOR: #0000ff">in</span><span style="COLOR: #000000"> the position #' </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> index </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> ' is:' </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> item);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></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/huj/aggbug/78275.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huj/" target="_blank">The One</a> 2006-10-31 15:03 <a href="http://www.blogjava.net/huj/archive/2006/10/31/78275.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>eXtremeTable体验</title><link>http://www.blogjava.net/huj/archive/2006/09/21/71186.html</link><dc:creator>The One</dc:creator><author>The One</author><pubDate>Thu, 21 Sep 2006 12:11:00 GMT</pubDate><guid>http://www.blogjava.net/huj/archive/2006/09/21/71186.html</guid><wfw:comment>http://www.blogjava.net/huj/comments/71186.html</wfw:comment><comments>http://www.blogjava.net/huj/archive/2006/09/21/71186.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huj/comments/commentRss/71186.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huj/services/trackbacks/71186.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: eXtremeTable--一个超强的表标签库&nbsp;&nbsp;<a href='http://www.blogjava.net/huj/archive/2006/09/21/71186.html'>阅读全文</a><img src ="http://www.blogjava.net/huj/aggbug/71186.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huj/" target="_blank">The One</a> 2006-09-21 20:11 <a href="http://www.blogjava.net/huj/archive/2006/09/21/71186.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一些值得珍藏的搞笑短信</title><link>http://www.blogjava.net/huj/archive/2006/09/19/70486.html</link><dc:creator>The One</dc:creator><author>The One</author><pubDate>Tue, 19 Sep 2006 03:54:00 GMT</pubDate><guid>http://www.blogjava.net/huj/archive/2006/09/19/70486.html</guid><wfw:comment>http://www.blogjava.net/huj/comments/70486.html</wfw:comment><comments>http://www.blogjava.net/huj/archive/2006/09/19/70486.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huj/comments/commentRss/70486.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huj/services/trackbacks/70486.html</trackback:ping><description><![CDATA[
		<p> <br />那天遇见上帝，他说答应我一个愿望，我说希望世界和平，他说太难不好办。我拿出你的相片希望他把你变漂亮点，上帝接过你的相片说：“拿地球仪我再看看” </p>
		<p>  </p>
		<p>老婆是操作系统，一旦安装卸载十分麻烦；二奶是互联网，风光无限花钱不断；小蜜是桌面，只要你有兴趣天天可以更换。 </p>
		<p>  </p>
		<p>我谨代表党中央，国务院，全国人大，中央军委，港澳台办公室向你提出强烈抗议：你昨晚尿床留下的中国地图为啥没有台湾！！！今晚记得补上！！！ </p>
		<p>  </p>
		<p>蚂蚁娶了蜈蚣为妻，洞房之夜后，问蚂蚁有何感想，蚂蚁愤愤的说：扳开一条腿不是，又扳开一条腿也不是......妈的扳了一晚上的腿！ </p>
		<p>  </p>
		<p>一个赌徒的名字在每个国家都不一样，在日本叫倒光银子，俄罗斯叫苏斯里娃，韩国叫金德苏，在美国叫约翰约森，在中国叫苏安逸，在德国叫里瓦尔贝斯。 </p>
		<p>  </p>
		<p>某男入厕便秘，忽见一人飞奔而入，顷刻风雨交加。“哥们，真羡慕你，那么快！”“羡慕啥？！还没脱裤子呢！！” </p>
		<p>  </p>
		<p>上联：想当初，红米饭南瓜汤，老婆一个孩子一班。 </p>
		<p>下联：看今天，白米饭王八汤，孩子一个老婆一班。 </p>
		<p>横批：与时俱进 </p>
		<p>  </p>
		<p>公牛出差，恐母牛无人照顾。便寻思：猴子狡猾，老虎凶残，唯大象可靠。不日公牛归来从象处领回夫人，次日公牛怒斥：牛B大了！ </p>
		<p>  </p>
		<p>一夫妇带吃奶的孩子去餐厅用餐，孩子哭闹，女人赶紧掀衣，服务生制止，女大怒：难道这也不行吗？服务生说：露胸可以但不能自带饮料。 </p>
		<p>  </p>
		<p>计生办的工作人员到一个山村去检查工作，发现超生很严重，就问老乡：“你们这儿怎么超生这么严重呢？”老乡答道：“没电”。“没电就超生呀！”当官的生气地说。“没电没事干”。“没事干咋了？”当官的一脸困惑。“没事干，就干那事呗。” </p>
		<p>  </p>
		<p>那英洗澡-雾里看花。毛宁撒尿-淘声依旧。董文华初夜-血染的风采。陈红捉奸-常回家看看。彭丽媛大便-在希望的田野上。杨玉莹放屁-轻轻的告诉你。 </p>
		<p>  </p>
		<p>有两个傻子想开鞋店，听说鳄鱼的鞋值钱，他们就去河里抓鳄鱼了，还真没少抓，都40多只了。一个傻子说：“大哥，抓到第50只鳄鱼它要是再没穿鞋咱就别抓了！！！” </p>
		<p>  </p>
		<p>你拉着一头猪逛街，很幸福的样子，我经过满怀同情的说：“看一个人的档次，就看他跟谁在一起。”话未说完，就看那猪很鄙夷的弃你而去！ </p>
		<p>  </p>
		<p>一男未娶，一女未嫁，经媒人介绍两人结合，男的自我介绍：一杆枪，两颗蛋，38年没抗战。女的：一扇窗，两扇门，26年没进人。媒人曰：傻比傻蛋。 </p>
		<p>  </p>
		<p>油田，一对新人刚完婚。对长送来一副对联，上联：新人新井新钻头。下联：越钻越深越出油。横批：月明松。（明字分开读即可） </p>
		<p>  </p>
		<p>一个男生很喜欢一个女孩，一直都紧追不舍，女孩对男生又不感冒，由于男生死缠烂打，终于有一天女生在上课的时候转身大力的拍了桌子，大声对男生说：你到底喜欢我什么阿！！我改还不行么？？？ </p>
		<p>  </p>
		<p>瘸子和瞎子同骑一辆车外出。瞎子骑，瘸子看路。突然瘸子发现前面有一条深沟，急呼：“沟沟沟！”瞎子回唱到：噢嘞 噢嘞 噢嘞！二人一起掉入沟中。 </p>
		<p>  </p>
		<p>山东扫盲，老师在黑板上写“日”和“天”说：一天就是一日，一日就是一天。下边一农妇说：老师你说的不对，一天一日行，一日一天俺可受不了。 </p>
		<p>  </p>
		<p>某人在老婆怀孕9个月还同房，一月后生下个男孩，一出生就问：我爸爸是谁？他说：是我啊！于是男孩用手指狂戳他爸的头说：这样戳你疼不疼？疼不疼？ </p>
		<p>  </p>
		<p>好朋友就象胸罩舒服贴心永远支撑着你，象内裤就算你大起大落他永远包容着你，还象卫生巾你伤心流血他帮你擦，更象避孕套你捅了多大的娄子他都帮你兜着！ </p>
		<p>  </p>
		<p>一老农为试伟哥之效，拿来喂公鸡，次日老农发现全村母鸡都被干死。抬头见公鸡立于树梢，问其故，鸡曰：“想日老鹰” </p>
		<p>  </p>
		<p>我真的好累，你让我不停的换体位，换了前位换后位，你让我射了还不让我睡，最后还让我谈体会，哎，踢球真的好累。 </p>
		<p>  </p>
		<p>绿油油的牧畜芽，大姑娘小媳妇地里爬，谁要在来偷牧畜，种一地大肌八。稀奇稀奇真稀奇，哪有地里种刁的，要是你家的刁丰收了，你要预备多少大闺女。 </p>
		<p>  </p>
		<p>和绅考纪晓岚，出上联：树上有只鸟，鸟摇树也摇，鸟都飞走了，树还摇三摇。纪晓岚对下联：和绅去尿尿，鸟摇尿也摇，尿都尿完了，鸟还摇三摇。</p>
		<p>白天停水，晚上停电，发不出工资，买不了面，打开邓选找到了答案，原来是社会主义初级阶段。往后一翻，我操/一百年不变/这可咋办？ </p>
		<p>  </p>
		<p>和总统睡觉叫国睡，和乞丐睡觉叫地睡，和老婆睡觉叫所得睡，和小姨子睡觉叫增值睡，和情人睡觉叫偷睡，和小姐睡觉叫印花睡。 </p>
		<p>  </p>
		<p>丈夫开灯时不小心把手印留在刚刷过油漆的墙壁上。次日，妻子叫来油漆工：我想让你看看昨晚我丈夫摸过的地方。油漆工晕倒…… </p>
		<p>  </p>
		<p>小明：爸爸，古时候，皇帝自称寡人，那皇后该自称什么？父亲：傻孩子，那皇后当然称寡妇啦！ </p>
		<p>  </p>
		<p>护士看到病人在病房喝酒，就走过去小声叮嘱说：“小心肝！”病人微笑道：“小宝贝。” </p>
		<p>  </p>
		<p>生活美好多幸福，朋友很多不孤独。勇敢向前不服输，幽默短信发给猪，猪接短信就笑了，回信我也不要了，就当给猪上料了，效果我也知道了。 </p>
		<p>  </p>
		<p>机密档案：姓名：董全瑞；绰号四虎子；死亡原因：连长说：炸药包一面有强力胶，单手托起粘在碉堡下就行了；临终遗言：连长我操你妈！两面都有胶。 </p>
		<p>  </p>
		<p>那天我看见你了，在超市，你悄悄地把手伸到条码扫描器上，只见屏幕显示猪蹄8元，你以为机器坏了，把脸凑过去看，结果屏幕显示猪头肉5元。 </p>
		<p>  </p>
		<p>十岁男孩小鸡鸡，二十岁男孩侦察鸡，三十岁战斗鸡，四十岁轰炸鸡，五十岁滑翔鸡，六十岁手扶拖拉鸡，七十岁隐型鸡，八十岁停鸡。 </p>
		<p>  </p>
		<p>一农妇刚进城当保姆，给主人收拾床时发现一用过避孕套，不知是何物，便问女主人。 </p>
		<p>女主人反问：你们不做爱吗？农妇回答：做，但没你们这磨狂，都脱皮了。 </p>
		<p>  </p>
		<p>我昨天才知道，有一位MM愿意为我失去生命！呵呵，好感动！她斩钉截铁对我说：你再缠着我，我就去死...... </p>
		<p>  </p>
		<p>某贫困山区，因无钱，男人皆用尿素袋做内裤，一日某新人结婚，男除去长裤，新娘惊叫晕倒，只见内裤正面印，净重25公斤。 <br /></p>
<img src ="http://www.blogjava.net/huj/aggbug/70486.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huj/" target="_blank">The One</a> 2006-09-19 11:54 <a href="http://www.blogjava.net/huj/archive/2006/09/19/70486.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用acegi-security管理权限 </title><link>http://www.blogjava.net/huj/archive/2006/09/16/70004.html</link><dc:creator>The One</dc:creator><author>The One</author><pubDate>Sat, 16 Sep 2006 01:41:00 GMT</pubDate><guid>http://www.blogjava.net/huj/archive/2006/09/16/70004.html</guid><wfw:comment>http://www.blogjava.net/huj/comments/70004.html</wfw:comment><comments>http://www.blogjava.net/huj/archive/2006/09/16/70004.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huj/comments/commentRss/70004.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huj/services/trackbacks/70004.html</trackback:ping><description><![CDATA[
		<p>
				<br />
				<br />
				<br />对于acegi-security用过spring的朋友一定听说过,早就想学习一下,但一直没有机会用，加上acegi-security本身很复杂,算起来从打算学到现在差不多都一年多了,版本也从0.5升到了1.1,正巧最近公司的业务处理中间件要提高安全性,要做一个权限管理控制的模块,本来如果直接写个拦截器就搞定了,不过本着不求最快但求最好的思想,决定用一下大名顶顶的acegi-security,咱们也来玩玩RBAC（基于角色的权限控制）,参考了一些资料,主要来自springside,差不多搞明白了acegi-security是怎么回事,这里不重复别人的文字,主要谈谈我的使用经验,如果是一般的j2ee web平台直接使用差不多就没什么问题,关键我们中间件是使用的内部协议,而不是http,学习acegi-security后,感觉它主要实现都是靠着filter来的,结果就自已写了一个拦截器取代filter,然后使用自带的(or springside的方法安全拦截器),安全控制算是整合上去了,后来发现现有的程序只有一个方法处理,并要从请求的数据中取得条件来判断是否有权利调用后台的业务模块,说明白点就有点类似在http下的URL路径，虽然acegi-security提供了方法的拦截，但好像不能拦截方法的参数，如果有的话我就可以通过参数来判断是否有权限操作了，or把原来的程序改成一个一个的方法（纯属说笑，呵呵），这样问题就很明显了，acegi-security并没有提供我们协议的安全拦截器（http中是FilterSecurityInterceptor），所以一切都得自已实现，从org.acegisecurity.intercept包下的基类和接口开始，参照它FilterSecurityInterceptor和MethodSecurityInterceptor照葫芦画瓢，我们自已的安全拦截器就出来了,目前系统已完全整成acegi,成为RBAC的权限控制管理<img height="19" src="http://www.blogjava.net/Emoticons/coffee.gif" width="19" border="0" />。ACL的权限控制还没有仔细研究，acegi-security架构也还是有些模糊，此文有待补充...<br /></p>
<img src ="http://www.blogjava.net/huj/aggbug/70004.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huj/" target="_blank">The One</a> 2006-09-16 09:41 <a href="http://www.blogjava.net/huj/archive/2006/09/16/70004.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Selenium使用入门 </title><link>http://www.blogjava.net/huj/archive/2006/09/16/70003.html</link><dc:creator>The One</dc:creator><author>The One</author><pubDate>Sat, 16 Sep 2006 01:40:00 GMT</pubDate><guid>http://www.blogjava.net/huj/archive/2006/09/16/70003.html</guid><wfw:comment>http://www.blogjava.net/huj/comments/70003.html</wfw:comment><comments>http://www.blogjava.net/huj/archive/2006/09/16/70003.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.blogjava.net/huj/comments/commentRss/70003.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huj/services/trackbacks/70003.html</trackback:ping><description><![CDATA[
		<p>
				<br />      Selenium是集成测试工具，是ThoughtWorks公司(就是马同学的那个公司，牛的很)的开源工具，最近在网上看到介绍的文章，自已也用了一下，它主要包括：Selenium IDE，Selenium Remote Control,Selenium Core，主要的思想我个理解就是在使用中生成测试报告，测试用例，以前对这种集成测试也不是很了解，也不知说的对不对,一般对开发，测试人员来说通过Selenium IDE来生成测试用例中的代码，然后再运junit来进行测试，它的测试用例一般为<br /></p>
		<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">package</span>
				<span style="COLOR: #000000"> com.thoughtworks.selenium;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">import</span>
				<span style="COLOR: #000000"> junit.framework.TestCase;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">import</span>
				<span style="COLOR: #000000"> org.openqa.selenium.server.SeleniumServer;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">public</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">class</span>
				<span style="COLOR: #000000"> GoogleTest </span>
				<span style="COLOR: #0000ff">extends</span>
				<span style="COLOR: #000000"> TestCase<br /><img id="Codehighlighter1_162_986_Open_Image" onclick="this.style.display='none'; Codehighlighter1_162_986_Open_Text.style.display='none'; Codehighlighter1_162_986_Closed_Image.style.display='inline'; Codehighlighter1_162_986_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_162_986_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_162_986_Closed_Text.style.display='none'; Codehighlighter1_162_986_Open_Image.style.display='inline'; Codehighlighter1_162_986_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span id="Codehighlighter1_162_986_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_162_986_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />   </span>
						<span style="COLOR: #0000ff">private</span>
						<span style="COLOR: #000000"> Selenium selenium;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_235_410_Open_Image" onclick="this.style.display='none'; Codehighlighter1_235_410_Open_Text.style.display='none'; Codehighlighter1_235_410_Closed_Image.style.display='inline'; Codehighlighter1_235_410_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_235_410_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_235_410_Closed_Text.style.display='none'; Codehighlighter1_235_410_Open_Image.style.display='inline'; Codehighlighter1_235_410_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />   </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">void</span>
						<span style="COLOR: #000000"> setUp() </span>
						<span style="COLOR: #0000ff">throws</span>
						<span style="COLOR: #000000"> Exception </span>
						<span id="Codehighlighter1_235_410_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_235_410_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        String url </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">http://www.google.com</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />       selenium </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">new</span>
								<span style="COLOR: #000000"> DefaultSelenium(</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">localhost</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">, SeleniumServer.DEFAULT_PORT, </span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">*firefox</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">, url);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />       selenium.start();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />   <br /><img id="Codehighlighter1_462_491_Open_Image" onclick="this.style.display='none'; Codehighlighter1_462_491_Open_Text.style.display='none'; Codehighlighter1_462_491_Closed_Image.style.display='inline'; Codehighlighter1_462_491_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_462_491_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_462_491_Closed_Text.style.display='none'; Codehighlighter1_462_491_Open_Image.style.display='inline'; Codehighlighter1_462_491_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />   </span>
						<span style="COLOR: #0000ff">protected</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">void</span>
						<span style="COLOR: #000000"> tearDown() </span>
						<span style="COLOR: #0000ff">throws</span>
						<span style="COLOR: #000000"> Exception </span>
						<span id="Codehighlighter1_462_491_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_462_491_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />       selenium.stop();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />   }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />   <br /><img id="Codehighlighter1_552_979_Open_Image" onclick="this.style.display='none'; Codehighlighter1_552_979_Open_Text.style.display='none'; Codehighlighter1_552_979_Closed_Image.style.display='inline'; Codehighlighter1_552_979_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_552_979_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_552_979_Closed_Text.style.display='none'; Codehighlighter1_552_979_Open_Image.style.display='inline'; Codehighlighter1_552_979_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />   </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">void</span>
						<span style="COLOR: #000000"> testGoogleTestSearch() </span>
						<span style="COLOR: #0000ff">throws</span>
						<span style="COLOR: #000000"> Throwable </span>
						<span id="Codehighlighter1_552_979_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_552_979_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        selenium.open(</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">http://www.google.com</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        assertEquals(</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">Google</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">, selenium.getTitle());<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        selenium.type(</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">q</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">, </span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">Selenium OpenQA</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        assertEquals(</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">Selenium OpenQA</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">, selenium.getValue(</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">q</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">));<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        selenium.click(</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">btnG</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        selenium.waitForPageToLoad(</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">5000</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        assertTrue(selenium.isTextPresent(</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">openqa.org</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">));<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        assertEquals(</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">Selenium OpenQA - Google 搜索</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">, selenium.getTitle());<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    <br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
		</div>
		<p> 可以从setUp()中看到，它需要用到一个叫SeleniumServer的服务器，这个服务器的作用主要是代理的作用，因为same origin policy(就是一个脚本只能在它自已的源站点上运行，我这样理解的，不了的可以查看官方文档)的关系，所以需要加一层去取得网页并能在上面运行测试脚本的服务器，也就是我们的SeleniumServer了，所以才叫Selenium Remote Control，我们的测试用例主要是去连它，而不是真正直接去连接google进行的测试。以后不用想怎么写测试用例了，Selenium Core主要是写html来进行测试，不过同样也可以用Selenium IDE来自动生成html，然后将生成的一个html放到一起，开启TestRunner.html进行自动测试，速度分三步，run,walk,step,run模式下看上去还是很过瘾的，原来javascript可以写出这么牛的软件，呵呵，java6也支持javascript脚本了，看来这门语言还是值得好好研究一下，不能总是停留在看得懂的水平。<br />注意：上面说的服务器在 \selenium-remote-control-0.8.1\server下面<br />启动命令为 java -jar selenium-server.jar <br />参数 -interactive 为使用交互模式，就是可以直接在命令行进行测试<br />          -multiWindow 为多窗体，我试了下，不过好像不行 </p>
<img src ="http://www.blogjava.net/huj/aggbug/70003.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huj/" target="_blank">The One</a> 2006-09-16 09:40 <a href="http://www.blogjava.net/huj/archive/2006/09/16/70003.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于cas单点登陆的一点总结 </title><link>http://www.blogjava.net/huj/archive/2006/09/16/70002.html</link><dc:creator>The One</dc:creator><author>The One</author><pubDate>Sat, 16 Sep 2006 01:39:00 GMT</pubDate><guid>http://www.blogjava.net/huj/archive/2006/09/16/70002.html</guid><wfw:comment>http://www.blogjava.net/huj/comments/70002.html</wfw:comment><comments>http://www.blogjava.net/huj/archive/2006/09/16/70002.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huj/comments/commentRss/70002.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huj/services/trackbacks/70002.html</trackback:ping><description><![CDATA[
		<p>
				<br />总结主要来源于网上的一些文章和论坛的记录以及我自已的一些想法.<br />CAS (Central Authentication Service) 是 Yale 大学的 ITS 开发的一套 JAVA 实现的开源 </p>
		<p>的 SSO(single sign-on) 的服务(主要是2.0，到3.0为ja-sig)。 </p>
		<p>关键字 </p>
		<p>TGC(ticket-granting cookie)--------- 受权的票据证明 </p>
		<p>KDC( Key Distribution Center ) ---------- 密钥发放中心 </p>
		<p>Service ticket(ST) --------- 服务票据， 由 KDC 的 TGS 发放。 任何一台 Workstation 都需要拥有一张有效的 Service Ticket 才能访问域内部的应用 (Applications) 。 如果能正确接收 Service Ticket ，说明在 CASClient-CASServer 之间的信任关系已经被正确建立起来 , 通常为一张数字加密的证书 </p>
		<p>Ticket Granting tieckt(TGT) --------- 票据授权票据，由 KDC 的 AS 发放。即获取这样一张票据后，以后申请各种其他服务票据 (ST) 便不必再向 KDC 提交身份认证信息 ( 准确术语是 Credentials) 。 </p>
		<p>authentication service (AS) --------- 认证用服务，索取 Crendential ，发放 TGT </p>
		<p>ticket-granting service (TGS) --------- 票据授权服务，索取 TGT ，发放 ST </p>
		<p>
		</p>
		<p>CAS 单点服务器的认证过程，所有应用服务器收到应用请求后，检查 ST 和 TGT ，如果没有或不对，转到 CAS 认证服务器登陆页面，通过安全认证后得到 ST 和 TGT 再重定向到相关应用服务器，在会话生命周期之内如果再定向到别的应用，将出示 </p>
		<p>ST 和 TGT 进行认证 , 注意 , 取得 TGT 的过程是通过 SSL 安全协议的 ( 换句话说就是如果不用 ssl 协议 , 每访问一个应用服务，就得重新到认证服务中心认证一次 ) ，关于 SSL 的相关描述可以查看附录 . </p>
		<p>
		</p>
		<p>白话描述 : </p>
		<p>单点登陆 , 无非就是提供给用户一次登陆 , 多个系统共享用户信息的操作 . </p>
		<p>这个是怎么操作的呢 ? 有简单的方法 , 当用户访问其他系统的时候 , 写个 URL 带上用户的 ID 和 PASS 提交到相应的系统就可以了 . 这也是一种方法 </p>
		<p>那 CAS 是怎么操作的呢 ? 或则是 KRB(Kerberos 是一个加密认证协议，允许网络用户不使用明文密码访问服务，一个普通 <br />的协议实现包括 LOGIN 服务存在伪造欺骗对 Key Distribution Center 的响应 。 </p>
		<p>) 怎么操作的呢 ? </p>
		<p>他并不是很复杂 , 他先是建立一个 专门认证用户的 服务 (SERVER) 这个服务只做一件事 , 负责验证用户的 ID 和 PASS 是否是正确 , 在正确的情况提供用户一个名为 TGT 的票据 , </p>
		<p>相当你要去游乐场玩 , 首先你要在门口检查你的身份 ( 即 CHECK 你的 ID 和 PASS), 如果你通过验证 , 游乐场的门卫 (AS) 即提供给你一张门卡 (TGT). </p>
		<p>这张卡片的用处就是告诉 游乐场的各个场所 , 你是通过正门进来 , 而不是后门偷爬进来的 , 并且也是获取进入场所一把钥匙 . </p>
		<p>好的 , 现在你有张卡 , 但是这对你来不重要 , 因为你来游乐场不是为了拿这张卡的 , 好的 , 我们向你的目的出发 , 恩 , 你来到一个摩天楼 , 你想进入玩玩 , </p>
		<p>这时摩天轮的服务员 (client) 拦下你 , 向你要求摩天轮的 (ST) 票据 , 你说你只有一个门卡 (TGT), 好的 , 那你只要把 TGT 放在一旁的票据授权机 (TGS) 上刷一下 , </p>
		<p>票据授权机 (TGS) 就根据你现在所在的摩天轮 , 给你一张摩天轮的票据 (ST), 哈 , 你有摩天轮的票据 , 现在你可以畅通无阻的进入摩天轮里游玩了 . </p>
		<p>当然如果你玩完摩天轮后 , 想去游乐园的咖啡厅休息下 , 那你一样只要带着那张门卡 (TGT). 到相应的咖啡厅的票据授权机 (TGS) 刷一下 , 得到咖啡厅的票据 (ST) 就可以进入咖啡厅 </p>
		<p>当你离开游乐场后 , 想用这张 TGT 去刷打的回家的费用 , 呵呵 , 对不起 , 你的 TGT 已经过期了 , 在你离开游乐场那刻开始 , 你的 TGT 就已经销毁了 ~ </p>
		<p>
		</p>
		<p>
		</p>
		<p>Yale CAS Server 的配置过程 </p>
		<p>
		</p>
		<p>CAS (Central Authentication Service) 是 Yale 大学的 ITS 开发的一套 JAVA 实现的开源 </p>
		<p>的 SSO(single sign-on) 的服务。该服务是以一个 java web app(eg:cas.war) 来进行服务的， </p>
		<p>使用时需要将 cas.war 发布到一个 servlet2.3 兼容的服务器上，并且服务器需要支持 SSL ， </p>
		<p>在需要使用该服务的其他服务器（客户），只要进行简单的配置就可以实现 SSO 了。 </p>
		<p>
		</p>
		<p>CAS 的客户端可以有很多种，因为验证的结果是以 XML 的格式返回的， CAS 的客户端已 </p>
		<p>打包进去的有 java,perl,python,asp,apache module 等好几种客户端示例，你还可以根据 </p>
		<p>需要实现一个自己的客户端，非常简单 !~ </p>
		<p>
		</p>
		<p>下面我们以 tomcat 5.0 作为 CAS Server(server1) ，另外一台 tomcat5.0 为 client(client1) </p>
		<p>为例进行说明。 </p>
		<p>
		</p>
		<p>1. 下载 cas-server 和 cas-client( 可选，建议使用） </p>
		<p>
				<a href="http://www.ja-sig.org/downloads/cas/cas-server-3.0.5.zip">http://www.ja-sig.org/downloads/cas/cas-server-3.0.5.zip</a>
		</p>
		<p>
				<a href="http://www.ja-sig.org/downloads/cas-clients/cas-client-java-2.1.1.zip">http://www.ja-sig.org/downloads/cas-clients/cas-client-java-2.1.1.zip</a>
		</p>
		<p>
		</p>
		<p>2. 将 cas-server-3.0.5.zip 解压，并将 lib/cas.war 拷贝到 server1 的 webapps 下 </p>
		<p>
		</p>
		<p>3. 产生 SERVER 的证书 </p>
		<p>PS: 参数与各系统本身一致 </p>
		<p>
		</p>
		<p>%JAVA_HOME%\bin\keytool -delete -alias tomcat -keypass changeit </p>
		<p>
		</p>
		<p>%JAVA_HOME%\bin\keytool -genkey -alias tomcat -keypass changeit -keyalg RSA </p>
		<p>
		</p>
		<p>%JAVA_HOME%\bin\keytool -export -alias tomcat -keypass changeit  -file %FILE_NAME% </p>
		<p>
		</p>
		<p>%JAVA_HOME%\bin\keytool -import -file server.crt -keypass changeit -keystore %JAVA_HOME%/jre/lib/security/cacerts </p>
		<p>
		</p>
		<p>%JAVA_HOME%\bin\keytool -import -file server.crt -keystore %JAVA_HOME%\jre\lib\security\cacerts </p>
		<p>
		</p>
		<p>
		</p>
		<p>4. 在 server1 配置 tomcat 使用 HTTPS </p>
		<p>
		</p>
		<p>$CATALINA_HOME/conf/server.xml 里 </p>
		<p>
		</p>
		<p>&lt;Connector className="org.apache.coyote.tomcat5.CoyoteConnector" </p>
		<p>port="8443" minProcessors="5" maxProcessors="75" </p>
		<p>enableLookups="true" disableUploadTimeout="true" </p>
		<p>acceptCount="100" debug="0" scheme="https" </p>
		<p>secure="true"&gt; </p>
		<p>&lt;Factory className="org.apache.coyote.tomcat5.CoyoteServerSocketFactory" </p>
		<p>keystoreFile="/path/to/your/keystore-file" </p>
		<p>keystorePass="your-password" clientAuth="false" protocol="TLS" /&gt; </p>
		<p>&lt;/Connector&gt; </p>
		<p>
		</p>
		<p>5. 在要使用 CAS 的客户端 client1 里设置（以 servlets-examples 这个 APP 为例），我们使用 </p>
		<p>ServletFilter(CAS client 里提供的 ) 来实现 SSO 的检查。 </p>
		<p>
		</p>
		<p>修改 servlets-examples/WEB-INF/web.xml </p>
		<p>
		</p>
		<p>&lt;filter&gt; </p>
		<p>&lt;filter-name&gt;CASFilter&lt;/filter-name&gt; </p>
		<p>&lt;filter-class&gt;edu.yale.its.tp.cas.client.filter.CASFilter&lt;/filter-class&gt; </p>
		<p>&lt;init-param&gt; </p>
		<p>&lt;param-name&gt;edu.yale.its.tp.cas.client.filter.loginUrl&lt;/param-name&gt; </p>
		<p>&lt;param-value&gt;https://your.cas.server.name(eg:server1):port/cas/login&lt;/param-value&gt; </p>
		<p>&lt;/init-param&gt; </p>
		<p>&lt;init-param&gt; </p>
		<p>&lt;param-name&gt;edu.yale.its.tp.cas.client.filter.validateUrl&lt;/param-name&gt; </p>
		<p>&lt;param-value&gt;https://your.cas.server.name(eg:server1):port/cas/proxyValidate&lt;/param-value&gt; </p>
		<p>&lt;/init-param&gt; </p>
		<p>
		</p>
		<p>&lt;init-param&gt; </p>
		<p>&lt;param-name&gt;edu.yale.its.tp.cas.client.filter.serviceUrl&lt;/param-name&gt; </p>
		<p>&lt;param-value&gt;your.client.server.ip(eg:127.0.0.1):port&lt;/param-value&gt; </p>
		<p>&lt;/init-param&gt; </p>
		<p>
		</p>
		<p>&lt;/filter&gt; </p>
		<p>
		</p>
		<p>&lt;filter-mapping&gt; </p>
		<p>&lt;filter-name&gt;CASFilter&lt;/filter-name&gt; </p>
		<p>&lt;url-pattern&gt;/servlet/*&lt;/url-pattern&gt; </p>
		<p>&lt;/filter-mapping&gt; </p>
		<p>
		</p>
		<p>PS: 在 client 端配置 filter 时 , 需要将 CAS 的 filter 放在 web.xml 最上端 ,. 如果在你的 web.xml 有类似 encodingFilter 的 filter 也需要将这个 filter 放在 CAS filter 下面 , 否则你会发现每次访问时都需要你进行验证 . </p>
		<p>
		</p>
		<p>
		</p>
		<p>6. 将 cas-client-java-2.1.1.zip 解压，把 java/lib/casclient.jar 拷贝到 client1 服务器上的 </p>
		<p>webapps/servlets-examples/WEB-INF/lib 目录下（如果没有就建一个） </p>
		<p>
		</p>
		<p>7. 导出 SERVER 的证书，用来给所有需要用到的客户端导入 </p>
		<p>keytool -export -file server.crt -alias my-alias-name -keystore keystore-file </p>
		<p>
		</p>
		<p>8. 在客户端的 JVM 里导入信任的 SERVER 的证书 ( 根据情况有可能需要管理员权限 ) </p>
		<p>keytool -import -keystore $JAVA_HOME/jre/lib/security/cacerts -file server.crt -alias my-alias-name </p>
		<p>
		</p>
		<p>9.test &amp; done. </p>
		<p>把 server1 和 client1 分别起来，检查启动的 LOG 是否正常，如果一切 OK ，就访问 </p>
		<p>
				<a href="http://client1:8080/servlets-examples/servlet/HelloWorldExample">http://client1:8080/servlets-examples/servlet/HelloWorldExample</a>
		</p>
		<p>系统会自动跳转到一个验证页面，随便输入一个相同的账号 , 密码，严正通过之后就会访问 </p>
		<p>到真正的 HelloWorldExample 这个 servlet 了 </p>
		<p>
		</p>
		<p>实现自已的认证代码 (java 代码和相关注释 , 需要 cas-server-3.0.5.jar 包 ) </p>
		<p> </p>
		<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">package</span>
				<span style="COLOR: #000000"> com.mcm.sso; <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">import</span>
				<span style="COLOR: #000000"> org.jasig.cas.authentication.handler.support.AbstractUsernamePasswordAuthenticationHandler; <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">import</span>
				<span style="COLOR: #000000"> org.jasig.cas.authentication.principal.UsernamePasswordCredentials; <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">import</span>
				<span style="COLOR: #000000"> org.springframework.util.StringUtils; <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">public</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">class</span>
				<span style="COLOR: #000000"> MyUsernamePasswordAuthenticationHandler </span>
				<span style="COLOR: #0000ff">extends</span>
				<span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_377_1253_Open_Image" onclick="this.style.display='none'; Codehighlighter1_377_1253_Open_Text.style.display='none'; Codehighlighter1_377_1253_Closed_Image.style.display='inline'; Codehighlighter1_377_1253_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_377_1253_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_377_1253_Closed_Text.style.display='none'; Codehighlighter1_377_1253_Open_Image.style.display='inline'; Codehighlighter1_377_1253_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />              AbstractUsernamePasswordAuthenticationHandler </span>
				<span id="Codehighlighter1_377_1253_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_377_1253_Open_Text">
						<span style="COLOR: #000000">{ <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />       </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">boolean</span>
						<span style="COLOR: #000000"> authenticateUsernamePasswordInternal( <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_514_1111_Open_Image" onclick="this.style.display='none'; Codehighlighter1_514_1111_Open_Text.style.display='none'; Codehighlighter1_514_1111_Closed_Image.style.display='inline'; Codehighlighter1_514_1111_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_514_1111_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_514_1111_Closed_Text.style.display='none'; Codehighlighter1_514_1111_Open_Image.style.display='inline'; Codehighlighter1_514_1111_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />                     </span>
						<span style="COLOR: #0000ff">final</span>
						<span style="COLOR: #000000"> UsernamePasswordCredentials credentials) </span>
						<span id="Codehighlighter1_514_1111_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_514_1111_Open_Text">
								<span style="COLOR: #000000">{ <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />              </span>
								<span style="COLOR: #0000ff">final</span>
								<span style="COLOR: #000000"> String username </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> credentials.getUsername(); <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />              </span>
								<span style="COLOR: #0000ff">final</span>
								<span style="COLOR: #000000"> String password </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> credentials.getPassword(); <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />              <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />              </span>
								<span style="COLOR: #008000">//</span>
								<span style="COLOR: #008000"> 此处实现你的登陆验证代码 </span>
								<span style="COLOR: #008000">
										<br />
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
								</span>
								<span style="COLOR: #000000">
										<br />
										<img id="Codehighlighter1_783_983_Open_Image" onclick="this.style.display='none'; Codehighlighter1_783_983_Open_Text.style.display='none'; Codehighlighter1_783_983_Closed_Image.style.display='inline'; Codehighlighter1_783_983_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
										<img id="Codehighlighter1_783_983_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_783_983_Closed_Text.style.display='none'; Codehighlighter1_783_983_Open_Image.style.display='inline'; Codehighlighter1_783_983_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />              </span>
								<span style="COLOR: #0000ff">if</span>
								<span style="COLOR: #000000"> (StringUtils.hasText(username) </span>
								<span style="COLOR: #000000">&amp;&amp;</span>
								<span style="COLOR: #000000"> StringUtils.hasText(password) ) </span>
								<span id="Codehighlighter1_783_983_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
										<img src="http://www.blogjava.net/images/dot.gif" />
								</span>
								<span id="Codehighlighter1_783_983_Open_Text">
										<span style="COLOR: #000000">{ <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                     getLog().debug( <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                                   </span>
										<span style="COLOR: #000000">"</span>
										<span style="COLOR: #000000">User [</span>
										<span style="COLOR: #000000">"</span>
										<span style="COLOR: #000000"> </span>
										<span style="COLOR: #000000">+</span>
										<span style="COLOR: #000000"> username </span>
										<span style="COLOR: #000000">+</span>
										<span style="COLOR: #000000"> </span>
										<span style="COLOR: #000000">"</span>
										<span style="COLOR: #000000">] was successfully authenticated with ucix.</span>
										<span style="COLOR: #000000">"</span>
										<span style="COLOR: #000000">); <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                     </span>
										<span style="COLOR: #0000ff">return</span>
										<span style="COLOR: #000000"> </span>
										<span style="COLOR: #0000ff">true</span>
										<span style="COLOR: #000000">; <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />              }</span>
								</span>
								<span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />              getLog().debug(</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">User [</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">+</span>
								<span style="COLOR: #000000"> username </span>
								<span style="COLOR: #000000">+</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">] failed authentication</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">); <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />              </span>
								<span style="COLOR: #0000ff">return</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">false</span>
								<span style="COLOR: #000000">; <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />       }</span>
						</span>
						<span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_1186_1249_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1186_1249_Open_Text.style.display='none'; Codehighlighter1_1186_1249_Closed_Image.style.display='inline'; Codehighlighter1_1186_1249_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1186_1249_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1186_1249_Closed_Text.style.display='none'; Codehighlighter1_1186_1249_Open_Image.style.display='inline'; Codehighlighter1_1186_1249_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />       </span>
						<span style="COLOR: #0000ff">protected</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">void</span>
						<span style="COLOR: #000000"> afterPropertiesSetInternal() </span>
						<span style="COLOR: #0000ff">throws</span>
						<span style="COLOR: #000000"> Exception </span>
						<span id="Codehighlighter1_1186_1249_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_1186_1249_Open_Text">
								<span style="COLOR: #000000">{ <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />              </span>
								<span style="COLOR: #0000ff">super</span>
								<span style="COLOR: #000000">.afterPropertiesSetInternal(); <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />       }</span>
						</span>
						<span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
				<span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
		</div>
		<p> </p>
		<p>然后将这个类配置到 deployerConfigContext.xml 文件里 , 替代 &lt;bean class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" /&gt; </p>
		<p>可能要用到数据库连接之类的配置，具体可参照 spring framework 相关文档 </p>
		<p>
		</p>
		<p>在 client 端取到登陆相关信息及登出系统 </p>
		<p>1. 取得用用户 ID </p>
		<p>以下两种方式都可以 </p>
		<p>session.getAttribute(CASFilter.CAS_FILTER_USER); </p>
		<p>session.getAttribute("edu.yale.its.tp.cas.client.filter.user"); </p>
		<p>
		</p>
		<p>也可以直接取得认证 java 对象 </p>
		<p>session.getAttribute(CASFilter.CAS_FILTER_RECEIPT); </p>
		<p>session.getAttribute("edu.yale.its.tp.cas.client.filter.receipt"); </p>
		<p>
		</p>
		<p>JSP2.0 标准写法 </p>
		<p>&lt;c:out value="${sessionScope['edu.yale.its.tp.cas.client.filter.user']}"/&gt; </p>
		<p>
		</p>
		<p>在 jsp 中使用 CAS Tag Library 标签 </p>
		<p>除实现以上功能完还可以实现登出之类的相关功能，具体参照 cas 官方文档 </p>
		<p>
				<a href="http://www.ja-sig.org/products/cas/client/jsp/index.html">http://www.ja-sig.org/products/cas/client/jsp/index.html</a>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>附录 </p>
		<p>1 ． SSL(Server Socket Layer) 简介 </p>
		<p>在网络上信息在源 - 宿的传递过程中会经过其它的计算机。一般情况下，中间的计算机不会监听路过的信息。但在使用网上银行或者进行信用卡交易的时候有可能被监视，从而导致个人隐私的泄露。由于 Internet 和 Intranet 体系结构的原因，总有某些人能够读取并替换用户发出的信息。随着网上支付的不断发展，人们对信息安全的要求越来越高。因此 Netscape 公司提出了 SSL 协议，旨在达到在开放网络 (Internet) 上安全保密地传输信息的目的，这种协议在 WEB 上获得了广泛的应用。 之后 IETF(ietf.org) 对 SSL 作了标准化，即 RFC2246 ，并将其称为 TLS （ Transport Layer Security ），从技术上讲， TLS1.0 与 SSL3.0 的差别非常微小。 </p>
		<p>
		</p>
		<p>2 ． SSL 工作原理 </p>
		<p>SSL 协议使用不对称加密技术实现会话双方之间信息的安全传递。可以实现信息传递的保密性、完整性，并且会话双方能鉴别对方身份。不同于常用的 http 协议，我们在与网站建立 SSL 安全连接时使用 https 协议，即采用 <a href="https://ip:port/">https://ip:port/</a> 的方式来访问。当我们与一个网站建立 https 连接时，我们的浏览器与 Web Server 之间要经过一个握手的过程来完成身份鉴定与密钥交换，从而建立安全连接。具体过程如下： </p>
		<p>
		</p>
		<p>用户浏览器将其 SSL 版本号、加密设置参数、与 session 有关的数据以及其它一些必要信息发送到服务器。 </p>
		<p>服务器将其 SSL 版本号、加密设置参数、与 session 有关的数据以及其它一些必要信息发送给浏览器，同时发给浏览器的还有服务器的证书。如果配置服务器的 SSL 需要验证用户身份，还要发出请求要求浏览器提供用户证书。 </p>
		<p>客户端检查服务器证书，如果检查失败，提示不能建立 SSL 连接。如果成功，那么继续。客户端浏览器为本次会话生成 pre-master secret ，并将其用服务器公钥加密后发送给服务器。如果服务器要求鉴别客户身份，客户端还要再对另外一些数据签名后并将其与客户端证书一起发送给服务器。 </p>
		<p>如果服务器要求鉴别客户身份，则检查签署客户证书的 CA 是否可信。如果不在信任列表中，结束本次会话。如果检查通过，服务器用自己的私钥解密收到的 pre-master secret ，并用它通过某些算法生成本次会话的 master secret 。 </p>
		<p>客户端与服务器均使用此 master secret 生成本次会话的会话密钥 ( 对称密钥 ) 。在双方 SSL 握手结束后传递任何消息均使用此会话密钥。这样做的主要原因是对称加密比非对称加密的运算量低一个数量级以上，能够显著提高双方会话时的运算速度。 </p>
		<p>客户端通知服务器此后发送的消息都使用这个会话密钥进行加密。并通知服务器客户端已经完成本次 SSL 握手。 </p>
		<p>服务器通知客户端此后发送的消息都使用这个会话密钥进行加密。并通知客户端服务器已经完成本次 SSL 握手。 </p>
		<p>本次握手过程结束，会话已经建立。双方使用同一个会话密钥分别对发送以及接受的信息进行加、解密。 <br /></p>
		<p> </p>
<img src ="http://www.blogjava.net/huj/aggbug/70002.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huj/" target="_blank">The One</a> 2006-09-16 09:39 <a href="http://www.blogjava.net/huj/archive/2006/09/16/70002.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于groovy的一些用法 </title><link>http://www.blogjava.net/huj/archive/2006/09/16/70001.html</link><dc:creator>The One</dc:creator><author>The One</author><pubDate>Sat, 16 Sep 2006 01:38:00 GMT</pubDate><guid>http://www.blogjava.net/huj/archive/2006/09/16/70001.html</guid><wfw:comment>http://www.blogjava.net/huj/comments/70001.html</wfw:comment><comments>http://www.blogjava.net/huj/archive/2006/09/16/70001.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huj/comments/commentRss/70001.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huj/services/trackbacks/70001.html</trackback:ping><description><![CDATA[
		<p>
				<br />最近使用groovy写了一个程序生成器,因为公司原来的生成程序太原始了,直接是JSP调我们自已的业务中间件的,新生成后的程序采用了spring的框架,用到的技术主要是groovy+Template,写的过程中也碰到了一些问题,解决后希望与大家共享.具体关于如何使用groovy以及用groovy进行模板编程，请查看ＩＢＭ上的实战groovy系列的文章．<br />1.在模板文件中是不能使用闭包的,使用后可能会造成分析器的混乱.<br />2.正则表达式用法之大小写.<br />一般我们使用java时都这么写<br /></p>
		<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: #000000">Pattern pattern </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> Pattern.compile(<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            </span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">Y\\s*E\\s*C\\s*X\\s*</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">, Pattern.CASE_INSENSITIVE);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
		</div>
		<p>以第二参数来指明不区分大小写,在使用groovy我发现,这招不灵了，因为在groovy中正则表达式是在语言中的<br />def pattern = ~/(?i)(.*)/这样就得到了一个pattern，如果要指定不区分大小写，与perl,ruby语言有些不同，查jdk官方方档得知,如上代码加(?i)就ＯＫ了．<br />注意：在groovy中可以这样写<br /></p>
		<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">def</span>
				<span style="COLOR: #000000"> matcher</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #800000">"</span>
				<span style="COLOR: #800000">string</span>
				<span style="COLOR: #800000">"</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">=~</span>
				<span style="COLOR: #000000"> pattern</span>
		</div>
		<p>此时的pattern为串，而不能是正则表达式.<br />3.java中的匿名类与groovy中的闭包<br />生成程序难免要碰到与目录相关的操作程序，一般在java中文件过滤都这么写<br /></p>
		<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: #000000">String regex </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">.*查询.*\\.ini</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span>
				<span style="COLOR: #0000ff">final</span>
				<span style="COLOR: #000000"> Pattern pattern2 </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> Pattern.compile(regex,Pattern.CASE_INSENSITIVE);    <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        File path </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">new</span>
				<span style="COLOR: #000000"> File(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">C:\\mydir</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">);<br /><img id="Codehighlighter1_228_388_Open_Image" onclick="this.style.display='none'; Codehighlighter1_228_388_Open_Text.style.display='none'; Codehighlighter1_228_388_Closed_Image.style.display='inline'; Codehighlighter1_228_388_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_228_388_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_228_388_Closed_Text.style.display='none'; Codehighlighter1_228_388_Open_Image.style.display='inline'; Codehighlighter1_228_388_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />        String[] list </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> path.list(</span>
				<span style="COLOR: #0000ff">new</span>
				<span style="COLOR: #000000"> FilenameFilter() </span>
				<span id="Codehighlighter1_228_388_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_228_388_Open_Text">
						<span style="COLOR: #000000">{<br /><img id="Codehighlighter1_287_378_Open_Image" onclick="this.style.display='none'; Codehighlighter1_287_378_Open_Text.style.display='none'; Codehighlighter1_287_378_Closed_Image.style.display='inline'; Codehighlighter1_287_378_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_287_378_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_287_378_Closed_Text.style.display='none'; Codehighlighter1_287_378_Open_Image.style.display='inline'; Codehighlighter1_287_378_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />            </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">boolean</span>
						<span style="COLOR: #000000"> accept(File dir, String name) </span>
						<span id="Codehighlighter1_287_378_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_287_378_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                </span>
								<span style="COLOR: #0000ff">return</span>
								<span style="COLOR: #000000"> pattern2.matcher(</span>
								<span style="COLOR: #0000ff">new</span>
								<span style="COLOR: #000000"> File(name).getName()).matches();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />            }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />        }</span>
				</span>
				<span style="COLOR: #000000"> );<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
		</div>
		<p>查遍所有groovy文档发现并没有直接使用闭包来完成以上程序，在groovy中用闭包代替内部类的只能用在swing类中那些listener的接口，具体细节查看官方文档．<a href="http://groovy.codehaus.org/Groovy+Beans">http://groovy.codehaus.org/Groovy+Beans</a><br />要用groovy来完成上面的程序有两种方法，第一就是用java完成后，提供给groovy来调用，第二下直接用groovy实现，其实很简单，代码如下：<br /></p>
		<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">def</span>
				<span style="COLOR: #000000"> filter(</span>
				<span style="COLOR: #0000ff">def</span>
				<span style="COLOR: #000000"> filelist){<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />         </span>
				<span style="COLOR: #0000ff">def</span>
				<span style="COLOR: #000000"> col</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">[]<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        filelist.each{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            </span>
				<span style="COLOR: #0000ff">if</span>
				<span style="COLOR: #000000">(it</span>
				<span style="COLOR: #000000">=~</span>
				<span style="COLOR: #800000">"</span>
				<span style="COLOR: #800000">.*\\.ini</span>
				<span style="COLOR: #800000">"</span>
				<span style="COLOR: #000000">)<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />                col</span>
				<span style="COLOR: #000000">&lt;&lt;</span>
				<span style="COLOR: #000000">it<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        }<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span>
				<span style="COLOR: #0000ff">return</span>
				<span style="COLOR: #000000"> col<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    }<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">def</span>
				<span style="COLOR: #000000"> filterfile(</span>
				<span style="COLOR: #0000ff">def</span>
				<span style="COLOR: #000000"> filedir,</span>
				<span style="COLOR: #0000ff">def</span>
				<span style="COLOR: #000000"> fileName){<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span>
				<span style="COLOR: #0000ff">def</span>
				<span style="COLOR: #000000"> ffile </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> new File(filedir,fileName)<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />                </span>
				<span style="COLOR: #0000ff">def</span>
				<span style="COLOR: #000000"> fileNames </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> filter(ffile.list())<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span>
				<span style="COLOR: #0000ff">if</span>
				<span style="COLOR: #000000">(( fileName </span>
				<span style="COLOR: #000000">=~</span>
				<span style="COLOR: #800000">'</span>
				<span style="COLOR: #800000">\\d{3}</span>
				<span style="COLOR: #800000">'</span>
				<span style="COLOR: #000000">).matches())<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            fileName </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #800000">"</span>
				<span style="COLOR: #800000">I${fileName}</span>
				<span style="COLOR: #800000">"</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        createSrc(fileNames,ffile,fileName)<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    }<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
		</div>
		<p>主要由两个函数完成，第一个过滤，第二个匹配. </p>
<img src ="http://www.blogjava.net/huj/aggbug/70001.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huj/" target="_blank">The One</a> 2006-09-16 09:38 <a href="http://www.blogjava.net/huj/archive/2006/09/16/70001.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Groovy入门</title><link>http://www.blogjava.net/huj/archive/2006/09/16/69999.html</link><dc:creator>The One</dc:creator><author>The One</author><pubDate>Sat, 16 Sep 2006 01:37:00 GMT</pubDate><guid>http://www.blogjava.net/huj/archive/2006/09/16/69999.html</guid><wfw:comment>http://www.blogjava.net/huj/comments/69999.html</wfw:comment><comments>http://www.blogjava.net/huj/archive/2006/09/16/69999.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huj/comments/commentRss/69999.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huj/services/trackbacks/69999.html</trackback:ping><description><![CDATA[
		<p>
				<br />1.到这里<a href="http://groovy.codehaus.org/download.html"><font color="#666666">http://groovy.codehaus.org/download.html</font></a>下载最新版本的groovy.<br /><br />2.设置环境变量<br /><strong>GROOVY_HOME = C:/</strong><u><font color="#800080">groovydir;<br /></font></u>将%<strong>GROOVY_HOME </strong>%\bin加入到环境变量path里<br /><br />3.简单使用方法<br /><br />1)命令行方式<br />groovysh<br />2)ide<br />swing的gui操作界面，比较简陋。好像有UltraEdit的插件<a href="http://groovy.codehaus.org/UltraEdit+Plugin"><font color="#800080">http://groovy.codehaus.org/UltraEdit+Plugin</font></a><br />groovyConsole<br />3)运行groovysh脚本 <br />groovy SomeScript.groovy<br /><br /></p>
<img src ="http://www.blogjava.net/huj/aggbug/69999.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huj/" target="_blank">The One</a> 2006-09-16 09:37 <a href="http://www.blogjava.net/huj/archive/2006/09/16/69999.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>下次K歌就K这个-我的名字叫依莲</title><link>http://www.blogjava.net/huj/archive/2006/09/15/69970.html</link><dc:creator>The One</dc:creator><author>The One</author><pubDate>Fri, 15 Sep 2006 13:01:00 GMT</pubDate><guid>http://www.blogjava.net/huj/archive/2006/09/15/69970.html</guid><wfw:comment>http://www.blogjava.net/huj/comments/69970.html</wfw:comment><comments>http://www.blogjava.net/huj/archive/2006/09/15/69970.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huj/comments/commentRss/69970.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huj/services/trackbacks/69970.html</trackback:ping><description><![CDATA[
		<div class="\&quot;quote\&quot;">
				<div class="\&quot;quote-title\&quot;">引用</div>
				<div class="\&quot;quote-content\&quot;">依琏，舒麦贝依琏，舒唏嘘娜菲，古玛丽依斯午~~秃儿。 <br />依琏，she没说妹笨儿，爱炉腹吗啡一，狗my life~~秃儿。。 <br />舒服太，土匪~~莱姆。 萨普莱姆，土匪~~莱姆。 <br /><br />依琏，舒麦贝依琏，舒唏嘘娜菲，古玛丽斯午~~秃儿。 <br />依琏，see麦美so布林恩。Do have do 不玩。瘦奶寒毒~~秃儿。  <br />舒服太，土匪~~莱姆。 萨普莱姆，土匪~~莱姆。 <br /><br />依曼，she日爱吗服毒，冻土里show now。晒狗soon卖弄。 <br />白蒜，no model 露（lu）丝袜。共舒后秃大，白蒜那非买秃母狗　老死狗系戴利泡死的。 <br /><br />依琏，舒麦贝依琏，舒唏嘘娜菲，古玛丽斯午~~秃儿。 <br />舒服太，土匪~~莱姆。 萨普莱姆，土匪~~莱姆。<br /><br />依曼，狗带来了believe, woo,my home get day 。苏黑里showed it 。 <br />白蒜，no model 露（lu）丝袜。共梳后秃大，白蒜那非买秃母狗　老死狗系戴利泡死的。 <br /><br />依琏，舒麦贝依琏，舒唏嘘娜菲，古玛丽斯午~~秃儿。 <br />依琏，一吐do没笨。吐分红鲁宾。I 疏忽路～～途。 <br /><br />狗日秃，for he~~莱姆。 <br />狗日秃，for he~~莱姆。 <br />狗日秃，for he~~莱姆。 <br />狗日秃，for he~~莱姆。 </div>
		</div>
		<br />
		<br />呵呵，大家有什么感觉<br /><br /><br /><div class="code"><br />曲名：我的名字叫依莲 歌手：依莲娜.依莲<br />Hélène<br />Je m’appelle Hélène<br />Je suis une fille<br />Comme les autres<br />Hélène<br />J’ai mes joies mes peines<br />Elles font ma vie<br />Comme la votre<br />Je voudrais trouver l’amour<br />Simplement trouver l’amour<br />Hélène<br />Je m’appelle Hélène<br />Je suis une fille<br />Comme les autres<br />Hélène<br />Si mes nuits sont pleines<br />De rêves de poémes<br />Je n’ai rien d’autre<br />Je voudrais trouver l’amour<br />Simplement trouver l’amour<br />Et même<br />Si j’ai ma photo<br />Dans tous les journaux<br />Chaque semaine<br />Personne Ne m’attend le soir<br />Quand je rentre tard<br />Personne ne fait battre mon coeur<br />Lorsque s’eteignent les projecteurs<br />Hélène<br />Je m’appelle Hélène<br />Je suis une fille<br />Comme les autres<br />Je voudrais trouver l’amour<br />Simplement trouver l’amour<br />Et même<br />Quand à la télè<br />Vous me regardez<br />Sourire et chanter<br />Personne<br />Ne m’attend le soir<br />Quand je rentre tard<br />Personne ne fait battre mon coeur<br />Lorsque s’eteignent les projecteurs<br />Hélène<br />Je m’appelle Hélène<br />Je suis une fille<br />Comme les autres<br />Hélène<br />Et toutes mes peines<br />Trouveront l’oubli<br />Un jour ou l’autre<br />Quand je trouverai l’amour<br />Quand je trouverai l’amour<br />Quand je trouverai l’amour<br />Quand je trouverai l’amour<br /><br />中文 我叫伊莲娜<br />伊莲娜 霍莱<br /><br /><br />伊莲娜 <br />我也有快乐和悲伤 <br />有喜怒哀乐的生活 <br /><br />我只想找到简单的爱情 <br />属于我的爱情 <br /><br />伊莲娜 <br />我盼望夜里诗歌和美梦的陪伴 <br />那样我会别无所求 <br /><br />每星期报纸上都会有我的照片 <br />你却从没留意 <br />只剩下我一颗破碎的心 <br />和偷偷的哭泣 <br /><br />每天在电视里 <br />你都微笑着轻唱歌曲 <br />我只有更难受的心 <br />和更深的哭泣 <br /><br />我的悲伤终会埋藏于记忆深处 <br />只要我找到简单的爱情<br /></div><img src ="http://www.blogjava.net/huj/aggbug/69970.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huj/" target="_blank">The One</a> 2006-09-15 21:01 <a href="http://www.blogjava.net/huj/archive/2006/09/15/69970.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>推荐给所有朋友的一部好片</title><link>http://www.blogjava.net/huj/archive/2006/09/12/69228.html</link><dc:creator>The One</dc:creator><author>The One</author><pubDate>Tue, 12 Sep 2006 12:31:00 GMT</pubDate><guid>http://www.blogjava.net/huj/archive/2006/09/12/69228.html</guid><wfw:comment>http://www.blogjava.net/huj/comments/69228.html</wfw:comment><comments>http://www.blogjava.net/huj/archive/2006/09/12/69228.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.blogjava.net/huj/comments/commentRss/69228.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huj/services/trackbacks/69228.html</trackback:ping><description><![CDATA[      越狱又出第二季，每周一集的等待真是难熬啊，没想到老美也这么能磨，这种播放周期使我想起了去年看木村的那部讲方程式赛车手的故事的电视剧集，名字忘记了，有兴趣者到GOOGLE上搜一下，呵呵，继续讲越狱，记得里面有句让我记忆蛮深的话，如果一个人的脑子对一件事有太多反映的话，他不是神精病就是高IQ的人，剧集中的主人公就是这类人物，建筑架构师，和我们IT系统架构师有得拼啊，搞不好他来做IT肯定成超级黑客，第二季主要是讲脱狱后在外逃串的事情，今天不知怎么搞的，出的这么慢，先搞了个没字幕的看看，唉，就当练习下英文吧。<br /><img style="WIDTH: 584px; HEIGHT: 677px" height="1082" src="http://img.verycd.com/posts/0608/post-453615-1156232689.jpg" width="604" /><br /><img src ="http://www.blogjava.net/huj/aggbug/69228.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huj/" target="_blank">The One</a> 2006-09-12 20:31 <a href="http://www.blogjava.net/huj/archive/2006/09/12/69228.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>