??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲一区二区久久久久久,成人网视频在线观看,www.亚洲免费http://www.aygfsteel.com/xiaosao/category/24833.html不懂我的?, M了我 , 该了解了解我 !而懂我的?, 更离不了?, 因ؓ他们爱我 ?/description>zh-cnSat, 01 Mar 2008 12:36:47 GMTSat, 01 Mar 2008 12:36:47 GMT60GroovyL入门——通过与Java的比较,q速掌握Groovy Q更C2007.09.23Q?/title><link>http://www.aygfsteel.com/xiaosao/archive/2008/02/29/182943.html</link><dc:creator>cAng^Er</dc:creator><author>cAng^Er</author><pubDate>Fri, 29 Feb 2008 07:30:00 GMT</pubDate><guid>http://www.aygfsteel.com/xiaosao/archive/2008/02/29/182943.html</guid><wfw:comment>http://www.aygfsteel.com/xiaosao/comments/182943.html</wfw:comment><comments>http://www.aygfsteel.com/xiaosao/archive/2008/02/29/182943.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/xiaosao/comments/commentRss/182943.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/xiaosao/services/trackbacks/182943.html</trackback:ping><description><![CDATA[<font color="#cc0000"><strong>原文Q?font color="#990000"><a href="http://www.aygfsteel.com/BlueSUN/archive/2007/03/10/103014.html">http://www.aygfsteel.com/BlueSUN/archive/2007/03/10/103014.html</a></font> | <a id="AjaxHolder_Comments_CommentList_ctl01_NameLink" href="http://www.aygfsteel.com/BlueSUN/" target="_blank">山风子</a><br /> 注意Q本教程是针对Groovy最新版本编写的</strong> </font><br /> <br /> Groovy和Java的相同点有:<br /> <font color="#0000cc">3+, </font><font color="#0000cc">4+, 6+, 8+, 10+, 12+, 13, 14, 15, 18+, 20+, 21, 22, 23, 28+, 29+, </font><font color="#0000cc">30+, 31+, 32+</font> <br /> <font color="#0000cc">+表示Groovy不但늛了Java的语法,而且q有增强部分<br /> <br /> Groovy和Java的不</font> <font color="#0000cc">?/font> <font color="#0000cc">ҎQ?br /> 0, 1, 2, 5, 7, 9, 11, 16, 17, 19, 24, 25, 26, 27</font> <br /> <br /> <font color="#0000cc">下面所列序号不分先后顺序:</font><br /> <br /> <font color="#990000">0. 在Groovy可以用def定义无类型的变量(定义变量斚wdef与JavaScript中的var怼)Q和q回gؓ无类型的ҎQ而在Java中没有def<br /> </font><font color="#009900">Groovy:<br /> <div style="border-right: rgb(204,204,204) 1px solid; padding-right: 5px; border-top: rgb(204,204,204) 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: rgb(204,204,204) 1px solid; width: 98%; padding-top: 4px; border-bottom: rgb(204,204,204) 1px solid; background-color: rgb(238,238,238)"><span style="color: rgb(0,0,255)">class</span><span style="color: rgb(0,0,0)"> Man {<br />   def name </span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)"> </span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">山风子</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)"><br />   def introduce() {<br />     </span><span style="color: rgb(0,0,255)">return</span><span style="color: rgb(0,0,0)"> </span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">I'm $name</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)"> </span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)"> return可以省略</span><span style="color: rgb(0,128,0)"><br /> </span><span style="color: rgb(0,0,0)">  }<br /> }</span></div> <br /> </font><font color="#990000">1. Java中的equalsҎ对应Groovy中的== , 而Java中的==Q判断是否引用同一对象Q对应Groovy中的isҎ</font><br /> eg.<br /> <font color="#009900">Test1.java :</font><br /> <div style="border-right: rgb(204,204,204) 1px solid; padding-right: 5px; border-top: rgb(204,204,204) 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: rgb(204,204,204) 1px solid; width: 98%; padding-top: 4px; border-bottom: rgb(204,204,204) 1px solid; background-color: rgb(238,238,238)"><span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,0)"> </span><span style="color: rgb(0,0,255)">class</span><span style="color: rgb(0,0,0)"> Test {<br />   </span><span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,0)"> </span><span style="color: rgb(0,0,255)">static</span><span style="color: rgb(0,0,0)"> </span><span style="color: rgb(0,0,255)">void</span><span style="color: rgb(0,0,0)"> main(String[] args) {<br />     String name1 </span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)"> </span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">山风子</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">;<br />     String name2 </span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)"> </span><span style="color: rgb(0,0,255)">new</span><span style="color: rgb(0,0,0)"> String(</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)"><span style="color: rgb(0,0,0)">山风子</span></span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">);<br />     </span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)"> Groovy中写?nbsp;name1 == name2</span><span style="color: rgb(0,128,0)"><br /> </span><span style="color: rgb(0,0,0)">    </span><span style="color: rgb(0,0,255)">if</span><span style="color: rgb(0,0,0)"> (name1.equals(name2)) {<br />       System.out.println(</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">equal</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">);<br />     } </span><span style="color: rgb(0,0,255)">else</span><span style="color: rgb(0,0,0)"> {<br />       System.out.println(</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">not equal</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">); <br />     }<br />     </span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)"> Groovy中写?nbsp;name1.is(name2)</span><span style="color: rgb(0,128,0)"><br /> </span><span style="color: rgb(0,0,0)">    </span><span style="color: rgb(0,0,255)">if</span><span style="color: rgb(0,0,0)"> (name1 </span><span style="color: rgb(0,0,0)">==</span><span style="color: rgb(0,0,0)"> name2) {<br />       System.out.println(</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">identical</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">);<br />     } </span><span style="color: rgb(0,0,255)">else</span><span style="color: rgb(0,0,0)"> {<br />       System.out.println(</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">not identical</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">); <br />     } <br /> }</span></div> <br /> 与Test1.java相对应的<br /> <font color="#009900">Test1.groovy :</font><br /> <div style="border-right: rgb(204,204,204) 1px solid; padding-right: 5px; border-top: rgb(204,204,204) 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: rgb(204,204,204) 1px solid; width: 98%; padding-top: 4px; border-bottom: rgb(204,204,204) 1px solid; background-color: rgb(238,238,238)"><span style="color: rgb(0,0,0)">String name1 </span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)"> </span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)"><span style="color: rgb(0,0,0)">山风子</span></span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)"> </span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)"> 你也可以q样写: def name1 = "山风子"  其中的def可以理解为JavaScript中定义变量的var</span><span style="color: rgb(0,128,0)"><br /> </span><span style="color: rgb(0,0,0)">String name2 </span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)"> </span><span style="color: rgb(0,0,255)">new</span><span style="color: rgb(0,0,0)"> String(</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)"><span style="color: rgb(0,0,0)">山风子</span></span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">) </span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)">h意Groovy的句分号时可选的Q即可要可不要,前提是一行代码一条语?br /> </span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)"> Java中写?nbsp;name1.equals(name2)</span><span style="color: rgb(0,128,0)"><br /> </span><span style="color: rgb(0,0,255)">if</span><span style="color: rgb(0,0,0)"> (name1  </span><span style="color: rgb(0,0,0)">==</span><span style="color: rgb(0,0,0)"> name2) {<br />   System.out.println(</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">equal</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">);<br /> } </span><span style="color: rgb(0,0,255)">else</span><span style="color: rgb(0,0,0)"> {<br />   System.out.println(</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">not equal</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">); <br /> }<br /> </span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)"> Java中写?nbsp;name1  == name2</span><span style="color: rgb(0,128,0)"><br /> </span><span style="color: rgb(0,0,255)">if</span><span style="color: rgb(0,0,0)"> (name1.is(name2)) {<br />   System.out.println(</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">identical</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">);<br /> } </span><span style="color: rgb(0,0,255)">else</span><span style="color: rgb(0,0,0)"> {<br />   System.out.println(</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">not identical</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">); <br /> }</span></div> <br /> <font color="#990000">2. Java中的数组定义int[] a = {1, 2, 3}; 在Groovy写成int[] a = [1, 2, 3]<br /> 3. Java中的for循环for (int i = 0; i < len; i++) {...} 在Groovy中还可以写成for (i in 0..len-1) {...} 或?for (i in 0..<len) {...}<br /> <font color="#009900">Java:</font><br /> <div style="border-right: rgb(204,204,204) 1px solid; padding-right: 5px; border-top: rgb(204,204,204) 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: rgb(204,204,204) 1px solid; width: 98%; padding-top: 4px; border-bottom: rgb(204,204,204) 1px solid; background-color: rgb(238,238,238)"><span style="color: rgb(0,0,255)">for</span><span style="color: rgb(0,0,0)"> (</span><span style="color: rgb(0,0,255)">int</span><span style="color: rgb(0,0,0)"> i </span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">0</span><span style="color: rgb(0,0,0)">; i </span><span style="color: rgb(0,0,0)"><</span><span style="color: rgb(0,0,0)"> len; i</span><span style="color: rgb(0,0,0)">++</span><span style="color: rgb(0,0,0)">) {<br />   </span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)"> do something</span><span style="color: rgb(0,128,0)"><br /> </span><span style="color: rgb(0,0,0)">}<br /> </span></div> <font color="#009900">Groovy:</font><br /> <div style="border-right: rgb(204,204,204) 1px solid; padding-right: 5px; border-top: rgb(204,204,204) 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: rgb(204,204,204) 1px solid; width: 98%; padding-top: 4px; border-bottom: rgb(204,204,204) 1px solid; background-color: rgb(238,238,238)"><font size="+0"><font color="#990000"><span style="color: rgb(0,0,255)">for</span><span style="color: rgb(0,0,0)"> (</span><span style="color: rgb(0,0,255)">int</span><span style="color: rgb(0,0,0)"> i </span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">0</span><span style="color: rgb(0,0,0)">; i </span><span style="color: rgb(0,0,0)"><</span><span style="color: rgb(0,0,0)"> len; i</span><span style="color: rgb(0,0,0)">++</span><span style="color: rgb(0,0,0)">) {<br />   </span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)"> do something</span><span style="color: rgb(0,128,0)"><br /> </span><span style="color: rgb(0,0,0)">}<br /> <br /> </span></font></font><font size="+0"><font color="#990000"><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)"> 或?br /> </span></font></font><span style="color: rgb(0,0,255)">for</span><span style="color: rgb(0,0,0)"> (i in </span><span style="color: rgb(0,0,0)">0</span><span style="color: rgb(0,0,0)">..len</span><span style="color: rgb(0,0,0)">-</span><span style="color: rgb(0,0,0)">1</span><span style="color: rgb(0,0,0)">) {<br />   </span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)"> do something</span><span style="color: rgb(0,128,0)"><br /> </span><span style="color: rgb(0,0,0)">}<br /> <br /> </span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)"> 或?/span><span style="color: rgb(0,128,0)"><br /> </span><span style="color: rgb(0,0,255)">for</span><span style="color: rgb(0,0,0)"> (i in </span><span style="color: rgb(0,0,0)">0</span><span style="color: rgb(0,0,0)">..</span><span style="color: rgb(0,0,0)"><</span><span style="color: rgb(0,0,0)">len) {<br />   </span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)"> do something</span><span style="color: rgb(0,128,0)"><br /> </span><span style="color: rgb(0,0,0)">}<br /> </span></div> <br /> 4. Java中的Ҏq回写ؓreturn; 或者return obj; 在Groovy的方法中return是可选的<br /> <font color="#009900">Java:</font><br /> <div style="border-right: rgb(204,204,204) 1px solid; padding-right: 5px; border-top: rgb(204,204,204) 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: rgb(204,204,204) 1px solid; width: 98%; padding-top: 4px; border-bottom: rgb(204,204,204) 1px solid; background-color: rgb(238,238,238)"><span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,0)"> String sayHello() {<br />   </span><span style="color: rgb(0,0,255)">return</span><span style="color: rgb(0,0,0)"> </span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">Hello, 山风子</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">;<br /> }</span></div> <font color="#009900">Groovy:</font><br /> <div style="border-right: rgb(204,204,204) 1px solid; padding-right: 5px; border-top: rgb(204,204,204) 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: rgb(204,204,204) 1px solid; width: 98%; padding-top: 4px; border-bottom: rgb(204,204,204) 1px solid; background-color: rgb(238,238,238)"><span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,0)"> String sayHello() {<br />   </span><span style="color: rgb(0,0,255)">return</span><span style="color: rgb(0,0,0)"> </span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">Hello, 山风子</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)"><br /> }<br /> </span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)">或?/span><span style="color: rgb(0,128,0)"><br /> </span><span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,0)"> String sayHello() {<br />   </span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">Hello, 山风子</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)"><br /> }<br /> </span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)">或?/span><span style="color: rgb(0,128,0)"><br /> </span><span style="color: rgb(0,0,0)">String sayHello() {<br />   </span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">Hello, 山风子</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)"><br /> }<br /> </span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)">或?/span><span style="color: rgb(0,128,0)"><br /> </span><span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,0)"> sayHello() {<br />   </span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">Hello, 山风子</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)"><br /> }<br /> </span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)"> 或?/span><span style="color: rgb(0,128,0)"><br /> </span><span style="color: rgb(0,0,0)">def sayHello() {<br />   </span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">Hello, 山风子</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)"><br /> }</span></div> <br /> 5. Java中的inner class卛_部类Q在Groovy中用Closure实现QClosure是Java7正在考虑的一个特性,比inner class在语义方面更完善Q?br /> 6. Groovy中的注释比Java多了首行注释#!Q其他与Java相同比如单行注释Q?/    多行注释Q?*  */   或者是  支持javadoc?**   */<br /> <font color="#009900">Java:</font><br /> <div style="border-right: rgb(204,204,204) 1px solid; padding-right: 5px; border-top: rgb(204,204,204) 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: rgb(204,204,204) 1px solid; width: 98%; padding-top: 4px; border-bottom: rgb(204,204,204) 1px solid; background-color: rgb(238,238,238)"><span style="color: rgb(0,128,0)">/*</span><span style="color: rgb(0,128,0)"><br />  * 多行注释<br />  </span><span style="color: rgb(0,128,0)">*/</span><span style="color: rgb(0,0,0)"><br /> <br /> </span><span style="color: rgb(0,128,0)">/**</span><span style="color: rgb(0,128,0)"><br />  * javadoc 注释<br />  </span><span style="color: rgb(0,128,0)">*/</span><span style="color: rgb(0,0,0)"><br /> <br /> </span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)"> 单行注释</span></div> <br /> <font color="#009900">Groovy:<br /> </font> <div style="border-right: rgb(204,204,204) 1px solid; padding-right: 5px; border-top: rgb(204,204,204) 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: rgb(204,204,204) 1px solid; width: 98%; padding-top: 4px; border-bottom: rgb(204,204,204) 1px solid; background-color: rgb(238,238,238)"><font size="+0"><font color="#990000"><span style="color: rgb(0,128,0)">#! 首行</span></font></font><font color="#990000"><font size="+0"><font color="#990000"><span style="color: rgb(0,128,0)">注释QUnix shell能够定位Groovy启动E序以运行Groovy代码Q例?/span></font></font></font><br /> <font size="+0"><font color="#990000"><span style="color: rgb(0,128,0)">#!/usr/bin/groovy<br /> </span></font></font><span style="color: rgb(0,128,0)"><br /> /*</span><span style="color: rgb(0,128,0)"><br />  * 多行注释<br />  </span><span style="color: rgb(0,128,0)">*/</span><span style="color: rgb(0,0,0)"><br /> <br /> </span><span style="color: rgb(0,128,0)">/**</span><span style="color: rgb(0,128,0)"><br />  * javadoc 注释<br />  </span><span style="color: rgb(0,128,0)">*/</span><span style="color: rgb(0,0,0)"><br /> <br /> </span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)"> 单行注释</span></div> <br /> <br /> 7. Java5中的for-eachQfor (Type t : iteratable) {...}  在Groovy中,for (t in iteratable) {...}<br /> <font color="#009900">Java:<br /> </font> <div style="border-right: rgb(204,204,204) 1px solid; padding-right: 5px; border-top: rgb(204,204,204) 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: rgb(204,204,204) 1px solid; width: 98%; padding-top: 4px; border-bottom: rgb(204,204,204) 1px solid; background-color: rgb(238,238,238)"><span style="color: rgb(0,0,255)">for</span><span style="color: rgb(0,0,0)"> (Type t : iterable) {<br />   </span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)"> do something</span><span style="color: rgb(0,128,0)"><br /> </span><span style="color: rgb(0,0,0)">}</span></div> <br /> <font color="#009900">Groovy:<br /> </font> <div style="border-right: rgb(204,204,204) 1px solid; padding-right: 5px; border-top: rgb(204,204,204) 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: rgb(204,204,204) 1px solid; width: 98%; padding-top: 4px; border-bottom: rgb(204,204,204) 1px solid; background-color: rgb(238,238,238)"><span style="color: rgb(0,0,255)">for</span><span style="color: rgb(0,0,0)"> (t in iterable) {<br />   </span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)"> do something</span><span style="color: rgb(0,128,0)"><br /> </span><span style="color: rgb(0,0,0)">}</span></div> <br /> 8. Groovy中switch语句与Java中相同,不过支持更多cd了,比如String<br /> 9. Groovy的while语句跟Java相同Q但废弃了do-while Q考虑到语义方面的问题Q而且do-while可以用其他Ş式的循环语句代替Q用频率低Q?br /> 10. Java中的String帔R表示?Hello, 山风子"Q在Groovy中可如下表示<br /> <div style="border-right: rgb(204,204,204) 1px solid; padding-right: 5px; border-top: rgb(204,204,204) 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: rgb(204,204,204) 1px solid; width: 98%; padding-top: 4px; border-bottom: rgb(204,204,204) 1px solid; background-color: rgb(238,238,238)"><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)"> 双引?/span><span style="color: rgb(0,128,0)"><br /> </span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">Hello, 山风子</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)"><br /> <br /> </span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)"> 单引号也可以</span><span style="color: rgb(0,128,0)"><br /> </span><span style="color: rgb(0,0,0)">'</span><span style="color: rgb(0,0,0)">Hello, 山风子</span><span style="color: rgb(0,0,0)">'</span><span style="color: rgb(0,0,0)"><br /> <br /> </span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)">多行字符?/span><span style="color: rgb(0,128,0)"><br /> </span><span style="color: rgb(0,0,0)">"""</span><span style="color: rgb(0,0,0)">Hello,</span><span style="color: rgb(0,0,0)"><br /> </span><span style="color: rgb(0,0,0)">山风子</span><span style="color: rgb(0,0,0)">"""<br /> </span><span style="color: rgb(0,0,0)"><br /> </span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)">或?/span><span style="color: rgb(0,128,0)"><br /> </span><span style="color: rgb(0,0,0)">'''</span><span style="color: rgb(0,0,0)">Hello,</span><span style="color: rgb(0,0,0)"><br /> </span><span style="color: rgb(0,0,0)">山风子<br /> </span><span style="color: rgb(0,0,0)">'''<br /> </span><span style="color: rgb(0,0,0)"><br /> </span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)"> 替代字符?/span><span style="color: rgb(0,128,0)"><br /> </span><span style="color: rgb(0,0,0)">def name </span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)"> </span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">山风子</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)"><br /> </span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">Hello, ${name}</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)"><br /> </span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)">或?/span><span style="color: rgb(0,128,0)"><br /> </span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">Hello, $name</span><span style="color: rgb(0,0,0)">"</span></div> </font><font color="#990000">11.在Groovy中定义类Q定义方法与Java中定义类相同Q唯一区别在于Groovy中类Q属性以及方法默认都是public的,而在Java中默认是package的,另外Q在Groovy中可以用def来定义方法,L注释?br /> <font color="#009900">Java:<br /> </font> <div style="border-right: rgb(204,204,204) 1px solid; padding-right: 5px; border-top: rgb(204,204,204) 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: rgb(204,204,204) 1px solid; width: 98%; padding-top: 4px; border-bottom: rgb(204,204,204) 1px solid; background-color: rgb(238,238,238)"><span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,0)"> </span><span style="color: rgb(0,0,255)">class</span><span style="color: rgb(0,0,0)"> Hello {<br />   </span><span style="color: rgb(0,0,255)">private</span><span style="color: rgb(0,0,0)"> String name </span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)"> </span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">山风子</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">;<br />   </span><span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,0)"> </span><span style="color: rgb(0,0,255)">void</span><span style="color: rgb(0,0,0)"> sayHello() {<br />     System.out.println(</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">Hello, </span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)"> </span><span style="color: rgb(0,0,0)">+</span><span style="color: rgb(0,0,0)"> name);<br />   }<br /> }</span></div> </font><font color="#009900">Groovy:</font><br /> <div style="border-right: rgb(204,204,204) 1px solid; padding-right: 5px; border-top: rgb(204,204,204) 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: rgb(204,204,204) 1px solid; width: 98%; padding-top: 4px; border-bottom: rgb(204,204,204) 1px solid; background-color: rgb(238,238,238)"><span style="color: rgb(0,0,255)">class</span><span style="color: rgb(0,0,0)"> Hello {<br />   </span><span style="color: rgb(0,0,255)">private</span><span style="color: rgb(0,0,0)"> String name </span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)"> </span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">山风子</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)"><br />   </span><span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,0)"> </span><span style="color: rgb(0,0,255)">void</span><span style="color: rgb(0,0,0)"> sayHello() {<br />     </span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)">println<img src="http://www.aygfsteel.com/Images/dot.gif" alt="" />与Java中System.out.println(<img src="http://www.aygfsteel.com/Images/dot.gif" alt="" />)相同</span><span style="color: rgb(0,128,0)"><br /> </span><span style="color: rgb(0,0,0)">    println </span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">Hello, $name</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)"><br />   }<br />   </span><span style="color: rgb(0,128,0)">/*</span><span style="color: rgb(0,128,0)"> sayHello也可以这样定?br />   def sayHello() {<br />     println "Hello, $name"<br />   }<br />    </span><span style="color: rgb(0,128,0)">*/</span><span style="color: rgb(0,0,0)"><br /> }</span></div> <br /> <font color="#990000">12.对象创徏在Java写ؓThought t = new Thought(); 在Groovy也可以这样写Q不q还多了U写法:def t = new Thought();<br /> 13.静态方法调用在Java和Groovy中相同,即ClassName.staticMethodName();<br /> 14.实现接口和承父cL面Groovy也与Java完全相同Q即实现接口class ClassName implements InterfaceName {...}<br />       l承父类Qclass ClassName extends SuperClass {...}<br /> 15.定义接口斚wGroovy与Java完全相同Q即interface InterfaceName {...}  //在Groovy中默认ؓpublic?br /> 16.正则表达式常量在Java中没有,在Groovy中表CZؓ /pattern/ <br /> 17.Hash帔R(cd为java.util.HashMap)在Java没有Q在Groovy中表CZؓ def frequence = ["the": 5, "hello": 2, "world": 2]<br /> 18.cd量即static变量QGroovy与Java相同Qstatic String name = "山风子"Q在Groovy也可写ؓstatic name = "山风子"<br /> 19.在varargsҎ斚wQGroovy与JavaE有区别Q如下所C:<br /> <font color="#009900">Java:</font><br /> <div style="border-right: rgb(204,204,204) 1px solid; padding-right: 5px; border-top: rgb(204,204,204) 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: rgb(204,204,204) 1px solid; width: 98%; padding-top: 4px; border-bottom: rgb(204,204,204) 1px solid; background-color: rgb(238,238,238)"><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)"> Java: <img src="http://www.aygfsteel.com/Images/dot.gif" alt="" /></span><span style="color: rgb(0,128,0)"><br /> </span><span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,0)"> </span><span style="color: rgb(0,0,255)">void</span><span style="color: rgb(0,0,0)"> varargsMethod(Type<img src="http://www.aygfsteel.com/Images/dot.gif" alt="" /> args) {<br />   </span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)">do something</span><span style="color: rgb(0,128,0)"><br /> </span><span style="color: rgb(0,0,0)">}</span></div> <br /> <font color="#009900">Groovy:<br /> </font> <div style="border-right: rgb(204,204,204) 1px solid; padding-right: 5px; border-top: rgb(204,204,204) 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: rgb(204,204,204) 1px solid; width: 98%; padding-top: 4px; border-bottom: rgb(204,204,204) 1px solid; background-color: rgb(238,238,238)"><span style="color: rgb(0,0,0)">def varargsMethod(Type[] args) {<br />   </span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)">do something</span><span style="color: rgb(0,128,0)"><br /> </span><span style="color: rgb(0,0,0)">}</span></div> <br /> 20.引用当前对象QGroovy和Java相同Q在Java中用this表示Q在Groovy中也用this表示Q而且在Groovy中,this可以出现在static范围中,指向所在类的类对象Q本例中Qthis{同?/font><font color="#990000">ThisInStaticScope.classQJava写法</font><font color="#990000">Q?/font><font color="#990000">?/font><font color="#990000">ThisInStaticScopeQGroovy写法Q?/font><font size="+0"><font color="#990000"></font></font><font color="#990000"> <div style="border-right: rgb(204,204,204) 1px solid; padding-right: 5px; border-top: rgb(204,204,204) 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: rgb(204,204,204) 1px solid; width: 98%; padding-top: 4px; border-bottom: rgb(204,204,204) 1px solid; background-color: rgb(238,238,238)"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: rgb(0,0,255)">class</span><span style="color: rgb(0,0,0)"> ThisInStaticScope {<br />     </span><span style="color: rgb(0,0,255)">static</span><span style="color: rgb(0,0,0)"> {<br />         println </span><span style="color: rgb(0,0,255)">this</span><span style="color: rgb(0,0,0)"><br />     }<br />     </span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)"> 请不要诧异,参数cd可以省略。如果方法声明中?/span><font size="+0"><font color="#990000"><font size="+0"><font color="#990000"><span style="color: rgb(0,128,0)">修饰</span></font></font><span style="color: rgb(0,128,0)">关键字比?/span></font></font><span style="color: rgb(0,128,0)">publicQsynchronizedQstatic{?/span><font size="+0"><font color="#990000"></font></font><span style="color: rgb(0,128,0)">Q则q回值类型可以省略?/span><span style="color: rgb(0,128,0)"><br /> </span><span style="color: rgb(0,0,0)">    </span><span style="color: rgb(0,0,255)">static</span><span style="color: rgb(0,0,0)"> main(args) {<br />         println </span><span style="color: rgb(0,0,255)">this</span><span style="color: rgb(0,0,0)"><br />     }<br /> }</span></div> <br /> 21.子类中调用父cL法,Groovy和Java也相同,在Java?super.methodName() Q在Groovy?super.methodName()<br /> 22.命名I间的定义,Groovy和Java相同Q在Java?package edu.ecust.bluesun;   在Groovy?package edu.ecust.bluesun     Q分号可省略Q?br /> 23.在导入类斚wQGroovy和Java相同Q在Java?import edu.ecust.bluesun.GroovyTest;  在Groovy?import edu.ecust.bluesun.GroovyTest<br /> 24.List帔R(cd为java.util.ArrayList)在Java中没有, 在Groovy中表CZؓ def list = [3, 11, "Hello", "山风子", "!"]<br /> 25.在异常处理方面,Groovy与Java相同Q除了不强制E序员捕h查异?checked exception)?(q跟C#很像Q如果我没记错的?:) <br />         q且在方法声明时Q也可以不写throws语句?br /> 26.Ҏ的默认参敎ͼJava中没有,Groovy中表C如下:<br /> <div style="border-right: rgb(204,204,204) 1px solid; padding-right: 5px; border-top: rgb(204,204,204) 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: rgb(204,204,204) 1px solid; width: 98%; padding-top: 4px; border-bottom: rgb(204,204,204) 1px solid; background-color: rgb(238,238,238)"><span style="color: rgb(0,0,255)">class</span><span style="color: rgb(0,0,0)"> Hello {<br />   </span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)">如果没有参数传入Q默认打印出 Hello, 山风子</span><span style="color: rgb(0,128,0)"><br /> </span><span style="color: rgb(0,0,0)">  def greet(name</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">山风子</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">) {<br />     println(</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">Hello, $name</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">) </span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)">也可省略括号()</span><span style="color: rgb(0,128,0)"><br /> </span><span style="color: rgb(0,0,0)">  }<br /> }</span></div> 27.在Groovy中,语句如果单独占一行的话,句尾的分?;)可以省略Q而在Java中每条语句后面必跟有分?;)<br /> 28.在Groovy中,如果不是Boolean或booleancdQ非null或非I?I字W串Q[]Q[:])为trueQnull为falseQ而Java中对象不可以表示true或falseQ如果是Boolean或booleancdQ与Java中的一栗?br /> 29.在Groovy中,万事万物都是对象Q而Java中不是这P基本cd(primitive type)׃是对象?br /> 30.在Java中,Class对象表示为ClassName.classQ而在Groovy中,可以直接用ClassName表示Class对象<br /> 31.Groovy会自动导入java.lang.*, java.util.*, java.net.*, java.io.*, java.math.BigInteger, java.math.BigDecimal,   groovy.lang.*, groovy.util.*Q而Java则只自动导入java.lang.*<br /> 32.Groovy不仅? :三元操作W,q有?:两元操作W,但Java只有? :三元操作W?br /> </font><font color="#990000"><font color="#009900">Groovy:<br /> <div style="border-right: rgb(204,204,204) 1px solid; padding-right: 5px; border-top: rgb(204,204,204) 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: rgb(204,204,204) 1px solid; width: 98%; padding-top: 4px; border-bottom: rgb(204,204,204) 1px solid; background-color: rgb(238,238,238)"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: rgb(0,0,0)">def a </span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)"> </span><span style="color: rgb(0,0,255)">null</span><span style="color: rgb(0,0,0)">;<br /> </span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)"> 如果a?#8220;I?#8221;QnullQ空?"Q[]Q[:]Q,那么l果?:之后的那个? 如果不ؓ“I?#8221;Q那么结果就是a</span><span style="color: rgb(0,128,0)"><br /> </span><span style="color: rgb(0,0,0)">def result </span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)"> a </span><span style="color: rgb(0,0,0)">?</span><span style="color: rgb(0,0,0)">: </span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">default result</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)"><br /> println result<br /> <br /> a </span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)"> </span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">山风子</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)"><br /> result </span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)"> a </span><span style="color: rgb(0,0,0)">?</span><span style="color: rgb(0,0,0)">: </span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">default result</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)"><br /> println result</span></div> <br /> <br /> <br /> </font></font><font color="#990000"><br /> <font color="#660000"><font color="#cc0000">׃可知QGroovy几乎完全兼容Java的语法,难?#8216;江南白衣’UGroovy是Java?#8216;U生?#8217;Q但׃Groovy不仅借鉴了Java 95%以上的特性,而且q借鉴了许多卓的动态语aQ比如Python, Ruby{,使Groovy成ؓ极其高效敏捷的编E语aQ而不仅仅是Java的副本。所以其实Java++可以作ؓGroovy的别名,卛_有动态特性的Java?br /> </font></font><br /> 最后,我想补充一句:Groovy的特性远不至所列的q些Q比如还有MixinsQbuilderpd:MarkupBuilder,SwingBuilder{,很多都是Groovy中有而Java中没有,因此׃一一列D了,想l深入学习GroovyQ可讉KGroovy官方|站Q?a >http://groovy.codehaus.org</a> Q里面有很多例子和教E供大家参阅Q也可以参考在下的Groovy高效~程pdQ其中一些是在下的笔讎ͼ。网上也有《Groovy In Action》电子书下蝲Q大家不妨搜一下?br /> <br /> <br /> <font color="#000099"><strong>参考文?br /> </strong></font><font color="#660000">Differences from Java:</font><a >http://groovy.codehaus.org/Differences+from+Java</a></font> <img src ="http://www.aygfsteel.com/xiaosao/aggbug/182943.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/xiaosao/" target="_blank">cAng^Er</a> 2008-02-29 15:30 <a href="http://www.aygfsteel.com/xiaosao/archive/2008/02/29/182943.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title><?gt;使用理工具http://www.aygfsteel.com/xiaosao/archive/2007/08/12/136161.htmlcAng^ErcAng^ErSun, 12 Aug 2007 06:38:00 GMThttp://www.aygfsteel.com/xiaosao/archive/2007/08/12/136161.htmlhttp://www.aygfsteel.com/xiaosao/comments/136161.htmlhttp://www.aygfsteel.com/xiaosao/archive/2007/08/12/136161.html#Feedback0http://www.aygfsteel.com/xiaosao/comments/commentRss/136161.htmlhttp://www.aygfsteel.com/xiaosao/services/trackbacks/136161.htmlhttp://gceclub.sun.com.cn/staticcontent/html/webservices/web_services_tutorial/3/3.3.htm
Java Web Services Developer Pack包括Tomcat Web 服务器管理工P后文U管理工兗管理工?Web应用E序可用于操作Tomcat的运行。例如,可以d和(或)配置上下文、主机、成员域和连接器Q或者ؓ容器理安全性设|用户和角色?br>为启动admintoolQ执行下列步骤?/p>

