﻿<?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-&lt;h3 style="font-family: Comic Sans MS"&gt;&lt;font color="#FA1A0A" size="10"&gt;︻┳═一Java&lt;/font&gt;&lt;/h3&gt;-文章分类-Java</title><link>http://www.blogjava.net/rain1102/category/14838.html</link><description>&lt;b&gt;&lt;font color="#3C1435"&gt;08年奋斗目标：&lt;/font&gt;&lt;font color="#F70E0A"&gt;赚钱买个房子！&lt;/font&gt;&lt;/b&gt;</description><language>zh-cn</language><lastBuildDate>Wed, 07 May 2008 02:52:47 GMT</lastBuildDate><pubDate>Wed, 07 May 2008 02:52:47 GMT</pubDate><ttl>60</ttl><item><title>Commons-Validator</title><link>http://www.blogjava.net/rain1102/articles/198893.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Wed, 07 May 2008 02:50:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/198893.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/198893.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/198893.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/198893.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/198893.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Commons-Validator（一）&nbsp;&nbsp;&nbsp;&nbsp;Commons-Validator包用来把验证规则程序提取出来，以供重复使用。这个包可以使用在Struts中，也可以独立的应用在任何其它的应用中。用户可以通过Java类的方式自定义验证方法，也可以在配置文件中通过正则表达式配置验证方法。它不但支持服务器端的验证，客户端的验证也支持，具体需要使用tag把相...&nbsp;&nbsp;<a href='http://www.blogjava.net/rain1102/articles/198893.html'>阅读全文</a><img src ="http://www.blogjava.net/rain1102/aggbug/198893.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2008-05-07 10:50 <a href="http://www.blogjava.net/rain1102/articles/198893.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java中annotation实例</title><link>http://www.blogjava.net/rain1102/articles/197535.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Wed, 30 Apr 2008 07:25:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/197535.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/197535.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/197535.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/197535.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/197535.html</trackback:ping><description><![CDATA[<span style="color: #008000">
<p><strong style="color: #000000">编写Annotation：<br />
</strong><br />
package com.eric.news.cha06;</p>
<p>import <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.lang.annotation.Documented;<br />
import <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.lang.annotation.Inherited;<br />
import <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.lang.annotation.Retention;<br />
import <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.lang.annotation.RetentionPolicy;</p>
<p>@Documented<br />
@Inherited<br />
@Retention(RetentionPolicy.RUNTIME)<br />
public @interface GroupTODO {</p>
<p>&nbsp;public enum Severity {CRITICAL, IMPORTANT, TRIVIAL, DOCUMENTATION};<br />
&nbsp;Severity severity() default Severity.IMPORTANT;<br />
&nbsp;String item();<br />
&nbsp;String assignedTo();<br />
}<br />
</p>
<p><span style="color: #000000">－－－－－－－－－－－－－－－－－－－－－</span><br />
<span style="color: #000000"><strong>运用annotation：<br />
</strong></span><br />
package com.eric.news.cha06;</span></p>
<p><span style="color: #008000">@InProgress<br />
public class TestInProgress {</span></p>
<p><span style="color: #008000">&nbsp;@GroupTODO(<br />
&nbsp;&nbsp;&nbsp;severity=GroupTODO.Severity.CRITICAL,<br />
&nbsp;&nbsp;&nbsp;item="Figure out the amount of interest per month",<br />
&nbsp;&nbsp;&nbsp;assignedTo="Eric Zhou"<br />
&nbsp;)<br />
&nbsp;public void calculateInterest(float amount, float rate) {<br />
&nbsp;&nbsp;<br />
&nbsp;}<br />
}</span><br />
<br />
<span style="color: #000000"><span style="color: #000000">－－－－－－－－－－－－－－－－－－－－－<br />
<br />
<strong>测试：</strong></p>
<p><span style="color: #008000">package com.eric.news.cha06;</span></p>
<p><span style="color: #008000">import <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.lang.reflect.Method;</span></p>
<p><span style="color: #008000">public class TestAnnotation {</span></p>
<p><br />
<span style="color: #008000">&nbsp;public static void main(String[] args) throws SecurityException, NoSuchMethodException {<br />
&nbsp;&nbsp;Class c = TestInProgress.class;<br />
&nbsp;&nbsp;Method element = c.getMethod("calculateInterest", float.class, float.class);<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;GroupTODO groupTodo = element.getAnnotation(GroupTODO.class);<br />
&nbsp;&nbsp;String assignedTo = groupTodo.assignedTo();<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;System.out.println(assignedTo);<br />
&nbsp;&nbsp;System.out.println(groupTodo.item());</span></p>
<p><span style="color: #008000">&nbsp;}</span></p>
<p><span style="color: #008000">}<br />
</span></p>
<p></span></span><br />
<span style="color: #000000"><span style="color: #000000">－－－－－－－－－－－－－－－－－－－－－</span></span><br />
<strong>结果：<br />
</strong><span style="color: #008000">Eric Zhou<br />
Figure out the amount of interest per month</span><br />
<br />
</p><img src ="http://www.blogjava.net/rain1102/aggbug/197535.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2008-04-30 15:25 <a href="http://www.blogjava.net/rain1102/articles/197535.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>协变返回(covariant return)</title><link>http://www.blogjava.net/rain1102/articles/194900.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Tue, 22 Apr 2008 14:45:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/194900.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/194900.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/194900.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/194900.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/194900.html</trackback:ping><description><![CDATA[<p>在Java1.4及以前，子类方法如果要覆盖超类的某个方法，必须具有完全相同的方法签名，包括返回值也必须完全一样。<br />
Java5.0放宽了这一限制，只要子类方法与超类方法具有相同的方法签名，或者子类方法的返回值是超类方法的子类型，就可以覆盖。<br />
注意："协变返回(covariant return)"，仅在subclass的返回类型是superclass返回类型的extension时才被容许。<br />
&nbsp;</p>
<p>package com.eric.news;</p>
<p>public class Point2D {</p>
<p>&nbsp;protected int x, y;<br />
&nbsp;<br />
&nbsp;public Point2D() {<br />
&nbsp;&nbsp;this.x = 0;<br />
&nbsp;&nbsp;this.y = 0;<br />
&nbsp;}<br />
&nbsp;public Point2D(int x, int y) {<br />
&nbsp;&nbsp;this.x = x;<br />
&nbsp;&nbsp;this.y = y;<br />
&nbsp;}<br />
&nbsp;<br />
}<br />
<br />
<br />
</p>
<p>package com.eric.news;</p>
<p>public class Point3D extends Point2D {</p>
<p>&nbsp;protected int z;<br />
&nbsp;<br />
&nbsp;public Point3D(int x, int y) {<br />
&nbsp;&nbsp;this(x, y, 0);<br />
&nbsp;}<br />
&nbsp;public Point3D(int x, int y, int z) {<br />
&nbsp;&nbsp;this.x = x;<br />
&nbsp;&nbsp;this.y = y;<br />
&nbsp;&nbsp;this.z = z;<br />
&nbsp;}<br />
}<br />
</p>
<p><br />
<br />
</p>
<p>package com.eric.news;</p>
<p>public class Position2D {<br />
&nbsp;Point2D location;<br />
&nbsp;<br />
&nbsp;public Position2D() {<br />
&nbsp;&nbsp;this.location = new Point2D();<br />
&nbsp;}<br />
&nbsp;<br />
&nbsp;public Position2D(int x, int y) {<br />
&nbsp;&nbsp;this.location = new Point2D(x, y);<br />
&nbsp;}<br />
&nbsp;<br />
&nbsp;public Point2D getLocation() {<br />
&nbsp;&nbsp;return location;<br />
&nbsp;}<br />
}<br />
<br />
<br />
</p>
<p>package com.eric.news;</p>
<p>public class Position3D extends Position2D {</p>
<p>&nbsp;Point3D location;<br />
&nbsp;<br />
&nbsp;public Position3D(int x, int y, int z) {<br />
&nbsp;&nbsp;this.location = new Point3D(x, y, z);<br />
&nbsp;}<br />
&nbsp;<br />
&nbsp;public Point3D getLocation() {<br />
&nbsp;&nbsp;return location;<br />
&nbsp;}<br />
}<br />
</p><img src ="http://www.blogjava.net/rain1102/aggbug/194900.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2008-04-22 22:45 <a href="http://www.blogjava.net/rain1102/articles/194900.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java.lang.NoSuchFieldError: TRACE :Log4j</title><link>http://www.blogjava.net/rain1102/articles/193843.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Thu, 17 Apr 2008 11:05:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/193843.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/193843.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/193843.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/193843.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/193843.html</trackback:ping><description><![CDATA[<span class="postbody">Hi I am facing a problem with accessing the JBOSS. <br />
<br />
according to the exception it seems to me --- log related exception. <br />
<br />
when I call the following code <br />
<br />
</span>
<table cellspacing="1" cellpadding="3" width="90%" align="center" border="0">
    <tbody>
        <tr>
            <td><span class="genmed"><strong>Code:</strong></span></td>
        </tr>
        <tr>
            <td class="code">
            <pre>Hashtable env = new Hashtable();
            env.put(Context.INITIAL_CONTEXT_FACTORY, initCtxFac);
            env.put(Context.PROVIDER_URL, providerUrl);
            try {
            ctx = new InitialContext(env);
            conFactory = (QueueConnectionFactory) ctx.lookup
            (queueConFacLookupName);
            -----
            -----	</pre>
            </td>
        </tr>
    </tbody>
</table>
<span class="postbody"><br />
<br />
exception details <br />
<br />
</span>
<table cellspacing="1" cellpadding="3" width="90%" align="center" border="0">
    <tbody>
        <tr>
            <td><span class="genmed"><strong>Code:</strong></span></td>
        </tr>
        <tr>
            <td class="code">
            <pre>Exception in thread "main" <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.lang.NoSuchFieldError: TRACE
            at org.jboss.logging.Log4jLoggerPlugin.isTraceEnabled(Log4jLoggerPlugin.java:85)
            at org.jboss.logging.Logger.isTraceEnabled(Logger.java:122)
            at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:622)
            at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:589)
            at javax.naming.InitialContext.lookup(InitialContext.java:351)
            at com.cognizant.util.ServiceHelper.initQueueService(ServiceHelper.java:153)
            at com.cognizant.main.StartUp.&lt;init&gt;(StartUp.java:28)
            at com.cognizant.main.StartUp.main(StartUp.java:46)	</pre>
            </td>
        </tr>
    </tbody>
</table>
<span class="postbody"><br />
<br />
<br />
I use jboss-4.2.1.GA version with JDK jdk141_05 version. <br />
<br />
I added jboss.jar,jbossall-client.jar,jboss-client.jar,jboss-system.jar,log4j-1.2.9.jar,log4j-boot.jar in my project library. <br />
<br />
Strange thing is that I run this same code with all other 3/4 windows XP system. OK <br />
<br />
But in another system with the same configuration I got the above mentioned exception. <br />
<br />
<br />
Can any body help me? <br />
<br />
-----------------------------------------------------------------------------------------<br />
<table cellspacing="1" cellpadding="3" width="90%" align="center" border="0">
    <tbody>
        <tr>
            <td><span class="genmed"><strong>Quote:</strong></span></td>
        </tr>
        <tr>
            <td class="quote">Exception in thread "main" <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.lang.NoSuchFieldError: TRACE</td>
        </tr>
    </tbody>
