﻿<?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-poower's java-文章分类-j2ee学习笔记</title><link>http://www.blogjava.net/poower/category/33387.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 23 Mar 2010 18:30:39 GMT</lastBuildDate><pubDate>Tue, 23 Mar 2010 18:30:39 GMT</pubDate><ttl>60</ttl><item><title>java  多线程同步</title><link>http://www.blogjava.net/poower/articles/316205.html</link><dc:creator>poower</dc:creator><author>poower</author><pubDate>Mon, 22 Mar 2010 12:05:00 GMT</pubDate><guid>http://www.blogjava.net/poower/articles/316205.html</guid><wfw:comment>http://www.blogjava.net/poower/comments/316205.html</wfw:comment><comments>http://www.blogjava.net/poower/articles/316205.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/poower/comments/commentRss/316205.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/poower/services/trackbacks/316205.html</trackback:ping><description><![CDATA[转至：<a href="http://blog.csdn.net/phinecos/archive/2010/03/13/5377915.aspx">http://blog.csdn.net/phinecos/archive/2010/03/13/5377915.aspx</a>
<div><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">
<p class="MsoNormal" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; "><span style="line-height: 21px; font-family: 宋体; ">多线程的同步依靠的是对象锁机制，</span><span lang="EN-US" style="line-height: 21px; font-family: Verdana, sans-serif; ">synchronized</span><span style="line-height: 21px; font-family: 宋体; ">关键字的背后就是利用了封锁来实现对共享资源的互斥访问。</span><span lang="EN-US" style="line-height: 21px; font-family: Verdana, sans-serif; "><o:p></o:p></span></p>
<p class="MsoNormal" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; text-indent: 21pt; "><span style="line-height: 21px; font-family: 宋体; ">下面以一个简单的实例来进行对比分析。实例要完成的工作非常简单，就是创建</span><span lang="EN-US" style="line-height: 21px; font-family: Verdana, sans-serif; ">10</span><span style="line-height: 21px; font-family: 宋体; ">个线程，每个线程都打印从</span><span lang="EN-US" style="line-height: 21px; font-family: Verdana, sans-serif; ">0</span><span style="line-height: 21px; font-family: 宋体; ">到</span><span lang="EN-US" style="line-height: 21px; font-family: Verdana, sans-serif; ">99</span><span style="line-height: 21px; font-family: 宋体; ">这</span><span lang="EN-US" style="line-height: 21px; font-family: Verdana, sans-serif; ">100</span><span style="line-height: 21px; font-family: 宋体; ">个数字，我们希望线程之间不会出现交叉乱序打印，而是顺序地打印。</span><span lang="EN-US" style="line-height: 21px; font-family: Verdana, sans-serif; "><o:p></o:p></span></p>
<p class="MsoNormal" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; text-indent: 21pt; "><span style="line-height: 21px; font-family: 宋体; ">先来看第一段代码，这里我们在</span><span lang="EN-US" style="line-height: 21px; font-family: Verdana, sans-serif; ">run()</span><span style="line-height: 21px; font-family: 宋体; ">方法中加入了</span><span lang="EN-US" style="line-height: 21px; font-family: Verdana, sans-serif; ">synchronized</span><span style="line-height: 21px; font-family: 宋体; ">关键字，希望能对</span><span lang="EN-US" style="line-height: 21px; font-family: Verdana, sans-serif; ">run</span><span style="line-height: 21px; font-family: 宋体; ">方法进行互斥访问，但结果并不如我们希望那样，这是因为这里</span><span lang="EN-US" style="line-height: 21px; font-family: Verdana, sans-serif; ">synchronized</span><span style="line-height: 21px; font-family: 宋体; ">锁住的是</span><span lang="EN-US" style="line-height: 21px; font-family: Verdana, sans-serif; ">this</span><span style="line-height: 21px; font-family: 宋体; ">对象，即当前运行线程对象本身。代码中创建了</span><span lang="EN-US" style="line-height: 21px; font-family: Verdana, sans-serif; ">10</span><span style="line-height: 21px; font-family: 宋体; ">个线程，而每个线程都持有</span><span lang="EN-US" style="line-height: 21px; font-family: Verdana, sans-serif; ">this</span><span style="line-height: 21px; font-family: 宋体; ">对象的对象锁，这不能实现线程的同步。</span><span lang="EN-US" style="line-height: 21px; font-family: Verdana, sans-serif; "><o:p></o:p></span></p>
<div class="cnblogs_code" onclick="cnblogs_code_show('5e6f8179-8171-4dc3-bf4f-cbb023f57461')"><img src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" class="code_img_opened" id="code_img_opened_5e6f8179-8171-4dc3-bf4f-cbb023f57461" onclick="cnblogs_code_hide('5e6f8179-8171-4dc3-bf4f-cbb023f57461',event)" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; "  alt="" /><span class="cnblogs_code_collapse">代码</span>
<div id="cnblogs_code_open_5e6f8179-8171-4dc3-bf4f-cbb023f57461">
<div><span style="color: #0000ff; ">package</span><span style="color: #000000; ">&nbsp;com.vista;<br />
<br />
</span><span style="color: #0000ff; ">class</span><span style="color: #000000; ">&nbsp;MyThread&nbsp;</span><span style="color: #0000ff; ">implements</span><span style="color: #000000; ">&nbsp;java.lang.Runnable<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">private</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;threadId;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&nbsp;MyThread(</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;id)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">this</span><span style="color: #000000; ">.threadId&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;id;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000ff; ">synchronized</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000ff; ">void</span><span style="color: #000000; ">&nbsp;run()&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;&nbsp;i&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">100</span><span style="color: #000000; ">;&nbsp;</span><span style="color: #000000; ">++</span><span style="color: #000000; ">i)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Thread&nbsp;ID:&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000ff; ">this</span><span style="color: #000000; ">.threadId&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;:&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;i);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000ff; ">class</span><span style="color: #000000; ">&nbsp;ThreadDemo<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">/**</span><span style="color: #008000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;args<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@throws</span><span style="color: #008000; ">&nbsp;InterruptedException&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000ff; ">static</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000ff; ">void</span><span style="color: #000000; ">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span style="color: #0000ff; ">throws</span><span style="color: #000000; ">&nbsp;InterruptedException<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;&nbsp;i&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">10</span><span style="color: #000000; ">;&nbsp;</span><span style="color: #000000; ">++</span><span style="color: #000000; ">i)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">new</span><span style="color: #000000; ">&nbsp;Thread(</span><span style="color: #0000ff; ">new</span><span style="color: #000000; ">&nbsp;MyThread(i)).start();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.sleep(</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
</span></div>
</div>
</div>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; "><span style="line-height: 21px; font-family: Verdana, sans-serif; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="line-height: 21px; font-family: 宋体; ">从上述代码段可以得知，要想实现线程的同步，则这些线程必须去竞争一个唯一的共享的对象锁。</span></p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; "><span style="line-height: 21px; font-family: Verdana, sans-serif; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="line-height: 21px; font-family: 宋体; ">基于这种思想，我们将第一段代码修改如下所示，在创建启动线程之前，先创建一个线程之间竞争使用的</span><span style="line-height: 21px; font-family: Verdana, sans-serif; ">Object</span><span style="line-height: 21px; font-family: 宋体; ">对象，然后将这个</span><span style="line-height: 21px; font-family: Verdana, sans-serif; ">Object</span><span style="line-height: 21px; font-family: 宋体; ">对象的引用传递给每一个线程对象的</span><span style="line-height: 21px; font-family: Verdana, sans-serif; ">lock</span><span style="line-height: 21px; font-family: 宋体; ">成员变量。这样一来，每个线程的</span><span style="line-height: 21px; font-family: Verdana, sans-serif; ">lock</span><span style="line-height: 21px; font-family: 宋体; ">成员都指向同一个</span><span style="line-height: 21px; font-family: Verdana, sans-serif; ">Object</span><span style="line-height: 21px; font-family: 宋体; ">对象。我们在</span><span style="line-height: 21px; font-family: Verdana, sans-serif; ">run</span><span style="line-height: 21px; font-family: 宋体; ">方法中，对</span><span style="line-height: 21px; font-family: Verdana, sans-serif; ">lock</span><span style="line-height: 21px; font-family: 宋体; ">对象使用</span><span style="line-height: 21px; font-family: Verdana, sans-serif; ">synchronzied</span><span style="line-height: 21px; font-family: 宋体; ">块进行局部封锁，这样就可以让线程去竞争这个唯一的共享的对象锁，从而实现同步。</span></p>
<div class="cnblogs_code" onclick="cnblogs_code_show('2a7c57ee-f4e0-49cd-abec-c34d9c863058')"><img src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" class="code_img_opened" id="code_img_opened_2a7c57ee-f4e0-49cd-abec-c34d9c863058" onclick="cnblogs_code_hide('2a7c57ee-f4e0-49cd-abec-c34d9c863058',event)" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; "  alt="" /><span class="cnblogs_code_collapse">代码</span>
<div id="cnblogs_code_open_2a7c57ee-f4e0-49cd-abec-c34d9c863058">
<div><span style="color: #0000ff; ">package</span><span style="color: #000000; ">&nbsp;com.vista;<br />
<br />
</span><span style="color: #0000ff; ">class</span><span style="color: #000000; ">&nbsp;MyThread&nbsp;</span><span style="color: #0000ff; ">implements</span><span style="color: #000000; ">&nbsp;java.lang.Runnable<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">private</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;threadId;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">private</span><span style="color: #000000; ">&nbsp;Object&nbsp;lock;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&nbsp;MyThread(</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;id,&nbsp;Object&nbsp;obj)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">this</span><span style="color: #000000; ">.threadId&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;id;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">this</span><span style="color: #000000; ">.lock&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;obj;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&nbsp;&nbsp;</span><span style="color: #0000ff; ">void</span><span style="color: #000000; ">&nbsp;run()&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">synchronized</span><span style="color: #000000; ">(lock)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;&nbsp;i&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">100</span><span style="color: #000000; ">;&nbsp;</span><span style="color: #000000; ">++</span><span style="color: #000000; ">i)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Thread&nbsp;ID:&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000ff; ">this</span><span style="color: #000000; ">.threadId&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;:&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;i);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000ff; ">class</span><span style="color: #000000; ">&nbsp;ThreadDemo<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">/**</span><span style="color: #008000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;args<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@throws</span><span style="color: #008000; ">&nbsp;InterruptedException&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000ff; ">static</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000ff; ">void</span><span style="color: #000000; ">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span style="color: #0000ff; ">throws</span><span style="color: #000000; ">&nbsp;InterruptedException<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;obj&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000ff; ">new</span><span style="color: #000000; ">&nbsp;Object();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;&nbsp;i&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">10</span><span style="color: #000000; ">;&nbsp;</span><span style="color: #000000; ">++</span><span style="color: #000000; ">i)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">new</span><span style="color: #000000; ">&nbsp;Thread(</span><span style="color: #0000ff; ">new</span><span style="color: #000000; ">&nbsp;MyThread(i,&nbsp;obj)).start();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.sleep(</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
</span></div>
</div>
</div>
<p align="left" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; text-align: left; text-indent: 21pt; "><span style="line-height: 21px; font-family: 宋体; color: black; ">从第二段代码可知，同步的关键是多个线程对象竞争同一个共享资源即可，上面的代码中是通过外部创建共享资源，然后传递到线程中来实现。我们也可以利用类成员变量被所有类的实例所共享这一特性，因此可以将</span><span style="line-height: 21px; font-family: Verdana, sans-serif; color: black; ">lock</span><span style="line-height: 21px; font-family: 宋体; color: black; ">用静态成员对象来实现，代码如下所示：</span></p>
<div class="cnblogs_code" onclick="cnblogs_code_show('d28a0b27-7df5-47b2-aa94-3dcfb18b6370')"><img src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" class="code_img_opened" id="code_img_opened_d28a0b27-7df5-47b2-aa94-3dcfb18b6370" onclick="cnblogs_code_hide('d28a0b27-7df5-47b2-aa94-3dcfb18b6370',event)" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; "  alt="" /><span class="cnblogs_code_collapse">代码</span>
<div id="cnblogs_code_open_d28a0b27-7df5-47b2-aa94-3dcfb18b6370">
<div><span style="color: #0000ff; ">package</span><span style="color: #000000; ">&nbsp;com.vista;<br />
<br />
</span><span style="color: #0000ff; ">class</span><span style="color: #000000; ">&nbsp;MyThread&nbsp;</span><span style="color: #0000ff; ">implements</span><span style="color: #000000; ">&nbsp;java.lang.Runnable<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">private</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;threadId;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">private</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000ff; ">static</span><span style="color: #000000; ">&nbsp;Object&nbsp;lock&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000ff; ">new</span><span style="color: #000000; ">&nbsp;Object();<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&nbsp;MyThread(</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;id)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">this</span><span style="color: #000000; ">.threadId&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;id;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&nbsp;&nbsp;</span><span style="color: #0000ff; ">void</span><span style="color: #000000; ">&nbsp;run()&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">synchronized</span><span style="color: #000000; ">(lock)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;&nbsp;i&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">100</span><span style="color: #000000; ">;&nbsp;</span><span style="color: #000000; ">++</span><span style="color: #000000; ">i)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Thread&nbsp;ID:&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000ff; ">this</span><span style="color: #000000; ">.threadId&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;:&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;i);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000ff; ">class</span><span style="color: #000000; ">&nbsp;ThreadDemo&nbsp;<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">/**</span><span style="color: #008000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;args<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@throws</span><span style="color: #008000; ">&nbsp;InterruptedException&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000ff; ">static</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000ff; ">void</span><span style="color: #000000; ">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span style="color: #0000ff; ">throws</span><span style="color: #000000; ">&nbsp;InterruptedException<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;&nbsp;i&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">10</span><span style="color: #000000; ">;&nbsp;</span><span style="color: #000000; ">++</span><span style="color: #000000; ">i)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">new</span><span style="color: #000000; ">&nbsp;Thread(</span><span style="color: #0000ff; ">new</span><span style="color: #000000; ">&nbsp;MyThread(i)).start();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.sleep(</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
</span></div>
</div>
</div>
<p align="left" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; text-align: left; text-indent: 21pt; "><span style="line-height: 21px; font-family: 宋体; color: black; ">再来看第一段代码，实例方法中加入</span><span style="line-height: 21px; font-family: Verdana, sans-serif; color: black; ">sychronized</span><span style="line-height: 21px; font-family: 宋体; color: black; ">关键字封锁的是</span><span style="line-height: 21px; font-family: Verdana, sans-serif; color: black; ">this</span><span style="line-height: 21px; font-family: 宋体; color: black; ">对象本身，而在静态方法中加入</span><span style="line-height: 21px; font-family: Verdana, sans-serif; color: black; ">sychronized</span><span style="line-height: 21px; font-family: 宋体; color: black; ">关键字封锁的就是类本身。静态方法是所有类实例对象所共享的，因此线程对象在访问此静态方法时是互斥访问的，从而可以实现线程的同步，代码如下所示：</span></p>
<div class="cnblogs_code" onclick="cnblogs_code_show('a0195311-8918-4bfa-93dc-bd9a64df04bb')"><img src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" class="code_img_opened" id="code_img_opened_a0195311-8918-4bfa-93dc-bd9a64df04bb" onclick="cnblogs_code_hide('a0195311-8918-4bfa-93dc-bd9a64df04bb',event)" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; "  alt="" /><span class="cnblogs_code_collapse">代码</span>
<div id="cnblogs_code_open_a0195311-8918-4bfa-93dc-bd9a64df04bb">
<div><span style="color: #0000ff; ">package</span><span style="color: #000000; ">&nbsp;com.vista;<br />
<br />
</span><span style="color: #0000ff; ">class</span><span style="color: #000000; ">&nbsp;MyThread&nbsp;</span><span style="color: #0000ff; ">implements</span><span style="color: #000000; ">&nbsp;java.lang.Runnable<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">private</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;threadId;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&nbsp;MyThread(</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;id)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">this</span><span style="color: #000000; ">.threadId&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;id;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&nbsp;&nbsp;</span><span style="color: #0000ff; ">void</span><span style="color: #000000; ">&nbsp;run()&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;taskHandler(</span><span style="color: #0000ff; ">this</span><span style="color: #000000; ">.threadId);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">private</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000ff; ">static</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000ff; ">synchronized</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000ff; ">void</span><span style="color: #000000; ">&nbsp;taskHandler(</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;threadId)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;&nbsp;i&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">100</span><span style="color: #000000; ">;&nbsp;</span><span style="color: #000000; ">++</span><span style="color: #000000; ">i)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Thread&nbsp;ID:&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;threadId&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;:&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;i);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000ff; ">class</span><span style="color: #000000; ">&nbsp;ThreadDemo<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">/**</span><span style="color: #008000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;args<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@throws</span><span style="color: #008000; ">&nbsp;InterruptedException&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000ff; ">static</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000ff; ">void</span><span style="color: #000000; ">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span style="color: #0000ff; ">throws</span><span style="color: #000000; ">&nbsp;InterruptedException<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;&nbsp;i&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">10</span><span style="color: #000000; ">;&nbsp;</span><span style="color: #000000; ">++</span><span style="color: #000000; ">i)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">new</span><span style="color: #000000; ">&nbsp;Thread(</span><span style="color: #0000ff; ">new</span><span style="color: #000000; ">&nbsp;MyThread(i)).start();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.sleep(</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</span></div>
</div>
</div>
</span></div>
<img src ="http://www.blogjava.net/poower/aggbug/316205.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/poower/" target="_blank">poower</a> 2010-03-22 20:05 <a href="http://www.blogjava.net/poower/articles/316205.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>tomcat6.0数据源配置</title><link>http://www.blogjava.net/poower/articles/239083.html</link><dc:creator>poower</dc:creator><author>poower</author><pubDate>Thu, 06 Nov 2008 10:07:00 GMT</pubDate><guid>http://www.blogjava.net/poower/articles/239083.html</guid><wfw:comment>http://www.blogjava.net/poower/comments/239083.html</wfw:comment><comments>http://www.blogjava.net/poower/articles/239083.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/poower/comments/commentRss/239083.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/poower/services/trackbacks/239083.html</trackback:ping><description><![CDATA[&nbsp; 步骤一：把该安装的东西安上，然后把驱动程序复制到%TOMCAT_HOME%\lib,（<strong>注意</strong>一定要复制到这里，而不能复制到项目文件夹的WEB-INF\lib目录下，即不能在IDE中直接导入，因为tomcat只能从%TOMCAT_HOME%\lib在读取数据源的驱动程序）
<p>&nbsp;&nbsp;&nbsp; 步骤二：在mysql中的test数据库中建表取名test,建一字段name,值为tomcat，使用root帐户,密码为123</p>
<p>&nbsp;&nbsp; 步骤二：配置%TOMCAT_HOME%\conf\context.xml（我最常用的IDE是netbeans,现在已经到6.1了，可以直接在ide中的context.xml文件中配）具体配置如下：</p>
<p>&nbsp;&nbsp;&nbsp; 在&lt;Context&gt;&lt;/Context&gt;之间添加如下内容：<br />
&nbsp;&nbsp;&nbsp; &lt;Resource name="jdbc/myDataSource" auth="Container" type="javax.sql.DataSource"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; maxActive="100" maxIdle="30" maxWait="10000"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; username="root" password="123" driverClassName="com.mysql.jdbc.Driver"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; url="jdbc:mysql://localhost:3306/test"/&gt;</p>
<p>&nbsp;&nbsp; 步骤三：（java ee 5要求做如下声明，实际上可以省，所以出了问题别找这里的麻烦）</p>
<p>&nbsp;&nbsp;&nbsp; 在web.xml文件根元素下添加内容如下:</p>
<p>&nbsp;&nbsp;&nbsp; &lt;resource-ref&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;description&gt;db connection&lt;/description&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;res-ref-name&gt;jdbc/myDataSource&lt;/res-ref-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;res-type&gt;javax.sql.DataSource&lt;/res-type&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;res-auth&gt;Container&lt;/res-auth&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/resource-ref&gt;</p>
<p>&nbsp;&nbsp;&nbsp; 步骤四：在jsp中测试成功与否</p>
<p>&nbsp;&nbsp;&nbsp; 建一个test.jsp文件，内容如下：</p>
<p><font size="3">&nbsp;&nbsp;&nbsp; &lt;</font><a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#37;&#64;&#112;&#97;&#103;&#101;"><font size="3">%@page</font></a><font size="3"> contentType="text/html" pageEncoding="UTF-8" %&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;</font><a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#37;&#64;&#112;&#97;&#103;&#101;"><font size="3">%@page</font></a><font size="3"> import="java.sql.*"%&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;</font><a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#37;&#64;&#112;&#97;&#103;&#101;"><font size="3">%@page</font></a><font size="3"> import="javax.sql.DataSource"%&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;</font><a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#37;&#64;&#112;&#97;&#103;&#101;"><font size="3">%@page</font></a><font size="3"> import</font>="javax.naming.*"%&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;html&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;body&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;%<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Connection connection = null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Context context = null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; DataSource dataSource = null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; context = new InitialContext();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dataSource = (DataSource) context.lookup("java:/comp/env/jdbc/myDataSource");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; if (dataSource != null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; connection = dataSource.getConnection();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Statement s = connection.createStatement();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; ResultSet rs = s.executeQuery("select * from test");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rs.next();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; out.println(rs.getString(1));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; %&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &lt;/body&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/html&gt;</p>
<p>&nbsp;&nbsp;&nbsp; 运行之，可以看到页面显示tomcat，就说明配置成功。</p>
<p>&nbsp;&nbsp;&nbsp; <strong>注意：</strong>上述配置的数据源只能在容器内使用，所以不能在main方法中测试，我试过在容器外配置使用，惭愧，没有成功，请知道的不吝指教~</p>
<p>&nbsp;&nbsp;&nbsp; 我的配置环境具体如下：</p>
<p>&nbsp;&nbsp;&nbsp; windowsxp xp2</p>
<p>&nbsp;&nbsp; tomcat6.0</p>
<p>&nbsp;&nbsp; mysql5.0</p>
<p>&nbsp;&nbsp; 驱动程序：mysql-connector-java-5.1.5-bin.jar</p>
<img src ="http://www.blogjava.net/poower/aggbug/239083.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/poower/" target="_blank">poower</a> 2008-11-06 18:07 <a href="http://www.blogjava.net/poower/articles/239083.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>给出OSI七层模型与TCP/IP五层模型</title><link>http://www.blogjava.net/poower/articles/239080.html</link><dc:creator>poower</dc:creator><author>poower</author><pubDate>Thu, 06 Nov 2008 09:56:00 GMT</pubDate><guid>http://www.blogjava.net/poower/articles/239080.html</guid><wfw:comment>http://www.blogjava.net/poower/comments/239080.html</wfw:comment><comments>http://www.blogjava.net/poower/articles/239080.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/poower/comments/commentRss/239080.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/poower/services/trackbacks/239080.html</trackback:ping><description><![CDATA[<strong>给出OSI七层模型与TCP/IP五层模型</strong><br />
<br />
<a name="entrymore"></a><strong>OSI七层模型</strong><br />
<br />
OSI中的层 功能 TCP/IP协议族 <br />
应用层 文件传输，电子邮件，文件服务，虚拟终端 TFTP，HTTP，SNMP，FTP，SMTP，DNS，Telnet <br />
表示层 数据格式化，代码转换，数据加密 没有协议 <br />
会话层 解除或建立与别的接点的联系 没有协议 <br />
传输层 提供端对端的接口 TCP，UDP <br />
网络层 为数据包选择路由 IP，ICMP，RIP，OSPF，BGP，IGMP <br />
数据链路层 传输有地址的帧以及错误检测功能 SLIP，CSLIP，PPP，ARP，RARP，MTU <br />
物理层 以二进制数据形式在物理媒体上传输数据 ISO2110，IEEE802，IEEE802.2 <br />
<a href="http://www.ad0.cn/netfetch/attachments/month_0707/q2007724194238.jpg" target="_blank"><img class="insertimage" title="点击在新窗口中浏览此图片" alt="点击在新窗口中浏览此图片" src="http://www.ad0.cn/netfetch/attachments/month_0707/q2007724194238.jpg" border="0" /></a><br />
<br />
<strong>TCP/IP五层模型的协议</strong> <br />
应用层 <br />
传输层 <br />
网络层 <br />
数据链路层 <br />
物理层 <br />
<a href="http://www.ad0.cn/netfetch/attachments/month_0707/u200772419438.jpg" target="_blank"><img class="insertimage" title="点击在新窗口中浏览此图片" alt="点击在新窗口中浏览此图片" src="http://www.ad0.cn/netfetch/attachments/month_0707/u200772419438.jpg" border="0" /></a><br />
<br />
物理层：中继器、集线器、还有我们通常说的双绞线也工作在物理层 <br />
数据链路层：网桥（现已很少使用）、以太网交换机（二层交换机）、网卡（其实网卡是一半工作在物理层、一半工作在数据链路层） <br />
网络层：路由器、三层交换机 <br />
传输层：四层交换机、也有工作在四层的路由器 <br />
<br />
<br />
<strong>除了层的数量之外，开放式系统互联（OSI）模型与TCP/IP协议有什么区别？</strong> <br />
　　开放式系统互联模型是一个参考标准，解释协议相互之间应该如何相互作用。TCP/IP协议是美国国防部发明的，是让互联网成为了目前这个样子的标准之一。开放式系统互联模型中没有清楚地描绘TCP/IP协议，但是在解释TCP/IP协议时很容易想到开放式系统互联模型。两者的主要区别如下： <br />
<br />
　　&#183;TCP/IP协议中的应用层处理开放式系统互联模型中的第五层、第六层和第七层的功能。 <br />
<br />
　　&#183;TCP/IP协议中的传输层并不能总是保证在传输层可靠地传输数据包，而开放式系统互联模型可以做到。TCP/IP协议还提供一项名为UDP（用户数据报协议）的选择。UDP不能保证可靠的数据包传输。<br />
<br />
<strong>TCP/UDP协议</strong> <br />
TCP (Transmission Control Protocol)和UDP(User Datagram Protocol)协议属于传输层协议。其中TCP提供IP环境下的数据可靠传输，它提供的服务包括数据流传送、可靠性、有效流控、全双工操作和多路复用。通过面向连接、端到端和可靠的数据包发送。通俗说，它是事先为所发送的数据开辟出连接好的通道，然后再进行数据发送；而UDP则不为IP提供可靠性、流控或差错恢复功能。一般来说，TCP对应的是可靠性要求高的应用，而UDP对应的则是可靠性要求低、传输经济的应用。TCP支持的应用协议主要有：Telnet、FTP、SMTP等；UDP支持的应用层协议主要有：NFS（网络文件系统）、SNMP（简单网络管理协议）、DNS（主域名称系统）、TFTP（通用文件传输协议）等. <br />
TCP/IP协议与低层的数据链路层和物理层无关，这也是TCP/IP的重要特点<br />
<br />
<br />
OSI是Open System Interconnect的缩写，意为开放式系统互联。<br />
<strong>OSI七层参考模型的各个层次的划分遵循下列原则：</strong><br />
<br />
1、同一层中的各网络节点都有相同的层次结构，具有同样的功能。<br />
<br />
2、同一节点内相邻层之间通过接口（可以是逻辑接口）进行通信。<br />
<br />
3、七层结构中的每一层使用下一层提供的服务，并且向其上层提供服务。<br />
<br />
4、不同节点的同等层按照协议实现对等层之间的通信。<br />
<br />
第一层：物理层（PhysicalLayer)，规定通信设备的机械的、电气的、功能的和过程的特性，用以建立、维护和拆除物理链路连接。具体地讲，机械特性规定了网络连接时所需接插件的规格尺寸、引脚数量和排列情况等；电气特性规定了在物理连接上传输bit流时线路上信号电平的大小、阻抗匹配、传输速率距离限制等；功能特性是指对各个信号先分配确切的信号含义，即定义了DTE和DCE之间各个线路的功能；规程特性定义了利用信号线进行bit流传输的一组操作规程，是指在物理连接的建立、维护、交换信息是，DTE和DCE双放在各电路上的动作系列。<br />
<br />
在这一层，数据的单位称为比特（bit）。<br />
<br />
属于物理层定义的典型规范代表包括：EIA/TIA RS-232、EIA/TIA RS-449、V.35、RJ-45等。<br />
<br />
第二层：数据链路层（DataLinkLayer):在物理层提供比特流服务的基础上，建立相邻结点之间的数据链路，通过差错控制提供数据帧（Frame）在信道上无差错的传输，并进行各电路上的动作系列。　　<br />
<br />
数据链路层在不可靠的物理介质上提供可靠的传输。该层的作用包括：物理地址寻址、数据的成帧、流量控制、数据的检错、重发等。<br />
<br />
在这一层，数据的单位称为帧（frame）。<br />
<br />
数据链路层协议的代表包括：SDLC、HDLC、PPP、STP、帧中继等。 <br />
<br />
第三层是网络层<br />
<br />
在计算机网络中进行通信的两个计算机之间可能会经过很多个数据链路，也可能还要经过很多通信子网。网络层的任务就是选择合适的网间路由和交换结点， 确保数据及时传送。网络层将数据链路层提供的帧组成数据包，包中封装有网络层包头，其中含有逻辑地址信息- -源站点和目的站点地址的网络地址。 <br />
<br />
如果你在谈论一个IP地址，那么你是在处理第3层的问题，这是&#8220;数据包&#8221;问题，而不是第2层的&#8220;帧&#8221;。IP是第3层问题的一部分，此外还有一些路由协议和地址解析协议（ARP）。有关路由的一切事情都在第3层处理。地址解析和路由是3层的重要目的。网络层还可以实现拥塞控制、网际互连等功能。<br />
<br />
在这一层，数据的单位称为数据包（packet）。<br />
<br />
网络层协议的代表包括：IP、IPX、RIP、OSPF等。<br />
<br />
第四层是处理信息的传输层。第4层的数据单元也称作数据包（packets）。但是，当你谈论TCP等具体的协议时又有特殊的叫法，TCP的数据单元称为段（segments）而UDP协议的数据单元称为&#8220;数据报（datagrams）&#8221;。这个层负责获取全部信息，因此，它必须跟踪数据单元碎片、乱序到达的数据包和其它在传输过程中可能发生的危险。第4层为上层提供端到端（最终用户到最终用户）的透明的、可靠的数据传输服务。所为透明的传输是指在通信过程中传输层对上层屏蔽了通信传输系统的具体细节。 <br />
<br />
传输层协议的代表包括：TCP、UDP、SPX等。<br />
<br />
第五层是会话层<br />
<br />
这一层也可以称为会晤层或对话层，在会话层及以上的高层次中，数据传送的单位不再另外命名，统称为报文。会话层不参与具体的传输，它提供包括访问验证和会话管理在内的建立和维护应用之间通信的机制。如服务器验证用户登录便是由会话层完成的。 <br />
<br />
第六层是表示层<br />
<br />
这一层主要解决拥护信息的语法表示问题。它将欲交换的数据从适合于某一用户的抽象语法，转换为适合于OSI系统内部使用的传送语法。即提供格式化的表示和转换数据服务。数据的压缩和解压缩， 加密和解密等工作都由表示层负责。<br />
<br />
第七层应用层，应用层为操作系统或网络应用程序提供访问网络服务的接口。<br />
<br />
应用层协议的代表包括：Telnet、FTP、HTTP、SNMP等。<br />
<br />
　&nbsp;&nbsp;通过 OSI 层，信息可以从一台计算机的软件应用程序传输到另一台的应用程序上。例如，计算机 A 上的应用程序要将信息发送到计算机 B 的应用程序，则计算机 A 中的应用程序需要将信息先发送到其应用层（第七层），然后此层将信息发送到表示层（第六层），表示层将数据转送到会话层（第五层），如此继续，直至物理层（第一层）。在物理层，数据被放置在物理网络媒介中并被发送至计算机 B 。计算机 B 的物理层接收来自物理媒介的数据，然后将信息向上发送至数据链路层（第二层），数据链路层再转送给网络层，依次继续直到信息到达计算机 B 的应用层。最后，计算机 B 的应用层再将信息传送给应用程序接收端，从而完成通信过程。下面图示说明了这一过程。<br />
<br />
　　OSI 的七层运用各种各样的控制信息来和其他计算机系统的对应层进行通信。这些控制信息包含特殊的请求和说明，它们在对应的 OSI 层间进行交换。每一层数据的头和尾是两个携带控制信息的基本形式。<br />
<br />
　　对于从上一层传送下来的数据，附加在前面的控制信息称为头，附加在后面的控制信息称为尾。然而，在对来自上一层数据增加协议头和协议尾，对一个 OSI 层来说并不是必需的。 <br />
<br />
　　当数据在各层间传送时，每一层都可以在数据上增加头和尾，而这些数据已经包含了上一层增加的头和尾。协议头包含了有关层与层间的通信信息。头、尾以及数据是相关联的概念，它们取决于分析信息单元的协议层。例如，传输层头包含了只有传输层可以看到的信息，传输层下面的其他层只将此头作为数据的一部分传递。对于网络层，一个信息单元由第三层的头和数据组成。对于数据链路层，经网络层向下传递的所有信息即第三层头和数据都被看作是数据。换句话说，在给定的某一 OSI 层，信息单元的数据部分包含来自于所有上层的头和尾以及数据，这称之为封装。 <br />
<br />
　 例如，如果计算机 A 要将应用程序中的某数据发送至计算机 B ，数据首先传送至应用层。 计算机 A 的应用层通过在数据上添加协议头来和计算机 B 的应用层通信。所形成的信息单元包含协议头、数据、可能还有协议尾，被发送至表示层，表示层再添加为计算机 B 的表示层所理解的控制信息的协议头。信息单元的大小随着每一层协议头和协议尾的添加而增加，这些协议头和协议尾包含了计算机 B 的对应层要使用的控制信息。在物理层，整个信息单元通过网络介质传输。<br />
<br />
　　计算机 B 中的物理层收到信息单元并将其传送至数据链路层；然后 B 中的数据链路层读取计算机 A 的数据链路层添加的协议头中的控制信息；然后去除协议头和协议尾，剩余部分被传送至网络层。每一层执行相同的动作：从对应层读取协议头和协议尾，并去除，再将剩余信息发送至上一层。应用层执行完这些动作后，数据就被传送至计算机 B 中的应用程序，这些数据和计算机 A 的应用程序所发送的完全相同 。<br />
<br />
　　一个 OSI 层与另一层之间的通信是利用第二层提供的服务完成的。相邻层提供的服务帮助一 OSI 层与另一计算机系统的对应层进行通信。一个 OSI 模型的特定层通常是与另外三个 OSI 层联系：与之直接相邻的上一层和下一层，还有目标联网计算机系统的对应层。例如，计算机 A 的数据链路层应与其网络层，物理层以及计算机 B 的数据链路层进行通信。<br />
<br />
OSI七层网络结构图与TCP/IP四层网络结构图<br />
<img src ="http://www.blogjava.net/poower/aggbug/239080.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/poower/" target="_blank">poower</a> 2008-11-06 17:56 <a href="http://www.blogjava.net/poower/articles/239080.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>mysql jdbc</title><link>http://www.blogjava.net/poower/articles/233186.html</link><dc:creator>poower</dc:creator><author>poower</author><pubDate>Wed, 08 Oct 2008 09:42:00 GMT</pubDate><guid>http://www.blogjava.net/poower/articles/233186.html</guid><wfw:comment>http://www.blogjava.net/poower/comments/233186.html</wfw:comment><comments>http://www.blogjava.net/poower/articles/233186.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/poower/comments/commentRss/233186.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/poower/services/trackbacks/233186.html</trackback:ping><description><![CDATA[<p>import java.sql.*;</p>
<p>class Mysql{<br />
&nbsp;private String url="jdbc:mysql://localhost:3306/jdbcTest";<br />
&nbsp;private String username = "root";<br />
&nbsp;private String password = "139689";</p>
<p>&nbsp;public Connection getConnection(){<br />
&nbsp;&nbsp;Connection con = null;<br />
&nbsp;&nbsp;try{<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;Class.forName("com.mysql.jdbc.Driver");<br />
&nbsp;&nbsp;&nbsp;con = DriverManager.getConnection(url,username,password);<br />
&nbsp;&nbsp;&nbsp;return con;<br />
&nbsp;&nbsp;}catch(ClassNotFoundException e){<br />
&nbsp;&nbsp;&nbsp;System.out.println("加载类驱动错误");<br />
&nbsp;&nbsp;&nbsp;System.out.println(e);<br />
&nbsp;&nbsp;}catch(Exception e){<br />
&nbsp;&nbsp;&nbsp;System.out.println(e);<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;return null;<br />
&nbsp;}</p>
<p>&nbsp;public ResultSet executeSql(String sql){<br />
&nbsp;<br />
&nbsp;&nbsp;Connection con;<br />
&nbsp;&nbsp;Statement stmt;</p>
<p>&nbsp;&nbsp;try{<br />
&nbsp;&nbsp;&nbsp;con = getConnection();<br />
&nbsp;&nbsp;&nbsp;stmt = con.createStatement();<br />
&nbsp;&nbsp;&nbsp;ResultSet rs = stmt.executeQuery(sql);<br />
&nbsp;&nbsp;&nbsp;return rs;<br />
&nbsp;&nbsp;}catch(SQLException e){<br />
&nbsp;&nbsp;&nbsp;System.out.println("获取数据失败");<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;return null;<br />
&nbsp;}<br />
}</p>
<p>public class jdbcTest{<br />
&nbsp;public static void main(String[] args){<br />
&nbsp;&nbsp;Mysql mysql = new Mysql();<br />
&nbsp;&nbsp;Connection con = null;<br />
&nbsp;&nbsp;ResultSet rs = null;<br />
&nbsp;&nbsp;rs = mysql.executeSql("select * from user");<br />
&nbsp;&nbsp;try{<br />
&nbsp;&nbsp;&nbsp;while(rs.next()){<br />
&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(rs.getString("username"));<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;}catch(Exception e){<br />
&nbsp;&nbsp;&nbsp;System.out.println(e.getMessage());<br />
&nbsp;&nbsp;}<br />
&nbsp;}<br />
}</p>
<img src ="http://www.blogjava.net/poower/aggbug/233186.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/poower/" target="_blank">poower</a> 2008-10-08 17:42 <a href="http://www.blogjava.net/poower/articles/233186.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>网站</title><link>http://www.blogjava.net/poower/articles/230325.html</link><dc:creator>poower</dc:creator><author>poower</author><pubDate>Sun, 21 Sep 2008 17:50:00 GMT</pubDate><guid>http://www.blogjava.net/poower/articles/230325.html</guid><wfw:comment>http://www.blogjava.net/poower/comments/230325.html</wfw:comment><comments>http://www.blogjava.net/poower/articles/230325.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/poower/comments/commentRss/230325.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/poower/services/trackbacks/230325.html</trackback:ping><description><![CDATA[http://www.chubeibao.com/bbs/forumdisplay.php?fid=65
<img src ="http://www.blogjava.net/poower/aggbug/230325.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/poower/" target="_blank">poower</a> 2008-09-22 01:50 <a href="http://www.blogjava.net/poower/articles/230325.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA+TOMCAT网站部署(转)</title><link>http://www.blogjava.net/poower/articles/229810.html</link><dc:creator>poower</dc:creator><author>poower</author><pubDate>Thu, 18 Sep 2008 14:18:00 GMT</pubDate><guid>http://www.blogjava.net/poower/articles/229810.html</guid><wfw:comment>http://www.blogjava.net/poower/comments/229810.html</wfw:comment><comments>http://www.blogjava.net/poower/articles/229810.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/poower/comments/commentRss/229810.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/poower/services/trackbacks/229810.html</trackback:ping><description><![CDATA[<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: center;" align="center"><span lang="EN">JAVA+TOMCAT</span><span style="font-family: 宋体;">网站部署第一天</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span lang="EN"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体;">安装</span><span lang="EN">APACHE Tomcat 5.0</span><span style="font-family: 宋体;">，默认有</span><span lang="EN">Tomcat</span><span style="font-family: 宋体;">的服务程序运行，在</span><span lang="EN">ROOT</span><span style="font-family: 宋体;">目录加入</span><span lang="EN">Jsp</span><span style="font-family: 宋体;">文件，似乎无法运行。采用命令窗口方式运行。运行</span><span lang="EN">"E:\program files\Apache Software Foundation\Tomcat 5.0\bin\startup.bat"</span><span style="font-family: 宋体;">，</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span lang="EN"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><strong><span style="color: blue; font-family: 宋体;">环境变量配置：</span><span style="color: blue;" lang="EN"><o:p></o:p></span></strong></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span lang="EN">Tomcat</span><span style="font-family: 宋体;">的根目录</span><span lang="EN">CATALINA_HOME</span><span style="font-family: 宋体;">：</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span lang="EN">E:\program files\Apache Software Foundation\Tomcat 5.0</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span lang="EN">JAVA</span><span style="font-family: 宋体;">的类路径</span><span lang="EN">[</span><span style="font-family: 宋体;">第一个点</span><span lang="EN">&#8221;.;&#8221;</span><span style="font-family: 宋体;">表示当前路径</span><span lang="EN">] CLASSPATH</span><span style="font-family: 宋体;">：</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span lang="EN">.;M:\Java\Demos;C:\j2sdk1.4.2_04;C:\j2sdk1.4.2_04\lib\tools.jar;C:\j2sdk1.4.2_04\lib\dt.jar;C:\j2sdk1.4.2_04\lib\tools.jar;C:\j2sdk1.4.2_04\lib\htmlconverter.jar;
C:\j2sdk1.4.2_04\lib\servlet.jar;M:\Java</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span lang="EN">JAVA</span><span style="font-family: 宋体;">根目录</span><span lang="EN">JAVA_HOME</span><span style="font-family: 宋体;">：</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span lang="EN">C:\j2sdk1.4.2_04</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span style="font-family: 宋体;">在</span><span lang="EN">PATH</span><span style="font-family: 宋体;">环境变量中加入</span><span lang="EN">C:\j2sdk1.4.2_04\bin;</span><span style="font-family: 宋体;">这样直接运行</span><span lang="EN">javac.exe</span><span style="font-family: 宋体;">，</span><span lang="EN">java.exe</span><span style="font-family: 宋体;">就能找到</span><span lang="EN">JAVA</span><span style="font-family: 宋体;">对应的可执行文件了。</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span style="font-family: 宋体;">对</span><span lang="EN">winXP</span><span style="font-family: 宋体;">，系统环境变量不需要重新启动系统就能起作用，但是需要重新打开应用程序，用户变量需要重新启动系统才能生效。</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span lang="EN"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><strong><span style="color: blue;" lang="EN">Edit Plus</span></strong><strong><span style="color: blue; font-family: 宋体;">中</span><span style="color: blue;" lang="EN">Java</span></strong><strong><span style="color: blue; font-family: 宋体;">环境配置：</span><span style="color: blue;" lang="EN"><o:p></o:p></span></strong></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span style="font-family: 宋体;">原来曾用过</span><span lang="EN">JCreator</span><span style="font-family: 宋体;">进行</span><span lang="EN">Java</span><span style="font-family: 宋体;">代码编写，而且是</span><span lang="EN">J2ME</span><span style="font-family: 宋体;">摩托罗拉手机程序编写的配置，复杂得多，可以参考：</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><strong><span style="font-size: 9pt; color: #333333; font-family: 宋体;">写手机程序请用</span></strong><strong><span style="font-size: 9pt; color: #333333; font-family: Tahoma;" lang="EN">JCreator pro</span></strong><span style="font-size: 9pt; color: #333333; font-family: Tahoma;" lang="EN">&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://dev.csdn.net/user/sunyuzhe114">sunyuzhe114</a> [</span><span style="font-size: 9pt; color: #333333; font-family: 宋体;">原作</span><span style="font-size: 9pt; color: #333333; font-family: Tahoma;" lang="EN">] <o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span lang="EN"><a href="http://dev.csdn.net/Develop/article/13/13625.shtm">http://dev.csdn.net/Develop/article/13/13625.shtm</a></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span style="font-family: 宋体;">这里</span><span lang="EN">Edit Plus</span><span style="font-family: 宋体;">主要是在</span><span lang="EN">Tools/Configure User Tools &#8230;</span><span style="font-family: 宋体;">里面添加命令。这里简单的配置如下：</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><strong><span style="font-size: 9pt; color: #333333; font-family: Tahoma;" lang="EN">Group Name &#8230; </span></strong><strong><span style="font-size: 9pt; color: #333333; font-family: 宋体;">：</span></strong><strong><span style="font-size: 9pt; color: #333333; font-family: Tahoma;" lang="EN">Java Tools<o:p></o:p></span></strong></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span style="font-family: 宋体;">功能：编译</span><span lang="EN">Java</span><span style="font-family: 宋体;">文件，生成</span><span lang="EN">class</span><span style="font-family: 宋体;">到</span><span lang="EN">Java</span><span style="font-family: 宋体;">文件所在目录</span><span lang="EN"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span lang="EN">Menu Text: Java Compile</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span lang="EN">Command: C:\j2sdk1.4.2_04\bin\javac.exe</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span lang="EN">Argument: $(FileName)</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span lang="EN">Initial Directory: $(FileDir)</span><strong><span style="font-size: 9pt; color: #333333; font-family: Tahoma;" lang="EN"> <o:p></o:p></span></strong></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><strong><span style="font-size: 9pt; color: #333333; font-family: Tahoma;" lang="EN"><o:p>&nbsp;</o:p></span></strong></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span style="font-family: 宋体;">功能：运行生成的</span><span lang="EN">class</span><span style="font-family: 宋体;">文件</span><strong><span style="font-size: 9pt; color: #333333; font-family: Tahoma;" lang="EN"><o:p></o:p></span></strong></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span lang="EN">Menu Text: Java Run</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span lang="EN">Command: C:\j2sdk1.4.2_04\bin\java.exe<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span lang="EN">Argument: $(FileNameNoExt)<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span lang="EN">Initial Directory: $(FileDir)</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span lang="EN"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span style="font-family: 宋体;">功能：</span><span lang="EN">[</span><span style="font-family: 宋体;">打开</span><span lang="EN">class</span><span style="font-family: 宋体;">文件</span><span lang="EN">]</span><span style="font-family: 宋体;">用</span><span lang="EN">JAD</span><span style="font-family: 宋体;">直接进行反编译，生成</span><span lang="EN">Java</span><span style="font-family: 宋体;">文件到</span><span lang="EN">class</span><span style="font-family: 宋体;">文件所在目录</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span lang="EN">Menu Text: JAD Decompile<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span lang="EN">Command: M:\Java\Tools\jad_win\jad.exe<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span lang="EN">Argument: -o -d .\ -s java $(FileNameNoExt).class<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span lang="EN">Initial Directory: $(FileDir)<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span lang="EN"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span style="font-family: 宋体;">功能：用</span><span lang="EN">Edit Plus</span><span style="font-family: 宋体;">打开反编译生成的</span><span lang="EN">java</span><span style="font-family: 宋体;">文件</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span lang="EN">Menu Text: Open Decompile File<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span lang="EN">Command: E:\program files\EditPlus 2\editplus.exe<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span lang="EN">Argument: $(FileNameNoExt).java<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span lang="EN">Initial Directory: $(FileDir)<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span lang="EN"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span style="font-family: 宋体;">加入自定义工具以后，直接用</span><span lang="EN">Ctrl+1[~N]</span><span style="font-family: 宋体;">运行自定义工具。</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span lang="EN"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 22.6pt;"><strong><span style="font-size: 9pt; color: #333333; font-family: Tahoma;" lang="EN">/* </span></strong><strong><span style="font-size: 9pt; color: #333333; font-family: 宋体;">以下所说</span></strong><strong><span style="font-size: 9pt; color: #333333; font-family: Tahoma;" lang="EN">[</span></strong><strong><span style="font-size: 9pt; color: #333333; font-family: 宋体;">根目录</span></strong><strong><span style="font-size: 9pt; color: #333333; font-family: Tahoma;" lang="EN">]</span></strong><strong><span style="font-size: 9pt; color: #333333; font-family: 宋体;">为</span></strong><strong><span style="font-size: 9pt; color: #333333; font-family: Tahoma;" lang="EN"><o:p></o:p></span></strong></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt; text-indent: 9.05pt;"><strong><span style="font-size: 9pt; color: #333333; font-family: Tahoma;" lang="EN">* E:\program files\Apache Software Foundation\Tomcat 5.0\webapps\ROOT<o:p></o:p></span></strong></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt; text-indent: 9.05pt;"><strong><span style="font-size: 9pt; color: #333333; font-family: Tahoma;" lang="EN">*/<o:p></o:p></span></strong></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><strong><span style="color: blue;" lang="EN">Java Bean </span></strong><strong><span style="color: blue; font-family: 宋体;">部署过程：</span><span style="color: blue;" lang="EN"><o:p></o:p></span></strong></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span lang="EN">1. [</span><span style="font-family: 宋体;">根目录</span><span lang="EN">]/ WEB-INF\classes\test\</span><span style="font-family: 宋体;">下面新建</span><span lang="EN">FAQ.txt</span><span style="font-family: 宋体;">，改名为</span><span lang="EN">FAQ.java</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span lang="EN">2. FAQ.java</span><span style="font-family: 宋体;">输入内容：</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.9pt; text-indent: 21pt;"><span lang="EN">package test;</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.9pt; text-indent: 21pt;"><span lang="EN">public class FAQ{</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 42pt; text-indent: 21pt;"><span lang="EN">public FAQ () {</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.9pt; text-indent: 21pt;"><span lang="EN"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(&#8220;FAQ Construction Method&#8221;);</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.9pt; text-indent: 21pt;"><span lang="EN"><span>&nbsp; </span>}</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.9pt; text-indent: 21pt;"><span lang="EN"><span>&nbsp; </span>public sayHello(){</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.9pt; text-indent: 21pt;"><span lang="EN"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(&#8220;FAQ : Hello World!&#8221;);</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.9pt; text-indent: 21pt;"><span lang="EN"><span>&nbsp; </span>}</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.9pt; text-indent: 21pt;"><span lang="EN">}</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span lang="EN"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>3. </span><span style="font-family: 宋体;">编译以上内容，在</span><span lang="EN">[</span><span style="font-family: 宋体;">根目录</span><span lang="EN">]/ WEB-INF\classes\test\</span><span style="font-family: 宋体;">生成</span><span lang="EN">*.class</span><span style="font-family: 宋体;">文件。</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span lang="EN"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>4. [</span><span style="font-family: 宋体;">根目录</span><span lang="EN">]/test/</span><span style="font-family: 宋体;">下面新建</span><span lang="EN">faq.txt</span><span style="font-family: 宋体;">，改名为</span><span lang="EN">faq.jsp</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span lang="EN"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>5. faq.jsp</span><span style="font-family: 宋体;">输入内容：</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 53.85pt;"></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 53.85pt;"></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 53.85pt;"></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 53.85pt;"></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 53.85pt;"></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 53.85pt;"></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 53.85pt;"><span lang="EN"><jsp:usebean class="test.FAQ" id="workM" scope="page"></jsp:usebean></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 53.85pt;"><span lang="EN">&lt;%</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 53.85pt;"><span lang="EN">workM.sayHello();<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 53.85pt;"><span lang="EN">%&gt;</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 53.85pt;"></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 53.85pt;"></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 17.95pt; text-indent: -17.95pt;"><span lang="EN"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>6. </span><span style="font-family: 宋体;">现象：</span><span lang="EN">sayHello</span><span style="font-family: 宋体;">将在</span><span lang="EN">Tomcat</span><span style="font-family: 宋体;">的命令行窗口输出</span><span lang="EN">&#8221; FAQ : Hello World!&#8221;</span><span style="font-family: 宋体;">；在</span><span lang="EN">JSP</span><span style="font-family: 宋体;">文件中使用</span><span lang="EN">System.out.println</span><span style="font-family: 宋体;">同样输出到命令行窗口，</span><span lang="EN">out.println</span><span style="font-family: 宋体;">则直接输出到浏览器。</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span lang="EN"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>7. <span>&nbsp;</span>Java Bean</span><span style="font-family: 宋体;">的使用方法二：在</span><span lang="EN">JSP</span><span style="font-family: 宋体;">中加入引用</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 53.95pt;"><span lang="EN">&lt;%@ page import="test.*"%&gt;</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span lang="EN"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体;">调用的时候，</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 53.95pt;"><span lang="EN">faq myfaq = new faq();</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 53.95pt;"><span lang="EN">myfaq.sayHello();</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span lang="EN"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体;">这种方法的好处是，每个</span><span lang="EN">JSP</span><span style="font-family: 宋体;">中可以多次定义对象。</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 17.95pt;"><span lang="EN"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 17.95pt;"><strong><span style="color: blue;" lang="EN">Servlet </span></strong><strong><span style="color: blue; font-family: 宋体;">部署过程：</span><span style="color: blue;" lang="EN"><o:p></o:p></span></strong></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt; text-indent: -18pt;"><span lang="EN"><span>1.<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-family: 宋体;">在</span><span lang="EN">[</span><span style="font-family: 宋体;">根目录</span><span lang="EN">]/ WEB-INF/classes/test/</span><span style="font-family: 宋体;">下面新建</span><span lang="EN">FaqServlet.txt</span><span style="font-family: 宋体;">，改名为</span><span lang="EN">FaqServlet.java</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt; text-indent: -18pt;"><span lang="EN"><span>2.<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span lang="EN">FaqServlet.java</span><span style="font-family: 宋体;">输入内容：</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt;"><span lang="EN">package test;</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt;"><span lang="EN">import java.io.*;</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt;"><span lang="EN">import javax.servlet.http.*;</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt;"><span lang="EN">import javax.servlet.*;</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt;"><span lang="EN"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt;"><span lang="EN">public class FaqServlet extends HttpServlet</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt;"><span lang="EN">{</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt;"><span lang="EN"><span>&nbsp; </span>public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException,ServletException{</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt;"><span lang="EN"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>response.setContentType("text/xml");</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt;"><span lang="EN"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>PrintWriter out = response.getWriter();</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt;"><span lang="EN"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>out.println("
<body2>
Hello World!
</body2>
");</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt;"><span lang="EN"><span>&nbsp; </span>}</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt;"><span lang="EN">}</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt;"><span lang="EN">Servlet </span><span style="font-family: 宋体;">是一个从</span><span lang="EN">HttpServlet</span><span style="font-family: 宋体;">派生的所有对象的统称。主要处理</span><span lang="EN">doGet</span><span style="font-family: 宋体;">，</span><span lang="EN">doPost</span><span style="font-family: 宋体;">两个方法，</span><span lang="EN">doGet</span><span style="font-family: 宋体;">就是一般情况，浏览器从服务器取网页</span><span lang="EN">,doPost</span><span style="font-family: 宋体;">就是浏览器通过</span><span lang="EN">Post</span><span style="font-family: 宋体;">的方法从服务器取数据，比如网页中</span><span lang="EN">form</span><span style="font-family: 宋体;">的</span><span lang="EN">method=&#8221;post&#8221;</span><span style="font-family: 宋体;">提交到服务器。</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt; text-indent: -18pt;"><span lang="EN"><span>3.<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span lang="EN">[</span><span style="font-family: 宋体;">根目录</span><span lang="EN">]/ WEB-INF/web.xml</span><span style="font-family: 宋体;">的</span><span lang="EN"><web-app></web-app></span><span style="font-family: 宋体;">节点下面添加内容：</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt;"><span lang="EN"><span>&nbsp;&nbsp;&nbsp;&nbsp; </span><servlet></servlet></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt;"><span lang="EN"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><servlet-name>FaqServletL</servlet-name></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt;"><span lang="EN"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><servlet-class>test.FaqServlet</servlet-class></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt;"><span lang="EN"><span>&nbsp;&nbsp;&nbsp; </span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt;"><span lang="EN"><span>&nbsp;&nbsp;&nbsp; </span><servlet-mapping mso-ascii-font-family="" mso-hansi-font-family="" desc="" font-family=""  宋体="" roman="" new=""><span>根据</span><span lang="EN">url-pattern</span><span style="font-family: 宋体;">来获取</span><span lang="EN">servlet-name,</span><span style="font-family: 宋体;">再根据</span><span lang="EN">servlet-name</span><span style="font-family: 宋体;">来获取</span><span lang="EN">servlet-class"&gt;</span></servlet-mapping></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt;"><span lang="EN"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><servlet-name>FaqServletL</servlet-name></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt;"><span lang="EN"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><url-pattern>/servlet/FaqServlet</url-pattern></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt;"><span lang="EN"><span>&nbsp; </span><span>&nbsp;&nbsp;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt;"><span style="font-family: 宋体;">主要含义应该是：当</span><span lang="EN">URL</span><span style="font-family: 宋体;">中是</span><span lang="EN"><a href="http://%5broot%5d/servlet/FaqServlet">http://[ROOT]/servlet/FaqServlet</a></span><span style="font-family: 宋体;">的时候使用的</span><span lang="EN">servlet</span><span style="font-family: 宋体;">的名称是</span><span lang="EN">FaqServletL</span><span style="font-family: 宋体;">，服务器根据</span><span lang="EN">FaqServlet</span><span style="font-family: 宋体;">找到名称为</span><span lang="EN">FaqServletL</span><span style="font-family: 宋体;">的</span><span lang="EN">Servlet</span><span style="font-family: 宋体;">，并通过</span><span lang="EN">servlet-class test.FaqServlet</span><span style="font-family: 宋体;">来定位</span><span lang="EN">Servlet</span><span style="font-family: 宋体;">的位置。</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt; text-indent: -18pt;"><span lang="EN"><span>4.<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-family: 宋体;">现象：浏览地址</span><span lang="EN"><a href="http://127.0.0.1:8080/servlet/FaqServlet">http://127.0.0.1:8080/servlet/FaqServlet</a></span><span style="font-family: 宋体;">，浏览器打开一个页面，效果和</span><span lang="EN">xml</span><span style="font-family: 宋体;">一样，因为上面</span><span lang="EN">response.setContentType("text/xml");</span><span style="font-family: 宋体;">如果需要用</span><span lang="EN">text/html</span><span style="font-family: 宋体;">，则是</span><span lang="EN">html</span><span style="font-family: 宋体;">页面了，不过需要补全</span><span lang="EN">html</span><span style="font-family: 宋体;">代码了。</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt; text-indent: -18pt;"><span lang="EN"><span>5.<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-family: 宋体;">似乎</span><span lang="EN">Servlet</span><span style="font-family: 宋体;">可以不用部署就可以用的，暂时还不知道，具体以后学习。</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 17.95pt;"><span lang="EN"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 17.95pt;"><strong><span style="color: blue;" lang="EN">Taglib </span></strong><strong><span style="color: blue; font-family: 宋体;">部署过程：</span><span style="color: blue;" lang="EN"><o:p></o:p></span></strong></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt; text-indent: -18pt;"><span lang="EN"><span>1.<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span lang="EN">[</span><span style="font-family: 宋体;">根目录</span><span lang="EN">]/ WEB-INF/classes/test/hello/</span><span style="font-family: 宋体;">下面新建</span><span lang="EN">HelloTag.java</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt; text-indent: -18pt;"><span lang="EN"><span>2.<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span lang="EN">HelloTag.java</span><span style="font-family: 宋体;">输入内容：</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt;"><span lang="EN"><span>&nbsp; </span>package test.hello;</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt;"><span lang="EN"><span>&nbsp; </span>import javax.servlet.jsp.JspException;</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt;"><span lang="EN"><span>&nbsp; </span>import javax.servlet.jsp.JspTagException;</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt;"><span lang="EN"><span>&nbsp; </span>import javax.servlet.jsp.tagext.TagSupport;</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt;"><span lang="EN"><span>&nbsp; </span>public class HelloTag extends TagSupport {</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt;"><span lang="EN"><span>&nbsp;&nbsp;&nbsp; </span>public HelloTag() {</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt;"><span lang="EN"><span>&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt;"><span lang="EN"><span>&nbsp;&nbsp;&nbsp; </span>public int doEndTag() throws JspException{</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt;"><span lang="EN"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>try{</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt;"><span lang="EN"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>pageContext.getOut().print("Hello World!");</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt;"><span lang="EN"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}catch(Exception ex){</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt;"><span lang="EN"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ex.printStackTrace();</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt;"><span lang="EN"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt;"><span lang="EN"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>return SKIP_BODY;</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt;"><span lang="EN"><span>&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt;"><span lang="EN"><span>&nbsp;&nbsp;&nbsp; </span>public void release(){</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt;"><span lang="EN"><span>&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;</span>super.release();</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt;"><span lang="EN"><span>&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt;"><span lang="EN"><span>&nbsp; </span>}</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt;"><span lang="EN">TagLib</span><span style="font-family: 宋体;">应该就是都该从</span><span lang="EN">TagSupport</span><span style="font-family: 宋体;">派生出来的了。</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt; text-indent: -18pt;"><span lang="EN"><span>3.<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span lang="EN">[</span><span style="font-family: 宋体;">根目录</span><span lang="EN">]/ WEB-INF/</span><span style="font-family: 宋体;">目录下面新建</span><span lang="EN">mytaglib.tld</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt; text-indent: -18pt;"><span lang="EN"><span>4.<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span lang="EN">mytaglib.tld</span><span style="font-family: 宋体;">输入内容：</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt;"></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt;"></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt;"><span lang="EN"><span>&nbsp; </span><taglib></taglib></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt;"><span lang="EN"><span>&nbsp;&nbsp; </span><tlibversion>1.0</tlibversion></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt;"><span lang="EN"><span>&nbsp;&nbsp; </span><jspversion>1.1</jspversion></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt;"><span lang="EN"><span>&nbsp;&nbsp; </span><shortname>mytablib</shortname></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt;"><span lang="EN"><span>&nbsp;&nbsp; </span><uri>/mytaglib</uri></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt;"><span lang="EN"><span>&nbsp;&nbsp; </span><tag></tag></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt;"><span lang="EN"><span>&nbsp;&nbsp;&nbsp; </span><name>hello</name></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt;"><span lang="EN"><span>&nbsp;&nbsp;&nbsp; </span><tagclass>test.hello.HelloTag</tagclass></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt;"><span lang="EN"><span>&nbsp;&nbsp;&nbsp; </span>
<bodycontent>
empty
</bodycontent>
</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt;"><span lang="EN"><span>&nbsp;&nbsp;&nbsp; </span><info>Just Says Hello</info></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt;"><span lang="EN"><span>&nbsp;&nbsp; </span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt;"><span lang="EN"><span>&nbsp; </span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt;"><span style="font-family: 宋体;">里面觉得主要的两个内容是</span><span lang="EN"><uri></uri></span><span style="font-family: 宋体;">将在</span><span lang="EN">jsp</span><span style="font-family: 宋体;">中引用的时候用到，</span><span lang="EN">tag/tagclass</span><span style="font-family: 宋体;">是</span><span lang="EN">TagLib</span><span style="font-family: 宋体;">对应</span><span lang="EN">class</span><span style="font-family: 宋体;">的引用，和上面</span><span lang="EN">Java</span><span style="font-family: 宋体;">的</span><span lang="EN">package</span><span style="font-family: 宋体;">对应。</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt; text-indent: -18pt;"><span lang="EN"><span>5.<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span lang="EN">[</span><span style="font-family: 宋体;">根目录</span><span lang="EN">]/ test/</span><span style="font-family: 宋体;">下面新建</span><span lang="EN">helloTag.jsp</span><span style="font-family: 宋体;">，并输入内容：</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt;"><span lang="EN"><span>&nbsp; </span>&lt;%@ taglib uri="/mytaglib" prefix="mm" %&gt;</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt;"><span lang="EN"><span>&nbsp; </span><mm:hello></mm:hello></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt;"><span style="font-family: 宋体;">这样就行了。通过</span><span lang="EN">mm</span><span style="font-family: 宋体;">来调用</span><span lang="EN">taglib</span><span style="font-family: 宋体;">里面的类，函数。看起来似乎</span><span lang="EN">Java Bean</span><span style="font-family: 宋体;">也可以实现同样的功能，而且似乎</span><span lang="EN">Java Bean</span><span style="font-family: 宋体;">更加灵活，初学，需要以后进一步认识。</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt; text-indent: -18pt;"><span lang="EN"><span>6.<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-family: 宋体;">现象：浏览地址</span><span lang="EN"><a href="http://%5broot%5d/test/helloTag.jsp">http://[ROOT]/test/helloTag.jsp</a></span><span style="font-family: 宋体;">，页面显示：</span><span lang="EN">&#8221;Hello World!&#8221;</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 35.95pt; text-indent: -18pt;"><span lang="EN"><span>7.<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span lang="EN">tld</span><span style="font-family: 宋体;">中似乎有直接对</span><span lang="EN">TagLib</span><span style="font-family: 宋体;">类中的</span><span lang="EN">static</span><span style="font-family: 宋体;">函数进行部署的方法，暂时没有尝试出来。这种方法在</span><span lang="EN">Java Bean</span><span style="font-family: 宋体;">中应该没有可替代的方法吧！</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span lang="EN"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span lang="EN"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="color: blue; font-family: 宋体;">小结：</span><span style="color: blue;" lang="EN"><o:p></o:p></span></strong></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 52.5pt; text-indent: -31.5pt;"><span lang="EN"><span>1.<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span lang="EN">JAVA</span><span style="font-family: 宋体;">中的网站建设可以这么多层次，明显增加了灵活性，可使用</span><span lang="EN">JAVA</span><span style="font-family: 宋体;">所有类库的，这样做出来的网站，无疑功能可以是非常强大的。</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 52.5pt; text-indent: -31.5pt;"><span lang="EN"><span>2.<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-family: 宋体;">使用</span><span lang="EN">JAD</span><span style="font-family: 宋体;">等反编译工具，可以将</span><span lang="EN">Java </span><span style="font-family: 宋体;">的目标文件</span><span lang="EN">class</span><span style="font-family: 宋体;">反编译出来，这样要学习别人的成果，变得非常容易，但是也同样自己的代码也不安全了。</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 52.5pt; text-indent: -31.5pt;"><span lang="EN"><span>3.<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span lang="EN">JAVA</span><span style="font-family: 宋体;">在不同系统中的支持，增加了程序的可复用性，实现同样功能，用不同的类库，语言写几次实在不爽。</span></p>
<span lang="EN"><span>4.<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span lang="EN">JAVA</span><span style="font-family: 宋体;">包括派生出来的工具环境的配置纷繁复杂，还真是麻烦。</span><span lang="EN">J Builder</span><span style="font-family: 宋体;">挺好用，为了更透彻了解</span><span lang="EN">JAVA</span><span style="font-family: 宋体;">，了解一下不同的部署步骤还是必要的。<br />
<br />
转:http://blog.csdn.net/hahu/archive/2004/07/18/44545.aspx<br />
</span>
<img src ="http://www.blogjava.net/poower/aggbug/229810.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/poower/" target="_blank">poower</a> 2008-09-18 22:18 <a href="http://www.blogjava.net/poower/articles/229810.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>主题：表单验证：使用struts中的validator框架</title><link>http://www.blogjava.net/poower/articles/222377.html</link><dc:creator>poower</dc:creator><author>poower</author><pubDate>Fri, 15 Aug 2008 16:28:00 GMT</pubDate><guid>http://www.blogjava.net/poower/articles/222377.html</guid><wfw:comment>http://www.blogjava.net/poower/comments/222377.html</wfw:comment><comments>http://www.blogjava.net/poower/articles/222377.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/poower/comments/commentRss/222377.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/poower/services/trackbacks/222377.html</trackback:ping><description><![CDATA[第一步： <br />
<br />
我们在struts-config.xml里： <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" href="http://www.javaeye.com/topic/192579#"><img alt="复制代码" src="http://www.javaeye.com/images/icon_copy.gif" _counted="undefined" /></a></div>
</div>
<ol class="dp-j">
    <li><span><span>&lt;action-mappings&nbsp;&gt;&nbsp; &nbsp;&nbsp;</span></span></li>
    <li><span>&lt;action&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>attribute=</span><span class="string">"logForm"</span><span>&nbsp; &nbsp;&nbsp;</span></span></li>
    <li><span>input=</span><span class="string">"/form/log.jsp"</span><span>&nbsp; &nbsp;&nbsp;</span></span></li>
    <li><span>name=</span><span class="string">"logForm"</span><span>&nbsp; &nbsp;&nbsp;</span></span></li>
    <li><span>path=</span><span class="string">"/log"</span><span>&nbsp; &nbsp;&nbsp;</span></span></li>
    <li><span>scope=</span><span class="string">"request"</span><span>&nbsp; &nbsp;&nbsp;</span></span></li>
    <li><span>type=</span><span class="string">"com.yourcompany.struts.action.LogAction"</span><span>&nbsp; &nbsp;&nbsp;</span></span></li>
    <li><span>validate=</span><span class="string">"true"</span><span>&nbsp; &nbsp;&nbsp;</span></span></li>
    <li><span>&lt;forward&nbsp;name=</span><span class="string">"s"</span><span>&nbsp;path=</span><span class="string">"/form/MyJsp.jsp"</span><span>&nbsp;/&gt;&nbsp; &nbsp;&nbsp;</span></span></li>
    <li><span>&lt;/action&gt;&nbsp;&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="java" style="display: none" name="code">&lt;action-mappings &gt;
&lt;action
attribute="logForm"
input="/form/log.jsp"
name="logForm"
path="/log"
scope="request"
type="com.yourcompany.struts.action.LogAction"
validate="true"
&lt;forward name="s" path="/form/MyJsp.jsp" /&gt;
&lt;/action&gt; </pre>
里面必须加上validate="true"这么句代码，否则，验证机制将可能不会运行。 <br />
另外，配置文件中还须加入以下代码，表示使用插件： <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" href="http://www.javaeye.com/topic/192579#"><img alt="复制代码" src="http://www.javaeye.com/images/icon_copy.gif" _counted="undefined" /></a></div>
</div>
<ol class="dp-j">
    <li><span><span>&lt;plug-in&nbsp;className=</span><span class="string">"org.apache.struts.validator.ValidatorPlugIn"</span><span>&gt; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;set-property&nbsp;property=</span><span class="string">"pathnames"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value="/WEB-INF/validator-rules.xml, &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/WEB-INF/validation.xml"&nbsp;/&gt; &nbsp;&nbsp;</span></li>
    <li><span>&lt;/plug-in&gt;&nbsp;&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="java" style="display: none" name="code">&lt;plug-in className="org.apache.struts.validator.ValidatorPlugIn"&gt;
&lt;set-property property="pathnames"
value="/WEB-INF/validator-rules.xml,
/WEB-INF/validation.xml" /&gt;
&lt;/plug-in&gt; </pre>
<br />
注意加入&lt;plug-in&gt;标签的位置，该标签应该放在struts配置文件中的最后，具体位置在元素&lt;struts-config&gt;&lt;/struts-config&gt;内部，在&lt;message-resources parameter="com.blog.struts.ApplicationResources" /&gt;之后，切记要注意位置，不然报错。 <br />
其次，在写法上，value的内容中/WEB-INF/validator-rules.xml是默认的，因为在项目使用struts框架时该文件已经在此目录层次下面了，那么之后的/WEB-INF/validation.xml"又是什么呢？这里需要我们手动在WEB-INF目录下新建validation.xml文件，这个文件有什么用？先看下其中写的什么。 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" href="http://www.javaeye.com/topic/192579#"><img alt="复制代码" src="http://www.javaeye.com/images/icon_copy.gif" _counted="undefined" /></a></div>
</div>
<ol class="dp-j">
    <li><span><span>&lt;form-validation&gt; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;global&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/global&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;formset&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;form&nbsp;name=</span><span class="string">"userForm"</span><span>&gt; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;field&nbsp;property=</span><span class="string">"userName"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;depends=</span><span class="string">"required,minlength,maxlength"</span><span>&gt; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;arg0&nbsp;key=</span><span class="string">"userForm.userName"</span><span>&nbsp;/&gt; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;arg1&nbsp;name=</span><span class="string">"minlength"</span><span>&nbsp;key=</span><span class="string">"${var:min}"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;resource=</span><span class="string">"false"</span><span>&nbsp;/&gt; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;arg1&nbsp;name=</span><span class="string">"maxlength"</span><span>&nbsp;key=</span><span class="string">"${var:max}"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;resource=</span><span class="string">"false"</span><span>&nbsp;/&gt; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;var&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;var-name&gt;min&lt;/var-name&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;var-value&gt;</span><span class="number">6</span><span>&lt;/var-value&gt; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/var&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;var&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;var-name&gt;max&lt;/var-name&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;var-value&gt;</span><span class="number">20</span><span>&lt;/var-value&gt; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/var&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/field&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;field&nbsp;property=</span><span class="string">"password"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;depends=</span><span class="string">"required,minlength,maxlength,mask"</span><span>&gt; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;arg0&nbsp;key=</span><span class="string">"userForm.password"</span><span>&nbsp;/&gt; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;arg1&nbsp;name=</span><span class="string">"minlength"</span><span>&nbsp;key=</span><span class="string">"${var:min}"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;resource=</span><span class="string">"true"</span><span>&nbsp;/&gt; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;arg1&nbsp;name=</span><span class="string">"maxlength"</span><span>&nbsp;key=</span><span class="string">"${var:max}"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;resource=</span><span class="string">"true"</span><span>&nbsp;/&gt; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;var&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;var-name&gt;min&lt;/var-name&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;var-value&gt;</span><span class="number">6</span><span>&lt;/var-value&gt; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/var&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;var&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;var-name&gt;max&lt;/var-name&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;var-value&gt;</span><span class="number">20</span><span>&lt;/var-value&gt; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/var&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;var&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;var-name&gt;mask&lt;/var-name&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;var-value&gt;^\w+$&lt;/var-value&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/var&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/field&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;field&nbsp;property=</span><span class="string">"email"</span><span>&nbsp;depends=</span><span class="string">"required,email"</span><span>&gt; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;arg0&nbsp;key=</span><span class="string">"userForm.email"</span><span>&nbsp;/&gt; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/field&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;field&nbsp;property=</span><span class="string">"name"</span><span>&nbsp;depends=</span><span class="string">"required,maxlength"</span><span>&gt; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;arg0&nbsp;key=</span><span class="string">"userForm.name"</span><span>&nbsp;/&gt; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;arg1&nbsp;name=</span><span class="string">"maxlength"</span><span>&nbsp;key=</span><span class="string">"${var:max}"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;resource=</span><span class="string">"false"</span><span>&nbsp;/&gt; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;var&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;var-name&gt;max&lt;/var-name&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;var-value&gt;</span><span class="number">20</span><span>&lt;/var-value&gt; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/var&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/field&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;field&nbsp;property=</span><span class="string">"tel"</span><span>&nbsp;depends=</span><span class="string">"required,mask"</span><span>&gt; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;arg0&nbsp;key=</span><span class="string">"userForm.tel"</span><span>&nbsp;/&gt; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;var&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;var-name&gt;mask&lt;/var-name&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;var-value&gt;^\(?(\d{</span><span class="number">3</span><span>,</span><span class="number">4</span><span>})\)?[-|]?(\d{</span><span class="number">7</span><span>,</span><span class="number">8</span><span>})$&lt;/var-value&gt; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/var&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/field&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;field&nbsp;property=</span><span class="string">"address"</span><span>&nbsp;depends=</span><span class="string">"required"</span><span>&gt; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;arg0&nbsp;key=</span><span class="string">"userForm.address"</span><span>&nbsp;/&gt; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/field&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/form&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;form&nbsp;name=</span><span class="string">"categoryForm"</span><span>&gt; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;field&nbsp;property=</span><span class="string">"categoryName"</span><span>&nbsp;depends=</span><span class="string">"required"</span><span>&gt; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;arg0&nbsp;key=</span><span class="string">"categoryForm.categoryName"</span><span>&nbsp;/&gt; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/field&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/form&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/formset&gt; &nbsp;&nbsp;</span></li>
    <li><span>&lt;/form-validation&gt;&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="java" style="display: none" name="code">&lt;form-validation&gt;
&lt;global&gt;
&lt;/global&gt;
&lt;formset&gt;
&lt;form name="userForm"&gt;
&lt;field property="userName"
depends="required,minlength,maxlength"&gt;
&lt;arg0 key="userForm.userName" /&gt;
&lt;arg1 name="minlength" key="${var:min}"
resource="false" /&gt;
&lt;arg1 name="maxlength" key="${var:max}"
resource="false" /&gt;
&lt;var&gt;
&lt;var-name&gt;min&lt;/var-name&gt;
&lt;var-value&gt;6&lt;/var-value&gt;
&lt;/var&gt;
&lt;var&gt;
&lt;var-name&gt;max&lt;/var-name&gt;
&lt;var-value&gt;20&lt;/var-value&gt;
&lt;/var&gt;
&lt;/field&gt;
&lt;field property="password"
depends="required,minlength,maxlength,mask"&gt;
&lt;arg0 key="userForm.password" /&gt;
&lt;arg1 name="minlength" key="${var:min}"
resource="true" /&gt;
&lt;arg1 name="maxlength" key="${var:max}"
resource="true" /&gt;
&lt;var&gt;
&lt;var-name&gt;min&lt;/var-name&gt;
&lt;var-value&gt;6&lt;/var-value&gt;
&lt;/var&gt;
&lt;var&gt;
&lt;var-name&gt;max&lt;/var-name&gt;
&lt;var-value&gt;20&lt;/var-value&gt;
&lt;/var&gt;
&lt;var&gt;
&lt;var-name&gt;mask&lt;/var-name&gt;
&lt;var-value&gt;^\w+$&lt;/var-value&gt;
&lt;/var&gt;
&lt;/field&gt;
&lt;field property="email" depends="required,email"&gt;
&lt;arg0 key="userForm.email" /&gt;
&lt;/field&gt;
&lt;field property="name" depends="required,maxlength"&gt;
&lt;arg0 key="userForm.name" /&gt;
&lt;arg1 name="maxlength" key="${var:max}"
resource="false" /&gt;
&lt;var&gt;
&lt;var-name&gt;max&lt;/var-name&gt;
&lt;var-value&gt;20&lt;/var-value&gt;
&lt;/var&gt;
&lt;/field&gt;
&lt;field property="tel" depends="required,mask"&gt;
&lt;arg0 key="userForm.tel" /&gt;
&lt;var&gt;
&lt;var-name&gt;mask&lt;/var-name&gt;
&lt;var-value&gt;^\(?(\d{3,4})\)?[-|]?(\d{7,8})$&lt;/var-value&gt;
&lt;/var&gt;
&lt;/field&gt;
&lt;field property="address" depends="required"&gt;
&lt;arg0 key="userForm.address" /&gt;
&lt;/field&gt;
&lt;/form&gt;
&lt;form name="categoryForm"&gt;
&lt;field property="categoryName" depends="required"&gt;
&lt;arg0 key="categoryForm.categoryName" /&gt;
&lt;/field&gt;
&lt;/form&gt;
&lt;/formset&gt;
&lt;/form-validation&gt;</pre>
<br />
Validation.xml：该配置文件是专供应用程序使用的，其中所描述的是特定ActionForm会用到validation-rule.xml文件中的哪些验证器。 <br />
<br />
1.&lt;form-validation&gt;元素 <br />
&lt;form-validation&gt;元素是validation.xml文件的根元素，它包含两个子元素：&lt;global&gt;和&lt;formset&gt;元素。其中&lt;global&gt;元素可以出现零次或多次，&lt;formset&gt;元素可以出现一次或多次。 <br />
<br />
2.&lt;global&gt;元素 <br />
&lt;global&gt;元素中通过&lt;constant&gt;子元素来定义常量表达式，每个&lt;constant&gt;子元素定义一个常量表达式，如果有多个常量表达式要定义则可以配置多个&lt;constant&gt;来实现。 <br />
<br />
3.&lt;formset&gt;元素 <br />
&lt;formset&gt;元素包括两个子元素&lt;constant&gt;和&lt;form&gt;。&lt;constant&gt;元素可以出现零次或多次，&lt;form&gt;元素可以出现一次或多次。 <br />
这里需要注意的是，在&lt;form&gt;标签中有包括&lt;field&gt;子元素。 <br />
<br />
4.&lt;field&gt;元素 <br />
&lt;field&gt;元素通过property属性指定字段的名字，通过depends属性指定具体的验证规则，验证规则来源于validation-rule.xml中所写的验证方法，这里我们要简单介绍一下validation-rule.xml里面的验证规则是默认，那如果我们有需要定义自己的验证规则也可以写在里面。&lt;field&gt;元素可包含的子元素为&lt;msg&gt;,&lt;arg&gt;,&lt;var&gt;。 <br />
<br />
第二步 <br />
把validator框架使用的消息文本添加到应用的Resource Bundle中，如在ApplicationResources.properties中加入例如： <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" href="http://www.javaeye.com/topic/192579#"><img alt="复制代码" src="http://www.javaeye.com/images/icon_copy.gif" _counted="undefined" /></a></div>
</div>
<ol class="dp-j">
    <li><span><span>errors.header=&lt;b&gt;&lt;font&nbsp;color=ff0000&gt;&lt;ul&gt; &nbsp;&nbsp;</span></span></li>
    <li><span>errors.footer=&lt;/ul&gt;&lt;/font&gt;&lt;/b&gt; &nbsp;&nbsp;</span></li>
    <li><span>errors.prefix=&lt;li&gt; &nbsp;&nbsp;</span></li>
    <li><span>errors.suffix=&lt;/li&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>error.isexit=\u7528\u6237\u540d\u5df2\u5b58\u5728\uff0c\u8bf7\u91cd\u65b0\u6ce8\u518c\uff01 &nbsp;&nbsp;</span></li>
    <li><span>error.username=\u7528\u6237\u540d\u4e0d\u5408\u6cd5\uff0c\u8bf7\u91cd\u65b0\u586b\u5199\u7528\u6237\u540d\uff01 &nbsp;&nbsp;</span></li>
    <li><span>error.password=\u5bc6\u7801\u4e0d\u5408\u6cd5\uff0c\u8bf7\u91cd\u65b0\u586b\u5199\u5bc6\u7801\uff01 &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>errors.required={</span><span class="number">0</span><span>}\u4e3a\u5fc5\u586b\u5b57\u6bb5 &nbsp;&nbsp;</span></span></li>
    <li><span>errors.minlength={</span><span class="number">0</span><span>}\u7684\u957f\u5ea6\u4e0d\u80fd\u5c0f\u4e8e{</span><span class="number">1</span><span>}&nbsp; &nbsp;&nbsp;</span></span></li>
    <li><span>errors.maxlength={</span><span class="number">0</span><span>}\u7684\u957f\u5ea6\u4e0d\u80fd\u5927\u4e8e{</span><span class="number">1</span><span>}&nbsp; &nbsp;&nbsp;</span></span></li>
    <li><span>errors.email={</span><span class="number">0</span><span>}\u5fc5\u987b\u4e3a\u6709\u6548\u90ae\u4ef6\u5730\u5740 &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>userForm.userName=\u7528\u6237\u540d; &nbsp;&nbsp;</span></li>
    <li><span>userForm.password=\u5bc6\u7801; &nbsp;&nbsp;</span></li>
    <li><span>userForm.email=Email; &nbsp;&nbsp;</span></li>
    <li><span>userForm.name=\u59d3\u540d; &nbsp;&nbsp;</span></li>
    <li><span>userForm.sex=\u6027\u522b; &nbsp;&nbsp;</span></li>
    <li><span>userForm.tel=\u8054\u7cfb\u7535\u8bdd; &nbsp;&nbsp;</span></li>
    <li><span>userForm.address=\u8054\u7cfb\u5730\u5740; &nbsp;&nbsp;</span></li>
    <li><span>userForm.userType=\u7528\u6237\u7c7b\u522b; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>categoryForm.categoryName=\u7c7b\u522b\u540d\u79f0&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="java" style="display: none" name="code">errors.header=&lt;b&gt;&lt;font color=ff0000&gt;&lt;ul&gt;
errors.footer=&lt;/ul&gt;&lt;/font&gt;&lt;/b&gt;
errors.prefix=&lt;li&gt;
errors.suffix=&lt;/li&gt;
error.isexit=\u7528\u6237\u540d\u5df2\u5b58\u5728\uff0c\u8bf7\u91cd\u65b0\u6ce8\u518c\uff01
error.username=\u7528\u6237\u540d\u4e0d\u5408\u6cd5\uff0c\u8bf7\u91cd\u65b0\u586b\u5199\u7528\u6237\u540d\uff01
error.password=\u5bc6\u7801\u4e0d\u5408\u6cd5\uff0c\u8bf7\u91cd\u65b0\u586b\u5199\u5bc6\u7801\uff01
errors.required={0}\u4e3a\u5fc5\u586b\u5b57\u6bb5
errors.minlength={0}\u7684\u957f\u5ea6\u4e0d\u80fd\u5c0f\u4e8e{1}
errors.maxlength={0}\u7684\u957f\u5ea6\u4e0d\u80fd\u5927\u4e8e{1}
errors.email={0}\u5fc5\u987b\u4e3a\u6709\u6548\u90ae\u4ef6\u5730\u5740
userForm.userName=\u7528\u6237\u540d;
userForm.password=\u5bc6\u7801;
userForm.email=Email;
userForm.name=\u59d3\u540d;
userForm.sex=\u6027\u522b;
userForm.tel=\u8054\u7cfb\u7535\u8bdd;
userForm.address=\u8054\u7cfb\u5730\u5740;
userForm.userType=\u7528\u6237\u7c7b\u522b;
categoryForm.categoryName=\u7c7b\u522b\u540d\u79f0</pre>
<br />
<br />
<br />
第三步 <br />
将Form的extends ActionForm改为extends ValidatorForm <br />
<br />
<br />
第四步 <br />
在jsp页面当中，如果我们要创建一个在服务器端验证的页面，我们只需要在控件之后添加&lt;html:errors property="password"/&gt;，即： <br />
&lt;tr&gt; <br />
&lt;td&gt;密码：&lt;/td&gt; <br />
&lt;td&gt;&lt;html:password property="password" /&gt;&lt;html:errors property="password"/&gt;&lt;/td&gt; <br />
&lt;/tr&gt; <br />
注意&lt;html:errors property="password"/&gt;之中的property对应的是form中定义的属性。 <br />
<br />
那么如果我们要创建一个在客户端进行验证的页面，我们需要如下步骤： <br />
1.在&lt;html:form&gt;&lt;/html:form&gt;的外面加上&lt;html:javascript formName="userForm"/&gt; <br />
2.在&lt;html:form&gt;中加入属性onsubmit=&#8221;return validateCardForm(this);&#8221;,即; <br />
&lt;html:form action="/save_user" method="post" enctype="multipart/form-data" onsubmit="return validateUserForm(this);"&gt; <br />
3.同服务器端验证一样&lt;td&gt;&lt;html:password property="password" /&gt;&lt;html:errors property="password"/&gt;&lt;/td&gt; <br />
重点 <br />
使用validator进行表单验证的步骤如上，其中最为关键的一步是，validation.xml文件中为表单配置验证规则的写法。 <br />
注意事项如下： <br />
&lt;form-validation&gt; <br />
&lt;global&gt; <br />
在&lt;global&gt;中定义的常量表达式，在文件的其余地方可以直接引用。 <br />
即，这里配置的常量表达式是全局的 <br />
写法为： <br />
&lt;constant&gt; <br />
&lt;constant-name&gt;phone&lt;/constant-name&gt; <br />
&lt;constant-value&gt;^\(?(\d{3})\)?[-|]?(\d{8})$&lt;constant-value&gt; <br />
//定义一个名为：phone的正则表达式，3位区号+8位号码 <br />
&lt;/constant&gt; <br />
&lt;/global&gt; <br />
&lt;formset&gt; <br />
&lt;form name="userForm"&gt; <br />
&lt;field property="userName" <br />
//这里的property要与form表单属性名对应 <br />
depends="required,minlength,maxlength"&gt; <br />
//这里的depends用于指定对该属性使用什么验证规则，其规则来自于validator-rule.xml文件中所写的规则。指定多个验证器时，会依次调用，直到该表单通过所有验证。 <br />
&lt;arg0 key="userForm.userName" /&gt; <br />
//arg0对应的是ApplicationResources.property中的{0},即： <br />
&#8220;errors.required={0}不能为空&#8221;，其作用是将arg0中key所对应的资源文件中的&#8220;userForm.userName=用户名&#8221;的文中或者说是值替换到&#8220;errors.required={0}不能为空&#8221;中的{0}，这样页面输出的是&#8220;用户名不能为空&#8221;; <br />
下面的arg1同理{1} <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" href="http://www.javaeye.com/topic/192579#"><img alt="复制代码" src="http://www.javaeye.com/images/icon_copy.gif" _counted="undefined" /></a></div>
</div>
<ol class="dp-j">
    <li><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;arg1&nbsp;name=</span><span class="string">"minlength"</span><span>&nbsp;key=</span><span class="string">"${var:min}"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;resource=</span><span class="string">"false"</span><span>&nbsp;/&gt; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;arg1&nbsp;name=</span><span class="string">"maxlength"</span><span>&nbsp;key=</span><span class="string">"${var:max}"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;resource=</span><span class="string">"false"</span><span>&nbsp;/&gt; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;var&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;var-name&gt;min&lt;/var-name&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;var-value&gt;</span><span class="number">6</span><span>&lt;/var-value&gt; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/var&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//var对应key="${var:min}"中的min </span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;var&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;var-name&gt;max&lt;/var-name&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;var-value&gt;</span><span class="number">20</span><span>&lt;/var-value&gt; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/var&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/field&gt; &nbsp;&nbsp;</span></li>
    <li><span>&lt;/form&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/formset&gt; &nbsp;&nbsp;</span></li>
    <li><span>&lt;/form-validation&gt;&nbsp;&nbsp;</span></li>
</ol>
</div>
<img src ="http://www.blogjava.net/poower/aggbug/222377.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/poower/" target="_blank">poower</a> 2008-08-16 00:28 <a href="http://www.blogjava.net/poower/articles/222377.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>解决中文参数乱码</title><link>http://www.blogjava.net/poower/articles/221715.html</link><dc:creator>poower</dc:creator><author>poower</author><pubDate>Wed, 13 Aug 2008 06:33:00 GMT</pubDate><guid>http://www.blogjava.net/poower/articles/221715.html</guid><wfw:comment>http://www.blogjava.net/poower/comments/221715.html</wfw:comment><comments>http://www.blogjava.net/poower/articles/221715.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/poower/comments/commentRss/221715.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/poower/services/trackbacks/221715.html</trackback:ping><description><![CDATA[1.在tomcat6/conf/server.xml<br />
&nbsp;&nbsp;&nbsp;&nbsp;中&lt;Connector port="80" protocol="HTTP/1.1" <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; connectionTimeout="20000" <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; redirectPort="8443" <span style="background-color: #ffff00">URIEncoding="UTF-8"/</span>&gt;<br />
2.在对应的应用中添加字符过滤器<br />
&nbsp;&nbsp;&nbsp;&nbsp;继承&nbsp;&nbsp;&nbsp;&nbsp;javax.servlet.Filter<br />
<p>public void doFilter(ServletRequest request, ServletResponse response,<br />
&nbsp;&nbsp;&nbsp;FilterChain chain) throws IOException, ServletException {<br />
&nbsp;&nbsp;// TODO Auto-generated method stub</p>
<p style="background-color: #ffff00">&nbsp;&nbsp;<span>request.setCharacterEncoding("utf-8");<br />
&nbsp;&nbsp;chain.doFilter(request, response);<br />
&nbsp;}<br />
</span></p>
<br />
3.在对应的应用中web.xml中添加过滤器<br />
&lt;filter&gt;<br />
&lt;filter-name&gt;CharacterEncodingFilter&lt;/filter-name&gt;<br />
&lt;filter-class&gt;cn.ywj.webexample.CharacterEncodingFilter&lt;/filter-class&gt;<br />
&lt;/filter&gt;<br />
&lt;filter-mapping&gt;<br />
&lt;filter-name&gt;CharacterEncodingFilter&lt;/filter-name&gt;<br />
&lt;url-pattern&gt;/*&lt;/url-pattern&gt;<br />
&lt;/filter-mapping&gt;
<img src ="http://www.blogjava.net/poower/aggbug/221715.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/poower/" target="_blank">poower</a> 2008-08-13 14:33 <a href="http://www.blogjava.net/poower/articles/221715.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>配置Tomcat管理员用户</title><link>http://www.blogjava.net/poower/articles/218322.html</link><dc:creator>poower</dc:creator><author>poower</author><pubDate>Tue, 29 Jul 2008 03:54:00 GMT</pubDate><guid>http://www.blogjava.net/poower/articles/218322.html</guid><wfw:comment>http://www.blogjava.net/poower/comments/218322.html</wfw:comment><comments>http://www.blogjava.net/poower/articles/218322.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/poower/comments/commentRss/218322.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/poower/services/trackbacks/218322.html</trackback:ping><description><![CDATA[管理员配置:<br />
打开tomcat安装目录里面的conf/tomcat-users.xml文件<br />
配置如下：<br />
&lt;?xml version='1.0' encoding='utf-8'?&gt;<br />
&lt;tomcat-users&gt; <br />
&nbsp;&nbsp;&nbsp; &lt;role rolename="manager"/&gt;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;role rolename="admin"/&gt;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;user username="paul"password="huhuiyu"<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; roles="manager,admin"/&gt;<br />
&lt;/tomcat-users&gt;<br />
重新启动Tomcat，打开下面的页面<br />
http://127.0.0.1:8080/manager/html<br />
输入前面配置的用户名和密码即可进入Tomcat管理页面。 <br />
<br />
端口配置:<br />
conf/server.xml&nbsp;&nbsp;&nbsp;&nbsp; &lt;connector port=""&nbsp; ......&gt;<br />
<br />
自动更新:<br />
设置属性reloadable=true<br />
你可以在server.xml里对不同的host设置也可以直接在context.xml里对所有项目设置<br />
<br />
<p>1。找到要修改的xml文件</p>
<p>.\conf\server.xml</p>
<p>2.增加新的属性</p>
<p>&lt;Context path="/wk" docBase="wk" debug="0" reloadable="true" crossContext="true"&gt;&lt;/Context&gt;</p>
<p>path：访问的路径 <a href="http://localhost:8080/wk">http://localhost:8080/wk</a></p>
<p>docBase：是相对于.\webapps\wk的相对路径；或者写绝对路径：e\work\wk</p>
<p>3. 然后重启Tomcat</p>
<p>4.当再次更新wk工程下面的类的时候，能够自动加载！<br />
<br />
<br />
配置数据源:<br />
/conf/context.xml<br />
&lt;Resource name="jdbc/test" auth="Container" type="javax.sql.DataSource" maxActive="100" <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; madIdle="30" maxWait="10000" username="root" password="139689"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; driverClassName="com.mysql.jdbc.Driver"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; url="jdbc:mysql://localhost:3306/test?useUnicode=true&amp;amp;characterEncoding=GBK"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
<br />
将数据库驱动程序加到tomcat6/lib下<br />
<br />
<br />
</p>
<img src ="http://www.blogjava.net/poower/aggbug/218322.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/poower/" target="_blank">poower</a> 2008-07-29 11:54 <a href="http://www.blogjava.net/poower/articles/218322.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>