1Q?nbsp;  按照启动Tomcat中的说明启动Tomcat?/p>

2Q?nbsp;  启动Web览器?/p>

3Q?nbsp;  在Web览器内Q指向下列URLQ?/p>

http://localhost:8080/admin

<user name="adeveloper" password="secret"
  roles="admin, manager" />

该命令调用了admin Web应用E序。在使用该应用程序前必须d用户?密码l合q将其与角色名admin兌。访问这个工h需的的初始用户名和密码必须在Java WSDP安装期间讄。如果忘C用户名和密码Q可以用L的文本编辑器参阅<JWSDP_HOME>/conf/tomcat-users.xml。该文g包含各个用户的元?lt;user>Q该元素可能如下所C:<user name="adeveloper" password="secret"
  roles="admin, manager" />

4Q?nbsp;  使用分配了admin角色的用户名和密码组合登录到admintool。该用户名和密码必须与build.properties文g中的用户名和密码匚w?/p>

5Q?nbsp;  l束Ӟ通过选择上窗g的Logout来退出管理工兗?/p>

本节介绍了如何利用管理工兯|角艌Ӏ组和用戗比如关于利用管理工具创建、删除、和Q或Q配|的信息Q?/p>

·   Tomcat服务器?/p>

·   q行在Tomcat服务器上的服务,以及嵌套在这些服务里的各U元素,例如L、上下文、成员域、连接器、日志记录器以及qo阀?/p>