</table>
<span class="postbody"><br />
<br />
You will require log4j jar of version 1.2.12 or higher in your classpath. Also, make sure that you do <span style="font-style: italic">not</span> maintain more than one version of jar file of log4j (or for that matter any other utility) in the classpath. So remove the log4j-1.2.9.jar and log4j-boot.jar from your client's classpath and include a log4j jar of version 1.2.12 or higher. <br />
</span><br />
</span><img src ="http://www.blogjava.net/rain1102/aggbug/193843.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2008-04-17 19:05 <a href="http://www.blogjava.net/rain1102/articles/193843.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用JAVA对象比较器Comparator</title><link>http://www.blogjava.net/rain1102/articles/193559.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Wed, 16 Apr 2008 12:47:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/193559.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/193559.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/193559.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/193559.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/193559.html</trackback:ping><description><![CDATA[需求：公司要将员工进行排序（不要说领导排在前面），我们的需求比较复杂。先进行姓排序，谁的姓拼音靠前，谁就排前面。然后对名字进行排序。恩.如果同名，女性排前头。如果名字和性别都相同，年龄小的排前头。<br />
代码如下：<br />
<br />
<strong>Person.java</strong><br />
<p><span style="color: #008000">package com.founder.common;</span></p>
<p><span style="color: #008000">public class Person {<br />
&nbsp;private String firstName;<br />
&nbsp;private String lastName;<br />
&nbsp;private boolean sex;<br />
&nbsp;private int age;</span></p>
<p><span style="color: #008000">&nbsp;public Person(String firstName, String lastName, boolean sex, int age) {<br />
&nbsp;&nbsp;this.firstName = firstName;<br />
&nbsp;&nbsp;this.lastName = lastName;<br />
&nbsp;&nbsp;this.sex = sex;<br />
&nbsp;&nbsp;this.age = age;<br />
&nbsp;}<br />
&nbsp;public int getAge() {<br />
&nbsp;&nbsp;return age;<br />
&nbsp;}<br />
&nbsp;public void setAge(int age) {<br />
&nbsp;&nbsp;this.age = age;<br />
&nbsp;}<br />
&nbsp;public String getFirstName() {<br />
&nbsp;&nbsp;return firstName;<br />
&nbsp;}<br />
&nbsp;public void setFirstName(String firstName) {<br />
&nbsp;&nbsp;this.firstName = firstName;<br />
&nbsp;}<br />
&nbsp;public String getLastName() {<br />
&nbsp;&nbsp;return lastName;<br />
&nbsp;}<br />
&nbsp;public void setLastName(String lastName) {<br />
&nbsp;&nbsp;this.lastName = lastName;<br />
&nbsp;}<br />
&nbsp;public boolean getSex() {<br />
&nbsp;&nbsp;return sex;<br />
&nbsp;}<br />
&nbsp;public void setSex(boolean sex) {<br />
&nbsp;&nbsp;this.sex = sex;<br />
&nbsp;}<br />
&nbsp;<br />
&nbsp;public String toString() {<br />
&nbsp;&nbsp;return firstName + " " + lastName + " " + (sex ? "Male" : "Female") + " " + age;<br />
&nbsp;}<br />
}<br />
<br />
<strong><span style="color: #000000"><strong>Comparator.java</strong></span><br />
</strong></p>
<p><span style="color: #008000">package com.founder.common;</span></p>
<p><span style="color: #008000">public class Comparator{<br />
&nbsp;public static <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.util.Comparator getComparator() {<br />
&nbsp;&nbsp;return new <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.util.Comparator() {<br />
&nbsp;&nbsp;&nbsp;public int compare(Object o1, Object o2) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (o1 instanceof String) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return compare((String) o1, (String) o2);<br />
&nbsp;&nbsp;&nbsp;&nbsp;} else if (o1 instanceof Integer) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return compare((Integer) o1, (Integer) o2);<br />
&nbsp;&nbsp;&nbsp;&nbsp;} else if (o1 instanceof Person) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return compare((Person) o1, (Person) o2);<br />
&nbsp;&nbsp;&nbsp;&nbsp;} else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.err.println("未找到适合的比较器");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;public int compare(String o1, String o2) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;int len1 = o1.length();<br />
&nbsp;&nbsp;&nbsp;&nbsp;int len2 = o2.length();<br />
&nbsp;&nbsp;&nbsp;&nbsp;int n = Math.min(len1, len2);<br />
&nbsp;&nbsp;&nbsp;&nbsp;char v1[] = o1.toCharArray();<br />
&nbsp;&nbsp;&nbsp;&nbsp;char v2[] = o2.toCharArray();<br />
&nbsp;&nbsp;&nbsp;&nbsp;int pos = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;while (n-- != 0) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char c1 = v1[pos];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char c2 = v2[pos];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (c1 != c2) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return c1 - c2;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pos++;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;return len1 - len2;<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;public int compare(Integer o1, Integer o2) {&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int val1 = o1.intValue();&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int val2 = o2.intValue();&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return (val1 &lt; val2 ? -1 : (val1 == val2 ? 0 : 1));&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;public int compare(boolean o1, boolean o2) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;return (o1 == o2 ? 0 : (o1 == true ? 1: -1));<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;public int compare(Person o1, Person o2) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;String firstname1 = o1.getFirstName();&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String firstname2 = o2.getFirstName();&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String lastname1 = o1.getLastName();&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String lastname2 = o2.getLastName();&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; boolean sex1 = o1.getSex();&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; boolean sex2 = o2.getSex();&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int age1 = o1.getAge();&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int age2 = o2.getAge();&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return (compare(firstname1, firstname2) == 0 ? <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;(compare(lastname1, lastname2) == 0 ? (compare(sex1, sex2) == 0 ? (compare(age1, age2) == 0 ? 0 :<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;compare(age1, age2)) :<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;compare(sex1, sex2)) :<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;compare(lastname1, lastname2)) :<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;compare(firstname1, firstname2));<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;};<br />
&nbsp;}<br />
}<br />
<br />
<span style="color: #000000"><strong>PersonTest.java</strong><br />
</span></p>
<p>package com.founder.common;</p>
<p>public class PersonTest {</p>
<p>&nbsp;public static void main(String[] args) {<br />
&nbsp;&nbsp;Person[] person = new Person[] {<br />
&nbsp;&nbsp;&nbsp;&nbsp;new Person("ouyang", "feng", true, 25),<br />
&nbsp;&nbsp;&nbsp;&nbsp;new Person("zhuang", "gw", false, 36),<br />
&nbsp;&nbsp;&nbsp;&nbsp;new Person("zhuang", "gw", true, 36),<br />
&nbsp;&nbsp;&nbsp;&nbsp;new Person("zhuang", "gw", true, 33), <br />
&nbsp;&nbsp;&nbsp;&nbsp;new Person("zhuang", "gw", false, 23),<br />
&nbsp;&nbsp;&nbsp;&nbsp;new Person("yang", "gw", true, 43)};<br />
&nbsp;&nbsp;for (int i = 0; i &lt; person.length; i++) {<br />
&nbsp;&nbsp;&nbsp;System.out.println("before sort=" + person[i]);<br />
&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;java.util.Arrays.sort(person, Comparator.getComparator());</p>
<p>&nbsp;&nbsp;System.out.println("*************************************");<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;for (int i = 0; i &lt; person.length; i++) {<br />
&nbsp;&nbsp;&nbsp;System.out.println("after sort=" + person[i]);<br />
&nbsp;&nbsp;}</p>
<p>&nbsp;}</p>
<p>}<br />
</p>
<p><br />
<strong style="color: #000000">输出结果为：</strong><br />
before sort=ouyang feng Male 25<br />
before sort=zhuang gw Female 36<br />
before sort=zhuang gw Male 36<br />
before sort=zhuang gw Male 33<br />
before sort=zhuang gw Female 23<br />
before sort=yang gw Male 43<br />
*************************************<br />
after sort=ouyang feng Male 25<br />
after sort=yang gw Male 43<br />
after sort=zhuang gw Female 23<br />
after sort=zhuang gw Female 36<br />
after sort=zhuang gw Male 33<br />
after sort=zhuang gw Male 36<br />
</span></p>
</span><img src ="http://www.blogjava.net/rain1102/aggbug/193559.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2008-04-16 20:47 <a href="http://www.blogjava.net/rain1102/articles/193559.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JDK常用命令详解</title><link>http://www.blogjava.net/rain1102/articles/192911.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Mon, 14 Apr 2008 12:48:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/192911.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/192911.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/192911.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/192911.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/192911.html</trackback:ping><description><![CDATA[JDK的命令详解（1）<br />
<br />
功能说明：&nbsp;<br />
rmic&nbsp;为远程对象生成&nbsp;stub&nbsp;和&nbsp;skeleton。&nbsp;<br />
语法：&nbsp;<br />
rmic&nbsp;[&nbsp;options&nbsp;]&nbsp;package-qualified-class-name(s)&nbsp;<br />
补充说明：&nbsp;<br />
rmic&nbsp;编译器根据编译后的&nbsp;Java&nbsp;类（含有远程对象实现）名，为远程对象生成&nbsp;stub&nbsp;和&nbsp;skeleton（远程对象是指实现&nbsp;java.rmi.Remote&nbsp;接口的对象）。在&nbsp;rmic&nbsp;命令中所给的类必须是经&nbsp;javac&nbsp;命令成功编译且是完全包限定的类。&nbsp;<br />
命令选项&nbsp;<br />
-classpath[路径]&nbsp;指定&nbsp;rmic&nbsp;用于查询类的路径。如果设置了该选项，它将覆盖缺省值或&nbsp;CLASSPATH&nbsp;环境变量。目录用冒号分隔。&nbsp;<br />
-d[目录]&nbsp;指定类层次的根目录。此选项可用来指定&nbsp;stub&nbsp;和&nbsp;skeleton&nbsp;文件的目标目录。&nbsp;<br />
-depend&nbsp;使编译器考虑重新编译从其它类引用的类。&nbsp;一般来说，它只重新编译从源代码引用的遗漏或过期的类。&nbsp;<br />
-g&nbsp;允许生成调试表格。调试表格含有行号和局部变量的有关信息，即&nbsp;Java&nbsp;调试工具所使用的信息。缺省情况下，只生成行号。&nbsp;<br />
-J&nbsp;与&nbsp;-D&nbsp;选项联用，它将紧跟其后的选项（&nbsp;-J&nbsp;与&nbsp;-D&nbsp;之间无空格）传给&nbsp;java&nbsp;解释器。&nbsp;<br />
-keepgenerated&nbsp;为&nbsp;stub&nbsp;和&nbsp;skeleton&nbsp;文件保留所生成的&nbsp;.java&nbsp;源文件，并将这些源文件写到与&nbsp;.class&nbsp;文件相同的目录中，如果要指定目录，则使用&nbsp;-d&nbsp;选项。&nbsp;<br />
-nowarn&nbsp;关闭警告。如果使用该选项，则编译器不输出任何警告信息。&nbsp;<br />
-show&nbsp;显示&nbsp;rmic&nbsp;编译器的&nbsp;GUI（图形用户界面）。输入一个或多个包限定类名（以空格分隔），并按回车键或&#8220;显示&#8221;按钮，创建&nbsp;stub&nbsp;和&nbsp;skeleton。&nbsp;<br />
-vcompat&nbsp;（缺省值）创建与&nbsp;JDK&nbsp;1.1&nbsp;和&nbsp;1.2&nbsp;stub&nbsp;协议版本都兼容的&nbsp;stub&nbsp;和&nbsp;skeleton。&nbsp;<br />
-verbose&nbsp;使编译器和链接器输出关于正在编译哪些类和正在加载哪些类文件的信息。&nbsp;<br />
-v1.1&nbsp;创建&nbsp;JDK&nbsp;1.1&nbsp;stub&nbsp;协议版本的&nbsp;stub&nbsp;和&nbsp;skeleton。&nbsp;<br />
-v1.2&nbsp;只创建&nbsp;JDK&nbsp;1.2&nbsp;stub&nbsp;协议版本的&nbsp;stub。&nbsp;<br />
<br />
rmid&nbsp;<br />
<br />
功能说明：&nbsp;<br />
rmid&nbsp;启动激活系统守护进程，以便能够在&nbsp;Java&nbsp;虚拟机上注册和激活对象。&nbsp;<br />
语法：&nbsp;<br />
rmid&nbsp;[-port&nbsp;port]&nbsp;[-log&nbsp;dir]&nbsp;<br />
补充说明：&nbsp;<br />
rmid&nbsp;工具启动激活系统守护进程。必须先启动激活系统守护进程，才能向激活系统注册可被激活的对象或在&nbsp;Java&nbsp;虚拟机上激活可被激活的对象。&nbsp;<br />
命令选项&nbsp;<br />
-C&lt;某些命令行选项&gt;&nbsp;指定一个选项，在创建每个&nbsp;rmid&nbsp;的子守护进程（激活组）时，该选项以命令行参数的形式传给该子守护进程。&nbsp;<br />
-log[目录]&nbsp;指定目录的名称，激活系统守护进程在该目录中写入其数据库及相关信息。缺省状态下，将在执行&nbsp;rmid&nbsp;命令的目录中创建一个&nbsp;log&nbsp;目录。&nbsp;<br />
-port[端口]&nbsp;指定&nbsp;rmid&nbsp;的注册服务程序所使用的端口。激活系统守护进程将&nbsp;ActivationSystem&nbsp;与该注册服务程序中的名称java.rmi.activation.ActivationSystem&nbsp;捆绑在一起。&nbsp;<br />
-stop&nbsp;停止&nbsp;-port&nbsp;选项所指定端口上的当前&nbsp;rmid&nbsp;调用。若未指定端口，则将停止在端口&nbsp;1098&nbsp;上运行的&nbsp;rmid。&nbsp;<br />
<br />
rmiregistry&nbsp;<br />
<br />
功能说明：&nbsp;<br />
rmiregistry&nbsp;命令可在当前主机的指定端口上启动远程对象注册服务程序。&nbsp;<br />
语法：&nbsp;<br />
rmiregistry&nbsp;[port]&nbsp;<br />
补充说明：&nbsp;<br />
rmiregistry&nbsp;命令在当前主机的指定&nbsp;port&nbsp;上创建并启动远程对象注册服务程序。如果省略&nbsp;port，则注册服务程序将在&nbsp;1099&nbsp;端口上启动。rmiregistry&nbsp;命令不产生任何输出而且一般在后台运行。远程对象注册服务程序是自举命名服务。主机上的&nbsp;RMI&nbsp;服务器将利用它将远程对象绑定到名字上。客户机即可查询远程对象并进行远程方法调用。注册服务程序一般用于定位应用程序需调用其方法的第一个远程对象。该对象反过来对各应用程序提供相应的支持，用于查找其它对象。java.rmi.registry.LocateRegistry&nbsp;类的方法可用于在某台主机或主机和端口上获取注册服务程序操作。java.rmi.Naming&nbsp;类的基于&nbsp;URL&nbsp;的方法将对注册服务程序进行操作，并可用于查询远程对象、将简单（字符串）名称绑定到远程对象、将新名称重新绑定到远程对象（覆盖旧绑定）、取消远程对象的绑定以及列出绑定在注册服务程序上的&nbsp;URL。&nbsp;<br />
<br />
serialver&nbsp;<br />
<br />
功能说明：&nbsp;<br />
serialver&nbsp;命令返回&nbsp;serialVersionUID。&nbsp;<br />
语法：&nbsp;<br />
serialver&nbsp;[&nbsp;命令选项&nbsp;]&nbsp;<br />
补充说明：&nbsp;<br />
serialver&nbsp;以适于复制到演变类的形式返回一个或多个类的&nbsp;serialVersionUID。不带参数调用时，它输出用法行。&nbsp;<br />
命令选项&nbsp;<br />
-show&nbsp;显示一个简单的用户界面。输入完整的类名并按回车键或&#8220;显示&#8221;按钮可显示&nbsp;serialVersionUID。&nbsp;<br />
<br />
jarsigner&nbsp;<br />
<br />
功能说明：&nbsp;<br />
为&nbsp;Java&nbsp;归档&nbsp;(JAR)&nbsp;文件产生签名，并校验已签名的&nbsp;JAR&nbsp;文件的签名。&nbsp;<br />
语法：&nbsp;<br />
jarsigner&nbsp;[&nbsp;命令选项&nbsp;]&nbsp;jar-file&nbsp;alias&nbsp;<br />
jarsigner&nbsp;-verify&nbsp;[&nbsp;命令选项&nbsp;]&nbsp;jar-file&nbsp;<br />
补充说明：&nbsp;<br />
jarsigner&nbsp;工具用于两个目的：&nbsp;<br />
1:为&nbsp;Java&nbsp;归档&nbsp;(JAR)&nbsp;文件签名&nbsp;<br />
2:校验已签名的&nbsp;JAR&nbsp;文件的签名和完整性&nbsp;<br />
命令选项&nbsp;<br />
-keystore[url]&nbsp;指定密钥仓库的&nbsp;URL。缺省值是用户的宿主目录中的&nbsp;.keystore&nbsp;文件，它由系统属性&#8220;user.home&#8221;决定。&nbsp;<br />
-storetype[storetype]&nbsp;指定要被实例化的密钥仓库类型。默认的密钥仓库类型是安全属性文件中&nbsp;"keystore.type"&nbsp;属性值所指定的那个类型，由&nbsp;java.security.KeyStore&nbsp;中的静态方法&nbsp;getDefaultType&nbsp;返回。&nbsp;<br />
-storepass[password]&nbsp;指定访问密钥仓库所需的口令。这仅在签名（不是校验）JAR&nbsp;文件时需要。在这种情况下，如果命令行中没有提供&nbsp;-storepass&nbsp;选项，用户将被提示输入口令。&nbsp;<br />
-keypass[password]&nbsp;指定用于保护密钥仓库项（由命令行中指定的别名标出）的私钥的口令。使用&nbsp;jarsigner&nbsp;为&nbsp;JAR&nbsp;文件签名时需要该口令。如果命令行中没有提供口令，且所需的口令与密钥仓库的口令不同，则将提示用户输入它。&nbsp;<br />
-sigfile[file]&nbsp;指定用于生成&nbsp;.SF&nbsp;和&nbsp;.DSA&nbsp;文件的基本文件名。&nbsp;<br />
-signedjar[file]&nbsp;指定用于已签名的&nbsp;JAR&nbsp;文件的名称。&nbsp;<br />
-verify&nbsp;如果它出现在命令行中，则指定的&nbsp;JAR&nbsp;文件将被校验，而不是签名。如果校验成功，将显示&#8220;jar&nbsp;verified&#8221;。如果试图校验未签名的&nbsp;JAR&nbsp;文件，或校验被不支持的算法（例如未安装&nbsp;RSA&nbsp;提供者时使用的&nbsp;RSA）签名的&nbsp;JAR&nbsp;文件，则将有如下显示：&nbsp;"jar&nbsp;is&nbsp;unsigned.&nbsp;(signatures&nbsp;missing&nbsp;or&nbsp;not&nbsp;parsable)"&nbsp;。&nbsp;<br />
-certs&nbsp;如果它与&nbsp;-verify&nbsp;和&nbsp;-verbose&nbsp;选项一起出现在命令行中，则输出将包括&nbsp;JAR&nbsp;文件的每个签名人的证书信息。&nbsp;<br />
-verbose&nbsp;如果它出现在命令行中，则代表&#8220;verbose&#8221;模式，它使&nbsp;jarsigner&nbsp;在&nbsp;JAR&nbsp;签名或校验过程中输出额外信息。&nbsp;<br />
-internalsf&nbsp;过去，JAR&nbsp;文件被签名时产生的&nbsp;.DSA（签名块）文件包含一个同时产生的&nbsp;.SF&nbsp;文件（签名文件）的完整编码副本。这种做法已被更改。为了减小输出&nbsp;JAR&nbsp;文件的整个大小，缺省情况下&nbsp;.DSA&nbsp;文件不再包含&nbsp;.SF&nbsp;文件的副本。但是如果&nbsp;-internalsf&nbsp;出现在命令行中，将采用旧的做法。该选项主要在测试时有用；实际上不应使用它，因为这样将消除有用的优化。&nbsp;<br />
-sectionsonly&nbsp;如果它出现在命令行中，则&nbsp;JAR&nbsp;文件被签名时生成的&nbsp;.SF&nbsp;文件（签名文件）将不包括含有整个清单文件的散列的头。它仅包含&nbsp;与&nbsp;JAR&nbsp;中每个单独的源文件相关的信息和散列。该选项主要在测试时有用；实际上不应使用它，因为这样将消除有用的优化。&nbsp;<br />
-J[javaoption]&nbsp;将指定的&nbsp;javaoption&nbsp;串直接传递到&nbsp;Java&nbsp;解释器。(（jarsigner&nbsp;实际上是解释器的一个&nbsp;&#8220;wrapper&#8221;）。该选项不应含有任何空格。它有助于调整执行环境或内存使用。要获得可用的解释器选项的清单，可在命令行键入&nbsp;java&nbsp;-h&nbsp;或&nbsp;java&nbsp;-X。&nbsp;<br />
&nbsp;<br />
JDK的命令详解（2）<br />
<br />
keytool&nbsp;<br />
<br />
功能说明：&nbsp;<br />
管理由私钥和认证相关公钥的&nbsp;X.509&nbsp;证书链组成的密钥仓库（数据库）。还管理来自可信任实体的证书。&nbsp;<br />
语法：&nbsp;<br />
keytool&nbsp;[&nbsp;命令&nbsp;]&nbsp;<br />
补充说明：&nbsp;<br />
keytool&nbsp;是个密钥和证书管理工具。它使用户能够管理自己的公钥/私钥对及相关证书，用于（通过数字签名）自我认证（用户向别的用户/服务认证自己）或数据完整性以及认证服务。它还允许用户储存他们的通信对等者的公钥（以证书形式）。&nbsp;<br />
<br />
native2ascii&nbsp;<br />
<br />
功能说明：&nbsp;<br />
将含有本地编码字符（既非&nbsp;Latin1&nbsp;又非&nbsp;Unicode&nbsp;字符）的文件转换为&nbsp;Unicode&nbsp;编码字符的文件。&nbsp;<br />
语法：&nbsp;<br />
native2ascii&nbsp;[options]&nbsp;[inputfile&nbsp;[outputfile]]&nbsp;<br />
补充说明：&nbsp;<br />
<a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>&nbsp;编译器和其它&nbsp;Java&nbsp;工具只能处理含有&nbsp;Latin-1&nbsp;和/或&nbsp;Unicode&nbsp;编码（udddd&nbsp;记号）字符的文件。native2ascii&nbsp;将含有其它字符编码的文件转换成含&nbsp;Latin-1&nbsp;和/或&nbsp;Unicode&nbsp;编码字符的文件。若省略&nbsp;outputfile，则使用标准输出设备输出。此外，如果也省略&nbsp;inputfile，则使用标准输入设备输入。&nbsp;<br />
命令选项&nbsp;<br />
-reverse&nbsp;执行相反的操作：将含&nbsp;Latin-1&nbsp;和/或&nbsp;Unicode&nbsp;编码字符的文件转换成含本地编码字符的文件。&nbsp;<br />
-encoding[encoding_name]&nbsp;指定转换过程使用的编码名称。缺省的编码从系统属性&nbsp;file.encoding&nbsp;中得到。&nbsp;<br />
<br />
appletviewer&nbsp;<br />
<br />
功能说明：&nbsp;<br />
<a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>&nbsp;applet&nbsp;浏览器。appletviewer&nbsp;命令可在脱离万维网浏览器环境的情况下运行&nbsp;applet。&nbsp;<br />
语法：&nbsp;<br />
appletviewer&nbsp;[&nbsp;threads&nbsp;flag&nbsp;]&nbsp;[&nbsp;命令选项&nbsp;]&nbsp;urls&nbsp;...&nbsp;<br />
补充说明：&nbsp;<br />
appletviewer&nbsp;命令连接到&nbsp;url&nbsp;所指向的文档或资源上，并在其自身的窗口中显示文档引用的每个&nbsp;applet。注意：如果&nbsp;url&nbsp;所指向的文档不引用任何带有&nbsp;OBJECT、EMBED&nbsp;或&nbsp;APPLET&nbsp;标记的&nbsp;applet，那么&nbsp;appletviewer&nbsp;就不做任何事情。&nbsp;<br />
命令选项&nbsp;<br />
-debug&nbsp;在&nbsp;Java&nbsp;调试器&nbsp;jdb&nbsp;中启动&nbsp;appletviewer，使您可以调试文档中的&nbsp;applet。&nbsp;<br />
-encoding[编码名称]&nbsp;指定输入&nbsp;HTML&nbsp;文件的编码名称。&nbsp;<br />
-J[javaoption]&nbsp;将&nbsp;javaoption&nbsp;字符串作为单个参数传给运行&nbsp;appletviewer&nbsp;的&nbsp;Java&nbsp;解释器。参数不能含有空格。由多重参数组成的字符串，其中的每个参数都必须以前缀&nbsp;-J&nbsp;开头，该前缀以后将被除去。这在调整编译器的执行环境或内存使用时将很有用。&nbsp;<br />
<br />
extcheck&nbsp;<br />
<br />
功能说明：&nbsp;<br />
extcheck&nbsp;检测目标&nbsp;jar&nbsp;文件与当前安装方式扩展&nbsp;jar&nbsp;文件间的版本冲突。&nbsp;<br />
语法：&nbsp;<br />
extcheck&nbsp;[&nbsp;-verbose&nbsp;]&nbsp;targetfile.jar&nbsp;<br />
补充说明：&nbsp;<br />
extcheck&nbsp;实用程序检查指定&nbsp;Jar&nbsp;文件的标题和版本与&nbsp;JDK&nbsp;TM&nbsp;软件中所安装的扩展是否有冲突。在安装某个扩展前，可以用该实用程序查看是否已安装了该扩展的相同版本或更高的版本。&nbsp;<br />
extcheck&nbsp;实用程序将&nbsp;targetfile.jar&nbsp;文件清单的&nbsp;specification-title&nbsp;和&nbsp;specification-version&nbsp;头与当前安装在扩展目录下所有&nbsp;Jar&nbsp;文件的相对应的头进行比较（缺省扩展目录为&nbsp;jre/lib/ext）。extcheck&nbsp;实用程序比较版本号的方式与&nbsp;java.lang.Package.isCompatibleWith&nbsp;方法相同。若未检测到冲突，则返回代码为&nbsp;0。如果扩展目录中任何一个&nbsp;jar&nbsp;文件的清单有相同的&nbsp;specification-title&nbsp;和相同的或更新的&nbsp;specification-version&nbsp;号，则返回非零错误代码。如果&nbsp;targetfile.jar&nbsp;的清单中没有&nbsp;specification-title&nbsp;或&nbsp;specification-version&nbsp;属性，则同样返回非零错误代码。&nbsp;<br />
命令选项&nbsp;<br />
-verbose&nbsp;对扩展目录中的&nbsp;Jar&nbsp;文件进行检查时，列出文件。此外，还报告目标&nbsp;jar&nbsp;文件的清单属性及所有冲突的&nbsp;jar&nbsp;文件。&nbsp;<br />
<br />
jar&nbsp;<br />
<br />
功能说明：&nbsp;<br />
Java归档工具&nbsp;<br />
语法：&nbsp;<br />
jar&nbsp;[&nbsp;命令选项&nbsp;]&nbsp;[manifest]&nbsp;destination&nbsp;input-file&nbsp;[input-files]&nbsp;<br />
补充说明：&nbsp;<br />
jar工具是个java应用程序，可将多个文件合并为单个JAR归档文件。jar是个多用途的存档及压缩工具，它基于ZIP和ZLIB压缩格式。然而，设计jar的主要目的是便于将java&nbsp;applet或应用程序打包成单个归档文件。将applet或应用程序的组件(.class&nbsp;文件、图像和声音)合并成单个归档文件时，可以用java代理(如浏览器)在一次HTTP事务处理过程中对它们进行下载，而不是对每个组件都要求一个新连接。这大大缩短了下载时间。jar还能压缩文件，从而进一步提高了下载速度。此外，它允许applet的作者对文件中的各个项进行签名，因而可认证其来源。jar工具的语法基本上与tar命令的语法相同。&nbsp;<br />
命令选项&nbsp;<br />
-c&nbsp;在标准输出上创建新归档或空归档。&nbsp;<br />
-t&nbsp;在标准输出上列出内容表。&nbsp;<br />
-x[file]&nbsp;从标准输入提取所有文件，或只提取指定的文件。如果省略了file，则提取所有文件；否则只提取指定文件。&nbsp;<br />
-f&nbsp;第二个参数指定要处理的jar文件。在-c(创建)情形中，第二个参数指的是要创建的jar文件的名称(不是在标准输出上)。在-t(表(或-x(抽取)这两种情形中，第二个参数指定要列出或抽取的jar文件。&nbsp;<br />
　&nbsp;-v&nbsp;在标准错误输出设备上生成长格式的输出结果。&nbsp;<br />
-m&nbsp;包括指定的现有清单文件中的清单信息。用法举例：&#8220;jar&nbsp;cmf&nbsp;myManifestFile&nbsp;myJarFile&nbsp;*.class&#8221;&nbsp;<br />
-0&nbsp;只储存，不进行&nbsp;ZIP&nbsp;压缩。&nbsp;<br />
-M&nbsp;不创建项目的清单文件。&nbsp;<br />
-u&nbsp;通过添加文件或更改清单来更新现有的&nbsp;JAR&nbsp;文件。例如：&#8220;jar&nbsp;-uf&nbsp;foo.jar&nbsp;foo.class&#8221;将文件&nbsp;foo.class&nbsp;添加到现有的JAR文件foo.jar中，而&#8220;jar&nbsp;umf&nbsp;manifest&nbsp;foo.jar&#8221;则用manifest中的信息更新foo.jar的清单。&nbsp;<br />
-C&nbsp;在执行&nbsp;jar&nbsp;命令期间更改目录。例如：&#8220;jar&nbsp;-uf&nbsp;foo.jar&nbsp;-C&nbsp;classes&nbsp;*&#8221;将classes目录内的所有文件加到foo.jar中，但不添加类目录本身。&nbsp;<br />
程序示例&nbsp;<br />
1:将当前目录下所有CLASS文件打包成新的JAR文件：&nbsp;<br />
jar&nbsp;cf&nbsp;file.jar&nbsp;*.class&nbsp;<br />
2:显示一个JAR文件中的文件列表&nbsp;<br />
jar&nbsp;tf&nbsp;file.jar&nbsp;<br />
3:将当前目录下的所有文件增加到一个已经存在的JAR文件中&nbsp;<br />
jar&nbsp;cvf&nbsp;file.jar&nbsp;*&nbsp;<br />
<br />
javadoc&nbsp;<br />
<br />
功能说明&nbsp;<br />
<a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>&nbsp;API文档生成器从Java源文件生成API文档HTML页。&nbsp;<br />
语法：&nbsp;<br />
javadoc&nbsp;[&nbsp;命令选项&nbsp;]&nbsp;[&nbsp;包名&nbsp;]&nbsp;[&nbsp;源文件名&nbsp;]&nbsp;[&nbsp;@files&nbsp;]&nbsp;<br />
其中[&nbsp;包名&nbsp;]为用空格分隔的一系列包的名字，包名不允许使用通配符，如（*）。[&nbsp;源文件名&nbsp;]为用空格分隔的一系列的源文件名，源文件名可包括路径和通配符，如（*）。[&nbsp;@files&nbsp;]是以任何次序包含包名和源文件的一个或多个文件。&nbsp;<br />
补充说明&nbsp;<br />
Javadoc解析Java源文件中的声明和文档注释，并产生相应的HTML页缺省），描述公有类、保护类、内部类、接口、构造函数、方法和域。&nbsp;<br />
在实现时，Javadoc要求且依赖于java编译器完成其工作。Javadoc调用部分javac编译声明部分，忽略成员实现。它建立类的内容丰富的内部表示，包括类层次和&#8220;使用&#8221;关系，然后从中生成HTML。Javadoc还从源代码的文档注释中获得用户提供的文档。&nbsp;<br />
当Javadoc建立其内部文档结构时，它将加载所有引用的类。由于这一点，Javadoc必须能查找到所有引用的类，包括引导类、扩展类和用户类。&nbsp;<br />
命令选项&nbsp;<br />
-overview&nbsp;i&gt;path/filename&nbsp;指定javadoc应该从path/filename所指定的&#8220;源&#8221;文件中获取概述文档，并将它放到概述页中（overview-summary.html）。其中path/filename&nbsp;是相对于-sourcepath的相对路径名。&nbsp;<br />
-public&nbsp;只显示公有类及成员。&nbsp;<br />
-protected&nbsp;只显示受保护的和公有的类及成员。这是缺省状态。&nbsp;<br />
-package&nbsp;只显示包、受保护的和公有的类及成员。&nbsp;<br />
-private&nbsp;显示所有类和成员。&nbsp;<br />
-help&nbsp;显示联机帮助，它将列出这些javadoc和doclet命令行选项。&nbsp;<br />
-doclet&nbsp;class&nbsp;指定启动用于生成文档的docle&nbsp;的类文件。该doclet定义了输出的内容和格式。如果未使用-doclet选项，则javadoc使用标准doclet生成缺省HTML格式。该类必须包含start(Root)法。该启动类的路径由&nbsp;-docletpath选项定义。&nbsp;<br />
-docletpath&nbsp;classpathlist&nbsp;指定doclet类文件的路径，该类文件用-doclet选项指定。如果doclet已位于搜索路径中，则没有必要使用该选项。&nbsp;<br />
-1.1&nbsp;生成具有用Javadoc&nbsp;1.1生成的文档的外观和功能的文档。也就是说，页的背景为灰色，用图像做页眉，使用bullet列表而不是表格，具有单层目的目录结构，不包含继承&nbsp;API，不使?***&nbsp;TML框架，并且不支持内部类。该选项还自动将索引分割成每个字母一个文件。如果想要这种外观，则该选项比javadoc&nbsp;1.1优越之处等于修正了一些错误。&nbsp;<br />
-sourcepath&nbsp;sourcepathlist&nbsp;<br />
当将包名传递到javadoc命令中时，指定定位源文件（.java）的搜索路径。注意只有当用&nbsp;javadoc命令指定包名时才能使用sourcepath选项&nbsp;--&nbsp;它将不会查找传递到javadoc命令中的.java文件。如果省略-sourcepath，则javadoc使用类路径查找源文件。&nbsp;<br />
-classpath&nbsp;classpathlist&nbsp;指定javadoc将在其中查找引用类的路径&nbsp;--&nbsp;引用类是指带文档的类加上它们引用的任何类。Javadoc将搜索指定路径的所有子目录。classpathlist可以包括多个路径，彼此用逗号分隔。&nbsp;<br />
-bootclasspath&nbsp;classpathlist&nbsp;指定自举类所在路径。它们名义上是Java平台类。这个bootclasspath是Javadoc将用来查找源文件和类文件的搜索路径的一部分。在&nbsp;classpathlist中用冒号（:）分隔目录。&nbsp;<br />
-extdirs&nbsp;dirlist&nbsp;指定扩展类所在的目录。它们是任何使用Java扩展机制的类。这个&nbsp;extdirs是Javadoc将用来查找源文件和在文件的搜索路径的一部分。在dirlist中用冒号（:）分隔目录。&nbsp;<br />
-verbose&nbsp;在javadoc运行时提供更详细的信息。不使用verbose选项时，将显示加载源文件、生成文档（每个源文件一条信息）和排序的信息。verbose选项导致打印额外的信息，指定解析每个java源文件的毫秒数。&nbsp;<br />
-locale&nbsp;language_country_variant&nbsp;指定javadoc在生成文档时使用的环境。&nbsp;<br />
-encoding&nbsp;name&nbsp;指定源文件编码名，例如EUCJIS/SJIS。如果未指定该选项，则使用平台缺省转换器。&nbsp;<br />
-J[flag]&nbsp;将flag直接传递给运行javadoc的运行时系统java。注意在J和flag之间不能有空格。&nbsp;<br />
标准&nbsp;Doclet&nbsp;提供的选项&nbsp;<br />
-d&nbsp;directory&nbsp;指定javadoc保存生成的HTML件的目的目录。省略该选项将导致把文件保存到当前目录中。其中directory可以是绝对路径或相对当前工作目录的相对路径。&nbsp;<br />
-use&nbsp;对每个带文档类和包包括一个&#8220;用法&#8221;页。该页描述使用给定类或包的任何&nbsp;API&nbsp;的包、类、方法、构造函数和域。对于给定类&nbsp;C，使用类&nbsp;C&nbsp;的任何东西将包括&nbsp;C&nbsp;的子类、声明为&nbsp;C&nbsp;的域、返回&nbsp;C&nbsp;的方法以及具有&nbsp;C&nbsp;类型参数的方法和构造函数。&nbsp;<br />
-version&nbsp;在生成文档中包括&nbsp;@version&nbsp;文本。缺省地将省略该文本。&nbsp;<br />
-author&nbsp;在生成文档中包括&nbsp;@author&nbsp;文本。&nbsp;<br />
-splitindex&nbsp;将索引文件按字母分割成多个文件，每个字母一个文件，再加上一个包含所有以非字母字符开头的索引项的文件。&nbsp;<br />
-windowtitle[title]&nbsp;指定放入&nbsp;HTML&nbsp;&lt;title&gt;&nbsp;标记中的标题。它将出现在窗口标题栏中和为该页创建的任何浏览器书签（最喜爱的位置）中。该标题不应该包含任何&nbsp;HTML&nbsp;标记，因为浏览器将不能正确解释它们。在&nbsp;title&nbsp;中的任何内部引号必须转义。如果省略&nbsp;-windowtitle，则&nbsp;Javadoc&nbsp;对该选项使用&nbsp;-doctitle&nbsp;的值。&nbsp;<br />
-doctitle[title]&nbsp;指定放置在靠近概述概览文件顶部的标题。该标题将作为一级标题，居中地直接放在导航栏下面。title&nbsp;可包含&nbsp;html&nbsp;标记和空格，但是如果这样，则必须用引号将它括起。在&nbsp;title&nbsp;中的任何内部引号必须转义。&nbsp;<br />
-title[title]&nbsp;该选项不再存在。它仅存在于&nbsp;Javadoc&nbsp;1.2&nbsp;的&nbsp;Beta&nbsp;版中。它已重命名为&nbsp;-doctitle。重命名该选项是为了更清楚地表示它定义文档标题而不是窗口标题。&nbsp;<br />
-header[header]&nbsp;指定放置在每个输出文件顶部的页眉文本。该页眉将放在上部导航栏的右边。header&nbsp;可包含&nbsp;HTML&nbsp;标记和空格，但是如果这样则必须用引号将它括起。在&nbsp;header&nbsp;中的任何内部引号必须转义。&nbsp;<br />
-footer[footer]&nbsp;指定放置在每个输出文件底部的脚注文本。脚本将放置在下部导航栏的右边。footer&nbsp;可包含&nbsp;html&nbsp;标记和空格，但是如果这样，则必须用引号将它括起。在&nbsp;footer&nbsp;中的任何内部引号必须转义。&nbsp;<br />
-bottom[text]&nbsp;指定放置在每个输出文件底部的文本。该文本将放置在页底，位于下部导航栏的下面。其中&nbsp;text&nbsp;可包含&nbsp;HTML&nbsp;标记和空格，但是如果这样，则必须用引号将它括起。在&nbsp;text&nbsp;中的任何内部引号必须转义。&nbsp;<br />
-link[docURL]&nbsp;创建链接指向已用&nbsp;javadoc-生成的外部引用类的文档。参数&nbsp;docURL是想要链接到的&nbsp;javadoc-生成的外部文档的&nbsp;URL。该位置可以是相对的或绝对的&nbsp;URL。&nbsp;<br />
-linkoffline[docURL][packagelistURL]&nbsp;该选项为外部引用类名字创建指向文档的链接。&nbsp;<br />
-group[groupheading]packagepattern:packagepattern:...&nbsp;将概述页上的包分成指定的组，每组一个表格。用不同的&nbsp;-group&nbsp;选项指定每个组。各组按命令行中指定的次序出现在页面上。组内的包按字母排序。对于给定&nbsp;-group&nbsp;选项，与&nbsp;packagepattern&nbsp;表达式列表匹配的包出现在标题为&nbsp;groupheading&nbsp;的表格中。&nbsp;<br />
-nodeprecated&nbsp;防止在文档中生成任何不鼓励使用的&nbsp;API。它执行-nodeprecatedlist&nbsp;所做的事情，并且它不在文档其余部分生成任何不鼓励使用的&nbsp;API。当编写代码并不想被不鼓励使用的代码分心时，这是非常有用的。&nbsp;<br />
-nodeprecatedlist&nbsp;防止在生成文件中包含不鼓励使用的&nbsp;API&nbsp;列表（deprecated-list.html）并防止在导航栏中包含该页的链接。（但是，javadoc&nbsp;继续在文档其余部分生成不鼓励使用的&nbsp;API。）&nbsp;如果源代码未包含不鼓励使用的&nbsp;API，并且想要导航栏更干净，则它是非常有用的。&nbsp;<br />
-notree&nbsp;在生成文档中忽略类/接口层次。缺省地，将产生该层次。&nbsp;<br />
-noindex&nbsp;在生成文档中忽略索引。缺省地，将产生索引。&nbsp;<br />
-nohelp&nbsp;在输出的每页顶部和底部的导航栏中忽略&#8220;帮助&#8221;链接。&nbsp;<br />
-nonavbar&nbsp;防止产生导航栏、页眉和脚注，否则它们将出现在生成页的顶部和底部。它对&#8220;bottom&#8221;选项没有影响。当只对内容感兴趣并且没有必要导航时，例如仅将文件转换成&nbsp;PostScript&nbsp;或&nbsp;PDF&nbsp;以进行打印，-nonavbar&nbsp;选项是非常有用的。&nbsp;<br />
-helpfile[path/filename]&nbsp;指定顶部和底部导航栏中&#8220;帮助&#8221;链接所链接到的替代帮助文件&nbsp;path/filename&nbsp;的路径。不使用该选项时，Javadoc&nbsp;自动创建帮助文件&nbsp;help-doc.html，它在&nbsp;Javadoc&nbsp;中硬编码。该选项使得可覆盖这种缺省情况。其中&nbsp;filename&nbsp;可以是任何名字，不局限于&nbsp;help-doc.html&nbsp;--&nbsp;Javadoc&nbsp;将相应调整导航栏中的链接。&nbsp;<br />
-stylesheetfile[path/filename]&nbsp;指定替代&nbsp;HTML&nbsp;样式表单文件的路径。不使用该选项时，Javadoc&nbsp;将自动创建样式表单文件&nbsp;stylesheet.css，它在&nbsp;Javadoc&nbsp;中硬编码。该选项使得可覆盖这种缺省情况。其中&nbsp;filename&nbsp;可以是任何名字，不局限于&nbsp;stylesheet.css。&nbsp;<br />
-docencoding[name]&nbsp;指定输出&nbsp;HTML&nbsp;文件的编码方式。&nbsp;<br />
<br />
javah&nbsp;<br />
<br />
功能说明：&nbsp;<br />
C&nbsp;头文件和&nbsp;Stub&nbsp;文件生成器。javah&nbsp;从&nbsp;Java&nbsp;类生成&nbsp;C&nbsp;头文件和&nbsp;C&nbsp;源文件。这些文件提供了连接胶合，使&nbsp;Java&nbsp;和&nbsp;C&nbsp;代码可进行交互。&nbsp;<br />
语法：&nbsp;<br />
javah&nbsp;[&nbsp;命令选项&nbsp;]&nbsp;fully-qualified-classname.&nbsp;.&nbsp;.&nbsp;<br />
javah_g&nbsp;[&nbsp;命令选项&nbsp;]&nbsp;fully-qualified-classname.&nbsp;.&nbsp;.&nbsp;<br />
补充说明：&nbsp;<br />
javah&nbsp;生成实现本地方法所需的&nbsp;C&nbsp;头文件和源文件。C&nbsp;程序用生成的头文件和源文件在本地源代码中引用某一对象的实例变量。.h&nbsp;文件含有一个&nbsp;struct&nbsp;定义，该定义的布局与相应类的布局平行。该&nbsp;struct&nbsp;中的域对应于类中的实例变量。&nbsp;<br />
头文件名以及在头文件中所声明的结构名都来源于类名。如果传给&nbsp;javah&nbsp;的类是在某个包中，则头文件名和结构名前都要冠以该包名。下划线&nbsp;(_)&nbsp;用作名称分隔符。&nbsp;<br />
缺省情况下，javah&nbsp;为每个在命令行中列出的类都创建一个头文件，且将该文件放在当前目录中。用&nbsp;-stubs&nbsp;选项创建源文件。用&nbsp;-o&nbsp;选项将所有列出类的结果串接成一个单一文件。&nbsp;<br />
缺省情况下，javah&nbsp;为每个在命令行中列出的类都创建一个头文件，且将该文件放在当前目录中。用&nbsp;-stubs&nbsp;选项创建源文件。用&nbsp;-o&nbsp;选项将所有列出类的结果串接成一个单一文件。&nbsp;<br />
命令选项&nbsp;<br />
-o[输出文件]&nbsp;将命令行中列出的所有类的头文件或源文件串接到输出文件中。-o&nbsp;或&nbsp;-d&nbsp;两个选项只能选择一个。&nbsp;<br />
-d[目录]&nbsp;设置&nbsp;javah&nbsp;保存头文件或&nbsp;stub&nbsp;文件的目录。-d&nbsp;或&nbsp;-o&nbsp;两个选项只能选择一个。&nbsp;<br />
-stubs&nbsp;使&nbsp;javah&nbsp;从&nbsp;Java&nbsp;对象文件生成&nbsp;C&nbsp;声明。&nbsp;<br />
-verbose&nbsp;指明长格式输出，并使&nbsp;javah&nbsp;将所生成文件的有关状态的信息输出到标准输出设备中。&nbsp;<br />
-help&nbsp;输出&nbsp;javah&nbsp;用法的帮助信息。&nbsp;<br />
-version&nbsp;输出&nbsp;javah&nbsp;的版本信息。&nbsp;<br />
-jni&nbsp;使&nbsp;javah&nbsp;创建一输出文件，该文件包含&nbsp;JNI&nbsp;风格的本地方法函数原型。这是缺省输出，所以&nbsp;-jni&nbsp;的使用是可选的。&nbsp;<br />
-classpath[路径]&nbsp;指定&nbsp;javah&nbsp;用来查询类的路径。如果设置了该选项，它将覆盖缺省值或&nbsp;CLASSPATH&nbsp;环境变量。目录用冒号分隔。&nbsp;<br />
-bootclasspath[路径]&nbsp;指定加载自举类所用的路径。缺省情况下，自举类是实现核心&nbsp;Java&nbsp;平台的类，位于&nbsp;jrelib&nbsp;<br />
t.jar&nbsp;和&nbsp;jrelibi18n.jar&nbsp;中。&nbsp;<br />
-old&nbsp;指定应当生成旧&nbsp;JDK1.0&nbsp;风格的头文件。&nbsp;<br />
-force&nbsp;指定始终写输出文件。&nbsp;<br />
<br />
javap&nbsp;<br />
<br />
功能说明：&nbsp;<br />
<a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>&nbsp;类文件解析器。&nbsp;<br />
语法：&nbsp;<br />
javap&nbsp;[&nbsp;命令选项&nbsp;]&nbsp;class.&nbsp;.&nbsp;.&nbsp;<br />
补充说明：&nbsp;<br />
javap&nbsp;命令用于解析类文件。其输出取决于所用的选项。若没有使用选项，javap&nbsp;将输出传递给它的类的&nbsp;public&nbsp;域及方法。javap&nbsp;将其输出到标准输出设备上。&nbsp;<br />
命令选项&nbsp;<br />
-help&nbsp;输出&nbsp;javap&nbsp;的帮助信息。&nbsp;<br />
-l&nbsp;输出行及局部变量表。&nbsp;<br />
-b&nbsp;确保与&nbsp;JDK&nbsp;1.1&nbsp;javap&nbsp;的向后兼容性。&nbsp;<br />
-public&nbsp;只显示&nbsp;public&nbsp;类及成员。&nbsp;<br />
-protected&nbsp;只显示&nbsp;protected&nbsp;和&nbsp;public&nbsp;类及成员。&nbsp;<br />
-package&nbsp;只显示包、protected&nbsp;和&nbsp;public&nbsp;类及成员。这是缺省设置。&nbsp;<br />
-private&nbsp;显示所有类和成员。&nbsp;<br />
-J[flag]&nbsp;直接将&nbsp;flag&nbsp;传给运行时系统。&nbsp;<br />
-s&nbsp;输出内部类型签名。&nbsp;<br />
-c&nbsp;输出类中各方法的未解析的代码，即构成&nbsp;Java&nbsp;字节码的指令。&nbsp;<br />
-verbose&nbsp;输出堆栈大小、各方法的&nbsp;locals&nbsp;及&nbsp;args&nbsp;数。&nbsp;<br />
-classpath[路径]&nbsp;指定&nbsp;javap&nbsp;用来查找类的路径。如果设置了该选项，则它将覆盖缺省值或&nbsp;CLASSPATH&nbsp;环境变量。目录用冒号分隔。&nbsp;<br />
-&nbsp;bootclasspath[路径]&nbsp;指定加载自举类所用的路径。缺省情况下，自举类是实现核心&nbsp;Java&nbsp;平台的类，位于&nbsp;jrelib&nbsp;<br />
t.jar&nbsp;和&nbsp;jrelibi18n.jar&nbsp;中。&nbsp;<br />
-extdirs[dirs]&nbsp;覆盖搜索安装方式扩展的位置。扩展的缺省位置是&nbsp;jrelibext。<img src ="http://www.blogjava.net/rain1102/aggbug/192911.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2008-04-14 20:48 <a href="http://www.blogjava.net/rain1102/articles/192911.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java回调函数 </title><link>http://www.blogjava.net/rain1102/articles/190047.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Tue, 01 Apr 2008 04:40:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/190047.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/190047.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/190047.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/190047.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/190047.html</trackback:ping><description><![CDATA[如果我们要测试一个类的方法的执行时间，通常我们会这样做：<br />
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;TestObject&nbsp;{&nbsp;&nbsp;</span></span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">/**</span>&nbsp;</span>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;一个用来被测试的方法，进行了一个比较耗时的循环</span>&nbsp;</span>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;testMethod(){&nbsp;&nbsp;</span></span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">for</span><span>(</span><span class="keyword">int</span><span>&nbsp;i=</span><span class="number">0</span><span>;&nbsp;i&lt;</span><span class="number">100000000</span><span>;&nbsp;i++){&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">/**</span>&nbsp;</span>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;一个简单的测试方法执行时间的方法</span>&nbsp;</span>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;testTime(){&nbsp;&nbsp;</span></span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">long</span><span>&nbsp;begin&nbsp;=&nbsp;System.currentTimeMillis();</span><span class="comment">//测试起始时间</span><span>&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff0000">testMethod();</font><span class="comment">//测试方法</span><span>&nbsp;&nbsp;</span></span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">long</span><span>&nbsp;end&nbsp;=&nbsp;System.currentTimeMillis();</span><span class="comment">//测试结束时间</span><span>&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(<span class="string">"[use&nbsp;time]:"</span><span>&nbsp;+&nbsp;(end&nbsp;-&nbsp;begin));</span><span class="comment">//打印使用时间</span><span>&nbsp;&nbsp;</span></span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;main(String[]&nbsp;args)&nbsp;{&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TestObject&nbsp;test=<span class="keyword">new</span><span>&nbsp;TestObject();&nbsp;&nbsp;</span></span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;test.testTime();&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span>
    <li class=""><span>}&nbsp;&nbsp;</span> </li>
</ol>
大家看到了testTime()方法，就只有"//测试方法"是需要改变的，下面我们来做一个函数实现相同功能但更灵活：<br />
首先定一个回调接口：<br />
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">interface</span><span>&nbsp;CallBack&nbsp;{&nbsp;&nbsp;</span></span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//执行回调操作的方法</span><span>&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">void</span><span>&nbsp;execute();&nbsp;&nbsp;</span></span>
    <li class=""><span>}&nbsp;&nbsp;</span> </li>
</ol>
然后再写一个工具类：<br />
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;Tools&nbsp;{&nbsp;&nbsp;</span></span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">/**</span>&nbsp;</span>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;测试函数使用时间，通过定义CallBack接口的execute方法</span>&nbsp;</span>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;callBack</span>&nbsp;</span>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;testTime(CallBack&nbsp;callBack)&nbsp;{&nbsp;&nbsp;</span></span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">long</span><span>&nbsp;begin&nbsp;=&nbsp;System.currentTimeMillis();</span><span class="comment">//测试起始时间</span><span>&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff0000">callBack.execute();</font><span class="comment">///进行回调操作</span><span>&nbsp;&nbsp;</span></span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">long</span><span>&nbsp;end&nbsp;=&nbsp;System.currentTimeMillis();</span><span class="comment">//测试结束时间</span><span>&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(<span class="string">"[use&nbsp;time]:"</span><span>&nbsp;+&nbsp;(end&nbsp;-&nbsp;begin));</span><span class="comment">//打印使用时间</span><span>&nbsp;&nbsp;</span></span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;main(String[]&nbsp;args)&nbsp;{&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Tools&nbsp;tool&nbsp;=&nbsp;<span class="keyword">new</span><span>&nbsp;Tools();&nbsp;&nbsp;</span></span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tool.testTime(<span class="keyword">new</span><span>&nbsp;CallBack(){&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//定义execute方法</span><span>&nbsp;&nbsp;</span></span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;execute(){&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//这里可以加放一个或多个要测试运行时间的方法</span><span>&nbsp;&nbsp;</span></span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TestObject.testMethod();&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
    <li class="alt"><span>}&nbsp;&nbsp;</span> </li>
</ol>
<br /><img src ="http://www.blogjava.net/rain1102/aggbug/190047.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2008-04-01 12:40 <a href="http://www.blogjava.net/rain1102/articles/190047.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>根据Schema使用javax.xml.validation.Validator验证XML</title><link>http://www.blogjava.net/rain1102/articles/189137.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Thu, 27 Mar 2008 13:46:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/189137.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/189137.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/189137.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/189137.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/189137.html</trackback:ping><description><![CDATA[<p><strong>SchemaValidation .java<br />
</strong><span style="color: #008000"><br />
package com.founder.xml;</span></p>
<p><span style="color: #008000">import <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.io.IOException;<br />
import <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.io.InputStream;</span></p>
<p><span style="color: #008000">import javax.xml.XMLConstants;<br />
import javax.xml.parsers.ParserConfigurationException;<br />
import javax.xml.transform.stream.StreamSource;<br />
import javax.xml.validation.Schema;<br />
import javax.xml.validation.SchemaFactory;<br />
import javax.xml.validation.Validator;</span></p>
<p><span style="color: #008000">import org.xml.sax.SAXException;</span></p>
<p><span style="color: #008000">public class SchemaValidation {</span></p>
<p><span style="color: #008000">&nbsp;/**<br />
&nbsp; * @param args<br />
&nbsp; * @throws IOException<br />
&nbsp; * @throws SAXException<br />
&nbsp; * @throws ParserConfigurationException<br />
&nbsp; */<br />
&nbsp;public static void main(String[] args) throws ParserConfigurationException,<br />
&nbsp;&nbsp;&nbsp;SAXException, IOException {<br />
&nbsp;&nbsp;SchemaValidation sv = new SchemaValidation();<br />
&nbsp;&nbsp;sv.validate();<br />
&nbsp;}</span></p>
<p><span style="color: #008000">&nbsp;public void validate() {<br />
&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;String strLang = XMLConstants.W3C_XML_SCHEMA_NS_URI;<br />
&nbsp;&nbsp;&nbsp;SchemaFactory factory = SchemaFactory.newInstance(strLang);</span></p>
<p><span style="color: #008000">&nbsp;&nbsp;&nbsp;InputStream isSchema = getClass().getResourceAsStream("/founder.xsd");<br />
&nbsp;&nbsp;&nbsp;StreamSource ss = new StreamSource(isSchema);<br />
&nbsp;&nbsp;&nbsp;Schema schema = factory.newSchema(ss);</span></p>
<p><span style="color: #008000">&nbsp;&nbsp;&nbsp;Validator validator = schema.newValidator();<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;InputStream isXML = getClass().getResourceAsStream("/founder.xml");<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;StreamSource source = new StreamSource(isXML);<br />
&nbsp;&nbsp;&nbsp;validator.validate(source);<br />
&nbsp;&nbsp;&nbsp;System.out.println("Result : Valid!");</span></p>
<p><span style="color: #008000">&nbsp;&nbsp;} catch (Exception e) {<br />
&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;System.out.println("Result : Invalid!");<br />
&nbsp;&nbsp;}</span></p>
<p><span style="color: #008000">&nbsp;}</span></p>
<p><span style="color: #008000">}<br />
<br />
<br />
<span style="color: #000000"><strong>founder.xsd</strong></span><br />
<br />
&lt;?xml version="1.0"?&gt;<br />
&lt;xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"<br />
&nbsp;xmlns="http://www.founder.com" elementFormDefault="qualified"&gt;<br />
&nbsp;&lt;xs:element name="note"&gt;<br />
&nbsp;&nbsp;&lt;xs:complexType&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;xs:sequence&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:element name="to" type="xs:string" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:element name="from" type="xs:string" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:element name="heading" type="xs:string" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:element name="body" type="xs:string" /&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;/xs:sequence&gt;<br />
&nbsp;&nbsp;&lt;/xs:complexType&gt;<br />
&nbsp;&lt;/xs:element&gt;<br />
&lt;/xs:schema&gt;<br />
<br />
<br />
<span style="color: #000000"><strong>founder.xml</strong></span><br />
<br />
&lt;?xml version="1.0"?&gt;<br />
&lt;note xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br />
&nbsp;xsi:schemaLocation="http://www.founder.com founder.xsd"&gt;<br />
&nbsp;&lt;to&gt;Tove&lt;/to&gt;<br />
&nbsp;&lt;from&gt;Jani&lt;/from&gt;<br />
&nbsp;&lt;heading&gt;Reminder&lt;/heading&gt;<br />
&nbsp;&lt;body&gt;Don't forget me this weekend!&lt;/body&gt;<br />
&lt;/note&gt;<br />
<br />
<br />
<br />
</span></p><img src ="http://www.blogjava.net/rain1102/aggbug/189137.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2008-03-27 21:46 <a href="http://www.blogjava.net/rain1102/articles/189137.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Set，List和Hibernate里面的PersistentSet</title><link>http://www.blogjava.net/rain1102/articles/175733.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Wed, 16 Jan 2008 09:39:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/175733.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/175733.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/175733.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/175733.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/175733.html</trackback:ping><description><![CDATA[最近两天突然对List和Set产生了兴趣，发觉很多地方都在讲他们的区别，包括是否可以添加重复对象以及他们的排序问题，仔细想想这个问题很有意思，我可以回答是有序的也可以说是无序的，这要看是怎么回答了，list是按照添加的先后顺序来排序的，所以可以说他是有序的，说list无序是说他内部是无序的，Set有序说的是Set是内部排序的，按照从小到大排序。说他无序说的是他不按照你输入的顺序来排序。<br />
然后看到Hibernate里面用到一对多，或者多对多时候会用到Set，然后我看自己的model，里面明明用的是HashSet，为什么他就可以按照集合里对象的字段排序呢？问了杨大哥终于知道了，原来在返回的时候返回给用户的是Hibernate的自己的类：org.hibernate.collection.PersistentSet。Oh my god!<br /><img src ="http://www.blogjava.net/rain1102/aggbug/175733.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2008-01-16 17:39 <a href="http://www.blogjava.net/rain1102/articles/175733.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在Servlet(或者Filter，或者Listener)中使用spring的IOC容器 </title><link>http://www.blogjava.net/rain1102/articles/175495.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Tue, 15 Jan 2008 08:42:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/175495.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/175495.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/175495.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/175495.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/175495.html</trackback:ping><description><![CDATA[<p>在servlet或者filter或者Listener中使用spring的IOC容器的方法是：</p>
<p>WebApplicationContext webApplicationContext = WebApplicationContextUtils.getWebApplicationContext(request.getSession().getServletContext());&nbsp;</p>
<p>由于spring是注入的对象放在ServletContext中的，所以可以直接在ServletContext取出WebApplicationContext 对象：</p>
<p>WebApplicationContext webApplicationContext = (WebApplicationContext) servletContext.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);</p>
<p>事实上WebApplicationContextUtils.getWebApplicationContext方法就是使用上面的代码实现的，建议使用上面上面的静态方法&nbsp;</p>
<br />
注意：在使用webApplicationContext.getBean("ServiceName")的时候，前面强制转化要使用接口，如果使用实现类会报类型转换错误。如：<br />
LUserService&nbsp;userService ＝ (LUserService) webApplicationContext.getBean("userService");<img src ="http://www.blogjava.net/rain1102/aggbug/175495.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2008-01-15 16:42 <a href="http://www.blogjava.net/rain1102/articles/175495.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA如何调用DOS命令</title><link>http://www.blogjava.net/rain1102/articles/175215.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Mon, 14 Jan 2008 07:12:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/175215.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/175215.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/175215.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/175215.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/175215.html</trackback:ping><description><![CDATA[<a href="http://www.blogjava.net/leeguannan/archive/2007/11/29/164044.html" target="_blank">http://www.blogjava.net/leeguannan/archive/2007/11/29/164044.html</a><img src ="http://www.blogjava.net/rain1102/aggbug/175215.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2008-01-14 15:12 <a href="http://www.blogjava.net/rain1102/articles/175215.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>J2SE API读取Properties文件六种方法(转载)</title><link>http://www.blogjava.net/rain1102/articles/174544.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Fri, 11 Jan 2008 03:06:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/174544.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/174544.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/174544.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/174544.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/174544.html</trackback:ping><description><![CDATA[1。使用java.util.Properties类的load()方法示例：InputStreamin=lnewBufferedInputStream(newFileInputStream(name));Propertiesp=newProperties();p.load(in);<br />
<br />
　　2。使用java.util.ResourceBundle类的getBundle()方法示例：ResourceBundlerb=ResourceBundle.getBundle(name,Locale.getDefault());<br />
<br />
　　3。使用java.util.PropertyResourceBundle类的构造函数示例：InputStreamin=newBufferedInputStream(newFileInputStream(name));ResourceBundlerb=newPropertyResourceBundle(in);<br />
<br />
　　4。使用class变量的getResourceAsStream()方法示例：InputStreamin=JProperties.class.getResourceAsStream(name);Propertiesp=newProperties();p.load(in);<br />
<br />
　　5。使用class.getClassLoader()所得到的java.lang.ClassLoader的getResourceAsStream()方法示例：InputStreamin=JProperties.class.getClassLoader().getResourceAsStream(name);Propertiesp=newProperties();p.load(in);<br />
<br />
　　6。使用java.lang.ClassLoader类的getSystemResourceAsStream()静态方法示例：InputStreamin=ClassLoader.getSystemResourceAsStream(name);Propertiesp=newProperties();p.load(in);<br />
<br />
　　补充<br />
<br />
　　Servlet中可以使用javax.servlet.ServletContext的getResourceAsStream()方法示例：InputStreamin=context.getResourceAsStream(path);Propertiesp=newProperties();p.load(in);<img src ="http://www.blogjava.net/rain1102/aggbug/174544.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2008-01-11 11:06 <a href="http://www.blogjava.net/rain1102/articles/174544.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java单例延迟加载</title><link>http://www.blogjava.net/rain1102/articles/174541.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Fri, 11 Jan 2008 02:57:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/174541.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/174541.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/174541.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/174541.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/174541.html</trackback:ping><description><![CDATA[public class Foo {<br />
&nbsp;&nbsp;&nbsp; // 似有静态内部类, 只有当有引用时, 该类才会被装载<br />
&nbsp;&nbsp;&nbsp; private static class LazyFoo {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; public static Foo foo = new Foo();<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; public static Foo getInstance() {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; return LazyFoo.foo;<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br /><img src ="http://www.blogjava.net/rain1102/aggbug/174541.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2008-01-11 10:57 <a href="http://www.blogjava.net/rain1102/articles/174541.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaFX发现之旅：JavaFX Script With Eclipse 入门（第一部分）</title><link>http://www.blogjava.net/rain1102/articles/173978.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Wed, 09 Jan 2008 05:20:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/173978.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/173978.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/173978.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/173978.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/173978.html</trackback:ping><description><![CDATA[<a href="http://blog.eshangrao.com/index.php/2007/05/16/391-javafx-script-javafx-script-with-eclipse" target="_blank">http://blog.eshangrao.com/index.php/2007/05/16/391-javafx-script-javafx-script-with-eclipse</a><img src ="http://www.blogjava.net/rain1102/aggbug/173978.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2008-01-09 13:20 <a href="http://www.blogjava.net/rain1102/articles/173978.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MyEclipse中新建一个MessageBundle.properties文件，如果输入中文保存时就会提示错误</title><link>http://www.blogjava.net/rain1102/articles/169625.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Sat, 22 Dec 2007 11:10:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/169625.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/169625.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/169625.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/169625.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/169625.html</trackback:ping><description><![CDATA[MyEclipse中新建一个MessageBundle.properties文件，如果输入中文保存时就会提示错误：<br />
Save could not be completed.<br />
Reason:<br />
some characters cannot be mapped using "ISO-8859-1" character encoding.<br />
Either change the encoding or remove the characters which are not supported<br />
by the "ISO-8859-1" character encoding.<br />
<br />
解决办法：<br />
打开Eclipse的Preferences，选择General-&gt;Content Types，然后修改右面的Text下的Java Properites File的默认编码方式为UTF-8，点击Update就可以了！<img src ="http://www.blogjava.net/rain1102/aggbug/169625.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2007-12-22 19:10 <a href="http://www.blogjava.net/rain1102/articles/169625.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>James的安装与使用 (转载)</title><link>http://www.blogjava.net/rain1102/articles/153314.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Tue, 16 Oct 2007 08:42:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/153314.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/153314.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/153314.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/153314.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/153314.html</trackback:ping><description><![CDATA[<p style="margin-left: 21pt; text-indent: -21pt; tab-stops: list 21.0pt">一、<span style="font-family: 宋体">安装：</span></p>
<p style="margin-left: 39pt; text-indent: -18pt; tab-stops: list 39.0pt">1．&nbsp;<span style="font-family: 宋体">环境要求：</span></p>
<p style="margin-left: 39pt"><span style="font-family: 宋体">已安装</span><a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a><span style="font-family: 宋体">平台，版本为</span>j2sdk1.4.2<span style="font-family: 宋体">，环境变量</span>JAVA_HOME<span style="font-family: 宋体">设为</span>C:"j2sdk1.4.2<span style="font-family: 宋体">；</span></p>
<p style="margin-left: 39pt; text-indent: -18pt; tab-stops: list 39.0pt">2．&nbsp;<span style="font-family: 宋体">下载与运行：</span></p>
<p style="margin-left: 45pt; text-indent: -0.05pt"><span style="font-family: 宋体">从</span>Apache<span style="font-family: 宋体">网站上下载得到一个压缩的文件</span>james-2.1-bin.zip<span style="font-family: 宋体">，大小为</span>4.44M<span style="font-family: 宋体">，将此包解压到</span>C:"James"james-2.1<span style="font-family: 宋体">下。</span></p>
<p style="margin-left: 45pt; text-indent: -0.05pt"><span style="font-family: 宋体">运行分为两种方式：前台直接运行、作为后台服务运行；</span></p>
<p style="margin-left: 45pt; text-indent: -0.05pt">
<p style="margin-left: 21pt; text-indent: 21pt">1&gt;<span style="font-family: 宋体">前台直接运行：</span></p>
<p style="margin-left: 45pt; text-indent: -0.05pt"><span style="font-family: 宋体">在</span>C:"James"james-2.1"bin<span style="font-family: 宋体">下运行</span>run.bat</p>
<p style="margin-left: 45pt; text-indent: -0.05pt"><span style="font-family: 宋体">这是会出现：</span></p>
<p style="margin-left: 45pt; text-indent: -0.05pt">
<p style="margin-left: 45pt; text-indent: -0.05pt">Using PHOENIX_HOME:&nbsp;&nbsp; C:"James"james-2.1</p>
<p style="margin-left: 45pt; text-indent: -0.05pt">Using PHOENIX_TMPDIR: C:"James"james-2.1"temp</p>
<p style="margin-left: 45pt; text-indent: -0.05pt">Using JAVA_HOME:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C:"j2sdk1.4.2</p>
<p style="margin-left: 45pt; text-indent: -0.05pt">
<p style="margin-left: 45pt; text-indent: -0.05pt">Phoenix 4.0.1</p>
<p style="margin-left: 45pt; text-indent: -0.05pt">
<p style="margin-left: 45pt; text-indent: -0.05pt">James 2.1</p>
<p style="margin-left: 45pt; text-indent: -0.05pt">Remote Manager Service started plain:4555</p>
<p style="margin-left: 45pt; text-indent: -0.05pt">POP3 Service started plain:110</p>
<p style="margin-left: 45pt; text-indent: -0.05pt">SMTP Service started plain:25</p>
<p style="margin-left: 45pt; text-indent: -0.05pt">NNTP Service Disabled</p>
<p style="margin-left: 45pt; text-indent: -0.05pt">Fetch POP Disabled</p>
<p style="margin-left: 45pt; text-indent: -0.05pt">
<p style="margin-left: 45pt; text-indent: -0.05pt"><span style="font-family: 宋体">这是就表示</span>James<span style="font-family: 宋体">邮件服务以开启，不过</span>Window<span style="font-family: 宋体">下不能关闭控制台窗口，否者邮件服务会停止。如要克服此缺点必须使</span>James<span style="font-family: 宋体">邮件服务作为作为后台服务运行。</span></p>
<p style="margin-left: 45pt; text-indent: -0.05pt">
<p style="margin-left: 45pt; text-indent: -0.05pt"><span style="font-family: 宋体">停止前台运行按</span>Ctrl+C,<span style="font-family: 宋体">会出现：</span></p>
<p style="margin-left: 45pt; text-indent: -0.05pt">JVM exiting abnormally. Shutting down Phoenix.</p>
<p style="margin-left: 45pt; text-indent: -0.05pt"><span style="font-family: 宋体">终止批处理操作吗</span>(Y/N)?</p>
<p style="margin-left: 18pt; text-indent: 21pt">2&gt;<span style="font-family: 宋体">后台服务运行：</span></p>
<p style="margin-left: 39pt"><span style="font-family: 宋体">将</span>C:"James"james-2.1"conf<span style="font-family: 宋体">目录下的</span>wrapper.conf<span style="font-family: 宋体">拷贝到</span>C:"James"james-2.1"bin<span style="font-family: 宋体">即包含</span>wrapper.exe<span style="font-family: 宋体">的目录下，运行：</span></p>
<p style="margin-left: 36pt; text-indent: 6pt">wrapper.exe&nbsp;&nbsp;&nbsp; -i&nbsp;&nbsp;&nbsp;&nbsp; C:"James"james-2.1"bin"wrapper.conf&nbsp;</p>
<p style="margin-left: 36pt; text-indent: 3pt"><span style="font-family: 宋体">然后在控制面板中开启服务或重启即可。</span></p>
<p style="margin-left: 36pt; text-indent: 3pt">
<p style="margin-left: 36pt; text-indent: 3pt"><span style="font-family: 宋体">卸载后台服务：</span></p>
<p style="margin-left: 36pt; text-indent: 3pt"><span style="font-family: 宋体">到</span>C:"James"james-2.1"bin<span style="font-family: 宋体">即包含</span>wrapper.exe<span style="font-family: 宋体">的目录下，运行：</span></p>
<p style="margin-left: 36pt; text-indent: 3pt">wrapper.exe&nbsp;&nbsp;&nbsp;&nbsp; -r &nbsp;&nbsp; C:"James"james-2.1"bin"wrapper.conf</p>
<p style="margin-left: 39pt; text-indent: -18pt; tab-stops: list 39.0pt">3．&nbsp;&nbsp;</p>
<p style="margin-left: 21pt; text-indent: -21pt; tab-stops: list 21.0pt">二、<span style="font-family: 宋体">配置：</span></p>
<p style="margin-left: 21pt">1&gt;<span style="color: blue; font-family: 宋体">服务器端配置</span><span style="font-family: 宋体">（邮件服务器的名字假设叫</span>EmailServer<span style="font-family: 宋体">，服务器管理员名</span>Admin<span style="font-family: 宋体">）</span></p>
<p style="margin-left: 31.5pt; text-indent: -10.5pt; text-align: left" align="left"><span style="font-family: 宋体">首先停止已开启的</span>James<span style="font-family: 宋体">邮件服务，然后打开文件</span>C:"James"james-2.1"apps"james"SAR-INF"config.xml<span style="font-family: 宋体">。</span></p>
<p style="margin-left: 42pt; text-indent: -21pt; tab-stops: list 42.0pt"><span style="font-family: Wingdings">&#216;<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体">在</span>config.xml<span style="font-family: 宋体">文件中，找到</span>Postmaster@localhost<span style="font-family: 宋体">，把此项改为</span>Admin@EmailServer<span style="font-family: 宋体">，同时，找到位于</span></p>
<p style="margin-left: 21pt"><span style="font-size: 9pt">&lt;!--&nbsp;By default, the servername 'localhost' is specified. This can be removed, if required. &nbsp;&nbsp;--&gt; </span>
<p style="margin-left: 21pt"><span style="font-size: 9pt">- &lt;!--&nbsp; </span>
<p style="margin-left: 21pt"><span style="font-size: 9pt">&nbsp;--&gt; </span>
<p style="margin-left: 21pt"><span style="font-size: 9pt">- &lt;!--&nbsp;Warning: If you are using fetchpop it is important to include the&nbsp;&nbsp; --&gt; </span>
<p style="margin-left: 21pt"><span style="font-size: 9pt">- &lt;!--&nbsp;fetched domains in the server name list to prevent looping.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt; </span>
<p style="margin-left: 21pt"><span style="font-size: 9pt">- &lt;servernames autodetect="true" autodetectIP="true"&gt; </span>
<p style="margin-left: 21pt"><span style="font-size: 9pt">- &lt;!--&nbsp;CONFIRM? </span>
<p style="margin-left: 21pt"><span style="font-size: 9pt">&nbsp;&nbsp;--&gt; </span>
<p style="margin-left: 21pt">&nbsp;&lt;servername&gt;<strong><u><span style="font-size: 12pt"> localhost </span></u></strong>&lt;/servername&gt; </p>
<p style="margin-left: 21pt">&nbsp;&lt;/servernames&gt;</p>
<p style="margin-left: 21pt"><span style="font-family: 宋体">的</span>localhost<span style="font-family: 宋体">，把此项改为</span>EmailServer<span style="font-family: 宋体">。这样就可以让其它机器也能访问邮件系统。</span></p>
<p style="margin-left: 21pt">
<p style="margin-left: 42pt; text-indent: -21pt; tab-stops: list 42.0pt"><span style="font-family: Wingdings">&#216;<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>DNS<span style="font-family: 宋体">配置：找到同上文件中</span><strong>&lt;dnsserver&gt;</strong><span style="font-family: 宋体">段中的如下程序段：</span></p>
<p style="margin-left: 21pt"><span style="font-size: 9pt">- <strong>&lt;dnsserver&gt;</strong> </span>
<p style="margin-left: 21pt"><span style="font-size: 9pt">- &lt;servers&gt; </span>
<p style="margin-left: 21pt"><span style="font-size: 9pt">- &lt;!--&nbsp;CONFIRM?&nbsp;&nbsp; --&gt; </span>
<p style="margin-left: 21pt"><span style="font-size: 9pt">- &lt;!-- Enter ip address of your DNS server, one IP address per server&nbsp;&nbsp; --&gt; </span>
<p style="margin-left: 21pt"><span style="font-size: 9pt">- &lt;!--&nbsp;element.&nbsp;The default configuration assumes a DNS server on the localhost.&nbsp;&nbsp; --&gt; </span>
<p style="margin-left: 21pt">&nbsp;&lt;server&gt;<strong><u><span style="font-size: 12pt">127.0.0.1</span></u></strong>&lt;/server&gt; </p>
<p style="margin-left: 21pt">&nbsp;&lt;/servers&gt;</p>
<p style="margin-left: 21pt">&nbsp;&lt;authoritative&gt;false&lt;/authoritative&gt; </p>
<p style="margin-left: 21pt">&nbsp;&lt;/dnsserver&gt;</p>
<p style="margin-left: 21pt"><span style="font-family: 宋体">将</span>127.0.0.1<span style="font-family: 宋体">的位置填入</span>DNS<span style="font-family: 宋体">服务器的</span>IP<span style="font-family: 宋体">地址；</span></p>
<p style="margin-left: 21pt">
<p style="margin-left: 42pt; text-indent: -21pt; tab-stops: list 42.0pt"><span style="font-family: Wingdings">&#216;<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体">修改管理员密码：</span></p>
<p style="margin-left: 21pt; text-indent: 21pt"><span style="font-family: 宋体">找到同上文件中的</span>&lt;administrator_accounts&gt;<span style="font-family: 宋体">段，如下程序段</span></p>
<p style="margin-left: 42pt">- &lt;administrator_accounts&gt;</p>
<p style="margin-left: 42pt"><span style="font-size: 9pt">- &lt;!--&nbsp;CHECKME! </span>
<p style="margin-left: 42pt"><span style="font-size: 9pt">&nbsp;--&gt; </span>
<p style="margin-left: 42pt"><span style="font-size: 9pt">- &lt;!--&nbsp;Change the default login/password. </span>
<p style="margin-left: 42pt"><span style="font-size: 9pt">&nbsp;--&gt; </span>
<p style="margin-left: 42pt">&nbsp;&lt;account login="<u>root</u>" password="<u>root</u>" /&gt; </p>
<p style="margin-left: 42pt">&nbsp;&lt;/administrator_accounts&gt;</p>
<p style="margin-left: 42pt">
<p style="margin-left: 42pt"><span style="font-family: 宋体">将默认用户名</span>root<span style="font-family: 宋体">与密码</span>root<span style="font-family: 宋体">修改为需要的值</span> </p>
<p style="margin-left: 42pt">
<p style="margin-left: 42pt; text-indent: -21pt; tab-stops: list 42.0pt"><span style="font-family: Wingdings">&#216;<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体">修改</span>telnet<span style="font-family: 宋体">管理程序登录端口</span> <span style="font-family: 宋体">：（默认为</span>4555<span style="font-family: 宋体">）</span></p>
<p style="margin-left: 21pt; text-indent: 21pt"><span style="font-family: 宋体">找到同上文件中的</span>&lt;remotemanager&gt;<span style="font-family: 宋体">段下的</span>port<span style="font-family: 宋体">如下程序段</span></p>
<p style="margin-left: 42pt">- &lt;remotemanager&gt;</p>
<p style="margin-left: 42pt">&nbsp;&lt;port&gt;<u>4555</u>&lt;/port&gt; </p>
<p style="margin-left: 42pt">- &lt;!--&nbsp;&nbsp; Uncomment this if you want to bind to a specific inetaddress </p>
<p style="margin-left: 42pt">&nbsp;--&gt; </p>
<p style="margin-left: 60pt; text-indent: -18pt; tab-stops: list 60.0pt">-<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;!--</p>
<p style="margin-left: 42pt"><span style="font-family: 宋体">将</span>&lt;port&gt;<u>4555</u>&lt;/port&gt;<span style="font-family: 宋体">之间的端口号</span>4555<span style="font-family: 宋体">改为需要的端口。</span></p>
<p>
<p style="margin-left: 21pt">2&gt; <span style="color: blue; font-family: 宋体">客户端配置</span><span style="font-family: 宋体">：（略）</span></p>
<p style="margin-left: 21pt">
<p style="margin-left: 21pt">3&gt;<span style="color: blue; font-family: 宋体">帐号管理</span></p>
<p style="margin-left: 21pt">James<span style="font-family: 宋体">的账号管理是通过</span>telnet<span style="font-family: 宋体">完成的，登录命令为：</span></p>
<p style="margin-left: 21pt">
<p style="margin-left: 21pt">telnet EmailServer 4555</p>
<p style="margin-left: 21pt">
<p style="margin-left: 21pt"><span style="font-family: 宋体">其中</span>EmailServer<span style="font-family: 宋体">也可以换成</span>IP<span style="font-family: 宋体">，</span>4555<span style="font-family: 宋体">是端口号。登录时需要用户名和密码，开始默认的用户名和密码均为</span>root<span style="font-family: 宋体">。若登录成功，提示如下：</span></p>
<p style="margin-left: 21pt; text-indent: 21pt">JAMES Remote Administration Tool 2.1</p>
<p style="margin-left: 21pt; text-indent: 21pt">Please enter your login and password</p>
<p style="margin-left: 21pt; text-indent: 21pt">Login id:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">此时输入</span>root<span style="font-family: 宋体">用户名</span>,<span style="font-family: 宋体">然后会出现：</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Password:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">输入密码</span>root</p>
<p><span style="font-family: 宋体">注意：在有些操作系统如</span>Windows2000<span style="font-family: 宋体">上，用户输入均不显示。</span></p>
<p>
<p>telnet<span style="font-family: 宋体">命令列表：</span></p>
<table style="border-right: medium none; border-top: medium none; border-left: medium none; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 176.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="235">
            <p>help</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 249.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="333">
            <p><span style="font-family: 宋体">显示帮助</span></p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 176.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="235">
            <p>Listusers</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 249.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="333">
            <p><span style="font-family: 宋体">列出目前存在的账户</span></p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 176.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="235">
            <p>Countusers</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 249.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="333">
            <p><span style="font-family: 宋体">显示目前存在的账户的数量</span></p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 176.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="235">
            <p>addusers [<span style="font-family: 宋体">用户名</span>] [<span style="font-family: 宋体">密码</span>]</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 249.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="333">
            <p><span style="font-family: 宋体">添加新用户</span></p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 176.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="235">
            <p>verify [<span style="font-family: 宋体">用户名</span>]</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 249.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="333">
            <p><span style="font-family: 宋体">验证特定用户是否存在</span></p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 176.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="235">
            <p>deluser [<span style="font-family: 宋体">用户名</span>]&nbsp;&nbsp;&nbsp; </p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 249.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="333">
            <p><span style="font-family: 宋体">删除已存在用户</span></p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 176.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="235">
            <p>setpassword [<span style="font-family: 宋体">用户名</span>] [<span style="font-family: 宋体">密码</span>]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 249.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="333">
            <p><span style="font-family: 宋体">设置某一用户的密码</span></p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 176.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="235">
            <p>setalias [<span style="font-family: 宋体">别名</span>] [<span style="font-family: 宋体">用户名</span>]</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 249.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="333">
            <p><span style="font-family: 宋体">从本地将</span>[<span style="font-family: 宋体">别名</span>]<span style="font-family: 宋体">的所有邮件转寄</span>[<span style="font-family: 宋体">用户名</span>]</p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 176.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="235">
            <p>unsetalias [<span style="font-family: 宋体">别名</span>]</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 249.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="333">
            <p><span style="font-family: 宋体">取消</span>setalias<span style="font-family: 宋体">设置</span></p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 176.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="235">
            <p>setforwarding [<span style="font-family: 宋体">用户名</span>] [email<span style="font-family: 宋体">地址</span>]</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 249.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="333">
            <p><span style="font-family: 宋体">将</span>[<span style="font-family: 宋体">用户名</span>]<span style="font-family: 宋体">的邮件转寄指定</span>[email<span style="font-family: 宋体">地址</span>]</p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 176.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="235">
            <p>unsetforwarding [<span style="font-family: 宋体">用户名</span>]</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 249.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="333">
            <p><span style="font-family: 宋体">取消</span>setforwarding<span style="font-family: 宋体">设置</span></p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 176.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="235">
            <p>user [<span style="font-family: 宋体">资源</span>]</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 249.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="333">
            <p><span style="font-family: 宋体">变为另一用户的资源</span></p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 176.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="235">
            <p>shutdown&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 249.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="333">
            <p><span style="font-family: 宋体">停止当前</span>James<span style="font-family: 宋体">邮件服务的</span>JVM<span style="font-family: 宋体">程序</span>(<span style="font-family: 宋体">对于</span>James<span style="font-family: 宋体">为后台服务时，用此命令很方便</span>)</p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 176.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="235">
            <p>Quit</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 249.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="333">
            <p><span style="font-family: 宋体">断开</span>telnet<span style="font-family: 宋体">连接</span></p>
            </td>
        </tr>
    </tbody>
</table>
<p>
<p style="margin-left: 21pt">4&gt;<span style="color: blue; font-family: 宋体">用户信息的数据库存储</span></p>
<p>James<span style="font-family: 宋体">邮件用户的用户信息默认保存在</span>apps"james"var"users<span style="font-family: 宋体">目录下，通过修改配置文件</span>apps"james"SAR-INF"config.xml<span style="font-family: 宋体">，可以把用户信息保存到数据库中，配置方法如下：</span></p>
<p><span style="font-family: 宋体">假设使用的是</span>MySQL<span style="font-family: 宋体">数据库：</span></p>
<p>
<p><span style="font-family: 宋体">第一步：首先将</span>MySQL<span style="font-family: 宋体">的驱动程序（例如：</span>mysql-connector-java-3.1.6-bin.jar<span style="font-family: 宋体">）考到</span>james<span style="font-family: 宋体">的</span>lib<span style="font-family: 宋体">目录下（例如：</span>D:"james"lib<span style="font-family: 宋体">）</span></p>
<p>
<p><span style="font-family: 宋体">第二步：在</span>MySQL<span style="font-family: 宋体">中新建一个数据库</span>mail<span style="font-family: 宋体">；</span></p>
<p>
<p><span style="font-family: 宋体">第三步：打开</span>config.xml<span style="font-family: 宋体">，找到</span>&lt;users-store&gt;<span style="font-family: 宋体">这一项，此面默认的内容为：</span></p>
<table style="background: #d9d9d9" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr>
            <td style="padding-right: 0cm; padding-left: 0cm; padding-bottom: 0cm; width: 402.75pt; padding-top: 0cm" valign="top" width="537">
            <p>&lt;repository name="LocalUsers" class="org.apache.james.userrepository.UsersFileRepository"&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;destination URL="file://var/users/"/&gt;<br />
            &lt;/repository&gt;</p>
            </td>
        </tr>
    </tbody>
</table>
<p><span style="font-family: 宋体">需要修改为：</span></p>
<table style="background: #d9d9d9" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr>
            <td style="padding-right: 0cm; padding-left: 0cm; padding-bottom: 0cm; width: 402.75pt; padding-top: 0cm" valign="top" width="537">
            <p>&lt;repository name="LocalUsers"</p>
            <p>&nbsp;class="org.apache.james.userrepository.JamesUsers<strong>Jdbc</strong>Repository" destinationURL="db://maildb/users"&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&lt;sqlFile&gt;file://conf/sqlResources.xml&lt;/sqlFile&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/repository&gt;</p>
            </td>
        </tr>
    </tbody>
</table>
<p><span style="font-family: 宋体">其实如不修改也行，因为文件下面也有实例，不过是用</span>&lt;!-- <span style="font-family: 宋体">和</span> --&gt; <span style="font-family: 宋体">注释掉的，打开即可；记住把</span></p>
<p>&lt;repository name="LocalUsers" class="org.apache.james.userrepository.UsersFileRepository"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;destination URL="file://var/users/"/&gt;<br />
&lt;/repository&gt;</p>
<p><span style="font-family: 宋体">用</span>&lt;!-- <span style="font-family: 宋体">和</span> --&gt; <span style="font-family: 宋体">注释掉；</span></p>
<p><span style="font-family: 宋体">通过修改，我们就把用户信息的存储介质从</span>file<span style="font-family: 宋体">改成了</span>db<span style="font-family: 宋体">，</span>&lt;sqlFile&gt;<span style="font-family: 宋体">是指明了在</span>db<span style="font-family: 宋体">中的数据表结构及相关数据库信息。</span></p>
<p>
<p><span style="font-family: 宋体">第四步：仍然是</span>config.xml<span style="font-family: 宋体">，找到</span>&lt;data-sources&gt;<span style="font-family: 宋体">项，默认内容为空，把此项内容修改为：</span></p>
<table style="background: #d9d9d9" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr>
            <td style="padding-right: 0cm; padding-left: 0cm; padding-bottom: 0cm; width: 402.75pt; padding-top: 0cm" valign="top" width="537">
            <p>&lt;data-source name="maildb" class="org.apache.james.util.mordred.JdbcDataSource"&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;driver&gt;org.gjt.mm.mysql.Driver&lt;/driver&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;dburl&gt;jdbc:mysql://127.0.0.1/<span style="color: blue">mail&lt;/dburl&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;user&gt;root&lt;/user&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;password&gt;&lt;/password&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;max&gt;20&lt;/max&gt;<br />
            &lt;/data-source&gt;</span></p>
            </td>
        </tr>
    </tbody>
</table>
<p><span style="font-family: 宋体">或打开文件下面实例的</span>&lt;!-- <span style="font-family: 宋体">和</span> --&gt; <span style="font-family: 宋体">注释</span></p>
<p>&lt;driver&gt;<span style="font-family: 宋体">是指</span>MySQL<span style="font-family: 宋体">的</span>JDBC<span style="font-family: 宋体">驱动，注意这个默认的</span>&lt;driver&gt;<span style="font-family: 宋体">是有问题的，要改成</span>MySQL<span style="font-family: 宋体">的驱动程序中</span>Driver.class<span style="font-family: 宋体">的路径，即：</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">&lt;driver&gt;com.mysql.jdbc.Driver&lt;/driver&gt; </span></span>
<p>&lt;dburl&gt;<span style="font-family: 宋体">指数据库的访问路径，</span>IP<span style="font-family: 宋体">后的</span><span style="color: blue">mail</span><span style="font-family: 宋体">即</span>MySQL<span style="font-family: 宋体">中<span style="color: blue">新建数据库名</span>，接下来是用户名、密码及最大连接数。</span></p>
<p>
<p><span style="font-family: 宋体">再次启动时，</span>james<span style="font-family: 宋体">将在</span>mail<span style="font-family: 宋体">数据库中自动创建有关用户的表格。</span></p>
<p>
<p><span style="font-family: 宋体">至此，数据库配置完成，启动</span>James<span style="font-family: 宋体">，若正常无误，请通过</span>telnet<span style="font-family: 宋体">添加一个新用户，比如</span>adduser holen 123456<span style="font-family: 宋体">，然后检查</span>MySQL<span style="font-family: 宋体">中的</span>mail<span style="font-family: 宋体">数据库，下面将有一个表</span>users<span style="font-family: 宋体">，这是</span>James<span style="font-family: 宋体">根据</span>file://conf/sqlResources.xml<span style="font-family: 宋体">的内容创建的。</span></p>
<p><span style="font-family: 宋体">通过以上配置，</span>James<span style="font-family: 宋体">的用户信息就可以保存在数据库中了。</span></p>
<p><span style="font-family: 宋体">注：修改以前的账户会丢失！</span></p>
<p>
<p>
<p style="margin-left: 21pt; text-indent: -21pt; tab-stops: list 21.0pt">一、FAQ</p>
<p><span style="color: blue">1</span><span style="color: blue; font-family: 宋体">、</span><span style="color: blue; font-family: 宋体">在启动</span><span style="color: blue">james</span><span style="color: blue; font-family: 宋体">时，提示</span><span style="color: blue">POP3</span><span style="color: blue; font-family: 宋体">或</span><span style="color: blue">SMTP</span><span style="color: blue; font-family: 宋体">不能使用？</span>
<p><span style="font-family: 宋体">请检查一下，看&#8220;管理工具—</span>&gt;<span style="font-family: 宋体">服务&#8221;里面，是不是启动了别的邮件服务器，已将</span>110<span style="font-family: 宋体">或</span>25<span style="font-family: 宋体">端口占用了。</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">实例：</span></p>
<p style="margin-left: 35.9pt">james<span style="font-family: 宋体">前台直接运行时出错：</span></p>
<p style="margin-left: 35.9pt">ERROR&nbsp;&nbsp; 2005-08-25 08:58:38.642 [Phoenix.] (): Component named "smtpserver" failed to pass through the Initialization stage. (Reason: <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.net.BindException: Address already in use: JVM_Bind).</p>
<p style="margin-left: 35.9pt">
<p style="margin-left: 35.9pt">ERROR&nbsp;&nbsp; 2005-08-25 08:58:38.652 [Phoenix.] (): There was an error running phase "startup" for Block named "smtpserver". (Reason: Component named "smtpserver" failed to pass through the Initialization stage. (Reason: <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.net.BindException: Address already in use: JVM_Bind).).</p>
<p style="margin-left: 35.9pt">
<p style="margin-left: 35.9pt">org.apache.excalibur.containerkit.lifecycle.LifecycleException: Component named "smtpserver" failed to pass through the Initialization stage. (Reason: <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.net.BindException: Address already in use: JVM_Bind).</p>
<p style="margin-left: 35.9pt">
<p style="margin-left: 35.9pt"><span style="font-family: 宋体">原因：</span></p>
<p style="margin-left: 35.9pt">&nbsp;james<span style="font-family: 宋体">默认设置不允许在同一台机器上跑两个邮件服务器进程。必须关掉另一个！</span></p>
<p style="margin-left: 35.9pt"><span style="font-family: 宋体">检测方法：</span></p>
<p style="margin-left: 35.9pt">console<span style="font-family: 宋体">界面下：</span></p>
<p style="margin-left: 35.9pt">&nbsp;d:&gt; telnet <span style="font-family: 宋体">主机名</span> 25<span style="font-family: 宋体">（或</span>110<span style="font-family: 宋体">）</span></p>
<p style="margin-left: 35.9pt"><span style="font-family: 宋体">如果可以登录，出现</span></p>
<p style="margin-left: 35.9pt">&nbsp;220 <span style="font-family: 宋体">主机名</span> Microsoft ESMTP MAIL Service, Version: 6.0.2600.1106 ready at&nbsp;Thu,</p>
<p style="margin-left: 35.9pt">&nbsp;25 Aug 2005 14:14:36 +0800</p>
<p style="margin-left: 35.9pt"><span style="font-family: 宋体">则说明此机器上已有一台邮件服务器在运行。</span></p>
<p style="margin-left: 35.9pt">
<p style="margin-left: 35.9pt"><span style="font-family: 宋体">解决：</span></p>
<p style="margin-left: 35.9pt"><span style="font-family: 宋体">检查</span>Windows<span style="font-family: 宋体">上运行服务：</span></p>
<p style="margin-left: 35.9pt"><span style="font-family: 宋体">跨网传输电子邮件的服务</span>Simple Mail Transfer Protocol (SMTP)<span style="font-family: 宋体">，是否启动</span></p>
<p style="margin-left: 35.9pt"><span style="font-family: 宋体">如启动关闭之！</span></p>
<p>
<p><span style="color: blue">2</span><span style="color: blue; font-family: 宋体">、</span><span style="color: blue"> JAVA_HOME</span><span style="color: blue; font-family: 宋体">找不到？</span>
<p><span style="font-family: 宋体">请在</span>run.bat<span style="font-family: 宋体">中指定</span>JAVA_HOME<span style="font-family: 宋体">，若还不行，请在&#8220;我的电脑—</span>&gt;<span style="font-family: 宋体">系统—</span>&gt;<span style="font-family: 宋体">高级—</span>&gt;<span style="font-family: 宋体">环境变量&#8221;中添加一项</span>JAVA_HOME<span style="font-family: 宋体">。</span></p>
<p>
<p><span style="color: blue">3</span><span style="color: blue; font-family: 宋体">、</span><span style="color: blue; font-family: 宋体">服务器启动正常，但客户端不能收发邮件？</span>
<p><span style="font-family: 宋体">请检查客户端配置是否正常，参照前面所讲，另外，请检查</span>james<span style="font-family: 宋体">下的</span>config.xml<span style="font-family: 宋体">，是否把</span>localhost<span style="font-family: 宋体">改成了机器名。</span></p>
<p>
<p><span style="color: blue">4</span><span style="color: blue; font-family: 宋体">、修改为数据库储存后，</span><span style="color: blue">james</span><span style="color: blue; font-family: 宋体">启动出错：</span>
<p><span style="font-family: 宋体">一般是数据库驱动有错。检查一下</span></p>
<p>&lt;data-source name="maildb" class="org.apache.james.util.mordred.JdbcDataSource"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong><span style="color: blue">&lt;driver&gt;org.gjt.mm.mysql.Driver&lt;/driver&gt;</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;dburl&gt;jdbc:mysql://127.0.0.1/mail&lt;/dburl&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;user&gt;root&lt;/user&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;password&gt;&lt;/password&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;max&gt;20&lt;/max&gt;<br />
&lt;/data-source&gt;</span></p>
<p><span style="font-family: 宋体">的</span><strong><span style="color: blue">&lt;driver&gt;org.gjt.mm.mysql.Driver&lt;/driver&gt;</span></strong><span style="font-family: 宋体">是否对</span></p><img src ="http://www.blogjava.net/rain1102/aggbug/153314.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2007-10-16 16:42 <a href="http://www.blogjava.net/rain1102/articles/153314.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java工具篇</title><link>http://www.blogjava.net/rain1102/articles/129777.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Thu, 12 Jul 2007 02:55:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/129777.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/129777.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/129777.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/129777.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/129777.html</trackback:ping><description><![CDATA[<h3><a name=Struts2%2BSpring2%2BJPA%2BAJAX-Prerequisites></a>Prerequisites</h3>
<ul>
    <li><span class=nobr><a title="Visit page outside Confluence" href="http://struts.apache.org/2.x/" rel=nofollow><font color=#810081><u>Struts 2<sup><img class=rendericon height=7 alt="" src="http://cwiki.apache.org/confluence/images/icons/linkext7.gif" width=7 align=absMiddle border=0></sup></u></font></a></span>
    <li><span class=nobr><a title="Visit page outside Confluence" href="http://tomcat.apache.org/download-55.cgi" rel=nofollow><font color=#0000ff><u>Tomcat 5.5<sup><img class=rendericon height=7 alt="" src="http://cwiki.apache.org/confluence/images/icons/linkext7.gif" width=7 align=absMiddle border=0></sup></u></font></a></span>
    <li><span class=nobr><a title="Visit page outside Confluence" href="http://www.eclipse.org/" rel=nofollow><font color=#810081><u>Eclipse<sup><img class=rendericon height=7 alt="" src="http://cwiki.apache.org/confluence/images/icons/linkext7.gif" width=7 align=absMiddle border=0></sup></u></font></a></span>
    <li><span class=nobr><a title="Visit page outside Confluence" href="http://www.eclipse.org/webtools/" rel=nofollow><font color=#810081><u>Eclipse WTP<sup><img class=rendericon height=7 alt="" src="http://cwiki.apache.org/confluence/images/icons/linkext7.gif" width=7 align=absMiddle border=0></sup></u></font></a></span>
    <li><span class=nobr><a title="Visit page outside Confluence" href="http://www.hibernate.org/" rel=nofollow><font color=#810081><u>Hibernate Core<sup><img class=rendericon height=7 alt="" src="http://cwiki.apache.org/confluence/images/icons/linkext7.gif" width=7 align=absMiddle border=0></sup></u></font></a></span>
    <li><span class=nobr><a title="Visit page outside Confluence" href="http://www.hibernate.org/" rel=nofollow><font color=#810081><u>Hibernate Annotations<sup><img class=rendericon height=7 alt="" src="http://cwiki.apache.org/confluence/images/icons/linkext7.gif" width=7 align=absMiddle border=0></sup></u></font></a></span>
    <li><span class=nobr><a title="Visit page outside Confluence" href="http://www.hibernate.org/" rel=nofollow><font color=#810081><u>Hibernate Entity Manager<sup><img class=rendericon height=7 alt="" src="http://cwiki.apache.org/confluence/images/icons/linkext7.gif" width=7 align=absMiddle border=0></sup></u></font></a></span>
    <li><span class=nobr><a title="Visit page outside Confluence" href="http://dev.mysql.com/downloads/mysql/5.0.html" rel=nofollow><font color=#0000ff><u>MySql Server<sup><img class=rendericon height=7 alt="" src="http://cwiki.apache.org/confluence/images/icons/linkext7.gif" width=7 align=absMiddle border=0></sup></u></font></a></span>
    <li><span class=nobr><a title="Visit page outside Confluence" href="http://dev.mysql.com/downloads/connector/j/5.0.html" rel=nofollow><font color=#810081><u>Mysql JDBC Driver<sup><img class=rendericon height=7 alt="" src="http://cwiki.apache.org/confluence/images/icons/linkext7.gif" width=7 align=absMiddle border=0></sup></u></font></a></span>
    <li><span class=nobr><a title="Visit page outside Confluence" href="http://www.springframework.org/download" rel=nofollow><font color=#810081><u>Spring 2.0<sup><img class=rendericon height=7 alt="" src="http://cwiki.apache.org/confluence/images/icons/linkext7.gif" width=7 align=absMiddle border=0></sup></u></font></a></span> </li>
</ul><img src ="http://www.blogjava.net/rain1102/aggbug/129777.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2007-07-12 10:55 <a href="http://www.blogjava.net/rain1102/articles/129777.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java.lang.OutOfMemoryError: Java heap space问题 </title><link>http://www.blogjava.net/rain1102/articles/128981.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Mon, 09 Jul 2007 02:05:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/128981.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/128981.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/128981.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/128981.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/128981.html</trackback:ping><description><![CDATA[增加Tomcat的使用内存. 打开/tomcat/bin/catalina.bat, 加上下面的命令:<br>set JAVA_OPTS=-Xms32m -Xmx256m
<p>如果你用win<br>/tomcat/bin/catalina.bat 加上下面的命令:<br>set JAVA_OPTS=-Xms32m -Xmx256m</p>
<p>如果你用unix/linux<br>/tomcat/bin/catalina.sh 加上下面的命令:<br>JAVA_OPTS="-Xms32m -Xmx256m"&nbsp;</p>
<br><br>CATALINA_OPTS = -server -Xms1024m<br>ANT_OPTS = -Xmx1024m -Xms1024m<br>JAVA_OPTS = -server -Xms1024m -Xmx1024m -XX ermSize=256M -XX:MaxPermSize=512m<img src ="http://www.blogjava.net/rain1102/aggbug/128981.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2007-07-09 10:05 <a href="http://www.blogjava.net/rain1102/articles/128981.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java中的反射机制了解</title><link>http://www.blogjava.net/rain1102/articles/128531.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Fri, 06 Jul 2007 03:54:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/128531.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/128531.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/128531.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/128531.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/128531.html</trackback:ping><description><![CDATA[Reflection是Java被视为动态（或准动态）语言的一个关键性质。这个机制允许程序在运行时透过Reflection APIs取得任何一个已知名称的class的内部信息，包括其modifiers（诸如public，static等等），superclass（例如Object），实现之interfaces（例如Cloneable），也包括fields和methods的所有信息。并可以运行时改变fields内容或唤起methods。<br>程序运行时，允许改变程序结构或变量类型，这种语言称为动态语言，从这观点看，Perl，Python，Ruby是动态语言，而C++，Java，C#是动态语言。<br>尽管在这样的定义下与分类下Java不是动态语言，它确实有着一个非常突出的动态相关机制：Reflection（反射，映象，倒影），用在Java身上指的是我们可以在运行时加载，探知，使用编译期间完全未知的class。<img src ="http://www.blogjava.net/rain1102/aggbug/128531.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2007-07-06 11:54 <a href="http://www.blogjava.net/rain1102/articles/128531.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>接口 ResultSetMetaData</title><link>http://www.blogjava.net/rain1102/articles/94914.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Fri, 19 Jan 2007 05:34:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/94914.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/94914.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/94914.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/94914.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/94914.html</trackback:ping><description><![CDATA[<dl>
				<dt>
				</dt>
				<pre>public interface <b>ResultSetMetaData</b></pre>
		</dl>
		<pre>
		</pre>
		<p>可用于获取关于 <code>ResultSet</code> 对象中列的类型和属性信息的对象。以下代码片段创建 <code>ResultSet</code> 对象 rs，创建 <code>ResultSetMetaData</code> 对象 rsmd，并使用 rsmd 查找 rs 有多少列，以及 rs 中的第一列是否可以在 <code>WHERE</code> 子句中使用。 </p>
		<pre>     ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM TABLE2");
     ResultSetMetaData rsmd = rs.getMetaData();
     int numberOfColumns = rsmd.getColumnCount();
     boolean b = rsmd.isSearchable(1);

 </pre>
		<p>
		</p>
		<p>
		</p>
		<hr />
		<p>
				<!-- =========== FIELD SUMMARY =========== -->
				<a name="field_summary">
						<!-- -->
				</a>
		</p>
		<table cellspacing="0" cellpadding="3" width="100%" summary="" border="1">
				<tbody>
						<tr class="TableHeadingColor" bgcolor="#ccccff">
								<th align="left" colspan="2">
										<font size="+2">
												<b>字段摘要</b>
										</font>
								</th>
						</tr>
						<tr class="TableRowColor" bgcolor="white">
								<td valign="top" align="right" width="1%">
										<font size="-1">
												<code>static int</code>
										</font>
								</td>
								<td>
										<code>
												<b>
														<a href="mk:@MSITStore:F:\book\Java(tm)%205.0%20API.chm::/java/sql/ResultSetMetaData.html#columnNoNulls">columnNoNulls</a>
												</b>
										</code>
										<br />          指示列不允许使用 <code>NULL</code> 值的常量。</td>
						</tr>
						<tr class="TableRowColor" bgcolor="white">
								<td valign="top" align="right" width="1%">
										<font size="-1">
												<code>static int</code>
										</font>
								</td>
								<td>
										<code>
												<b>
														<a href="mk:@MSITStore:F:\book\Java(tm)%205.0%20API.chm::/java/sql/ResultSetMetaData.html#columnNullable">columnNullable</a>
												</b>
										</code>
										<br />          指示列允许使用 <code>NULL</code> 值的常量。</td>
						</tr>
						<tr class="TableRowColor" bgcolor="white">
								<td valign="top" align="right" width="1%">
										<font size="-1">
												<code>static int</code>
										</font>
								</td>
								<td>
										<code>
												<b>
														<a href="mk:@MSITStore:F:\book\Java(tm)%205.0%20API.chm::/java/sql/ResultSetMetaData.html#columnNullableUnknown">columnNullableUnknown</a>
												</b>
										</code>
										<br />          指示不知道列的值是否可为 null 的常量。</td>
						</tr>
				</tbody>
		</table>  <!-- ========== METHOD SUMMARY =========== --><a name="method_summary"><!-- --></a><table cellspacing="0" cellpadding="3" width="100%" summary="" border="1"><tbody><tr class="TableHeadingColor" bgcolor="#ccccff"><th align="left" colspan="2"><font size="+2"><b>方法摘要</b></font></th></tr><tr class="TableRowColor" bgcolor="white"><td valign="top" align="right" width="1%"><font size="-1"><code> <a title="java.lang 中的类" href="mk:@MSITStore:F:\book\Java(tm)%205.0%20API.chm::/java/lang/String.html">String</a></code></font></td><td><code><b><a href="mk:@MSITStore:F:\book\Java(tm)%205.0%20API.chm::/java/sql/ResultSetMetaData.html#getCatalogName(int)">getCatalogName</a></b>(int column)</code><br />          获取指定列的表目录名称。</td></tr><tr class="TableRowColor" bgcolor="white"><td valign="top" align="right" width="1%"><font size="-1"><code> <a title="java.lang 中的类" href="mk:@MSITStore:F:\book\Java(tm)%205.0%20API.chm::/java/lang/String.html">String</a></code></font></td><td><code><b><a href="mk:@MSITStore:F:\book\Java(tm)%205.0%20API.chm::/java/sql/ResultSetMetaData.html#getColumnClassName(int)">getColumnClassName</a></b>(int column)</code><br />          如果调用方法 <code>ResultSet.getObject</code> 从列中检索值，则返回构造其实例的 <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a> 类的完全限定名称。</td></tr><tr class="TableRowColor" bgcolor="white"><td valign="top" align="right" width="1%"><font size="-1"><code> int</code></font></td><td><code><b><a href="mk:@MSITStore:F:\book\Java(tm)%205.0%20API.chm::/java/sql/ResultSetMetaData.html#getColumnCount()">getColumnCount</a></b>()</code><br />          返回此 <code>ResultSet</code> 对象中的列数。</td></tr><tr class="TableRowColor" bgcolor="white"><td valign="top" align="right" width="1%"><font size="-1"><code> int</code></font></td><td><code><b><a href="mk:@MSITStore:F:\book\Java(tm)%205.0%20API.chm::/java/sql/ResultSetMetaData.html#getColumnDisplaySize(int)">getColumnDisplaySize</a></b>(int column)</code><br />          指示指定列的最大标准宽度，以字符为单位。</td></tr><tr class="TableRowColor" bgcolor="white"><td valign="top" align="right" width="1%"><font size="-1"><code> <a title="java.lang 中的类" href="mk:@MSITStore:F:\book\Java(tm)%205.0%20API.chm::/java/lang/String.html">String</a></code></font></td><td><code><b><a href="mk:@MSITStore:F:\book\Java(tm)%205.0%20API.chm::/java/sql/ResultSetMetaData.html#getColumnLabel(int)">getColumnLabel</a></b>(int column)</code><br />          获取用于打印输出和显示的指定列的建议标题。</td></tr><tr class="TableRowColor" bgcolor="white"><td valign="top" align="right" width="1%"><font size="-1"><code> <a title="java.lang 中的类" href="mk:@MSITStore:F:\book\Java(tm)%205.0%20API.chm::/java/lang/String.html">String</a></code></font></td><td><code><b><a href="mk:@MSITStore:F:\book\Java(tm)%205.0%20API.chm::/java/sql/ResultSetMetaData.html#getColumnName(int)">getColumnName</a></b>(int column)</code><br />          获取指定列的名称。</td></tr><tr class="TableRowColor" bgcolor="white"><td valign="top" align="right" width="1%"><font size="-1"><code> int</code></font></td><td><code><b><a href="mk:@MSITStore:F:\book\Java(tm)%205.0%20API.chm::/java/sql/ResultSetMetaData.html#getColumnType(int)">getColumnType</a></b>(int column)</code><br />          检索指定列的 SQL 类型。</td></tr><tr class="TableRowColor" bgcolor="white"><td valign="top" align="right" width="1%"><font size="-1"><code> <a title="java.lang 中的类" href="mk:@MSITStore:F:\book\Java(tm)%205.0%20API.chm::/java/lang/String.html">String</a></code></font></td><td><code><b><a href="mk:@MSITStore:F:\book\Java(tm)%205.0%20API.chm::/java/sql/ResultSetMetaData.html#getColumnTypeName(int)">getColumnTypeName</a></b>(int column)</code><br />          检索指定列的数据库特定的类型名称。</td></tr><tr class="TableRowColor" bgcolor="white"><td valign="top" align="right" width="1%"><font size="-1"><code> int</code></font></td><td><code><b><a href="mk:@MSITStore:F:\book\Java(tm)%205.0%20API.chm::/java/sql/ResultSetMetaData.html#getPrecision(int)">getPrecision</a></b>(int column)</code><br />          获取指定列的小数位数。</td></tr><tr class="TableRowColor" bgcolor="white"><td valign="top" align="right" width="1%"><font size="-1"><code> int</code></font></td><td><code><b><a href="mk:@MSITStore:F:\book\Java(tm)%205.0%20API.chm::/java/sql/ResultSetMetaData.html#getScale(int)">getScale</a></b>(int column)</code><br />          获取指定列的小数点右边的位数。</td></tr><tr class="TableRowColor" bgcolor="white"><td valign="top" align="right" width="1%"><font size="-1"><code> <a title="java.lang 中的类" href="mk:@MSITStore:F:\book\Java(tm)%205.0%20API.chm::/java/lang/String.html">String</a></code></font></td><td><code><b><a href="mk:@MSITStore:F:\book\Java(tm)%205.0%20API.chm::/java/sql/ResultSetMetaData.html#getSchemaName(int)">getSchemaName</a></b>(int column)</code><br />          获取指定列的表模式。</td></tr><tr class="TableRowColor" bgcolor="white"><td valign="top" align="right" width="1%"><font size="-1"><code> <a title="java.lang 中的类" href="mk:@MSITStore:F:\book\Java(tm)%205.0%20API.chm::/java/lang/String.html">String</a></code></font></td><td><code><b><a href="mk:@MSITStore:F:\book\Java(tm)%205.0%20API.chm::/java/sql/ResultSetMetaData.html#getTableName(int)">getTableName</a></b>(int column)</code><br />          获取指定列的名称。</td></tr><tr class="TableRowColor" bgcolor="white"><td valign="top" align="right" width="1%"><font size="-1"><code> boolean</code></font></td><td><code><b><a href="mk:@MSITStore:F:\book\Java(tm)%205.0%20API.chm::/java/sql/ResultSetMetaData.html#isAutoIncrement(int)">isAutoIncrement</a></b>(int column)</code><br />          指示是否自动为指定列进行编号，这样这些列仍然是只读的。</td></tr><tr class="TableRowColor" bgcolor="white"><td valign="top" align="right" width="1%"><font size="-1"><code> boolean</code></font></td><td><code><b><a href="mk:@MSITStore:F:\book\Java(tm)%205.0%20API.chm::/java/sql/ResultSetMetaData.html#isCaseSensitive(int)">isCaseSensitive</a></b>(int column)</code><br />          指示列的大小写是否有关系。</td></tr><tr class="TableRowColor" bgcolor="white"><td valign="top" align="right" width="1%"><font size="-1"><code> boolean</code></font></td><td><code><b><a href="mk:@MSITStore:F:\book\Java(tm)%205.0%20API.chm::/java/sql/ResultSetMetaData.html#isCurrency(int)">isCurrency</a></b>(int column)</code><br />          指示指定的列是否是一个哈希代码值。</td></tr><tr class="TableRowColor" bgcolor="white"><td valign="top" align="right" width="1%"><font size="-1"><code> boolean</code></font></td><td><code><b><a href="mk:@MSITStore:F:\book\Java(tm)%205.0%20API.chm::/java/sql/ResultSetMetaData.html#isDefinitelyWritable(int)">isDefinitelyWritable</a></b>(int column)</code><br />          指示在指定的列上进行写操作是否明确可以获得成功。</td></tr><tr class="TableRowColor" bgcolor="white"><td valign="top" align="right" width="1%"><font size="-1"><code> int</code></font></td><td><code><b><a href="mk:@MSITStore:F:\book\Java(tm)%205.0%20API.chm::/java/sql/ResultSetMetaData.html#isNullable(int)">isNullable</a></b>(int column)</code><br />          指示指定列中的值是否可以为 null。</td></tr><tr class="TableRowColor" bgcolor="white"><td valign="top" align="right" width="1%"><font size="-1"><code> boolean</code></font></td><td><code><b><a href="mk:@MSITStore:F:\book\Java(tm)%205.0%20API.chm::/java/sql/ResultSetMetaData.html#isReadOnly(int)">isReadOnly</a></b>(int column)</code><br />          指示指定的列是否明确不可写入。</td></tr><tr class="TableRowColor" bgcolor="white"><td valign="top" align="right" width="1%"><font size="-1"><code> boolean</code></font></td><td><code><b><a href="mk:@MSITStore:F:\book\Java(tm)%205.0%20API.chm::/java/sql/ResultSetMetaData.html#isSearchable(int)">isSearchable</a></b>(int column)</code><br />          指示是否可以在 where 子句中使用指定的列。</td></tr><tr class="TableRowColor" bgcolor="white"><td valign="top" align="right" width="1%"><font size="-1"><code> boolean</code></font></td><td><code><b><a href="mk:@MSITStore:F:\book\Java(tm)%205.0%20API.chm::/java/sql/ResultSetMetaData.html#isSigned(int)">isSigned</a></b>(int column)</code><br />          指示指定列中的值是否带正负号。</td></tr><tr class="TableRowColor" bgcolor="white"><td valign="top" align="right" width="1%"><font size="-1"><code> boolean</code></font></td><td><code><b><a href="mk:@MSITStore:F:\book\Java(tm)%205.0%20API.chm::/java/sql/ResultSetMetaData.html#isWritable(int)">isWritable</a></b>(int column)</code><br />          指示在指定的列上进行写操作是否可以获得成功。</td></tr></tbody></table><img src ="http://www.blogjava.net/rain1102/aggbug/94914.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2007-01-19 13:34 <a href="http://www.blogjava.net/rain1102/articles/94914.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>几个常见的关于日期的问题</title><link>http://www.blogjava.net/rain1102/articles/83820.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Mon, 27 Nov 2006 08:21:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/83820.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/83820.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/83820.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/83820.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/83820.html</trackback:ping><description><![CDATA[1. 怎样计算两个时间之间的间隔？<br /><br />   间隔=Date1.getTime()-Date2.getTime();得出来的是毫秒数.<br />     除1000是秒,再除60是分,再除60是小时..............................<br /><br />     记住java标准库中所有时间类都以此为基础转化的,只是他写好了一些<br />   转化的方法给你用而已.但都离不开这个毫秒数为基础.<br /><br />2. t=Calendar.getInstance();m=t.get(t.MONTH)+1;这里为什么要加一？<br /><br />   在java语言里，date的month的取值范围是：0～11，与人们的自然表达上相差1。<br /><br /><br />3. 系统时间与当前日期的区别？<br />   <br />    系统时间确切的说应该是<br />    System.currentTimeMillis();<br />    new Date()是当前日期,它getTime();和System.currentTimeMillis();<br />    一样<br /><br /><br />4. 如何计算两个日期的天数差值？<br />   <br />    long beginTime = beginDate.getTime();<br />    long endTime2 = endDate.getTime();<br />    long betweenDays = (long)((endTime - beginTime) / (1000 * 60 * 60 *24) + 0.5);<br /><br />5. 如何比较日期时间大小？<br />       <br />    第一种方法：<br />    use Calendar object to compare <br />    <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.util.Calendar class can be used to compare date. In order to do this, <br />    you guy should parse that string into int year, month, day and construct a <br />    Calendar object, and then do comparison.<br /><br />    Below is a sample<br /><br />    StringTokenizer token = new StringTokenizer(your string,"-");<br />    int year = Integer.parseInt(token.nextToken());<br />    int month = Integer.parseInt(token.nextToken());<br />    int day = Integer.parseInt(token.nextToken());<br />    Calendar date = Calendar.getInstance();<br />    date.set(year,month,day);<br />    Calendar today = Calendar.getInstacne();<br />    if(date.after(today)){<br />    //......<br />    }<br />    第二种方法<br />    Date nowDate=new Date();//当前时间<br />    long nowTime=nowDate.getTime;<br />    long lastTime=userTime.longValue();//以前的时间<br />    long time=nowTime-lastTime;//时间相减比较。<br />    if(time&gt;(long)60000)//1分钟{}<br /><br /><br />    另外可用以下参考<br />    用时间戳，Date.getTime()可以把当前时间改成时间戳，<br />    用CompareTo();<br />    用before(),after(),equals();<br /><br />6. 格式化日期的问题<br />   <br />    目的：<br />    第一次求日期<br />    <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.text.SimpleDateFormat formatter = new <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.text.SimpleDateFormat("yyyy-MM-dd"); <br />    String riqi=formatter.format(currentTime_1); <br />    第二次求时间<br />    <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.text.DateFormat format1 = new <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.text.SimpleDateFormat("hhmmss"); <br />    <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.util.Date currentTime_2 = new <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.util.Date(); <br />    String shijian=format1.format(currentTime_2); <br />    得到的结果是 <br />    2002-02-19和115324(11点53分24秒）<br /><br />    实现：<br />    <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.text.SimpleDateFormat formatter = new <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.text.SimpleDateFormat("yyyy-MM-dd-H-mm-ss"); <br />    <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.util.Date currentTime_1 = new <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.util.Date();<br />    String str_date = formatter.format(currentTime_1); <br />    StringTokenizer token = new StringTokenizer(str_date,"-"); <br />    String year = token.nextToken();<br />    String month= token.nextToken();<br />    String day = token.nextToken(); <br />    String hh = token.nextToken(); <br />    String mm = token.nextToken(); <br />    String ss = token.nextToken(); <br />    String riqi=year+"年\\"+month+"月"+day+"日"+"  "+hh+"点\\"+mm+"分"+ss+"秒\\"; <br />    String newdir=year+month+day; <br />    String wenjian = hh+mm+ss;<br /><br />7.  怎么得到一个月的天数？<br />    <br />        <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.util.Calendar date = <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.util.Calendar.getInstance();<br />        System.out.println(date.getActualMaximum(date.DAY_OF_MONTH));<img src ="http://www.blogjava.net/rain1102/aggbug/83820.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2006-11-27 16:21 <a href="http://www.blogjava.net/rain1102/articles/83820.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>从键盘输入一数字，然后中文输出（要符合中文语法）(转载)</title><link>http://www.blogjava.net/rain1102/articles/79860.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Wed, 08 Nov 2006 07:21:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/79860.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/79860.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/79860.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/79860.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/79860.html</trackback:ping><description><![CDATA[<font face="Verdana">String num = "零壹贰叁肆伍陆柒捌玖";<br />String dw = "圆拾佰仟万亿";<br />String m = "30020.23";<br />String mm[] = null;<br />mm = m.split("\\.");<br />String money = mm[0];<br /><br />String result = num.charAt(Integer.parseInt("" + mm[1].charAt(0))) + "角" +<br />num.charAt(Integer.parseInt("" + mm[1].charAt(1))) + "分";<br /><br />for (int i = 0; i &lt; money.length(); i++) {<br />String str = "";<br />int n = Integer.parseInt(money.substring(money.length() - i - 1,<br />money.length() - i));<br />str = str + num.charAt(n);<br />if (i == 0) {<br />str = str + dw.charAt(i);<br />}<br />else if ( (i + 4) % 8 == 0) {<br />str = str + dw.charAt(4);<br />}<br />else if (i % 8 == 0) {<br />str = str + dw.charAt(5);<br />}<br />else {<br />str = str + dw.charAt(i % 4);<br />}<br />result = str + result;<br />}<br />result = result.replaceAll("零([^圆]{1})", "零");<br />result = result.replaceAll("零+", "零");<br />result = result.replaceAll("零圆", "圆");<br />System.out.println(result);</font><img src ="http://www.blogjava.net/rain1102/aggbug/79860.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2006-11-08 15:21 <a href="http://www.blogjava.net/rain1102/articles/79860.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JDK&amp;TOMCAT环境变量设置</title><link>http://www.blogjava.net/rain1102/articles/76759.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Mon, 23 Oct 2006 07:07:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/76759.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/76759.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/76759.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/76759.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/76759.html</trackback:ping><description><![CDATA[<p>一、软件下载: <br />　　1、java</p>
		<p>　　这里使用的是jdk1.4.2。</p>
		<p>　　下载地址:http://dlc.sun.com/jdk/j2sdk-1_4_2_07-windows-i586-p.exe;</p>
		<p>　　2、tomcat</p>
		<p>　　这里的tomcat的版本是5.0的，安装版或是解压版都是可以的。</p>
		<p>　　下载地址:http://apache.linuxforum.net/dis ... a-tomcat-5.0.28.exe</p>
		<p>　　3、数据库</p>
		<p>　　推荐使用mysql，but暂时找不到下载地址，由于此次偶们班有课程设计要用sqlserver的，所以下面实践会使用sqlserver(找张安装盘安装</p>
		<p>)</p>
		<p>　　注:连接sqlserver需要三个jar文件(文件名ms开头)，可从这里下载:</p>
		<p>　　<a href="http://www.softhouse.com.cn/html">http://www.softhouse.com.cn/html</a> ... 11250300001646.html</p>
		<p>　　上面包括完整的配置方法</p>
		<p>　　二、软件安装:</p>
		<p>　　1.双击安装jdk。装完后在我的电脑-&gt;属性-&gt;高级-&gt;环境变量-&gt;系统变量中添加以下环境变量:</p>
		<p>　　(假设你的JDK安装在c:/jdk)</p>
		<p>　　JDK_HOME=C:\jdk</p>
		<p>　　classpath=.;%JDK_HOME%\lib\dt.jar;%JDK_HOME%\lib\tools.jar</p>
		<p>　　在PATH(原来就已存在)中添加:%JDK_HOME%\bin</p>
		<p>　　这样jdk环境配置成功。</p>
		<p>　　2.双击安装你的Tomcat。(建议安装在D:/tomcat)</p>
		<p>　　注:tomcat5.0.x版本不需配置环境变量就可以使用，但如果需要编译Servlet则必须将tomcat的两个jar文件也放到环境变量中，具体方法</p>
		<p>如下:</p>
		<p>　　在我的电脑-&gt;属性-&gt;高级-&gt;环境变量-&gt;系统变量中添加:</p>
		<p>　　TOMCAT_HOME=D:\tomcat 5.0<br />    CATALINA_HOME=D:\Tomcat 5.0</p>
		<p>　　修改classpath变成:.;%JDK_HOME%\lib\dt.jar;%JDK_HOME%\lib\tools.jar;%TOMCAT_HOME%\common\lib\servlet-api.jar;%TOMCAT_HOME%</p>
		<p>\common\lib\jsp-api.jar;</p>
		<p>　　这样已经完整安装完Tomcat了。</p>
		<p>　　建议:在PATH中再添加:%JDK_HOME%\jre\bin;%JDK_HOME%\bin;%TOMCAT_HOME%\bin;</p>
		<p>　　这样做的目的是在虚拟dos中可以使用tomcat的工具</p>
		<p>　　最后顺便把第一步下载回来的三个jar文件放到tomcat目录下的common/lib目录中</p>
		<p>　　3.测试:</p>
		<p>　　打开开始菜单中的tomcat(小猫图案)的monitor工具，点击start </p>
		<p>server，显示绿色三角形即为启动，打开浏览器在地址栏输入:http://localhost:8080/可以看到小猫图案说明已经配置成功。</p>
		<p>　　4.安装数据库(sqlserver)</p>
		<p>　　windows xp下必须安装个人版或开发版(个人推荐个人版)。</p>
		<p>　　一直next就可以(微软的东西就是方便)，这里注意到域帐户那里选择本机帐户，到验证那里选择混合验证(这点很重要，若选择系统认证以</p>
		<p>后在程序中就连接不上数据库)，为你的sa用户输入一个密码(如果练习用就不用考虑安全性啦，选择“空密码”就可以)</p>
		<p>　　三、正式编程:</p>
		<p>　　1.建立数据库</p>
		<p>　　打开开始菜单找到sqlserver的快捷方式组里面的企业管理器，点开左边的树一般有个localhost连接，如果有个绿色三角形符号证明数据</p>
		<p>库连接成功。点击邮件新建数据库，在你新建的数据库中再新建个数据表(例如叫test)，数据表建立若干字段。</p>
		<p>　　补充:提供另一种建表方法是使用sql脚本建表。首先创建如下文件:</p><img src ="http://www.blogjava.net/rain1102/aggbug/76759.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2006-10-23 15:07 <a href="http://www.blogjava.net/rain1102/articles/76759.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>把汉字自动转换为拼音的程序</title><link>http://www.blogjava.net/rain1102/articles/76202.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Thu, 19 Oct 2006 08:07:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/76202.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/76202.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/76202.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/76202.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/76202.html</trackback:ping><description><![CDATA[public class CnToSpell {<br />private static LinkedHashMap spellMap = null;
<p><font size="2">static {<br />if (spellMap == null) {<br />spellMap = new LinkedHashMap(400);<br />}<br />initialize();<br />//System.out.println("Chinese transfer Spell Done.");<br />}</font></p><p><font size="2">private CnToSpell() {<br />}</font></p><p><font size="2">private static void spellPut(String spell, int ascii) {<br />spellMap.put(spell, new Integer(ascii));<br />}</font></p><p><font size="2">private static void initialize() {<br />spellPut("A", -20319);<br />spellPut("Ai", -20317);<br />spellPut("An", -20304);<br />spellPut("Ang", -20295);<br />spellPut("Ao", -20292);<br />spellPut("Ba", -20283);<br />spellPut("Bai", -20265);<br />spellPut("Ban", -20257);<br />spellPut("Bang", -20242);<br />spellPut("Bao", -20230);<br />spellPut("Bei", -20051);<br />spellPut("Ben", -20036);<br />spellPut("Beng", -20032);<br />spellPut("Bi", -20026);<br />spellPut("Bian", -20002);<br />spellPut("Biao", -19990);<br />spellPut("Bie", -19986);<br />spellPut("Bin", -19982);<br />spellPut("Bing", -19976);<br />spellPut("Bo", -19805);<br />spellPut("Bu", -19784);<br />spellPut("Ca", -19775);<br />spellPut("Cai", -19774);<br />spellPut("Can", -19763);<br />spellPut("Cang", -19756);<br />spellPut("Cao", -19751);<br />spellPut("Ce", -19746);<br />spellPut("Ceng", -19741);<br />spellPut("Cha", -19739);<br />spellPut("Chai", -19728);<br />spellPut("Chan", -19725);<br />spellPut("Chang", -19715);<br />spellPut("Chao", -19540);<br />spellPut("Che", -19531);<br />spellPut("Chen", -19525);<br />spellPut("Cheng", -19515);<br />spellPut("Chi", -19500);<br />spellPut("Chong", -19484);<br />spellPut("Chou", -19479);<br />spellPut("Chu", -19467);<br />spellPut("Chuai", -19289);<br />spellPut("Chuan", -19288);<br />spellPut("Chuang", -19281);<br />spellPut("Chui", -19275);<br />spellPut("Chun", -19270);<br />spellPut("Chuo", -19263);<br />spellPut("Ci", -19261);<br />spellPut("Cong", -19249);<br />spellPut("Cou", -19243);<br />spellPut("Cu", -19242);<br />spellPut("Cuan", -19238);<br />spellPut("Cui", -19235);<br />spellPut("Cun", -19227);<br />spellPut("Cuo", -19224);<br />spellPut("Da", -19218);<br />spellPut("Dai", -19212);<br />spellPut("Dan", -19038);<br />spellPut("Dang", -19023);<br />spellPut("Dao", -19018);<br />spellPut("De", -19006);<br />spellPut("Deng", -19003);<br />spellPut("Di", -18996);<br />spellPut("Dian", -18977);<br />spellPut("Diao", -18961);<br />spellPut("Die", -18952);<br />spellPut("Ding", -18783);<br />spellPut("Diu", -18774);<br />spellPut("Dong", -18773);<br />spellPut("Dou", -18763);<br />spellPut("Du", -18756);<br />spellPut("Duan", -18741);<br />spellPut("Dui", -18735);<br />spellPut("Dun", -18731);<br />spellPut("Duo", -18722);<br />spellPut("E", -18710);<br />spellPut("En", -18697);<br />spellPut("Er", -18696);<br />spellPut("Fa", -18526);<br />spellPut("Fan", -18518);<br />spellPut("Fang", -18501);<br />spellPut("Fei", -18490);<br />spellPut("Fen", -18478);<br />spellPut("Feng", -18463);<br />spellPut("Fo", -18448);<br />spellPut("Fou", -18447);<br />spellPut("Fu", -18446);<br />spellPut("Ga", -18239);<br />spellPut("Gai", -18237);<br />spellPut("Gan", -18231);<br />spellPut("Gang", -18220);<br />spellPut("Gao", -18211);<br />spellPut("Ge", -18201);<br />spellPut("Gei", -18184);<br />spellPut("Gen", -18183);<br />spellPut("Geng", -18181);<br />spellPut("Gong", -18012);<br />spellPut("Gou", -17997);<br />spellPut("Gu", -17988);<br />spellPut("Gua", -17970);<br />spellPut("Guai", -17964);<br />spellPut("Guan", -17961);<br />spellPut("Guang", -17950);<br />spellPut("Gui", -17947);<br />spellPut("Gun", -17931);<br />spellPut("Guo", -17928);<br />spellPut("Ha", -17922);<br />spellPut("Hai", -17759);<br />spellPut("Han", -17752);<br />spellPut("Hang", -17733);<br />spellPut("Hao", -17730);<br />spellPut("He", -17721);<br />spellPut("Hei", -17703);<br />spellPut("Hen", -17701);<br />spellPut("Heng", -17697);<br />spellPut("Hong", -17692);<br />spellPut("Hou", -17683);<br />spellPut("Hu", -17676);<br />spellPut("Hua", -17496);<br />spellPut("Huai", -17487);<br />spellPut("Huan", -17482);<br />spellPut("Huang", -17468);<br />spellPut("Hui", -17454);<br />spellPut("Hun", -17433);<br />spellPut("Huo", -17427);<br />spellPut("Ji", -17417);<br />spellPut("Jia", -17202);<br />spellPut("Jian", -17185);<br />spellPut("Jiang", -16983);<br />spellPut("Jiao", -16970);<br />spellPut("Jie", -16942);<br />spellPut("Jin", -16915);<br />spellPut("Jing", -16733);<br />spellPut("Jiong", -16708);<br />spellPut("Jiu", -16706);<br />spellPut("Ju", -16689);<br />spellPut("Juan", -16664);<br />spellPut("Jue", -16657);<br />spellPut("Jun", -16647);<br />spellPut("Ka", -16474);<br />spellPut("Kai", -16470);<br />spellPut("Kan", -16465);<br />spellPut("Kang", -16459);<br />spellPut("Kao", -16452);<br />spellPut("Ke", -16448);<br />spellPut("Ken", -16433);<br />spellPut("Keng", -16429);<br />spellPut("Kong", -16427);<br />spellPut("Kou", -16423);<br />spellPut("Ku", -16419);<br />spellPut("Kua", -16412);<br />spellPut("Kuai", -16407);<br />spellPut("Kuan", -16403);<br />spellPut("Kuang", -16401);<br />spellPut("Kui", -16393);<br />spellPut("Kun", -16220);<br />spellPut("Kuo", -16216);<br />spellPut("La", -16212);<br />spellPut("Lai", -16205);<br />spellPut("Lan", -16202);<br />spellPut("Lang", -16187);<br />spellPut("Lao", -16180);<br />spellPut("Le", -16171);<br />spellPut("Lei", -16169);<br />spellPut("Leng", -16158);<br />spellPut("Li", -16155);<br />spellPut("Lia", -15959);<br />spellPut("Lian", -15958);<br />spellPut("Liang", -15944);<br />spellPut("Liao", -15933);<br />spellPut("Lie", -15920);<br />spellPut("Lin", -15915);<br />spellPut("Ling", -15903);<br />spellPut("Liu", -15889);<br />spellPut("Long", -15878);<br />spellPut("Lou", -15707);<br />spellPut("Lu", -15701);<br />spellPut("Lv", -15681);<br />spellPut("Luan", -15667);<br />spellPut("Lue", -15661);<br />spellPut("Lun", -15659);<br />spellPut("Luo", -15652);<br />spellPut("Ma", -15640);<br />spellPut("Mai", -15631);<br />spellPut("Man", -15625);<br />spellPut("Mang", -15454);<br />spellPut("Mao", -15448);<br />spellPut("Me", -15436);<br />spellPut("Mei", -15435);<br />spellPut("Men", -15419);<br />spellPut("Meng", -15416);<br />spellPut("Mi", -15408);<br />spellPut("Mian", -15394);<br />spellPut("Miao", -15385);<br />spellPut("Mie", -15377);<br />spellPut("Min", -15375);<br />spellPut("Ming", -15369);<br />spellPut("Miu", -15363);<br />spellPut("Mo", -15362);<br />spellPut("Mou", -15183);<br />spellPut("Mu", -15180);<br />spellPut("Na", -15165);<br />spellPut("Nai", -15158);<br />spellPut("Nan", -15153);<br />spellPut("Nang", -15150);<br />spellPut("Nao", -15149);<br />spellPut("Ne", -15144);<br />spellPut("Nei", -15143);<br />spellPut("Nen", -15141);<br />spellPut("Neng", -15140);<br />spellPut("Ni", -15139);<br />spellPut("Nian", -15128);<br />spellPut("Niang", -15121);<br />spellPut("Niao", -15119);<br />spellPut("Nie", -15117);<br />spellPut("Nin", -15110);<br />spellPut("Ning", -15109);<br />spellPut("Niu", -14941);<br />spellPut("Nong", -14937);<br />spellPut("Nu", -14933);<br />spellPut("Nv", -14930);<br />spellPut("Nuan", -14929);<br />spellPut("Nue", -14928);<br />spellPut("Nuo", -14926);<br />spellPut("N", -14922);<br />spellPut("Ou", -14921);<br />spellPut("Pa", -14914);<br />spellPut("Pai", -14908);<br />spellPut("Pan", -14902);<br />spellPut("Pang", -14894);<br />spellPut("Pao", -14889);<br />spellPut("Pei", -14882);<br />spellPut("Pen", -14873);<br />spellPut("Peng", -14871);<br />spellPut("Pi", -14857);<br />spellPut("Pian", -14678);<br />spellPut("Piao", -14674);<br />spellPut("Pie", -14670);<br />spellPut("Pin", -14668);<br />spellPut("Ping", -14663);<br />spellPut("Po", -14654);<br />spellPut("Pu", -14645);<br />spellPut("Qi", -14630);<br />spellPut("Qia", -14594);<br />spellPut("Qian", -14429);<br />spellPut("Qiang", -14407);<br />spellPut("Qiao", -14399);<br />spellPut("Qie", -14384);<br />spellPut("Qin", -14379);<br />spellPut("Qing", -14368);<br />spellPut("Qiong", -14355);<br />spellPut("Qiu", -14353);<br />spellPut("Qu", -14345);<br />spellPut("Quan", -14170);<br />spellPut("Que", -14159);<br />spellPut("Qun", -14151);<br />spellPut("Ran", -14149);<br />spellPut("Rang", -14145);<br />spellPut("Rao", -14140);<br />spellPut("Re", -14137);<br />spellPut("Ren", -14135);<br />spellPut("Reng", -14125);<br />spellPut("Ri", -14123);<br />spellPut("Rong", -14122);<br />spellPut("Rou", -14112);<br />spellPut("Ru", -14109);<br />spellPut("Ruan", -14099);<br />spellPut("Rui", -14097);<br />spellPut("Run", -14094);<br />spellPut("Ruo", -14092);<br />spellPut("Sa", -14090);<br />spellPut("Sai", -14087);<br />spellPut("San", -14083);<br />spellPut("Sang", -13917);<br />spellPut("Sao", -13914);<br />spellPut("Se", -13910);<br />spellPut("Sen", -13907);<br />spellPut("Seng", -13906);<br />spellPut("Sha", -13905);<br />spellPut("Shai", -13896);<br />spellPut("Shan", -13894);<br />spellPut("Shang", -13878);<br />spellPut("Shao", -13870);<br />spellPut("She", -13859);<br />spellPut("Shen", -13847);<br />spellPut("Sheng", -13831);<br />spellPut("Shi", -13658);<br />spellPut("Shou", -13611);<br />spellPut("Shu", -13601);<br />spellPut("Shua", -13406);<br />spellPut("Shuai", -13404);<br />spellPut("Shuan", -13400);<br />spellPut("Shuang", -13398);<br />spellPut("Shui", -13395);<br />spellPut("Shun", -13391);<br />spellPut("Shuo", -13387);<br />spellPut("Si", -13383);<br />spellPut("Song", -13367);<br />spellPut("Sou", -13359);<br />spellPut("Su", -13356);<br />spellPut("Suan", -13343);<br />spellPut("Sui", -13340);<br />spellPut("Sun", -13329);<br />spellPut("Suo", -13326);<br />spellPut("Ta", -13318);<br />spellPut("Tai", -13147);<br />spellPut("Tan", -13138);<br />spellPut("Tang", -13120);<br />spellPut("Tao", -13107);<br />spellPut("Te", -13096);<br />spellPut("Teng", -13095);<br />spellPut("Ti", -13091);<br />spellPut("Tian", -13076);<br />spellPut("Tiao", -13068);<br />spellPut("Tie", -13063);<br />spellPut("Ting", -13060);<br />spellPut("Tong", -12888);<br />spellPut("Tou", -12875);<br />spellPut("Tu", -12871);<br />spellPut("Tuan", -12860);<br />spellPut("Tui", -12858);<br />spellPut("Tun", -12852);<br />spellPut("Tuo", -12849);<br />spellPut("Wa", -12838);<br />spellPut("Wai", -12831);<br />spellPut("Wan", -12829);<br />spellPut("Wang", -12812);<br />spellPut("Wei", -12802);<br />spellPut("Wen", -12607);<br />spellPut("Weng", -12597);<br />spellPut("Wo", -12594);<br />spellPut("Wu", -12585);<br />spellPut("Xi", -12556);<br />spellPut("Xia", -12359);<br />spellPut("Xian", -12346);<br />spellPut("Xiang", -12320);<br />spellPut("Xiao", -12300);<br />spellPut("Xie", -12120);<br />spellPut("Xin", -12099);<br />spellPut("Xing", -12089);<br />spellPut("Xiong", -12074);<br />spellPut("Xiu", -12067);<br />spellPut("Xu", -12058);<br />spellPut("Xuan", -12039);<br />spellPut("Xue", -11867);<br />spellPut("Xun", -11861);<br />spellPut("Ya", -11847);<br />spellPut("Yan", -11831);<br />spellPut("Yang", -11798);<br />spellPut("Yao", -11781);<br />spellPut("Ye", -11604);<br />spellPut("Yi", -11589);<br />spellPut("Yin", -11536);<br />spellPut("Ying", -11358);<br />spellPut("Yo", -11340);<br />spellPut("Yong", -11339);<br />spellPut("You", -11324);<br />spellPut("Yu", -11303);<br />spellPut("Yuan", -11097);<br />spellPut("Yue", -11077);<br />spellPut("Yun", -11067);<br />spellPut("Za", -11055);<br />spellPut("Zai", -11052);<br />spellPut("Zan", -11045);<br />spellPut("Zang", -11041);<br />spellPut("Zao", -11038);<br />spellPut("Ze", -11024);<br />spellPut("Zei", -11020);<br />spellPut("Zen", -11019);<br />spellPut("Zeng", -11018);<br />spellPut("Zha", -11014);<br />spellPut("Zhai", -10838);<br />spellPut("Zhan", -10832);<br />spellPut("Zhang", -10815);<br />spellPut("Zhao", -10800);<br />spellPut("Zhe", -10790);<br />spellPut("Zhen", -10780);<br />spellPut("Zheng", -10764);<br />spellPut("Zhi", -10587);<br />spellPut("Zhong", -10544);<br />spellPut("Zhou", -10533);<br />spellPut("Zhu", -10519);<br />spellPut("Zhua", -10331);<br />spellPut("Zhuai", -10329);<br />spellPut("Zhuan", -10328);<br />spellPut("Zhuang", -10322);<br />spellPut("Zhui", -10315);<br />spellPut("Zhun", -10309);<br />spellPut("Zhuo", -10307);<br />spellPut("Zi", -10296);<br />spellPut("Zong", -10281);<br />spellPut("Zou", -10274);<br />spellPut("Zu", -10270);<br />spellPut("Zuan", -10262);<br />spellPut("Zui", -10260);<br />spellPut("Zun", -10256);<br />spellPut("Zuo", -10254);<br />}</font></p><p><font size="2">/**<br />* 获得单个汉字的Ascii.<br />* @param cn char<br />* 汉字字符<br />* @return int<br />* 错误返回 0,否则返回ascii<br />*/<br />public static int getCnAscii(char cn) {<br />byte[] bytes = null;<br />try {<br />bytes = (String.valueOf(cn)).getBytes("GBK");<br /><br />//System.out.println("bytes ="+ new String(bytes, "GBK"));<br />}<br />catch (UnsupportedEncodingException ex) {<br />}<br />if (bytes == null || bytes.length &gt; 2 || bytes.length &lt;= 0) { //错误<br />return 0;<br />}<br />if (bytes.length == 1) { //英文字符<br />return bytes[0];<br />}<br />if (bytes.length == 2) { //中文字符<br />int hightByte = 256 + bytes[0];<br />int lowByte = 256 + bytes[1];</font></p><p><font size="2">int ascii = (256 * hightByte + lowByte) - 256 * 256;</font></p><p><font size="2">//System.out.println("256 * hightByte=" + 256 * hightByte);<br />//System.out.println("lowByte=" + lowByte);<br />//System.out.println("256 * hightByte + lowByte=" + (256 * hightByte + lowByte));<br />//System.out.println("256 * 256=" + 256 * 256);<br />//System.out.println("ASCII=" + ascii);<br />//System.out.println("ASCII=" + ascii);</font></p><p><font size="2">return ascii;<br />}</font></p><p><font size="2">return 0; //错误<br />}</font></p><p><font size="2">/**<br />* 根据ASCII码到SpellMap中查找对应的拼音<br />* @param ascii int<br />* 字符对应的ASCII<br />* @return String<br />* 拼音,首先判断ASCII是否&gt;0&amp;&lt;160,如果是返回对应的字符,<br />* <br />否则到SpellMap中查找,如果没有找到拼音,则返回null,如果找到则返回拼音.<br />*/<br />public static String getSpellByAscii(int ascii) {<br />if (ascii &gt; 0 &amp;&amp; ascii &lt; 160) { //单字符<br />return String.valueOf( (char) ascii);<br />}</font></p><p><font size="2">if (ascii &lt; -20319 || ascii &gt; -10247) { //不知道的字符<br />return null;<br />}</font></p><p><font size="2">Set keySet = spellMap.keySet();<br />Iterator it = keySet.iterator();</font></p><p><font size="2">String spell0 = null; ;<br />String spell = null;</font></p><p><font size="2">int asciiRang0 = -20319;<br />int asciiRang;<br />while (it.hasNext()) {</font></p><p><font size="2">spell = (String) it.next();<br />Object valObj = spellMap.get(spell);<br />if (valObj instanceof Integer) {<br />asciiRang = ( (Integer) valObj).intValue();</font></p><p><font size="2">if (ascii &gt;= asciiRang0 &amp;&amp; ascii &lt; asciiRang) { //区间找到<br />return (spell0 == null) ? spell : spell0;<br />}<br />else {<br />spell0 = spell;<br />asciiRang0 = asciiRang;<br />}<br />}<br />}</font></p><p><font size="2">return null;</font></p><p><font size="2">}</font></p><p><font size="2">/**<br />* 判断是否是字母<br />* @param ascii int<br />* @return boolean<br />*/<br />private static boolean isAlphabet(int ascii) {<br />if (ascii &gt; 0 &amp;&amp; ascii &lt; 160) {<br />return true;<br />}<br />else {<br />return false;<br />}<br />}</font></p><p><font size="2">/**<br />* 返回字符串的全拼,是汉字转化为全拼,其它字符不进行转换<br />* @param cnStr String<br />* 字符串<br />* @return String<br />* 转换成全拼后的字符串<br />*/<br />public static String getFullSpell(String cnStr) {<br />if (null == cnStr || "".equals(cnStr.trim())) {<br />return cnStr;<br />}</font></p><p><font size="2">boolean isChinese = false;</font></p><p><font size="2">char[] chars = cnStr.toCharArray();<br />StringBuffer retuBuf = new StringBuffer();<br />StringBuffer resultBuf = new StringBuffer();</font></p><p><font size="2">for (int i = 0, Len = chars.length; i &lt; Len; i++) {<br />int ascii = getCnAscii(chars[i]);<br />if (ascii == 0) { //取ascii时出错<br />retuBuf.append(chars[i]);<br />}<br />else {<br />String spell = getSpellByAscii(ascii);<br />if (spell == null) {<br />retuBuf.append(chars[i]);<br />}<br />else {<br />//System.out.println("spell:"+spell);<br />retuBuf.append(spell);</font></p><p><font size="2">} // end of if spell == null<br />if (!isAlphabet(ascii)) {<br />isChinese = true;<br />retuBuf.append("");<br />}<br />} // end of if ascii &lt;= -20400</font></p><p><font size="2">} // end of for<br />if (isChinese) {<br />//resultBuf.append(cnStr);//中文字加入<br />resultBuf.append("");<br />resultBuf.append(retuBuf.toString());<br />}else{<br />resultBuf.append(retuBuf.toString());<br />}<br />return resultBuf.toString();</font></p><p><font size="2">}</font></p><p><font size="2">public static String getFirstSpell(String cnStr) {<br />return null;<br />}</font></p><p><font size="2">public static void main(String[] args) {<br />String str = null;</font></p><p><font size="2">try {<br />str = new String("中国".getBytes(), "GBK");<br />}<br />catch (Exception ex) {<br />}<br />System.out.println("Spell=" + CnToSpell.getFullSpell(str));<br />}<br />}</font></p><img src ="http://www.blogjava.net/rain1102/aggbug/76202.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2006-10-19 16:07 <a href="http://www.blogjava.net/rain1102/articles/76202.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java 语言的 XPath API</title><link>http://www.blogjava.net/rain1102/articles/70267.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Mon, 18 Sep 2006 05:34:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/70267.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/70267.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/70267.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/70267.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/70267.html</trackback:ping><description><![CDATA[
		<blockquote>XPath 表达式比繁琐的文档对象模型（DOM）导航代码要容易编写得多。如果需要从 XML 文档中提取信息，最快捷、最简单的办法就是在 Java™ 程序中嵌入 XPath 表达式。Java 5 推出了 javax.xml.xpath 包，这是一个用于 XPath 文档查询的独立于 XML 对象模型的库。</blockquote>
		<!--START RESERVED FOR FUTURE USE INCLUDE FILES-->
		<!-- include java script once we verify teams wants to use this and it will work on dbcs and cyrillic characters -->
		<!--END RESERVED FOR FUTURE USE INCLUDE FILES-->
		<p>如果要告诉别人买一加仑牛奶，您会怎么说？“请去买一加仑牛奶回来” 还是 “从前门出去，向左转，走三个街区向右转，再走半个街区向右转进入商店。走向四号通道，沿通道走五米向左，拿一瓶一加仑装的牛奶然后到收银台付款。再沿原路回家。” 简直太可笑了。只要在 “请去买一加仑牛奶回来” 的基础上稍加指示，多数成人都能自己买回牛奶来。 </p>
		<p>查询语言和计算机搜索与此类似。直接说 “找一个 Cryptonomicon 的副本” 要比编写搜索某个数据库的详细逻辑容易得多。由于搜索操作的逻辑非常相似，可以发明一种通用语言让您使用 “找到 Neal Stephenson 的所有著作” 这样的命令，然后编写对特定数据存储执行此类查询的引擎。 </p>
		<p>
				<a name="N1006A">
						<span class="atitle">
								<font face="Arial" size="4">XPath</font>
						</span>
				</a>
		</p>
		<p>在众多查询语言之中，结构化查询语言（SQL）是一种针对查询特定类型的关系库而设计和优化的语言。其他不那么常见的查询语言还有对象查询语言（OQL）和 XQuery。但本文的主题是 XPath，一种为查询 XML 文档而设计的查询语言。比如，下面这个简单的 XPath 查询可以在文档中找到作者为 Neal Stephenson 的所有图书的标题：</p>
		<table cellspacing="0" cellpadding="5" width="100%" bgcolor="#eeeeee" border="1">
				<tbody>
						<tr>
								<td>
										<code>
												<pre class="section">//book[author="Neal Stephenson"]/title</pre>
										</code>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<p>作为对照，查询同样信息的纯 DOM 搜索代码如 <a href="http://www-128.ibm.com/developerworks/cn/xml/x-javaxpathapi.html#listing1"><font color="#996699">清单 1</font></a> 所示：</p>
		<br />
		<a name="listing1">
				<b>清单 1. 找到 Neal Stephenson 所有著作 title 元素的 DOM 代码</b>
		</a>
		<br />
		<table cellspacing="0" cellpadding="5" width="100%" bgcolor="#eeeeee" border="1">
				<tbody>
						<tr>
								<td>
										<code>
												<pre class="section">        ArrayList result = new ArrayList();
        NodeList books = doc.getElementsByTagName("book");
        for (int i = 0; i &lt; books.getLength(); i++) {
            Element book = (Element) books.item(i);
            NodeList authors = book.getElementsByTagName("author");
            boolean stephenson = false;
            for (int j = 0; j &lt; authors.getLength(); j++) {
                Element author = (Element) authors.item(j);
                NodeList children = author.getChildNodes();
                StringBuffer sb = new StringBuffer();
                for (int k = 0; k &lt; children.getLength(); k++) {
                    Node child = children.item(k);
                    // really should to do this recursively
                    if (child.getNodeType() == Node.TEXT_NODE) {
                        sb.append(child.getNodeValue());
                    }
                }
                if (sb.toString().equals("Neal Stephenson")) {
                    stephenson = true;
                    break;
                }

            }

            if (stephenson) {
                NodeList titles = book.getElementsByTagName("title");
                for (int j = 0; j &lt; titles.getLength(); j++) {
                    result.add(titles.item(j));
                }
            }

        }</pre>
										</code>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<p>不论您是否相信，<a href="http://www-128.ibm.com/developerworks/cn/xml/x-javaxpathapi.html#listing1"><font color="#996699">清单 1</font></a> 中的 DOM 显然不如简单的 XPath 表达式通用或者健壮。您愿意编写、调试和维护哪一个？我想答案很明显。 </p>
		<p>但是虽然有很强的表达能力，XPath 并不是 Java 语言，事实上 XPath 不是一种完整的编程语言。有很多东西用 XPath 表达不出来，甚至有些查询也无法表达。比方说，XPath 不能查找国际标准图书编码（ISBN）检验码不匹配的所有图书，或者找出境外帐户数据库显示欠帐的所有作者。幸运的是，可以把 XPath 结合到 Java 程序中，这样就能发挥两者的优势了：Java 做 Java 所擅长的，XPath 做 XPath 所擅长的。 </p>
		<p>直到最近，Java 程序执行 XPath 查询所需要的应用程序编程接口（API）还因形形色色的 XPath 引擎而各不相同。Xalan 有一种 API，Saxon 使用另一种，其他引擎则使用其他的 API。这意味着代码往往把您限制到一种产品上。理想情况下，最好能够试验具有不同性能特点的各种引擎，而不会带来不适当的麻烦或者重新编写代码。 </p>
		<p>于是，Java 5 推出了 <code>javax.xml.xpath</code> 包，提供一个引擎和对象模型独立的 XPath 库。这个包也可用于 Java 1.3 及以后的版本，但需要单独安装 Java API for XML Processing (JAXP) 1.3。Xalan 2.7 和 Saxon 8 以及其他产品包含了这个库的实现。 </p>
		<br />
		<table cellspacing="0" cellpadding="0" width="100%" border="0">
				<tbody>
						<tr>
								<td>
										<img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" />
										<br />
										<img height="6" alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" />
								</td>
						</tr>
				</tbody>
		</table>
		<table class="no-print" cellspacing="0" cellpadding="0" align="right">
				<tbody>
						<tr align="right">
								<td>
										<img height="4" alt="" src="http://www.ibm.com/i/c.gif" width="100%" />
										<br />
										<table cellspacing="0" cellpadding="0" border="0">
												<tbody>
														<tr>
																<td valign="center">
																		<img height="16" alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0" />
																		<br />
																</td>
																<td valign="top" align="right">
																		<a class="fbox" href="http://www-128.ibm.com/developerworks/cn/xml/x-javaxpathapi.html#main">
																				<b>
																						<font color="#996699">回页首</font>
																				</b>
																		</a>
																</td>
														</tr>
												</tbody>
										</table>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<br />
		<p>
				<a name="N1009B">
						<span class="atitle">
								<font face="Arial" size="4">一个简单的例子</font>
						</span>
				</a>
		</p>
		<p>我将举例说明如何使用它。然后再讨论一些细节问题。假设要查询一个图书列表，寻找 Neal Stephenson 的著作。具体来说，这个图书列表的形式如 <a href="http://www-128.ibm.com/developerworks/cn/xml/x-javaxpathapi.html#listing2"><font color="#996699">清单 2</font></a> 所示： </p>
		<br />
		<a name="listing2">
				<b>清单 2. 包含图书信息的 XML 文档</b>
		</a>
		<br />
		<table cellspacing="0" cellpadding="5" width="100%" bgcolor="#eeeeee" border="1">
				<tbody>
						<tr>
								<td>
										<code>
												<pre class="section">&lt;inventory&gt;
    &lt;book year="2000"&gt;
        &lt;title&gt;Snow Crash&lt;/title&gt;
        &lt;author&gt;Neal Stephenson&lt;/author&gt;
        &lt;publisher&gt;Spectra&lt;/publisher&gt;
        &lt;isbn&gt;0553380958&lt;/isbn&gt;
        &lt;price&gt;14.95&lt;/price&gt;
    &lt;/book&gt;
 
    &lt;book year="2005"&gt;
        &lt;title&gt;Burning Tower&lt;/title&gt;
        &lt;author&gt;Larry Niven&lt;/author&gt;
        &lt;author&gt;Jerry Pournelle&lt;/author&gt;
        &lt;publisher&gt;Pocket&lt;/publisher&gt;
        &lt;isbn&gt;0743416910&lt;/isbn&gt;
        &lt;price&gt;5.99&lt;/price&gt;
    &lt;book&gt;
 
    &lt;book year="1995"&gt;
        &lt;title&gt;Zodiac&lt;/title&gt;
        &lt;author&gt;Neal Stephenson&lt;author&gt;
        &lt;publisher&gt;Spectra&lt;/publisher&gt;
        &lt;isbn&gt;0553573862&lt;/isbn&gt;
        &lt;price&gt;7.50&lt;/price&gt;
    &lt;book&gt;

    &lt;!-- more books... --&gt;
 
&lt;/inventory&gt;</pre>
										</code>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<table cellspacing="0" cellpadding="0" width="65%" align="right" border="0">
				<tbody>
						<tr>
								<td width="10">
										<img height="1" alt="" src="http://www.ibm.com/i/c.gif" width="10" />
								</td>
								<td>
										<table cellspacing="0" cellpadding="5" width="100%" border="1">
												<tbody>
														<tr>
																<td bgcolor="#eeeeee">
																		<a name="N100B3">
																				<b>抽象工厂</b>
																		</a>
																		<br />
																		<p>
																				<code>XPathFactory</code> 是一个抽象工厂。抽象工厂设计模式使得这一种 API 能够支持不同的对象模型，如 DOM、JDOM 和 XOM。为了选择不同的模型，需要向 <code>XPathFactory.newInstance()</code> 方法传递标识对象模型的统一资源标识符（URI）。比如 http://xom.nu/ 可以选择 XOM。但实际上，到目前为止 DOM 是该 API 支持的惟一对象模型。 </p>
																</td>
														</tr>
												</tbody>
										</table>
								</td>
						</tr>
				</tbody>
		</table>
		<p>查找所有图书的 XPath 查询非常简单：<code>//book[author="Neal Stephenson"]</code>。为了找出这些图书的标题，只要增加一步，表达式就变成了 <code>//book[author="Neal Stephenson"]/title</code>。最后，真正需要的是 <code>title</code> 元素的文本节点孩子。这就要求再增加一步，完整的表达式就是 <code>//book[author="Neal Stephenson"]/title/text()</code>。 </p>
		<p>现在我提供一个简单的程序，它从 Java 语言中执行这个查询，然后把找到的所有图书的标题打印出来。首先，需要将文档加载到一个 DOM <code>Document</code> 对象中。为了简化起见，假设该文档在当前工作目录的 books.xml 文件中。下面的简单代码片段解析文档并建立对应的 <code>Document</code> 对象： </p>
		<br />
		<a name="listing3">
				<b>清单 3. 用 JAXP 解析文档</b>
		</a>
		<br />
		<table cellspacing="0" cellpadding="5" width="100%" bgcolor="#eeeeee" border="1">
				<tbody>
						<tr>
								<td>
										<code>
												<pre class="section">        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        factory.setNamespaceAware(true); // never forget this!
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document doc = builder.parse("books.xml");</pre>
										</code>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<p>到目前为止，这仅仅是标准的 JAXP 和 DOM，没有什么新鲜的。 </p>
		<p>接下来创建 <code>XPathFactory</code>：</p>
		<table cellspacing="0" cellpadding="5" width="60%" bgcolor="#eeeeee" border="1">
				<tbody>
						<tr>
								<td>
										<code>
												<pre class="section">XPathFactory factory = XPathFactory.newInstance();</pre>
										</code>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<p>然后使用这个工厂创建 <code>XPath</code> 对象： </p>
		<table cellspacing="0" cellpadding="5" width="60%" bgcolor="#eeeeee" border="1">
				<tbody>
						<tr>
								<td>
										<code>
												<pre class="section">XPath xpath = factory.newXPath();</pre>
										</code>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<p>
				<code>XPath</code> 对象编译 XPath 表达式： </p>
		<table cellspacing="0" cellpadding="5" width="100%" bgcolor="#eeeeee" border="1">
				<tbody>
						<tr>
								<td>
										<code>
												<pre class="section">PathExpression expr = xpath.compile("//book[author='Neal Stephenson']/title/text()");</pre>
										</code>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<table cellspacing="0" cellpadding="0" width="65%" align="right" border="0">
				<tbody>
						<tr>
								<td width="10">
										<img height="1" alt="" src="http://www.ibm.com/i/c.gif" width="10" />
								</td>
								<td>
										<table cellspacing="0" cellpadding="5" width="100%" border="1">
												<tbody>
														<tr>
																<td bgcolor="#eeeeee">
																		<a name="N10114">
																				<b>直接求值</b>
																		</a>
																		<br />
																		<p>如果 XPath 表达式只使用一次，可以跳过编译步骤直接对 <code>XPath</code> 对象调用 <code>evaluate()</code> 方法。但是，如果同一个表达式要重复使用多次，编译可能更快一些。 </p>
																</td>
														</tr>
												</tbody>
										</table>
								</td>
						</tr>
				</tbody>
		</table>
		<p>最后，计算 XPath 表达式得到结果。表达式是针对特定的上下文节点计算的，在这个例子中是整个文档。还必须指定返回类型。这里要求返回一个节点集： </p>
		<table cellspacing="0" cellpadding="5" width="60%" bgcolor="#eeeeee" border="1">
				<tbody>
						<tr>
								<td>
										<code>
												<pre class="section">Object result = expr.evaluate(doc, XPathConstants.NODESET);</pre>
										</code>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<p>可以将结果强制转化成 DOM <code>NodeList</code>，然后遍历列表得到所有的标题： </p>
		<table cellspacing="0" cellpadding="5" width="100%" bgcolor="#eeeeee" border="1">
				<tbody>
						<tr>
								<td>
										<code>
												<pre class="section">        NodeList nodes = (NodeList) result;
        for (int i = 0; i &lt; nodes.getLength(); i++) {
            System.out.println(nodes.item(i).getNodeValue()); 
        }</pre>
										</code>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<p>
				<a href="http://www-128.ibm.com/developerworks/cn/xml/x-javaxpathapi.html#listing4">
						<font color="#996699">清单 4</font>
				</a> 把上述片段组合到了一个程序中。还要注意，这些方法可能抛出一些检查异常，这些异常必须在 <code>throws</code> 子句中声明，但是我在上面把它们掩盖起来了： </p>
		<br />
		<a name="listing4">
				<b>清单 4. 用固定的 XPath 表达式查询 XML 文档的完整程序</b>
		</a>
		<br />
		<table cellspacing="0" cellpadding="5" width="100%" bgcolor="#eeeeee" border="1">
				<tbody>
						<tr>
								<td>
										<code>
												<pre class="section">import java.io.IOException;
import org.w3c.dom.*;
import org.xml.sax.SAXException;
import javax.xml.parsers.*;
import javax.xml.xpath.*;

public class XPathExample {

  public static void main(String[] args) 
   throws ParserConfigurationException, SAXException, 
          IOException, XPathExpressionException {

    DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
    domFactory.setNamespaceAware(true); // never forget this!
    DocumentBuilder builder = domFactory.newDocumentBuilder();
    Document doc = builder.parse("books.xml");

    XPathFactory factory = XPathFactory.newInstance();
    XPath xpath = factory.newXPath();
    XPathExpression expr 
     = xpath.compile("//book[author='Neal Stephenson']/title/text()");

    Object result = expr.evaluate(doc, XPathConstants.NODESET);
    NodeList nodes = (NodeList) result;
    for (int i = 0; i &lt; nodes.getLength(); i++) {
        System.out.println(nodes.item(i).getNodeValue()); 
    }

  }

}</pre>
										</code>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<p>
				<a name="N1014E">
						<span class="smalltitle">
								<strong>
										<font face="Arial">XPath 数据模型</font>
								</strong>
						</span>
				</a>
		</p>
		<p>每当混合使用诸如 XPath 和 Java 这样两种不同的语言时，必定会有某些将两者粘合在一起的明显接缝。并非一切都很合拍。XPath 和 Java 语言没有同样的类型系统。XPath 1.0 只有四种基本数据类型：</p>
		<ul>
				<li>node-set 
</li>
				<li>number 
</li>
				<li>boolean 
</li>
				<li>string </li>
		</ul>
		<p>当然，Java 语言有更多的数据类型，包括用户定义的对象类型。</p>
		<p>多数 XPath 表达式，特别是位置路径，都返回节点集。但是还有其他可能。比如，XPath 表达式 <code>count(//book)</code> 返回文档中的图书数量。XPath 表达式 <code>count(//book[@author="Neal Stephenson"]) &gt; 10</code> 返回一个布尔值：如果文档中 Neal Stephenson 的著作超过 10 本则返回 true，否则返回 false。 </p>
		<p>
				<code>evaluate()</code> 方法被声明为返回 <code>Object</code>。实际返回什么依赖于 XPath 表达式的结果以及要求的类型。一般来说，XPath 的</p>
		<ul>
				<li>number 映射为 <code>java.lang.Double</code></li>
				<li>string 映射为 <code>java.lang.String</code></li>
				<li>boolean 映射为 <code>java.lang.Boolean</code></li>
				<li>node-set 映射为 <code>org.w3c.dom.NodeList</code></li>
		</ul>
		<table cellspacing="0" cellpadding="0" width="55%" align="right" border="0">
				<tbody>
						<tr>
								<td width="10">
										<img height="1" alt="" src="http://www.ibm.com/i/c.gif" width="10" />
								</td>
								<td>
										<table cellspacing="0" cellpadding="5" width="100%" border="1">
												<tbody>
														<tr>
																<td bgcolor="#eeeeee">
																		<a name="N1019C">
																				<b>XPath 2</b>
																		</a>
																		<br />
																		<p>前面一直假设您使用的是 XPath 1.0。XPath 2 大大扩展和修改了类型系统。Java XPath API 支持 XPath 2 所需的主要修改是为返回 XPath 2 新数据类型增加常量。 </p>
																</td>
														</tr>
												</tbody>
										</table>
								</td>
						</tr>
				</tbody>
		</table>
		<p>在 Java 中计算 XPath 表达式时，第二个参数指定需要的返回类型。有五种可能，都在 <code>javax.xml.xpath.XPathConstants</code> 类中命名了常量： </p>
		<ul>
				<li>
						<code>XPathConstants.NODESET</code>
				</li>
				<li>
						<code>XPathConstants.BOOLEAN</code>
				</li>
				<li>
						<code>XPathConstants.NUMBER</code>
				</li>
				<li>
						<code>XPathConstants.STRING</code>
				</li>
				<li>
						<code>XPathConstants.NODE</code>
				</li>
		</ul>
		<p>最后一个 <code>XPathConstants.NODE</code> 实际上没有匹配的 XPath 类型。只有知道 XPath 表达式只返回一个节点或者只需要一个节点时才使用它。如果 XPath 表达式返回了多个节点并且指定了 <code>XPathConstants.NODE</code>，则 <code>evaluate()</code> 按照文档顺序返回第一个节点。如果 XPath 表达式选择了一个空集并指定了 <code>XPathConstants.NODE</code>，则 <code>evaluate()</code> 返回 null。 </p>
		<p>如果不能完成要求的转换，<code>evaluate()</code> 将抛出 <code>XPathException</code>。 </p>
		<hr />
		<p>
				<a name="N101EB">
						<span class="atitle">
								<font face="Arial" size="4">名称空间上下文</font>
						</span>
				</a>
		</p>
		<p>若 XML 文档中的元素在名称空间中，查询该文档的 XPath 表达式必须使用相同的名称空间。XPath 表达式不一定要使用相同的前缀，只需要名称空间 URI 相同即可。事实上，如果 XML 文档使用默认名称空间，那么尽管目标文档没有使用前缀，XPath 表达式也必须使用前缀。 </p>
		<p>但是，Java 程序不是 XML 文档，因此不能用一般的名称空间解析。必须提供一个对象将前缀映射到名称空间 URI。该对象是 <code>javax.xml.namespace.NamespaceContext</code> 接口的实例。比如，假设图书文档放在 http://www.example.com/books 名称空间中，如 <a href="http://www-128.ibm.com/developerworks/cn/xml/x-javaxpathapi.html#listing5"><font color="#996699">清单 5</font></a> 所示： </p>
		<br />
		<a name="listing5">
				<b>清单 5. 使用默认名称空间的 XML 文档</b>
		</a>
		<br />
		<table cellspacing="0" cellpadding="5" width="100%" bgcolor="#eeeeee" border="1">
				<tbody>
						<tr>
								<td>
										<code>
												<pre class="section">&lt;inventory xmlns="http://www.example.com/books"&gt;
    &lt;book year="2000"&gt;
        &lt;title&gt;Snow Crash&lt;/title&gt;
        &lt;author&gt;Neal Stephenson&lt;/author&gt;
        &lt;publisher&gt;Spectra&lt;/publisher&gt;
        &lt;isbn&gt;0553380958&lt;/isbn&gt;
        &lt;price&gt;14.95&lt;price&gt;
    &lt;/book&gt;

    &lt;!-- more books... --&gt;

&lt;inventory&gt;</pre>
										</code>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<p>查找 Neal Stephenson 全部著作标题的 XPath 表达式就要改为 <code>//pre:book[pre:author="Neal Stephenson"]/pre:title/text()</code>。但是，必须将前缀 <code>pre</code> 映射到 URI http://www.example.com/books。<code>NamespaceContext</code> 接口在 Java 软件开发工具箱（JDK）或 JAXP 中没有默认实现似乎有点笨，但确实如此。不过，自己实现也不难。<a href="http://www-128.ibm.com/developerworks/cn/xml/x-javaxpathapi.html#listing6"><font color="#996699">清单 6</font></a> 对一个名称空间给出了简单的实现。还需要映射 <code>xml</code> 前缀。 </p>
		<br />
		<a name="listing6">
				<b>清单 6. 绑定一个名称空间和默认名称空间的简单上下文</b>
		</a>
		<br />
		<table cellspacing="0" cellpadding="5" width="100%" bgcolor="#eeeeee" border="1">
				<tbody>
						<tr>
								<td>
										<code>
												<pre class="section">import java.util.Iterator;
import javax.xml.*;
import javax.xml.namespace.NamespaceContext;

public class PersonalNamespaceContext implements NamespaceContext {

    public String getNamespaceURI(String prefix) {
        if (prefix == null) throw new NullPointerException("Null prefix");
        else if ("pre".equals(prefix)) return "http://www.example.org/books";
        else if ("xml".equals(prefix)) return XMLConstants.XML_NS_URI;
        return XMLConstants.NULL_NS_URI;
    }

    // This method isn't necessary for XPath processing.
    public String getPrefix(String uri) {
        throw new UnsupportedOperationException();
    }

    // This method isn't necessary for XPath processing either.
    public Iterator getPrefixes(String uri) {
        throw new UnsupportedOperationException();
    }

}</pre>
										</code>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<p>使用映射存储绑定和增加 setter 方法实现名称空间上下文的重用也不难。 </p>
		<p>创建 <code>NamespaceContext</code> 对象后，在编译表达式之前将其安装到 <code>XPath</code> 对象上。以后就可以像以前一样是用这些前缀查询了。比如： </p>
		<br />
		<a name="listing7">
				<b>清单 7. 使用名称空间的 XPath 查询</b>
		</a>
		<br />
		<table cellspacing="0" cellpadding="5" width="100%" bgcolor="#eeeeee" border="1">
				<tbody>
						<tr>
								<td>
										<code>
												<pre class="section">  XPathFactory factory = XPathFactory.newInstance();
  XPath xpath = factory.newXPath();
  xpath.setNamespaceContext(new PersonalNamespaceContext());
  XPathExpression expr 
    = xpath.compile("//pre:book[pre:author='Neal Stephenson']/pre:title/text()");

  Object result = expr.evaluate(doc, XPathConstants.NODESET);
  NodeList nodes = (NodeList) result;
  for (int i = 0; i &lt; nodes.getLength(); i++) {
      System.out.println(nodes.item(i).getNodeValue()); 
  }</pre>
										</code>
								</td>
						</tr>
				</tbody>
		</table>
		<hr />
		<p>
				<a name="N1023E">
						<span class="atitle">
								<font face="Arial" size="4">函数求解器</font>
						</span>
				</a>
		</p>
		<p>有时候，在 Java 语言中定义用于 XPath 表达式的扩展函数很有用。这些函数可以执行用纯 XPath 很难或者无法执行的任务。不过必须是真正的函数，而不是随意的方法。就是说不能有副作用。（XPath 函数可以按照任意的顺序求值任意多次。） </p>
		<p>通过 Java XPath API 访问的扩展函数必须实现 <code>javax.xml.xpath.XPathFunction</code> 接口。这个接口只声明了一个方法 evaluate： </p>
		<table cellspacing="0" cellpadding="5" width="100%" bgcolor="#eeeeee" border="1">
				<tbody>
						<tr>
								<td>
										<code>
												<pre class="section">public Object evaluate(List args) throws XPathFunctionException</pre>
										</code>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<p>该方法必须返回 Java 语言能够转换到 XPath 的五种类型之一： </p>
		<ul>
				<li>
						<code>String</code>
				</li>
				<li>
						<code>Double</code>
				</li>
				<li>
						<code>Boolean</code>
				</li>
				<li>
						<code>Nodelist</code>
				</li>
				<li>
						<code>Node</code>
				</li>
		</ul>
		<p>比如，<a href="http://www-128.ibm.com/developerworks/cn/xml/x-javaxpathapi.html#listing8"><font color="#996699">清单 8</font></a> 显示了一个扩展函数，它检查 ISBN 的校验和并返回 <code>Boolean</code>。这个校验和的基本规则是前九位数的每一位乘上它的位置（即第一位数乘上 1，第二位数乘上 2，依次类推）。将这些数加起来然后取除以 11 的余数。如果余数是 10，那么最后一位数就是 X。 </p>
		<br />
		<a name="listing8">
				<b>清单 8. 检查 ISBN 的 XPath 扩展函数</b>
		</a>
		<br />
		<table cellspacing="0" cellpadding="5" width="100%" bgcolor="#eeeeee" border="1">
				<tbody>
						<tr>
								<td>
										<code>
												<pre class="section">import java.util.List;
import javax.xml.xpath.*;
import org.w3c.dom.*;

public class ISBNValidator implements XPathFunction {

  // This class could easily be implemented as a Singleton.
    
  public Object evaluate(List args) throws XPathFunctionException {

    if (args.size() != 1) {
      throw new XPathFunctionException("Wrong number of arguments to valid-isbn()");
    }

    String isbn;
    Object o = args.get(0);

    // perform conversions
    if (o instanceof String) isbn = (String) args.get(0);
    else if (o instanceof Boolean) isbn = o.toString();
    else if (o instanceof Double) isbn = o.toString();
    else if (o instanceof NodeList) {
        NodeList list = (NodeList) o;
        Node node = list.item(0);
        // getTextContent is available in Java 5 and DOM 3.
        // In Java 1.4 and DOM 2, you'd need to recursively 
        // accumulate the content.
        isbn= node.getTextContent();
    }
    else {
        throw new XPathFunctionException("Could not convert argument type");
    }

    char[] data = isbn.toCharArray();
    if (data.length != 10) return Boolean.FALSE;
    int checksum = 0;
    for (int i = 0; i &lt; 9; i++) {
        checksum += (i+1) * (data[i]-'0');
    }
    int checkdigit = checksum % 11;

    if (checkdigit + '0' == data[9] || (data[9] == 'X' &amp;&amp; checkdigit == 10)) {
        return Boolean.TRUE;
    }
    return Boolean.FALSE;

  }

}</pre>
										</code>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<p>下一步让这个扩展函数能够在 Java 程序中使用。为此，需要在编译表达式之前向 XPath 对象安装 <code>javax.xml.xpath.XPathFunctionResolver</code>。函数求解器将函数的 XPath 名称和名称空间 URI 映射到实现该函数的 Java 类。<a href="http://www-128.ibm.com/developerworks/cn/xml/x-javaxpathapi.html#listing9"><font color="#996699">清单 9</font></a> 是一个简单的函数求解器，将扩展函数 <code>valid-isbn</code> 和名称空间 http://www.example.org/books 映射到 <a href="http://www-128.ibm.com/developerworks/cn/xml/x-javaxpathapi.html#listing8"><font color="#996699">清单 8</font></a> 中的类。比如，XPath 表达式 <code>//book[not(pre:valid-isbn(isbn))]</code> 可以找到 ISBN 校验和不匹配的所有图书。 </p>
		<br />
		<a name="listing9">
				<b>清单 9. 识别 valid-isbn 扩展函数的上下文</b>
		</a>
		<br />
		<table cellspacing="0" cellpadding="5" width="100%" bgcolor="#eeeeee" border="1">
				<tbody>
						<tr>
								<td>
										<code>
												<pre class="section">iimport javax.xml.namespace.QName;
import javax.xml.xpath.*;

public class ISBNFunctionContext implements XPathFunctionResolver {

  private static final QName name 
   = new QName("http://www.example.org/books", "valid-isbn");

  public XPathFunction resolveFunction(QName name, int arity) {
      if (name.equals(ISBNFunctionContext.name) &amp;&amp; arity == 1) {
          return new ISBNValidator();
      }
      return null;
  }

}</pre>
										</code>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<p>由于扩展函数必须有名称空间，所以计算包含扩展函数的表达式时必须使用 <code>NamespaceResolver</code>，即便查询的文档没有使用任何名称空间。由于 <code>XPathFunctionResolver</code>、<code>XPathFunction</code> 和 <code>NamespaceResolver</code> 都是接口，如果方便的话可以将它们放在所有的类中。
</p>
		<hr />
		<p>
				<a name="N102B8">
						<span class="atitle">
								<font face="Arial" size="4">结束语</font>
						</span>
				</a>
		</p>
		<p>用 SQL 和 XPath 这样的声明性语言编写查询，要比使用 Java 和 C 这样的命令式语言容易得多。但是，用 Java 和 C 这样的图灵完整语言编写复杂的逻辑，又比 SQL 和 XPath 这样的声明性语言容易得多。所幸的是，通过使用 Java Database Connectivity (JDBC) 和 <code>javax.xml.xpath</code> 之类的 API 可以将两者结合起来。随着世界上越来越多的数据转向 XML，<code>javax.xml.xpath</code> 将与 <code>java.sql</code> 一样变得越来越重要。</p>
<img src ="http://www.blogjava.net/rain1102/aggbug/70267.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2006-09-18 13:34 <a href="http://www.blogjava.net/rain1102/articles/70267.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JDOM 介绍及使用指南</title><link>http://www.blogjava.net/rain1102/articles/69587.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Thu, 14 Sep 2006 03:09:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/69587.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/69587.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/69587.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/69587.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/69587.html</trackback:ping><description><![CDATA[
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">一、</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">JDOM </span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">简介</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />JDOM</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是一个开源项目，它基于树型结构，利用纯</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">JAVA</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的技术对</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">XML</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文档实现解析、生成、序列化以及多种操作。</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />JDOM </span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">直接为</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">JAVA</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">编程服务。它利用更为强有力的</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">JAVA</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">语言的诸多特性（方法重载、集合概念以及映射），把</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">SAX</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">DOM</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的功能有效地结合起来。</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />
				</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在使用设计上尽可能地隐藏原来使用</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">XML</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">过程中的复杂性。利用</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">JDOM</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">处理</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">XML</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文档将是一件轻松、简单的事。</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />JDOM </span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">2000</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">年的春天被</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">Brett McLaughlin</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">Jason Hunter</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">开发出来，以弥补</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">DOM</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">及</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">SAX</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在实际应用当中的不足之处。</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />
				</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这些不足之处主要在于</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">SAX</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">没有文档修改、随机访问以及输出的功能，而对于</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">DOM</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">来说，</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">JAVA</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">程序员在使用时来用起来总觉得不太方便。</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />DOM</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的缺点主要是来自于由于</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">Dom</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是一个接口定义语言（</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">IDL</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">,</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">它的任务是在不同语言实现中的一个最低的通用标准，并不是为</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">JAVA</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">特别设计的。</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">JDOM</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的最新版本为</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">JDOM Beta 9</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。最近</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">JDOM</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">被收录到</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">JSR-102</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">内，这标志着</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">JDOM</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">成为了</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">JAVA</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">平台组成的一部分。</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />
						<br />
						<br />
				</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">二、</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">JDOM </span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">包概览</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />JDOM</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是由以下几个包组成的</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />org.JDOM<br />org.JDOM.input<br />org.JDOM.output<br />org.JDOM.adapters<br />org.JDOM.transform<br /><br /></span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">三、</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">JDOM </span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类说明</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />
						<br />org.JDOM<br /></span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这个包里的类是你解析</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">xml</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件后所要用到的所有数据类型。</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />Attribute<br />CDATA<br />Coment<br />DocType<br />Document<br />Element<br />EntityRef<br />Namespace<br />ProscessingInstruction<br />Text<br /><br />org.JDOM.transform<br /></span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在涉及</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">xslt</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">格式转换时应使用下面的</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">2</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">个类</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />JDOMSource<br />JDOMResult<br /><br />org.JDOM.input<br /></span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">输入类，一般用于文档的创建工作</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />SAXBuilder<br />DOMBuilder<br />ResultSetBuilder<br /><br />org.JDOM.output<br /></span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">输出类，用于文档转换输出</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />XMLOutputter<br />SAXOutputter<br />DomOutputter<br />JTreeOutputter<br /><br /></span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">使用前注意事项：</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />1.JDOM</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对于</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">JAXP </span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">以及</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt"> TRax </span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的支持</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />JDOM </span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">支持</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">JAXP1.1</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：你可以在程序中使用任何的</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">parser</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">工具类</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">,</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">默认情况下是</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">JAXP</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">parser</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />
				</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">制定特别的</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">parser</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">可用如下形式</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />SAXBuilder parser <br />= new SAXBuilder("org.apache.crimson.parser.XMLReaderImpl");<br />Document doc = parser.build("http://www.cafeconleche.org/");<br />// work with the document...<br />JDOM</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">也支持</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">TRaX</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">XSLT</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">可通过</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">JDOMSource</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">以及</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">JDOMResult</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类来转换（参见以后章节）</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />2.</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">注意在</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">JDOM</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">里文档（</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">Document</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）类由</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">org.JDOM.Document </span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">来表示。这要与</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">org.w3c.dom</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中的</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">Document</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">区别开，这</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">2</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">种格式如何转换在后面会说明。</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />
				</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">以下如无特指均指</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">JDOM</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">里的</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">Document</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />
						<br />
						<br />
				</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">四、</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">JDOM</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">主要使用方法</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />1.Ducument</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />(1)Document</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的操作方法：</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />Element root = new Element("GREETING");<br />Document doc = new Document(root);<br />root.setText("Hello JDOM!");<br /></span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">或者简单的使用</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">Document doc = new Document(new Element("GREETING").setText("Hello JDOM!t"));<br /><br /></span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这点和</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">DOM</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">不同。</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">Dom</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">则需要更为复杂的代码，如下：</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />DocumentBuilderFactory factory =DocumentBuilderFactory.newInstance();<br />DocumentBuilder builder =factory.newDocumentBuilder();<br />Document doc = builder.newDocument();<br />Element root =doc.createElement("root");<br />Text text = doc.createText("This is the root");<br />root.appendChild(text);<br />doc.appendChild(root);<br /><br /><br /></span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">注意事项：</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">JDOM</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">不允许同一个节点同时被</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">2</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">个或多个文档相关联，要在第</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">2</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">个文档中使用原来老文档中的节点的话。首先需要使用</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">detach()</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">把这个节点分开来。</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />
						<br />(2)</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">从文件、流、系统</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">ID</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">URL</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">得到</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">Document</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象：</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />DOMBuilder builder = new DOMBuilder();<br />Document doc = builder.build(new File("jdom_test.xml"));<br /><br />SAXBuilder builder = new SAXBuilder();<br />Document doc = builder.build(url);<br /></span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在新版本中</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">DOMBuilder </span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">已经</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">Deprecated</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">掉</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt"> DOMBuilder.builder(url)</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，用</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">SAX</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">效率会比较快。</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />
						<br />
				</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这里举一个小例子，为了简单起见，使用</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">String</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象直接作为</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">xml</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">数据源：</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />
						<br />public jdomTest() {<br />  String textXml = null;<br />  textXml = "&lt;note&gt;";<br />  textXml = textXml +<br />    "&lt;to&gt;aaa&lt;/to&gt;&lt;from&gt;bbb&lt;/from&gt;&lt;heading&gt;ccc&lt;/heading&gt;&lt;body&gt;ddd&lt;/body&gt;";<br />  textXml = textXml + "&lt;/note&gt;";<br />  SAXBuilder builder = new SAXBuilder();<br />  Document doc = null;<br />  Reader in= new StringReader(textXml);<br />  try {<br />    doc = builder.build(in);<br />    Element root = doc.getRootElement();<br />    List ls = root.getChildren();//</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">注意此处取出的是</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">root</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">节点下面的一层的</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">Element</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">集合</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />    for (Iterator iter = ls.iterator(); iter.hasNext(); ) {<br />    Element el = (Element) iter.next();<br />    if(el.getName().equals("to")){<br />      System.out.println(el.getText());<br />    }<br />    }<br />  }<br />  catch (IOException ex) {<br />    ex.printStackTrace();<br />  }<br />  catch (JDOMException ex) {<br />    ex.printStackTrace();<br />  }<br />}<br /><br /></span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">很简单把。</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />
						<br />
						<br />(3)DOM</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">document</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">JDOM</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">Document</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">之间的相互转换使用方法，简单！</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />DOMBuilder builder = new DOMBuilder();<br />org.jdom.Document jdomDocument = builder.build(domDocument);<br />// work with the JDOM document…<br /><br />DOMOutputter converter = new DOMOutputter();<br />org.w3c.dom.Document domDocument = converter.output(jdomDocument);<br />// work with the DOM document…<br /><br />2.XML</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文档输出</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />XMLOutPutter</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类：</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />JDOM</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的输出非常灵活</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">,</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">支持很多种</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">io</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">格式以及风格的输出</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />Document doc = new Document(...);<br />XMLOutputter outp = new XMLOutputter();<br />// Raw output<br />outp.output(doc, fileOutputStream);<br />// Compressed output<br />outp.setTextTrim(true);<br />outp.output(doc, socket.getOutputStream());<br />// Pretty output<br />outp.setIndent(" ");<br />outp.setNewlines(true);<br />outp.output(doc, System.out);<br />......<br /></span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">详细请参阅最新的</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">JDOM API</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">手册</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />
						<br />
						<br />3.Element </span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类：</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />(1)</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">浏览</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">Element</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">树</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />//</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">获得根元素</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">element<br />Element root = doc.getRootElement();<br />// </span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">获得所有子元素的一个</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">list<br />List allChildren = root.getChildren();<br />// </span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">获得指定名称子元素的</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">list<br />List namedChildren = root.getChildren("name");<br />//</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">获得指定名称的第一个子元素</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />Element child = root.getChild("name");<br /></span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（这里的</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">List</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">java.util.List</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />
						<br />JDOM</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">给了我们很多很灵活的使用方法来管理子元素</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />List allChildren = root.getChildren();<br />// </span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">删除第四个子元素</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />allChildren.remove(3);<br />// </span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">删除叫</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">“jack”</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的子元素</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />allChildren.removeAll(root.getChildren("jack"));<br /><br />root.removeChildren("jack"); // </span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">便捷写法</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />// </span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">加入</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />allChildren.add(new Element("jane"));<br /><br />root.addContent(new Element("jane")); // </span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">便捷写法</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />allChildren.add(0, new Element("first"));<br /><br /><br />(2)</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">移动</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">Elements:<br /></span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">JDOM</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">里很简单</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />Element movable = new Element("movable");<br />parent1.addContent(movable); // place<br />parent1.removeContent(movable); // remove<br />parent2.addContent(movable); // add<br /><br /></span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">Dom</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">里</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />Element movable = doc1.createElement("movable");<br />parent1.appendChild(movable); // place<br />parent1.removeChild(movable); // remove<br />parent2.appendChild(movable); // </span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">出错</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">!<br /><br /></span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">补充：</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />
				</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">纠错性</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />JDOM</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">Element</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">构造函数（以及它的其他函数）会检查</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">element</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是否合法。</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />
				</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">而它的</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">add/remove</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">方法会检查树结构，检查内容如下：</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />1.</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在任何树中是否有回环节点</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />2.</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是否只有一个根节点</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />3.</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是否有一致的命名空间（</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">Namespaces</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />
						<br />
						<br />
						<br />(3)Element</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">text</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">内容读取</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />&lt;description&gt;<br />A cool demo<br />&lt;/description&gt;<br /><br />// The text is directly available<br />// Returns "\n A cool demo\n"<br />String desc = element.getText();<br /><br />// There's a convenient shortcut<br />// Returns "A cool demo"<br />String desc = element.getTextTrim();<br /><br />(4)Elment</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">内容修改</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />element.setText("A new description");<br />3.</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">可正确解释特殊字符</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />element.setText("&lt;xml&gt; content");<br />4.CDATA</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的数据写入、读出</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />element.addContent(new CDATA("&lt;xml&gt; content"));<br />String noDifference = element.getText();<br /><br /></span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">混合内容</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />element</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">可能包含很多种内容，比如说</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />
						<br />&lt;table&gt;<br />&lt;!-- Some comment --&gt;<br />Some text<br />&lt;tr&gt;Some child element&lt;/tr&gt;<br />&lt;/table&gt;<br /><br /></span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">取</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">table</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的子元素</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">tr<br />String text = table.getTextTrim();<br />Element tr = table.getChild("tr");<br /><br /></span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">也可使用另外一个比较简单的方法</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />List mixedCo = table.getContent();<br />Iterator itr = mixedCo.iterator();<br />while (itr.hasNext()) {<br />Object o = i.next();<br />if (o instanceof Comment) {<br />...<br />}<br />// </span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这里可以写成</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">Comment, Element, Text, CDATA,ProcessingInstruction, </span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">或者是</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">EntityRef</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的类型</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />}<br />// </span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">现在移除</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">Comment,</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">注意这里游标应为</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">1</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。这是由于回车键也被解析成</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">Text</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类的缘故</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">,</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">所以</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">Comment</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">项应为</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">1</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />mixedCo.remove(1);<br /><br /><br /><br />4.Attribute</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />&lt;table width="100%" border="0"&gt; &lt;/table&gt;<br />//</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">获得</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">attribute<br />String width = table.getAttributeValue("width");<br />int border = table.getAttribute("width").getIntValue();<br />//</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">设置</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">attribute<br />table.setAttribute("vspace", "0");<br />// </span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">删除一个或全部</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">attribute<br />table.removeAttribute("vspace");<br />table.getAttributes().clear();<br /><br /><br /><br />5.</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">处理指令</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">(Processing Instructions)</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">操作</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />
				</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">一个</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">Pls</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的例子</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />&lt;?br?&gt;<br />&lt;?cocoon-process type="xslt"?&gt;<br />      |     |<br />      |     |<br />    </span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">目标</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">   </span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">数据</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />
						<br />
				</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">处理目标名称</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">(Target)<br />String target = pi.getTarget();<br /></span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">获得所有数据（</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">data</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">），在目标（</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">target</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）以后的所有数据都会被返回。</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />String data = pi.getData();<br /></span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">获得指定属性的数据</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />String type = pi.getValue("type");<br /></span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">获得所有属性的名称</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />List ls = pi.getNames();<br /><br />6.</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">命名空间操作</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />&lt;xhtml:html <br />xmlns:xhtml="http://www.w3.org/1999/xhtml"&gt;<br />&lt;xhtml:title&gt;Home Page&lt;/xhtml:title&gt;<br />&lt;/xhtml:html&gt;<br /><br />Namespace xhtml = Namespace.getNamespace("xhtml", "http://www.w3.org/1999/xhtml");<br />List kids = html.getChildren("title", xhtml);<br />Element kid = html.getChild("title", xhtml);<br />kid.addContent(new Element("table", xhtml));<br /><br />7.XSLT</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">格式转换</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />
				</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">使用以下函数可对</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">XSLT</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">转换</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />
				</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">最后如果你需要使用</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">w3c</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">Document</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">则需要转换一下。</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />public static Document transform(String stylesheet</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">Document in)<br />                          throws JDOMException {<br />  try {<br />    Transformer transformer = TransformerFactory.newInstance()<br />                  .newTransformer(new StreamSource(stylesheet));<br />    JDOMResult out = new JDOMResult();<br />    transformer.transform(new JDOMSource(in), out);<br />    return out.getDeocument();<br />  }<br />  catch (TransformerException e) {<br />    throw new JDOMException("XSLT Trandformation failed", e);<br />  }<br />  }<br /><br /></span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">参考书目：</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />
						<br />1.JDOM</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">官方网站：</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt"> http://www.jdom.org<br /><br />2.&lt;&lt;Processing XML with Java&gt;&gt; Elliotte Rusty Harold 2002<br /><br />3.JDOM API Documentation<br /><br />4.&lt;&lt;JDOM Makes XML Easy&gt;&gt;Jason Hunter Co-Creator JDOM Project<br /><br />5.WSDP Tutorial</span>
		</p>
<img src ="http://www.blogjava.net/rain1102/aggbug/69587.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2006-09-14 11:09 <a href="http://www.blogjava.net/rain1102/articles/69587.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL Profiler + P6Spy 完全配置手册</title><link>http://www.blogjava.net/rain1102/articles/68283.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Thu, 07 Sep 2006 06:25:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/68283.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/68283.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/68283.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/68283.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/68283.html</trackback:ping><description><![CDATA[1、下载： 
<p>    p6spy: <a href="http://www.p6spy.com/">http://www.p6spy.com</a><br />    SQL Profile: <a href="http://www.jahia.net/jahia/page597.html">http://www.jahia.net/jahia/page597.html</a></p><p>  2、安装：</p><p>    很简单，把p6spy-1.x.jar和sqlprofiler.jar拷贝到自己的应用的WEB-INF/lib下即可。</p><p>  3、配置：</p><p>    1）修改你 原有 JDBC Driver为：com.p6spy.engine.spy.P6SpyDriver，如果你用了连接池，一回事，把driver换掉；<br />    2）修改 spy.properties 中的 realdriver 值为 原有 的JDBC Driver，比如我的是：realdriver=com.ibm.db2.jcc.DB2Driver<br />    3) 还有，注意把appender设置正确：<br />#The following are for log4j logging only<br />#log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender<br />#log4j.appender.STDOUT.layout=org.apache.log4j.PatternLayout<br />#log4j.appender.STDOUT.layout.ConversionPattern=p6spy - %m%n</p><p>log4j.appender.SQLPROFILER_CLIENT=org.apache.log4j.net.SocketAppender<br />log4j.appender.SQLPROFILER_CLIENT.RemoteHost=localhost<br />log4j.appender.SQLPROFILER_CLIENT.Port=4445<br />log4j.appender.SQLPROFILER_CLIENT.LocationInfo=true</p><p>#log4j.logger.p6spy=INFO,STDOUT<br />log4j.logger.p6spy=DEBUG, SQLPROFILER_CLIENT<br /><br />  4、一般使用：</p><p>    1）在DOS命令行切换到刚才的WEB-INF/lib目录下，运行：java -jar sqlprofiler.jar，即可启动SQL Profiler的GUI界面(如果报告OutOfMemory错误，则以命令行“java -Xmx256m -jar sqlprofiler.jar”启动)；<br />    2）正常启动服务，允许web server，即可在SQL Profiler的GUI界面看到所有的JDBC操作。</p><p>  5、高级应用SQL Profiler：</p><p>    1）可以生成SQL执行情况报表：点击“pause”按钮，即可产生profiler result；<br />    2）很cool的是，点击最左边的按钮，可以根据整个运行情况生成数据库索引的创建脚本，我们可以根据这些脚本生成自己的数据库索引，数据库tuning的工作是不是变得越来越简单or傻瓜了呢？呵呵。<br />    3）其他的包括图形分析报表，自己挖掘吧；<br />    4）如果用loadRunner、web stress tool等压力测试工具run一把，那么这个报表和索引创建建议就更加逼真和有效了。</p><img src ="http://www.blogjava.net/rain1102/aggbug/68283.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2006-09-07 14:25 <a href="http://www.blogjava.net/rain1102/articles/68283.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>正则表达式之道</title><link>http://www.blogjava.net/rain1102/articles/68058.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Wed, 06 Sep 2006 08:43:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/68058.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/68058.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/68058.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/68058.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/68058.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 什么是正则表达式																																		一个正则表达式，就是用某种模式去匹配一类字符串的一个公式。很多人因为它们看上去比较古怪而且复杂所以不敢去使用——很不幸，这篇文章也不能够改变这一点，不过，经过一点点练习之后我就开始觉得这些复杂的表达式其实写起来还是相当简单的，而且，一旦你弄懂它们，你就能把数小时辛苦而且易错的文本处理...&nbsp;&nbsp;<a href='http://www.blogjava.net/rain1102/articles/68058.html'>阅读全文</a><img src ="http://www.blogjava.net/rain1102/aggbug/68058.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2006-09-06 16:43 <a href="http://www.blogjava.net/rain1102/articles/68058.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>将小数转为百分数</title><link>http://www.blogjava.net/rain1102/articles/67630.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Mon, 04 Sep 2006 09:06:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/67630.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/67630.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/67630.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/67630.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/67630.html</trackback:ping><description><![CDATA[public static String getPercent(double f)<br />    {<br />     java.text.NumberFormat nf = java.text.NumberFormat.getPercentInstance();<br />     return nf.format(f);<br />    }<img src ="http://www.blogjava.net/rain1102/aggbug/67630.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2006-09-04 17:06 <a href="http://www.blogjava.net/rain1102/articles/67630.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java相关术语大全</title><link>http://www.blogjava.net/rain1102/articles/67624.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Mon, 04 Sep 2006 08:57:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/67624.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/67624.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/67624.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/67624.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/67624.html</trackback:ping><description><![CDATA[
		<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.4pt; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">A-<br />AJAX: (建议不译，原因：专有名词) [Asynchronous JavaScript and XML，异步JavaScript及XML]<br />annotation: 注解<br />Ant: (建议不译，原因：专有名词)<br />AOP: (建议不译，原因：专有名词) [aspect-oriented programming, 面向方面编程]<br />application: 应用<br />argument: 参数<br /><br />-B-<br />B2B: (建议不译，原因：专有名词) [Business-to-Business, 业务对业务]<br />BAM: (建议不译，原因：专有名词) [Business Activity Monitoring, 业务活动监测]<br />BMP: (建议不译，原因：专有名词) [bean-managed persistence, Bean管理的持久化]<br />BPEL: (建议不译，原因：专有名词) [Business Process Excution Language, 业务流程执行语言]<br />BPM: (建议不译，原因：专有名词) [Business Process Modeling, 业务流程建模]<br />build: 建立；编译<br /><br />-C-<br />C2B: (建议不译，原因：专有名词) [Consumer-to-Business, 客户对业务]<br />CAD: (建议不译，原因：专有名词) [Computer Aided Design, 计算机辅助设计]<br />CAM: (建议不译，原因：专有名词) [Computer Aided Modeling, 计算机辅助建模]<br />case-insensitive: 大小写不敏感<br />case-sensitive: 大小写敏感<br />container: 容器<br />cluster: 集群<br />CMP: (建议不译，原因：专有名词) [container-managed persistence, 容器管理的持久化]<br />component: 组件，部件<br />configuration: 配置<br />context: 上下文，环境<br />control: 控件<br />convention: 约定<br />CORBA: (建议不译，原因：专有名词) [Common Object Request Broker Architecture，公共对象请求代理体系]<br />COS: (建议不译，原因：专有名词) [Common Object Services，公共对象服务]<br />couple: 耦合<br />CRUD: 专指数据库操作create, read, update, delete，可以不译<br /><br />-D-<br />Daemon: (建议不译，原因：专有名词) [Internet中用于邮件收发的后台程序]<br />DAO: (建议不译，原因：专有名词) [Data Access Object, 数据访问对象]<br />data: 数据<br />DBMS: (建议不译，原因：专有名词) [Database Management System, 数据库管理系统] <br />DDL: (建议不译，原因：专有名词) [Data Definition Language, 数据定义语言]<br />Declarative Programming: 声明式编程<br />delegate: 委托<br />Dependency Injection: 依赖注入<br />deploy: 部署<br />deserialize: 反序列化(也可译为反串行化)，即取出<br />dialect: (行业)术语<br />directive: 指令<br />DIT: (建议不译，原因：专有名词) [Directory Information Tree, 目录信息树]<br />DML: (建议不译，原因：专有名词) [Data Manipulation Language, 数据操作语言]<br />DNS: (建议不译，原因：专有名词) [Internet Domain Name System, 因特网域名系统]<br />domain: 域<br />DSL: (建议不译，原因：专有名词) [Domain-Specific Languages, 特定领域语言]<br />DTOs: (建议不译，原因：专有名词) [data transfer objects, 数据传输对象]<br /><br />-E-<br />EAI: (建议不译，原因：专有名词) [Enterprise Application Integration: 企业应用集成]<br />ECC: (建议不译，原因：专有名词) [error correcting codes: 错误纠正代码]<br />EIS: (建议不译，原因：专有名词) [Enterprise Information System: 企业信息系统]<br />EJB: (建议不译，原因：专有名词) [Enterprise JavaBean, 企业JavaBean]<br />encapsulate: 封装<br />ESB: (建议不译，原因：专有名词) [Enterprise Service Bus, 企业服务总线]<br />event: 事件<br /><br />-F-<br />FAQs: (建议不译，原因：专有名词) [Frequently Asked Questions, 经常提问的问题]<br />FIFO: 先进先出 [First in, First out]<br />fire: 触发<br />firewall: 防火墙<br />framework: 框架<br />function: 函数<br /><br />-G-<br />GoF: "四人帮"，对名著Design Patterns-Elements of Reusable Object-Oriented Software的四名作者的"戏"称。 <b><a title="wiki link" href="http://wiki.matrix.org.cn/Wiki.jsp?page=Gang%20of%20Four"><span style="COLOR: black">Gang of Four</span></a></b><br />granularity: 颗粒性，颗粒度<br />GUI: (建议不译，原因：专有名词) [Graphic User Interface: 图形用户接口]<br />GUID: (建议不译，原因：专有名词) [Globally Unique Identifier: 全球唯一标识符]<br /><br />-H-<br />hard-coding: 硬碥码<br />Hibernate: (建议不译，原因：专有名词) [一种为应用程序提供持久化服务的框架]<br /><br />-I-<br />IDE: 集成开发环境  <b><a title="wiki link" href="http://wiki.matrix.org.cn/Wiki.jsp?page=Integrated%20Development%20Environment"><span style="COLOR: black">Integrated Development Environment</span></a></b><br />implement: 实现<br />internet: 因特网 (也可以不译，原因：在中文环境下已经得到充分理解及认同)<br />intranet: 企业内部网<br />IoC: (建议不译，原因：专有名词) [Inversion of Control, 控制反转]<br /><br />-J-<br />JavaBean: (建议不译，原因：专有名词)<br />JCP: (建议不译，原因：专有名词) [Java Community Process, Java社区研究]<br />JDBC: (建议不译，原因：专有名词) [Java DataBase Connectivity, Java数据库连接]<br />JDO: (建议不译，原因：专有名词) [Java Data Objects, Java数据对象]<br />JES: Java企业系统  <b><a title="wiki link" href="http://wiki.matrix.org.cn/Wiki.jsp?page=Java%20Enterprise%20System"><span style="COLOR: black">Java Enterprise System</span></a></b><br />JOnAS: (建议不译，原因：专有名词) [ Java Open Application Server, Java开放应用服务器]<br />JNDI: (建议不译，原因：专有名词) [Java Naming and Directory Interface, Java命名与目录接口]<br />JTA: (建议不译，原因：专有名词) [Java Transaction API: Java事务API]<br />JVM: (建议不译，原因：专有名词) [Java Virtual Machine: Java虚拟机]<br />JXTA: (建议不译，原因：专有名词) [一个用于P2P应用开发的网络计算平台]<br /><br />-K-<br /><br />-L-<br />Laszlo: (建议不译，原因：专有名词) [一个大量应用于internet应用程序的基于XML平台的开源项目]<br />LDAP: (建议不译，原因：专有名词) [Lightweight Directory Access Protocol, 轻量目录访问协议]<br />leverage: 均衡<br /><br />-M-<br />MEPs: (建议不译，原因：专有名词) [message exchange patterns，消息交换模式]<br />meta: 元<br />metadata: 元数据<br />method signature: 方法签名<br />middleware: 中间件<br />mock: 虚拟的<br />modal dialog: 模态对话框<br />modular: 模组。是模块module的集合，它由多个独立的模块构成。<br />modular organization: 模组结构<br />module: 模块<br />MOM: (建议不译，原因：专有名词) [message-oriented middleware，面向消息的中间件]<br />MVC: (建议不译，原因：专有名词) [Model-View-Control，模型-视图-控制]<br /><br />-N-<br />NDS: (建议不译，原因：专有名词) [Novell Directory Service，Novell目录服务]<br />NIS: (建议不译，原因：专有名词) [Network Information Service，网络信息服务]<br />node: 节点<br /><br />-O-<br />ODMG: (建议不译，原因：专有名词) [Object Data Management Group, 对象数据管理组织]<br />OGNL: (建议不译，原因：专有名词) [Object Graph Navigation Language, 对象图导航语言]<br />OODBMS: (建议不译，原因：专有名词) [Object-Oriented Database Management System,  面向对象数据库管理系统]<br />ORM: (建议不译，原因：专有名词) [object-relational (O-R) mapping,  对象关系映射]<br /><br />-P-<br />persistence: 持久化(使用SQL语句在关系数据库中存储数据)<br />POJO: (建议不译，原因：专有名词) [Plain Old Java Objects，简单初始Java对象]<br />POJI: (建议不译，原因：专有名词) [Plain Old Java Interface，简单初始Java接口]<br />procedural: 过程的<br />profiling: 配置<br />prototype: 原型<br /><br />-Q-<br />queue: 队列<br /><br />-R-<br />RAD: (建议不译，原因：专有名词)  [Rapid application development，快速应用开发]<br />RCS: (建议不译，原因：专有名词) [Revision Control System，修订控制系统]<br />RMI: (建议不译，原因：专有名词) [Remote Method Invocation: 远程方法调用]<br />retrieve: 检索<br />RIAs: 丰富的Internet应用程序  <b><a title="wiki link" href="http://wiki.matrix.org.cn/Wiki.jsp?page=Rich%20Internet%20Applications"><span style="COLOR: black">Rich Internet Applications</span></a></b><br />RPC: (建议不译，原因：专有名词) [remote procedure calls，远程过程调用]<br /><br />-S-<br />schema: 规划，设计，方案<br />serialize: 序列化(也可译为串行化)，即保存<br />session: 会话<br />SOA: (建议不译，原因：专有名词) [Service-Oriented Architecture: 面向服务体系]<br />SOAP: (建议不译，原因：专有名词) [Simple Object Access Protocol，简单对象访问协议]<br />SPI: (建议不译，原因：专有名词) [Service Provider Interface，服务提供接口]<br />Spring: (建议不译，原因：专有名词)<br />SQL: (建议不译，原因：专有名词) [Structured Query Language，结构化查询语言]<br />Struts: (建议不译，原因：专有名词) [一种基于MVC模式的Web应用程序框架]<br />surrogate keys: 替代键<br /><br />-T-<br />tag: 标签<br />TDD: (建议不译，原因：专有名词) [Test Driven Development，测试驱动的开发]<br />third-party: 第三方，泛指其他开发商，生产商等<br />transaction: 事务<br />Tomcat: (建议不译，原因：专有名词) [一个非常有名的Java Web容器]<br /><br />-U-<br />UDT: (建议不译，原因：专有名词) [user-defined column types: 用户定义字段类型]<br />use case: 用例<br />UI: 用户界面 (User Interface)<br /><br />-V-<br /><br />-W-<br />wizard: 向导<br />Web: (建议不译，原因：专有名词)<br />Web service: (可以不译，原因：专有名词) [Web服务]<br />WS-addressing: (建议不译，原因：专有名词) [web service寻址]<br />WSDL: (建议不译，原因：专有名词) [Web Service Description Language: Web服务描述语言]<br />WYSIWYG: 所见即所得  <b><a title="wiki link" href="http://wiki.matrix.org.cn/Wiki.jsp?page=What%20You%20See%20is%20What%20You%20Get"><span style="COLOR: black">What You See is What You Get</span></a></b></span>
<img src ="http://www.blogjava.net/rain1102/aggbug/67624.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2006-09-04 16:57 <a href="http://www.blogjava.net/rain1102/articles/67624.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>