·   各种资源例如数据源、环境条目,以及用户数据库?/p>

理解角色、组以及用户

Tomcat服务器验证服务包括下列组Ӟ

·   角色——用于设|具体的资源讉K权限的抽象名。角色可比作能开锁的钥匙。许多h可能都配有同L钥匙Q而锁不会考虑你是谁,只要有正的钥匙p了?/p>

·   用户——经q验证(关于验证前面章节已讨Q的个hQ或者应用程序)w䆾。一个用户可以有一pd与他w䆾相关联的角色Q这样他可以访问所有被保护的资源?/p>

·   l?/em>——按照像工种或客戯料这L普通特性分cȝ一l验证用戗组q与一l角色关联,q且属于该组的用L承了所有分配给该组的角艌Ӏ?/p>

·   成员?/em>——角艌Ӏ用户和l的完整数据库,用于识别Web应用E序的合法用戗?/p>

我们在理角色和用户一节中详细讨论了这些概念,关于理工具的更多信息也可以扑ֈ?/p>

利用理工具d角色

|容器管理安全的全新角色Q遵循下列说明。管理工具中的添加、删除和改变写在tocamt-users.xml文g中?/p>

1Q?nbsp;  向下滚动理工具的左H格到User and Group AdministrationQ用户和l管理)节点?/p>

2Q?nbsp;  选择Role AdministrationQ角色管理)?/p>

3Q?nbsp;  从Roles ListQ角色列表)中选择Create New RoleQ创建新角色Q?/p>

4Q?nbsp;  输入角色名和描述Q例?code>Customer?code>User?/p>

5Q?nbsp;  选择SaveQ保存)?/p>

利用理工具d用户

要想为容器管理安全设|新用户Q遵循下列说明。管理工具中的添加、删除和改变写在tocamt-users.xml文g中?/p>

1Q?nbsp; 向下滚动理工具的左H格到User and Group AdministrationQ用户和l管理)节点?/p>

2Q?nbsp; 选择User AdministrationQ用L理)?/p>

3Q?nbsp; 从Users ListQ用户列表)中选择Create New UserQ创建新用户Q?/p>

4Q?nbsp; 输入用户名和密码Qƈ为新用户选择一个角艌Ӏ如果ؓ新用户选择admin角色Q该用户能讉K理工具.

5Q?nbsp; 选择SaveQ保存)?/p>

修改应用E序

׃Java Web Services Developer Pack用于实验目的Q它支持重复开发。只要改动了应用E序Q就必须重新部v和加载该应用E序。在build.xml文g中定义的d使得这些改动部|到ConverterBean和JSP面变得更简单?/p>

在build.xml文g里,我们讄了一个在q行Tomcat服务器上安装应用E序的目标,和一个在q行Tomcat服务器内重蝲该应

用程序的目标。这些Q务是用Tomcat服务器管理程序工具完成的Q该工具是一个manager Web应用E序。可以用在Java WSDP安装期间讄的用户名/密码l合Q因为它能ɽ理E序的角色名与它兌。如果忘C在安装期间设|的用户?密码l合Q可以利用Q何文本编辑器查阅<JWSDP_HOME>/conf/tomcat/-user.xml?/p>

修改cL?/h3>

Z修改Javalg内的cLӞ更改源代码,重编译它Q然后重新部|应用程序。用Tomcat manager Web应用E序Ӟ不需要停止ƈ重新启动Tomcat以便重新部vq个更改q的应用E序。例如,假定你想改变ConverterBeanlg的yenRate属性中的汇率:

1.       在源目录中编辑ConverterBean.java?/p>

2.       通过输入ant build重新~译ConverterBean.java?/p>

3.       通过输入ant reload重新部vConverterBean.java?/p>

4.       在Web览器中重新加蝲JSP面?/p>

修改Web客户?/h3>

Z修改JSP面Q更Ҏ代码q新部|应用程序。用Tomcat manager Web应用E序Ӟ不需要停止ƈ重新启动Tomcat以便重新部v更改q的Web客户端程序。例如,假定你想修改字体或者在JSP面中添加另外的描述文本。ؓ了修改Web客户端程序:

1Q?nbsp;  在源目录中编辑index.jsp?/p>

2Q?nbsp;  通过输入ant reload重新加蝲Web应用E序?/p>

3Q?nbsp;  在Web览器里重新加蝲JSP面?/p>

常见问题及其解决Ҏ

使用下列指南来解军_建、编译、安装、部|和q行CZ应用E序旉到的问题?/p>

启动Tomcat时的错误

"Out of Environment Space"错误

症状Q在ZMicrosoft Windows 9x/ME操作pȝ上,q行启动和关闭批处理文g时候出?#8220;out of environment Space“错误?/p>

解决ҎQ在Microsoft Windows 资源理器中Q右键单击startup.bat和shutdown.bat文g。选择“属?#8221;Q接着选择“内存”选项卡??#8220;初始环境”域中的值增加到4096。选择“应用”?/p>

选中“应用”后,在用来启动和停止容器的目录内生成快h式?/p>

"Unable to Locate the Server localhost:8080"错误

症状Q试囑֜览器里加蝲Web应用E序时出现的"unable to locate server"错误?/p>

解决ҎQTomcat的完全加载要p一些时_所以在l箋疑难解决前首先要保证lTomcat臛_5分钟的加载时间。ؓ了检验Tomcat是否正在q行Q将览器指?a href="http://localhost:8080/">http://localhost:8080。在Tomcat索引屏幕出现Ӟ便可以l了。如果烦引屏q没有立卛_载,{几分钟然后再重试。如果Tomactq没有加载,像下面描述的那P点击日志文g以获取更多的疑难解答信息?/p>

Tomcat启动时将初始化自w,然后加蝲<JWSDP_HOME>/webapps中的所有Web应用E序。当通过调用startup.shq行TomcatӞ服务器消息被d?lt;JWSDP_HOME>/logs/launcher.server.log中。加载Web应用E序的过E可?code><JWSDP_HOME>/logs/jwsdp_log.<date>.txt文g中看到?/code>

~译错误

Ant 不能定位生成文g

症状Q在输入ant buildӞ出现如下消息Q?/p>

Buildfile: build.xml does not exist!
Build failed. 

解决ҎQ从<JWSDP_HOME>/docs/tutorial/sxample/gs/目录启动AntQ或者从创徏应用E序的目录。如果希望从当前目录?/p>

动AntQ那么必d命o行指定生成文件。例如,输入如下命oQ?/p>

ant -buildfile 
<JWSDP_HOME>/docs/tutorial/examples/gs/build.xml
build 
~译器不能解析符?/h5>

症状Q输入ant buildӞ~译器会报告许多错误Q包括:

cannot resolve symbol
. . .
BUILD FAILED
. . .
Compile failed, messages should have been provided 
 

解决ҎQ确定所使用的Ant版本是与该Java WSDP版本一起发布的。确保这一要求的最好方法是使用Ant文g的完整PATH来构建应用程序,<JWSDP_HOME>/jakarta-ant-1.5.1/bin/ant build。其他版本可能不包括CZ应用E序生成文g所期望的所有功能?/p>

 “q接拒绝“错误

症状Q在l端提示H口中输入ant installӞ收到下列消息Q?/p>

<JWSDP_HOME>/docs/tutorial/examples/gs/build.xml:82: 
java.net.ConnectException: Connection refused 

解决ҎQTomcat没有完全启动。等待几分钟Q然后尝试再ơ安装应用程序。关于Tomcat启动疑难解答的更多信息,参阅无效的本地服务器localhost:8080 ?/p>

试图q行安装dӞpȝ出现中止

症状Q输入ant installӞpȝ出现了中止?/p>

解决ҎQTomcat启动脚本在后台启动了TomcatQ然后立卛_用户q回命o提示行。尽返回了命o行,但启动脚本可能还没有完全启动Tomcat。如果这个安装Q务没有立卌行,{待几分钟后重试安装d。ؓ了检验Tomact是否在运行,浏览器指向http://localhost:8080。若出现Tomcat索引屏幕Q就可以l箋。如果这个闪屏没有立卛_载,{待几分钟后重试。如果Tomcat一直没有加载,查日志文件以获得更多疑难解答信息Q?/p>

Tomcat启动时先初始化自己,然后加蝲<JWSDP_HOME>/webapps中的所有Web应用E序。通过调用startup.shq行TomcatӞ服务器消息已l登?lt;JWSDP_HOME>/logs/launcher.server.log。加载Web应用E序的过E可?code><JWSDP_HOME>/logs/jwsdp_log.<date>.txt文g中看到?/code>

部v错误

Server returned HTTP response code: 401 for URL ...

症状Q输入ant installӞ出现如下消息Q?/p>

BUILD FAILED
/home/you/gs/build.xml:44:
java.io.IOException: Server returned HTTP response code: 401
for URL: http://localhost:8080/manager/install?path= ... 

解决ҎQ确定build.properties文g中的用户名和密码与具有tomcat-users.xml文g里manager角色的用户名和密码相匚w?/p>

不能q行客户端应用程?/h5>

症状Q浏览器报告找不到该面QHTTP404Q?/p>

解决ҎQ启动脚本在后台启动dQ然后立卛_用户q回命o行提C窗口。尽已l返回命令行Q但启动脚本可能q没?/p>

完全启动Tomcat。如果Web客户端没有立卌行,{待几分钟再重试加蝲Web客户端?/p>

找不到localhost机器

症状Q浏览器报告找不到该面QHTTP404Q?/p>

解决ҎQ有时候,若位于代理服务器和防火墙的后面将不能讉Klocalhost机器。ؓ了解册个问题,更改代理讄以便不再通过代理讉Klocalhost?/p>

Z在Netscape Navigator Trademarked 览器中实现q一目的Q选择Edit -> Preferences -> Advanced -> Proxies Q然后选择 No Proxy for: localhost??Internet Explorer中,选择 Tools -> Internet Options -> Connections -> LAN Settings?/p>

应用E序没有部v

症状Q浏览器报告找不到该面QHTTP404Q?/p>

解决ҎQ部|应用程序。想了解更多的细节,参阅部v应用E序一节?/p>

"Build Failed: Application Already Exists at Path" 错误

症状Q在l端提示H口输入ant installӞ收到如下消息Q?/p>

[install] FAIL - Application already exists at path /GSApp 
BUILD FAILED 
<JWSDP_HOME>/docs/tutorial/examples/gs/build.xml:82: FAIL - 
Application already exists at path /GSApp 

该应用程序已l安装。如果由于应用程序的安装而对它作Z改动Q利?code>ant reload更新Tomcat中的应用E序?/p>

HTTP 500: No Context Error

症状Q在试图q行部v应用E序时候收C个No Context Error错误?/p>

解决ҎQ这个错误意味Tomcat被加载,但是它不知道应用E序。如果还没有通过q行ant remove、ant build、ant install和ant reload部v应用E序Q现在做吧?/p>

解决ҎQ如果Tomacat正在加蝲Q但是还没有加蝲所有已存在的上下文Q将收到该错误。不断点L览器中的重蝲或者刷新按钮,直到应用E序被加载或者收到另一U错误消息?/p>

更多信息

·   Tomcat 理工具。阅读Tomcat理工具以获得利用admintoolQ无需停止q新启动Tomcat来配|它的行为的更多信息?/p>

·   Tomcat 配置参考?/em>想了解更多关于能用来配置Tomacat行ؓ的元素的信息Q阅?lt;JWSDP_HOME>/docs/tomcat/config/index.html中的Tomcat配置参考?/p>

·   cd载器入门?/em>该文档讨Z应用开发者和部v者应该把cd资源文g攑֜哪里Q以便让Web应用能找到它们。该文档位于<JWSDP_HOME>/docs/tomcat/class-loader-howto.html中?/p>

·   JNDI 资源入门?/em>该文档讨ZJNDI资源配置、Tomcat标准资源工厂、JDBC数据源,和定制资源工厂。该文档位于 <JWSDP_HOME>/docs/tomcat/jndi-resources-howto.html中?/p>

·   Manager Application入门。该文档描述了如何利用Manager ApplicationQ无需关闭和重新启动TomcatQ来部v新的Web应用E序Q解除部|现有的应用E序Q或者重载现有的应用E序。该文档位于<JWSDP_HOME>/docs/tomcat/manager-howto.html中?/p>

·   代理支持入门?/em>该文档讨Z如何在代理服务器Q或者配|来行代理服务器功能的Web服务器)后面q行。特别地Q该文档讨论了如何管理来自Web应用的调用返回倹{其中该Web应用h服务器名和请求将被发往的端口号。该文档位于<JWSDP_HOME>/docs/tomcat/proxy-howto.html中?/p>

·   成员域配|入门?/em>该文档讨Z如何通过q接到用户名、密码、和用户角色的现有数据库Q配|Tomcat以支持容器管理安全。该文档位于<JWSDP_HOME>/docs/tomcat/realm-howto.html

·   安全理E序入门?/em>该文档讨Zq行Tomcat以保护服务器免受未经验证的serlvets、JSP、JSP bean、和标签库R扰时QSecurity Manager的用法。该文档位于<JWSDP_HOME>/docs/tomcat/security-manager-howto.html中?/p>

SSL 配置入门。该文档讨论了如何在Tomcat上安装和配置SSL支持。安装和配置SSL支持中讨Z如何利用Java WSDP在Tomcat上安装和配置SSL支持?lt;JWSDP_HOME>/docs/tomcat/ssl-howto.html 中的Tomcat文档也讨Zq个主题Q然而,本教E中的信息对于这个与Java WSDP一起发布的Tomcat版本来说是最新的?/p>

cAng^Er 2007-08-12 14:38 发表评论
]]>
վ֩ģ壺 ӳ| | ͨ| | | ѧ| ʯ| | ͬ| | ʡ| | | | | ϲ| | | | ̩| Ϫ| | ǫ| ̫| | Ϫ| | »| ͨ| Ԫ| ½| ľ| | | ˮ| ƽ| ɽ| ͡| | | |