﻿<?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-心梦帆影Java技术博客</title><link>http://www.blogjava.net/rongxh7/</link><description>相信自己的人生有无限可能，把握每一个机会，全力以赴……</description><language>zh-cn</language><lastBuildDate>Wed, 29 Apr 2026 02:16:56 GMT</lastBuildDate><pubDate>Wed, 29 Apr 2026 02:16:56 GMT</pubDate><ttl>60</ttl><item><title>Java可变参数方法重载时要注意的几个问题</title><link>http://www.blogjava.net/rongxh7/archive/2010/04/18/318698.html</link><dc:creator>心梦帆影</dc:creator><author>心梦帆影</author><pubDate>Sun, 18 Apr 2010 15:59:00 GMT</pubDate><guid>http://www.blogjava.net/rongxh7/archive/2010/04/18/318698.html</guid><wfw:comment>http://www.blogjava.net/rongxh7/comments/318698.html</wfw:comment><comments>http://www.blogjava.net/rongxh7/archive/2010/04/18/318698.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rongxh7/comments/commentRss/318698.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rongxh7/services/trackbacks/318698.html</trackback:ping><description><![CDATA[<p>JDK1.5引进了方法的可变参数，受到许多开发人员的青睐。有了这种机制，我们可以写出类似于JavaScript的arguments那样的带任意多个参数的方法。Java的可变参数，可用于普通方法上，也可以用于构造方法上，大大增大了我们所写方法的适用范围。</p>
<p><br />
然而，使用可变参数时，要注意几个问题：</p>
<p>&nbsp;</p>
<p><font style="font-family: " size="3"><strong>1) 可变参数方法与数组参数方法重载时</strong></font></p>
<p>&nbsp;</p>
<pre class="java" name="code">public class MethodParams{
//带可变参数的方法
public void hello(String ...params) {
System.out.println("执行带可变参数的方法，参数个数为：" + params.length);
}
//带数组参数的方法
public void hello(String[] params) {
System.out.println("执行带数组参数的方法，数组长度为：" + params.length);
}
}</pre>
<p>我们写个测试代码运行一下看看结果如何:</p>
<pre class="java" name="code">	MethodParams mp = new MethodParams();
mp.hello("AAA","BBB","CCC");</pre>
<p>&nbsp;&nbsp;编译时报错:</p>
<pre class="java" name="code">MethodParams.java:7: 无法在 MethodParams 中同时声明 hello(java.lang.String[]) 和
hello(java.lang.String...)
public void hello(String[] params) {
^
1 错误</pre>
<p><font style="font-family: " color="#ff00ff">结论：&nbsp;JDK不允许存在, 带可变参数的方法和带数组参数的方法在同一类中重载。</font></p>
<p><font style="font-family: " color="#ff00ff">可变参数==数组参数？ 在带可变参数的方法体时，读取可变参数列表时，就是以数组的方式来读取；</font></p>
<p><font style="font-family: " color="#ff00ff">带可变参数的方法可以传入一个数组参数，但带数组参数的方法却不能传入可变参数。</font></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><font style="font-family: " size="3"><strong>2) 可变参数方法与可变参数方法重载时</strong></font></p>
<pre class="java" name="code">	//带可变参数的方法
public void hello(String ...params) {
System.out.println("执行带可变参数的方法，参数个数为：" + params.length);
}
//带固定参数和可变参数
public void hello(String param1, String ...params) {
System.out.println("执行带固定参数和可变参数的方法，参数个数为：" + params.length);
}</pre>
<p>&nbsp;&nbsp;测试代码跟上例中一样,编译时报错:</p>
<pre class="java" name="code">MethodParams.java:18: 对 hello 的引用不明确，MethodParams 中的 方法 hello(java.l
ang.String...) 和 MethodParams 中的 方法 hello(java.lang.String,java.lang.String
...) 都匹配
mp.hello("AAA","BBB","CCC");
^
1 错误</pre>
<p><font style="font-family: " color="#ff00ff">&nbsp;结论：JDK不允许存在，带相同参数类型列表（Type List）的参数列表的方法在同一类中重载。</font></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><font style="font-family: " size="3"><strong>3）可变参数方法与无参数方法重载时</strong></font></p>
<pre class="java" name="code">	//带可变参数的方法
public void hello(String ...params) {
System.out.println("执行带可变参数的方法，参数个数为：" + params.length);
}
//不带参数的方法
public void hello() {
System.out.println("执行不带参数的方法");
}</pre>
<p>我们都知道，可变参数即可带0个或者多个参数，如果带0个参数即不带参数时，JDK会怎么处理呢？</p>
<p>那我们就以执行"mp.hello()"来测试一下。编译通过，运行正常，调用的还带参数的hello()方法。</p>
<p><font style="font-family: " color="#ff00ff">结论：当可变参数方法与不带参数的方法重载时，JDK默认调用的是无参数的方法。若类中没有定义无参数的方法，则会调用可变参数的方法。</font></p>
<img src ="http://www.blogjava.net/rongxh7/aggbug/318698.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rongxh7/" target="_blank">心梦帆影</a> 2010-04-18 23:59 <a href="http://www.blogjava.net/rongxh7/archive/2010/04/18/318698.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java的代理模式（通过公共接口实现）</title><link>http://www.blogjava.net/rongxh7/archive/2010/03/31/317070.html</link><dc:creator>心梦帆影</dc:creator><author>心梦帆影</author><pubDate>Wed, 31 Mar 2010 08:00:00 GMT</pubDate><guid>http://www.blogjava.net/rongxh7/archive/2010/03/31/317070.html</guid><wfw:comment>http://www.blogjava.net/rongxh7/comments/317070.html</wfw:comment><comments>http://www.blogjava.net/rongxh7/archive/2010/03/31/317070.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/rongxh7/comments/commentRss/317070.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rongxh7/services/trackbacks/317070.html</trackback:ping><description><![CDATA[代理模式的一种常见的实现方案是，定义一个接口或抽象类，并派生出目标子类，和代理子类。我们要操作的是目标子类里的方法，而很多时候，我们需要为目录子类中的方法增加额外的处理，如果增加日志功能、条件判断等，这时候，就很有必要用到代理类。<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008000;">/**</span><span style="color: #008000;"><br />
&nbsp;*&nbsp;代理子类和目标子类的公共接口<br />
&nbsp;*&nbsp;</span><span style="color: #808080;">@author</span><span style="color: #008000;">&nbsp;rongxinhua<br />
&nbsp;*<br />
&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">interface</span><span style="color: #000000;">&nbsp;MyInterface&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;doOperation();<br />
<br />
}</span></div>
<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008000;">/**</span><span style="color: #008000;"><br />
&nbsp;*&nbsp;目标子类<br />
&nbsp;*&nbsp;</span><span style="color: #808080;">@author</span><span style="color: #008000;">&nbsp;rongxinhua<br />
&nbsp;*<br />
&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><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;RealClass&nbsp;</span><span style="color: #0000ff;">implements</span><span style="color: #000000;">&nbsp;MyInterface&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/**</span><span style="color: #008000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;我们要执行的目标方法<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><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;">void</span><span style="color: #000000;">&nbsp;doOperation()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">doOperation<img src="http://www.blogjava.net/Images/dot.gif" alt="" /></span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
}</span></div>
<br />
而在没有使用代理模式的情况下，我们是这样执行目标方法的：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RealClass&nbsp;realObj&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;RealClass();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;realObj.doOperation();&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">调用目标方法</span></div>
打印时输出：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">doOperation<img src="http://www.blogjava.net/Images/dot.gif" alt="" /></span></div>
<br />
<br />
而我们要加入额外的处理的话，就可以使用代理类了：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008000;">/**</span><span style="color: #008000;"><br />
&nbsp;*&nbsp;代理子类<br />
&nbsp;*&nbsp;</span><span style="color: #808080;">@author</span><span style="color: #008000;">&nbsp;rongxinhua<br />
&nbsp;*<br />
&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><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;ProxyClass&nbsp;</span><span style="color: #0000ff;">implements</span><span style="color: #000000;">&nbsp;MyInterface&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;MyInterface&nbsp;realObj;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">目标子类对象</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;ProxyClass(MyInterface&nbsp;realObj)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.realObj&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;realObj;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/**</span><span style="color: #008000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;调用目标子类的方法，并在其中加入了前置处理和后置处理<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><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;">void</span><span style="color: #000000;">&nbsp;doOperation()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;doBefore();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;realObj.doOperation();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;doAfter();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/**</span><span style="color: #008000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&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;">private</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;doBefore()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">doBefore<img src="http://www.blogjava.net/Images/dot.gif" alt="" /></span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/**</span><span style="color: #008000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&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;">private</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;doAfter()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">doAfter<img src="http://www.blogjava.net/Images/dot.gif" alt="" /></span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
}</span></div>
<br />
有了代理类，我们可以这样执行目标方法：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ProxyClass&nbsp;proxyObj&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;ProxyClass(</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;RealClass());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proxyObj.doOperation();&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">通过代理对象调用doOperation方法</span></div>
<br />
打印时输出：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">doBefore<img src="http://www.blogjava.net/Images/dot.gif" alt="" /><br />
doOperation<img src="http://www.blogjava.net/Images/dot.gif" alt="" /><br />
doAfter<img src="http://www.blogjava.net/Images/dot.gif" alt="" /></span></div>
<br />
本文只是代理模式的在Java中的简单使用，而代理模式与Java反射机制的整合，为Java组件开发增加了强大的生命力，有兴趣的朋友可看我另一个博客中的文章：<a href="http://www.javaeye.com/topic/629339">探讨代理模式与Java反射机制的应用</a>。<br />
<br />
<img src ="http://www.blogjava.net/rongxh7/aggbug/317070.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rongxh7/" target="_blank">心梦帆影</a> 2010-03-31 16:00 <a href="http://www.blogjava.net/rongxh7/archive/2010/03/31/317070.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>舍友笔试中的一道算法题（我的解法）</title><link>http://www.blogjava.net/rongxh7/archive/2010/03/23/316228.html</link><dc:creator>心梦帆影</dc:creator><author>心梦帆影</author><pubDate>Mon, 22 Mar 2010 18:04:00 GMT</pubDate><guid>http://www.blogjava.net/rongxh7/archive/2010/03/23/316228.html</guid><wfw:comment>http://www.blogjava.net/rongxh7/comments/316228.html</wfw:comment><comments>http://www.blogjava.net/rongxh7/archive/2010/03/23/316228.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.blogjava.net/rongxh7/comments/commentRss/316228.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rongxh7/services/trackbacks/316228.html</trackback:ping><description><![CDATA[我的舍友晓杰（C++高手）今天去了一家IT公司笔面试，其中就有这么一道题。<br />
<br />
<span style="color: red">题目大意：输入一个字符串，显示出字符串的所有排列。例如：输入"abc"，就得输出"abc"、"acb"、"bac"、"bca"、"cab"、"cba" 所有可能的序列。</span><br />
<br />
颇有意义的一道题，我决定用Java语言来写一写。代码如下：<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.Arrays;<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;CharList&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">遍历所有可能的排列结果</span><span style="color: #008000"><br />
</span><span style="color: #000000">&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;traversal(</span><span style="color: #0000ff">char</span><span style="color: #000000">[]&nbsp;chss,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;index){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">for循环,从index位置开始向前(向右),&nbsp;index位置的数与i位置的数互换</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</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;index;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;chss.length;&nbsp;i&nbsp;</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">[]&nbsp;chs&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Arrays.copyOf(chss,&nbsp;chss.length);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">Copy出新数组(为了修改其值时互不影响)</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;temp&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;chs[index];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chs[index]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;chs[i];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chs[i]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;temp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(index&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;chs.length</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">到了字符串末,&nbsp;输出结果</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;String(chs));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">break</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">跟出此次循环,&nbsp;此traversal方法执行完毕,跳回上一级循环(在上一个方法体中)</span><span style="color: #008000"><br />
</span><span style="color: #000000">&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;traversal(chs,&nbsp;index</span><span style="color: #000000">+</span><span style="color: #000000">1</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">递归</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">Test</span><span style="color: #008000"><br />
</span><span style="color: #000000">&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;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;str&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">abcd</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">[]&nbsp;chs&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;str.toCharArray();&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">转成字符数组</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;traversal(chs,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
}</span></div>
<br />
程序执行，输出结果为：<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000">abcd<br />
abdc<br />
acbd<br />
acdb<br />
adcb<br />
adbc<br />
bacd<br />
badc<br />
bcad<br />
bcda<br />
bdca<br />
bdac<br />
cbad<br />
cbda<br />
cabd<br />
cadb<br />
cdab<br />
cdba<br />
dbca<br />
dbac<br />
dcba<br />
dcab<br />
dacb<br />
dabc</span></div>
<img src ="http://www.blogjava.net/rongxh7/aggbug/316228.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rongxh7/" target="_blank">心梦帆影</a> 2010-03-23 02:04 <a href="http://www.blogjava.net/rongxh7/archive/2010/03/23/316228.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>18位身份证验证小组件idchecker发布</title><link>http://www.blogjava.net/rongxh7/archive/2010/01/03/308097.html</link><dc:creator>心梦帆影</dc:creator><author>心梦帆影</author><pubDate>Sun, 03 Jan 2010 10:43:00 GMT</pubDate><guid>http://www.blogjava.net/rongxh7/archive/2010/01/03/308097.html</guid><wfw:comment>http://www.blogjava.net/rongxh7/comments/308097.html</wfw:comment><comments>http://www.blogjava.net/rongxh7/archive/2010/01/03/308097.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/rongxh7/comments/commentRss/308097.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rongxh7/services/trackbacks/308097.html</trackback:ping><description><![CDATA[<p><strong>下载地址：</strong><a title="http://codeshop.googlecode.com/files/idchecker.zip" href="http://codeshop.googlecode.com/files/idchecker.zip"><strong>http://codeshop.googlecode.com/files/idchecker.zip</strong></a></p>
<p>提供给外部调用的cn.idchecker.check.Checker类的相关方法如下表：</p>
<table border="1" cellspacing="0" cellpadding="2" width="689">
    <tbody>
        <tr>
            <td valign="top" width="201"><strong>方法</strong></td>
            <td valign="top" width="174"><strong>方法作用</strong></td>
            <td valign="top" width="312"><strong>参数及返回值</strong></td>
        </tr>
        <tr>
            <td valign="top" width="201">Checker(String num)</td>
            <td valign="top" width="174">构造方法</td>
            <td valign="top" width="312">参数num为18位身份证号码的字符串</td>
        </tr>
        <tr>
            <td valign="top" width="201">boolean checkLength()</td>
            <td valign="top" width="174">验证身份证长度是否正确</td>
            <td valign="top" width="312">长度为18，则返回true，否则返回false</td>
        </tr>
        <tr>
            <td valign="top" width="201">boolean checkBirth()</td>
            <td valign="top" width="174">验证出生生日码是否合法</td>
            <td valign="top" width="312">合法则返回true，否则返回false</td>
        </tr>
        <tr>
            <td valign="top" width="201">boolean checkAddr()</td>
            <td valign="top" width="174">验证地址码是否存在</td>
            <td valign="top" width="312">存在则返回true，否则返回false</td>
        </tr>
        <tr>
            <td valign="top" width="201">boolean checkCheckCode()</td>
            <td valign="top" width="174">计算校验码是否正确</td>
            <td valign="top" width="312">正确则返回true，否则返回false</td>
        </tr>
        <tr>
            <td valign="top" width="201">boolean check()</td>
            <td valign="top" width="174">总的身份证验证，验证顺序：长度 -&gt; 生日 -&gt; 最后一位校验码 -&gt; 地址</td>
            <td valign="top" width="312">若遇到有一项目不合法即返回false，所有验证通过才返回true。验证后，可通过调用getErrorMsg()方法获取错误信息</td>
        </tr>
        <tr>
            <td valign="top" width="201">boolean checkAll()</td>
            <td valign="top" width="174">总的身份证验证，验证项目包括长度、地址、生日、最后一位校验码</td>
            <td valign="top" width="312">身份证合法则返回true，否则false。验证后，可调用getErrorMsgs()方法获取错误信息集合</td>
        </tr>
        <tr>
            <td valign="top" width="201">String getBirth()</td>
            <td valign="top" width="174">获取出生年月日</td>
            <td valign="top" width="312">返回&#8220;2010年01月12日&#8221;格式的生日字符串通串</td>
        </tr>
        <tr>
            <td valign="top" width="201">String getAddr()</td>
            <td valign="top" width="174">获取公民籍贯</td>
            <td valign="top" width="312">返回籍贯字符串（"xx省xx市xx县&#8221;）</td>
        </tr>
        <tr>
            <td valign="top" width="201">String getSex()</td>
            <td valign="top" width="174">获取性别</td>
            <td valign="top" width="312">返回&#8220;男&#8221;或&#8220;女&#8221;</td>
        </tr>
        <tr>
            <td valign="top" width="201">String getErrorMsg()</td>
            <td valign="top" width="174">获取错误信息</td>
            <td valign="top" width="312">返回错误信息字符串</td>
        </tr>
        <tr>
            <td valign="top" width="201">public Set&lt;String&gt; getErrorMsgs()</td>
            <td valign="top" width="174">获取错误信息集合</td>
            <td valign="top" width="312">返回错误信息集合</td>
        </tr>
    </tbody>
</table>
<p>用法举例 1 ：解压缩&#8220;idchecker.zip&#8221;，将其目录下的&#8220;idchecker.jar&#8221; 包引进Java Project中，以下是测试程序：</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;TestChecker&nbsp;{&nbsp;<br />
<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;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Checker&nbsp;checker&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Checker(</span><span style="color: #000000">"</span><span style="color: #000000">44010619860710145X</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">出生年月日&nbsp;&nbsp;:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;checker.getBirth());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</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;checker.getSex());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">居民地址&nbsp;&nbsp;:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;checker.getAddr());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</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;checker.check()&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;checker.getErrorMsg());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;checker.checkAll();&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(String&nbsp;msg&nbsp;:&nbsp;checker.getErrorMsgs())&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print(msg&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">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br />
<br />
}<br />
</span></div>
<p><br />
运行结果：</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000">出生年月日&nbsp;&nbsp;:&nbsp;1986年07月10日<br />
性别&nbsp;&nbsp;：男<br />
居民地址&nbsp;&nbsp;:&nbsp;广东省广州市天河区&nbsp;<br />
身份证号码是否合法&nbsp;:&nbsp;true&nbsp;&nbsp;</span></div>
<p><br />
用法举例 2 ：将&#8220;idchecker.jar&#8221; 包引进到Web Project的lib目录下，以下是测试程序：</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #0000ff">&lt;?</span><span style="color: #ff00ff">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"&nbsp;</span><span style="color: #0000ff">?&gt;</span><span style="color: #000000"><br />
</span><span style="background-color: #ffff00; color: #000000">&lt;%</span><span style="background-color: #f5f5f5; color: #000000">@&nbsp;page&nbsp;language</span><span style="background-color: #f5f5f5; color: #000000">=</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">java</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">&nbsp;contentType</span><span style="background-color: #f5f5f5; color: #000000">=</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">text/html;&nbsp;charset=UTF-8</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;pageEncoding</span><span style="background-color: #f5f5f5; color: #000000">=</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">UTF-8</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #ffff00; color: #000000">%&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;!</span><span style="color: #ff00ff">DOCTYPE&nbsp;html&nbsp;PUBLIC&nbsp;"-//W3C//DTD&nbsp;XHTML&nbsp;1.0&nbsp;Transitional//EN"&nbsp;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">html&nbsp;</span><span style="color: #ff0000">xmlns</span><span style="color: #0000ff">="http://www.w3.org/1999/xhtml"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">head</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">meta&nbsp;</span><span style="color: #ff0000">http-equiv</span><span style="color: #0000ff">="Content-Type"</span><span style="color: #ff0000">&nbsp;content</span><span style="color: #0000ff">="text/html;&nbsp;charset=UTF-8"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">title</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">测试idchecker组件</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">title</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">head</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">h1</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">身份证验证</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">h1</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="background-color: #ffff00; color: #000000">&lt;%</span><span style="background-color: #f5f5f5; color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #f5f5f5; color: #0000ff">String</span><span style="background-color: #f5f5f5; color: #000000">&nbsp;id&nbsp;</span><span style="background-color: #f5f5f5; color: #000000">=</span><span style="background-color: #f5f5f5; color: #000000">&nbsp;request.getParameter(</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">ID</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #f5f5f5; color: #0000ff">if</span><span style="background-color: #f5f5f5; color: #000000">(id&nbsp;!</span><span style="background-color: #f5f5f5; color: #000000">=</span><span style="background-color: #f5f5f5; color: #000000">&nbsp;</span><span style="background-color: #f5f5f5; color: #0000ff">null</span><span style="background-color: #f5f5f5; color: #000000">&nbsp;</span><span style="background-color: #f5f5f5; color: #000000">&amp;&amp;</span><span style="background-color: #f5f5f5; color: #000000">&nbsp;!</span><span style="background-color: #f5f5f5; color: #000000">""</span><span style="background-color: #f5f5f5; color: #000000">.equals(id.trim())){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cn.idchecker.check.Checker&nbsp;checker&nbsp;</span><span style="background-color: #f5f5f5; color: #000000">=</span><span style="background-color: #f5f5f5; color: #000000">&nbsp;</span><span style="background-color: #f5f5f5; color: #0000ff">new</span><span style="background-color: #f5f5f5; color: #000000">&nbsp;cn.idchecker.check.Checker(id);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #f5f5f5; color: #0000ff">if</span><span style="background-color: #f5f5f5; color: #000000">(checker.check())&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.print(checker.getSex()&nbsp;</span><span style="background-color: #f5f5f5; color: #000000">+</span><span style="background-color: #f5f5f5; color: #000000">&nbsp;</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">&lt;br/&gt;</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.print(checker.getBirth()&nbsp;</span><span style="background-color: #f5f5f5; color: #000000">+</span><span style="background-color: #f5f5f5; color: #000000">&nbsp;</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">&lt;br/&gt;</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.print(checker.getAddr());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="background-color: #f5f5f5; color: #0000ff">else</span><span style="background-color: #f5f5f5; color: #000000">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.print(</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">身份证不合法！</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">&nbsp;</span><span style="background-color: #f5f5f5; color: #000000">+</span><span style="background-color: #f5f5f5; color: #000000">&nbsp;</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">&lt;br/&gt;</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.print(checker.getErrorMsg());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br />
<br />
</span><span style="background-color: #ffff00; color: #000000">%&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">form&nbsp;</span><span style="color: #ff0000">action</span><span style="color: #0000ff">="input.jsp"</span><span style="color: #ff0000">&nbsp;method</span><span style="color: #0000ff">="post"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;身份证号码&nbsp;：</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">input&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="ID"</span><span style="color: #ff0000">&nbsp;type</span><span style="color: #0000ff">="text"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="&lt;%=id&nbsp;%&gt;"</span><span style="color: #0000ff">/&gt;</span><span style="color: #ff0000">&amp;nbsp;&amp;nbsp;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">input&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="submit"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="验证"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">form</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">html</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;<br />
</span></div>
<p><br />
运行结果：</p>
<p>&nbsp;<a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/18idchecker_EB2F/image_6.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/18idchecker_EB2F/image_thumb_2.png" width="326" height="201" /></a> <a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/18idchecker_EB2F/image_2.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/18idchecker_EB2F/image_thumb.png" width="323" height="203" /></a></p>
<img src ="http://www.blogjava.net/rongxh7/aggbug/308097.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rongxh7/" target="_blank">心梦帆影</a> 2010-01-03 18:43 <a href="http://www.blogjava.net/rongxh7/archive/2010/01/03/308097.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>写个观察者模式(Observer Pattern)的例子</title><link>http://www.blogjava.net/rongxh7/archive/2009/12/20/306737.html</link><dc:creator>心梦帆影</dc:creator><author>心梦帆影</author><pubDate>Sun, 20 Dec 2009 11:37:00 GMT</pubDate><guid>http://www.blogjava.net/rongxh7/archive/2009/12/20/306737.html</guid><wfw:comment>http://www.blogjava.net/rongxh7/comments/306737.html</wfw:comment><comments>http://www.blogjava.net/rongxh7/archive/2009/12/20/306737.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/rongxh7/comments/commentRss/306737.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rongxh7/services/trackbacks/306737.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Java的API中有两组接口类是用来写观察者模式用的，分别是java.util.Observable、java.util.Observer和java.util.EventListener、Java.util.EventObject。本文并没有直接使用到这些API，而是自定义一套观察者模式中相关的接口类，且选取一个日常生活中常见的一个事件来说明观察者模式的使用。现实场景：有一名店（Shop）...&nbsp;&nbsp;<a href='http://www.blogjava.net/rongxh7/archive/2009/12/20/306737.html'>阅读全文</a><img src ="http://www.blogjava.net/rongxh7/aggbug/306737.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rongxh7/" target="_blank">心梦帆影</a> 2009-12-20 19:37 <a href="http://www.blogjava.net/rongxh7/archive/2009/12/20/306737.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DIV+CSS布局中自适应高度和宽度</title><link>http://www.blogjava.net/rongxh7/archive/2009/12/14/305828.html</link><dc:creator>心梦帆影</dc:creator><author>心梦帆影</author><pubDate>Sun, 13 Dec 2009 18:19:00 GMT</pubDate><guid>http://www.blogjava.net/rongxh7/archive/2009/12/14/305828.html</guid><wfw:comment>http://www.blogjava.net/rongxh7/comments/305828.html</wfw:comment><comments>http://www.blogjava.net/rongxh7/archive/2009/12/14/305828.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.blogjava.net/rongxh7/comments/commentRss/305828.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rongxh7/services/trackbacks/305828.html</trackback:ping><description><![CDATA[<p>DIV+CSS布局，应用越来越普遍，小的个人主页、大的门户网站，很多都采用了DIV+CSS布局。在设计过程中，有时会遇到一些问题，要注意一下。且看下面的网页截图：</p>
<p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/DIVCSS_112A/%E6%9C%AA%E5%91%BD%E5%90%8D_2.png"><img style="border: 0px none ; display: inline;" title="未命名" alt="未命名" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/DIVCSS_112A/%E6%9C%AA%E5%91%BD%E5%90%8D_thumb_2.png" border="0" height="416" width="627" /></a> </p>
<p>从截图中， 我们可看出，</p>
<p>问题1：右边的内容多时，会导致左边露空白；或者左边内容多时，会导致右边露空白。怎么解决？</p>
<p>问题2：右边那一大块层的宽度应该设置多少呢？设置小了，会与右边界不对齐，设置大了，整块层会被挤到下一行去。怎么办？</p>
<p>其实，两个问题，都可归结到同一个问题，即如何使得层的高度或宽度达到自适应的效果？</p>
<p>且看下面的HTML和CSS代码，详细讲解在CSS代码注释中：</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">&lt;!</span><span style="color: #ff00ff;">DOCTYPE&nbsp;HTML&nbsp;PUBLIC&nbsp;"-//W3C//DTD&nbsp;HTML&nbsp;4.01&nbsp;Transitional//EN"<br />
"http://www.w3.org/TR/html4/loose.dtd"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">html&nbsp;</span><span style="color: #ff0000;">xmlns</span><span style="color: #0000ff;">="http://www.w3.org/1999/xhtml"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">head</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">meta&nbsp;</span><span style="color: #ff0000;">http-equiv</span><span style="color: #0000ff;">="Content-Type"</span><span style="color: #ff0000;">&nbsp;content</span><span style="color: #0000ff;">="text/html;&nbsp;charset=utf-8"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">title</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">New&nbsp;Web&nbsp;Project</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">title</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">link&nbsp;</span><span style="color: #ff0000;">rel</span><span style="color: #0000ff;">="stylesheet"</span><span style="color: #ff0000;">&nbsp;type</span><span style="color: #0000ff;">="text/css"</span><span style="color: #ff0000;">&nbsp;href</span><span style="color: #0000ff;">="index.css"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">head</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">body</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">div&nbsp;</span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">="container"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">div&nbsp;</span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">="header"</span><span style="color: #0000ff;">&gt;&lt;/</span><span style="color: #800000;">div</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">div&nbsp;</span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">="middleBody"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">div&nbsp;</span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">="sider"</span><span style="color: #ff0000;">&nbsp;class</span><span style="color: #0000ff;">="column"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">p</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">心梦帆影</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">p</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">p</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">心梦帆影</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">p</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">div</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">div&nbsp;</span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">="content"</span><span style="color: #ff0000;">&nbsp;class</span><span style="color: #0000ff;">="column"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">p</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">http://www.blogjava.net/rongxh7</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">p</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">p</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">http://www.blogjava.net/rongxh7</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">p</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">p</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">http://www.blogjava.net/rongxh7</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">p</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">p</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">http://www.blogjava.net/rongxh7</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">p</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">p</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">http://www.blogjava.net/rongxh7</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">p</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">p</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">http://www.blogjava.net/rongxh7</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">p</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">p</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">http://www.blogjava.net/rongxh7</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">p</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">p</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">http://www.blogjava.net/rongxh7</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">p</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">p</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">http://www.blogjava.net/rongxh7</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">p</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">p</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">http://www.blogjava.net/rongxh7</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">p</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">div</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">div</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">div&nbsp;</span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">="footer"</span><span style="color: #0000ff;">&gt;&lt;/</span><span style="color: #800000;">div</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">div</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">body</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">html</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span></div>
<p><br />
</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #800000;">body&nbsp;</span><span style="color: #000000;">{</span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;margin-top</span><span style="color: #000000;">:</span><span style="color: #0000ff;">0px</span><span style="color: #000000;">;</span><span style="color: #ff0000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;去除网页上边空白&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #ff0000;"><br />
</span><span style="color: #000000;">}</span><span style="color: #800000;"><br />
</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;大容器，包含下面所有层&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #800000;"><br />
#container&nbsp;</span><span style="color: #000000;">{</span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;width</span><span style="color: #000000;">:</span><span style="color: #0000ff;">800px</span><span style="color: #000000;">;</span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;margin</span><span style="color: #000000;">:</span><span style="color: #0000ff;">0px&nbsp;auto</span><span style="color: #000000;">;</span><span style="color: #ff0000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;居中&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #ff0000;"><br />
</span><span style="color: #000000;">}</span><span style="color: #800000;"><br />
</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;头部&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #800000;"><br />
#header&nbsp;</span><span style="color: #000000;">{</span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;width</span><span style="color: #000000;">:</span><span style="color: #0000ff;">100%</span><span style="color: #000000;">;</span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;height</span><span style="color: #000000;">:</span><span style="color: #0000ff;">100px</span><span style="color: #000000;">;</span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;background</span><span style="color: #000000;">:</span><span style="color: #0000ff;">#FFE1FF</span><span style="color: #000000;">;</span><span style="color: #ff0000;"><br />
</span><span style="color: #000000;">}</span><span style="color: #800000;"><br />
</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;中部，包括左边区(sider)和右边内容区(content)&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #800000;"><br />
#middleBody&nbsp;</span><span style="color: #000000;">{</span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;width</span><span style="color: #000000;">:</span><span style="color: #0000ff;">100%</span><span style="color: #000000;">;</span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;overflow</span><span style="color: #000000;">:</span><span style="color: #0000ff;">hidden</span><span style="color: #000000;">;</span><span style="color: #ff0000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;隐藏超出的部分&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #ff0000;"><br />
</span><span style="color: #000000;">}</span><span style="color: #800000;"><br />
</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;左边&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #800000;"><br />
#sider&nbsp;</span><span style="color: #000000;">{</span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;width</span><span style="color: #000000;">:</span><span style="color: #0000ff;">200px</span><span style="color: #000000;">;</span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;float</span><span style="color: #000000;">:</span><span style="color: #0000ff;">left</span><span style="color: #000000;">;</span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;background</span><span style="color: #000000;">:</span><span style="color: #0000ff;">#FFE4E1</span><span style="color: #000000;">;</span><span style="color: #ff0000;"><br />
</span><span style="color: #000000;">}</span><span style="color: #800000;"><br />
</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;右边主内容区&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #800000;"><br />
#content&nbsp;</span><span style="color: #000000;">{</span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;此两行是#content自适应宽度的关键，旨在与右边界对齐，且不被挤到下面去&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;padding-right</span><span style="color: #000000;">:</span><span style="color: #0000ff;">10000px</span><span style="color: #000000;">;</span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;margin-right</span><span style="color: #000000;">:</span><span style="color: #0000ff;">-10000px</span><span style="color: #000000;">;</span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;float</span><span style="color: #000000;">:</span><span style="color: #0000ff;">left</span><span style="color: #000000;">;</span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;background</span><span style="color: #000000;">:</span><span style="color: #0000ff;">#FFFAF0</span><span style="color: #000000;">;</span><span style="color: #ff0000;"><br />
</span><span style="color: #000000;">}</span><span style="color: #800000;"><br />
</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;#sider和#content共同属性，此为自适应高度的关键，旨在#sider和#content下边界对齐，且不会露白</span><span style="color: #008000;">*/</span><span style="color: #800000;"><br />
.column&nbsp;</span><span style="color: #000000;">{</span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;padding-bottom</span><span style="color: #000000;">:</span><span style="color: #0000ff;">20000px</span><span style="color: #000000;">;</span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;margin-bottom</span><span style="color: #000000;">:</span><span style="color: #0000ff;">-20000px</span><span style="color: #000000;">;</span><span style="color: #ff0000;"><br />
</span><span style="color: #000000;">}</span><span style="color: #800000;"><br />
</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;底部&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #800000;"><br />
#footer</span><span style="color: #000000;">{</span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;clear</span><span style="color: #000000;">:</span><span style="color: #0000ff;">left</span><span style="color: #000000;">;</span><span style="color: #ff0000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;防止float:left对footer的影响&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;width</span><span style="color: #000000;">:</span><span style="color: #0000ff;">100%</span><span style="color: #000000;">;</span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;height</span><span style="color: #000000;">:</span><span style="color: #0000ff;">80px</span><span style="color: #000000;">;</span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;background</span><span style="color: #000000;">:</span><span style="color: #0000ff;">#FFE4B5</span><span style="color: #000000;">;</span><span style="color: #ff0000;"><br />
</span><span style="color: #000000;">}</span><span style="color: #800000;"><br />
<br />
</span></div>
<p>运行截图如下：</p>
<p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/DIVCSS_112A/image_2.png"><img style="border: 0px none ; display: inline;" title="image" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/DIVCSS_112A/image_thumb.png" border="0" height="472" width="641" /></a></p>
<img src ="http://www.blogjava.net/rongxh7/aggbug/305828.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rongxh7/" target="_blank">心梦帆影</a> 2009-12-14 02:19 <a href="http://www.blogjava.net/rongxh7/archive/2009/12/14/305828.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Div+CSS布局的宽度计算及在各浏览器中的差异比较</title><link>http://www.blogjava.net/rongxh7/archive/2009/12/14/305827.html</link><dc:creator>心梦帆影</dc:creator><author>心梦帆影</author><pubDate>Sun, 13 Dec 2009 16:39:00 GMT</pubDate><guid>http://www.blogjava.net/rongxh7/archive/2009/12/14/305827.html</guid><wfw:comment>http://www.blogjava.net/rongxh7/comments/305827.html</wfw:comment><comments>http://www.blogjava.net/rongxh7/archive/2009/12/14/305827.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/rongxh7/comments/commentRss/305827.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rongxh7/services/trackbacks/305827.html</trackback:ping><description><![CDATA[<p>对比于传统的表格布局和框架布局，DIV+CSS布局有着布局容易、改版方便、样式定义灵活、HTML代码简洁清晰、易于JavaScript操控等优点。在众口皆碑的同时，对于一些初学者，总会遇到各种各样的问题，比如说DIV的宽度或高度的计算问题。</p>
<p>我们来探讨一下影响DIV宽度或高度的属性有哪些？</p>
<table border="1" cellpadding="2" cellspacing="0" width="400">
    <tbody>
        <tr>
            <td valign="top" width="400"><font color="#ff00ff">DIV的宽度 = width + padding + border + margin</font></td>
        </tr>
    </tbody>
</table>
<p>仅从一条公式上看，可能有点难理解，我们通过测试代码和截图来观察一下。为了测试结果观察直观，我们只测试一边，即左边，即本来padding、border、margin的宽度计算，都是左右两边都算在内的，这里就只测试左边，右边同理。</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">&lt;?</span><span style="color: #ff00ff;">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"&nbsp;</span><span style="color: #0000ff;">?&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;!</span><span style="color: #ff00ff;">DOCTYPE&nbsp;html&nbsp;PUBLIC&nbsp;"-//W3C//DTD&nbsp;XHTML&nbsp;1.0&nbsp;Transitional//EN"&nbsp;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">html&nbsp;</span><span style="color: #ff0000;">xmlns</span><span style="color: #0000ff;">="http://www.w3.org/1999/xhtml"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">head</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">meta&nbsp;</span><span style="color: #ff0000;">http-equiv</span><span style="color: #0000ff;">="Content-Type"</span><span style="color: #ff0000;">&nbsp;content</span><span style="color: #0000ff;">="text/html;&nbsp;charset=UTF-8"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">title</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">测试DIV的宽度</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">title</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">style&nbsp;</span><span style="color: #ff0000;">type</span><span style="color: #0000ff;">="text/css"</span><span style="color: #0000ff;">&gt;</span><span style="background-color: #f5f5f5; color: #800000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#container&nbsp;</span><span style="background-color: #f5f5f5; color: #000000;">{</span><span style="background-color: #f5f5f5; color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #f5f5f5; color: #008000;">/*</span><span style="background-color: #f5f5f5; color: #008000;">&nbsp;左参考线&nbsp;</span><span style="background-color: #f5f5f5; color: #008000;">*/</span><span style="background-color: #f5f5f5; color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;border-left</span><span style="background-color: #f5f5f5; color: #000000;">:</span><span style="background-color: #f5f5f5; color: #0000ff;">1px&nbsp;solid&nbsp;#B23AEE</span><span style="background-color: #f5f5f5; color: #000000;">;</span><span style="background-color: #f5f5f5; color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #f5f5f5; color: #000000;">}</span><span style="background-color: #f5f5f5; color: #800000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #f5f5f5; color: #008000;">/*</span><span style="background-color: #f5f5f5; color: #008000;">&nbsp;定义各个层的公共属性&nbsp;</span><span style="background-color: #f5f5f5; color: #008000;">*/</span><span style="background-color: #f5f5f5; color: #800000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#div1,#div2,#div3,#div4</span><span style="background-color: #f5f5f5; color: #000000;">{</span><span style="background-color: #f5f5f5; color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width</span><span style="background-color: #f5f5f5; color: #000000;">:</span><span style="background-color: #f5f5f5; color: #0000ff;">200px</span><span style="background-color: #f5f5f5; color: #000000;">;</span><span style="background-color: #f5f5f5; color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;height</span><span style="background-color: #f5f5f5; color: #000000;">:</span><span style="background-color: #f5f5f5; color: #0000ff;">50px</span><span style="background-color: #f5f5f5; color: #000000;">;</span><span style="background-color: #f5f5f5; color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;background</span><span style="background-color: #f5f5f5; color: #000000;">:</span><span style="background-color: #f5f5f5; color: #0000ff;">#FFE1FF</span><span style="background-color: #f5f5f5; color: #000000;">;</span><span style="background-color: #f5f5f5; color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;margin-bottom</span><span style="background-color: #f5f5f5; color: #000000;">:</span><span style="background-color: #f5f5f5; color: #0000ff;">5px</span><span style="background-color: #f5f5f5; color: #000000;">;</span><span style="background-color: #f5f5f5; color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #f5f5f5; color: #000000;">}</span><span style="background-color: #f5f5f5; color: #800000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #f5f5f5; color: #008000;">/*</span><span style="background-color: #f5f5f5; color: #008000;">&nbsp;只有width&nbsp;</span><span style="background-color: #f5f5f5; color: #008000;">*/</span><span style="background-color: #f5f5f5; color: #800000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#div1</span><span style="background-color: #f5f5f5; color: #000000;">{</span><span style="background-color: #f5f5f5; color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #f5f5f5; color: #000000;">}</span><span style="background-color: #f5f5f5; color: #800000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #f5f5f5; color: #008000;">/*</span><span style="background-color: #f5f5f5; color: #008000;">&nbsp;加上border&nbsp;</span><span style="background-color: #f5f5f5; color: #008000;">*/</span><span style="background-color: #f5f5f5; color: #800000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#div2</span><span style="background-color: #f5f5f5; color: #000000;">{</span><span style="background-color: #f5f5f5; color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;border-left</span><span style="background-color: #f5f5f5; color: #000000;">:</span><span style="background-color: #f5f5f5; color: #0000ff;">10px&nbsp;solid&nbsp;red</span><span style="background-color: #f5f5f5; color: #000000;">;</span><span style="background-color: #f5f5f5; color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #f5f5f5; color: #000000;">}</span><span style="background-color: #f5f5f5; color: #800000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #f5f5f5; color: #008000;">/*</span><span style="background-color: #f5f5f5; color: #008000;">&nbsp;加上border和padding&nbsp;</span><span style="background-color: #f5f5f5; color: #008000;">*/</span><span style="background-color: #f5f5f5; color: #800000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#div3</span><span style="background-color: #f5f5f5; color: #000000;">{</span><span style="background-color: #f5f5f5; color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;border-left</span><span style="background-color: #f5f5f5; color: #000000;">:</span><span style="background-color: #f5f5f5; color: #0000ff;">10px&nbsp;solid&nbsp;red</span><span style="background-color: #f5f5f5; color: #000000;">;</span><span style="background-color: #f5f5f5; color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;padding-left</span><span style="background-color: #f5f5f5; color: #000000;">:</span><span style="background-color: #f5f5f5; color: #0000ff;">50px</span><span style="background-color: #f5f5f5; color: #000000;">;</span><span style="background-color: #f5f5f5; color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #f5f5f5; color: #000000;">}</span><span style="background-color: #f5f5f5; color: #800000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #f5f5f5; color: #008000;">/*</span><span style="background-color: #f5f5f5; color: #008000;">&nbsp;加上border、padding和margin&nbsp;</span><span style="background-color: #f5f5f5; color: #008000;">*/</span><span style="background-color: #f5f5f5; color: #800000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#div4</span><span style="background-color: #f5f5f5; color: #000000;">{</span><span style="background-color: #f5f5f5; color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;border-left</span><span style="background-color: #f5f5f5; color: #000000;">:</span><span style="background-color: #f5f5f5; color: #0000ff;">10px&nbsp;solid&nbsp;red</span><span style="background-color: #f5f5f5; color: #000000;">;</span><span style="background-color: #f5f5f5; color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;padding-left</span><span style="background-color: #f5f5f5; color: #000000;">:</span><span style="background-color: #f5f5f5; color: #0000ff;">50px</span><span style="background-color: #f5f5f5; color: #000000;">;</span><span style="background-color: #f5f5f5; color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;margin-left</span><span style="background-color: #f5f5f5; color: #000000;">:</span><span style="background-color: #f5f5f5; color: #0000ff;">50px</span><span style="background-color: #f5f5f5; color: #000000;">;</span><span style="background-color: #f5f5f5; color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #f5f5f5; color: #000000;">}</span><span style="background-color: #f5f5f5; color: #800000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">style</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">head</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">body</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">div&nbsp;</span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">="container"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">div&nbsp;</span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">="div1"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&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;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">div</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">div&nbsp;</span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">="div2"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&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;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">div</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">div&nbsp;</span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">="div3"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&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;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">div</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">div&nbsp;</span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">="div4"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&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;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">div</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">div</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">body</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">html</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span></div>
<p>我们在Firefox中测试，截图如下：</p>
<p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/DivCSS_8C/image_2.png"><img style="border: 0px none ; display: inline;" title="image" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/DivCSS_8C/image_thumb.png" border="0" height="197" width="286" /></a> </p>
<p>我们来分析一下DIV4，如下图：</p>
<p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/DivCSS_8C/image_4.png"><img style="border: 0px none ; display: inline;" title="image" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/DivCSS_8C/image_thumb_1.png" border="0" height="145" width="426" /></a> </p>
<p>对照上面的代码和截图，我们可以清楚地理解&#8220;div的宽度 = width + padding + border + margin&#8221;这条公式。</p>
<p>对于Web前端开发者来说，最头痛的事情就是因浏览器的差异而引起的网页显示效果的差异，而对于这条宽度计算公式，在其他浏览器中会不会有不兼容的问题呢？</p>
<p>幸好，大部分常用的浏览器，我机器上都安装了，测试结果是：在Firefox、Opera、Google、IE8、IE7显示都跟上面的截图一样，也就是说，在这些浏览器中，宽度的计算公式是：</p>
<table border="1" cellpadding="2" cellspacing="0" width="400">
    <tbody>
        <tr>
            <td valign="top" width="400"><font color="#ff00ff">DIV的宽度 = width + padding + border + margin</font></td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<p>而在IE6中测试，结果却不是这样，请看运行截图：</p>
<p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/DivCSS_8C/image_6.png"><img style="border: 0px none ; display: inline;" title="image" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/DivCSS_8C/image_thumb_2.png" border="0" height="252" width="286" /></a> </p>
<p>由上图可以看出，在IE6的宽度计算是：</p>
<table border="1" cellpadding="2" cellspacing="0" width="400">
    <tbody>
        <tr>
            <td valign="top" width="400"><font color="#ff00ff">DIV的宽度 = width + margin</font></td>
        </tr>
    </tbody>
</table>
<p>而border和padding，是占用了width的位置。这一点，在前端开发中要注意。</p>
<img src ="http://www.blogjava.net/rongxh7/aggbug/305827.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rongxh7/" target="_blank">心梦帆影</a> 2009-12-14 00:39 <a href="http://www.blogjava.net/rongxh7/archive/2009/12/14/305827.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>原创一道Java笔试面试题考考大家</title><link>http://www.blogjava.net/rongxh7/archive/2009/11/28/303990.html</link><dc:creator>心梦帆影</dc:creator><author>心梦帆影</author><pubDate>Fri, 27 Nov 2009 19:21:00 GMT</pubDate><guid>http://www.blogjava.net/rongxh7/archive/2009/11/28/303990.html</guid><wfw:comment>http://www.blogjava.net/rongxh7/comments/303990.html</wfw:comment><comments>http://www.blogjava.net/rongxh7/archive/2009/11/28/303990.html#Feedback</comments><slash:comments>24</slash:comments><wfw:commentRss>http://www.blogjava.net/rongxh7/comments/commentRss/303990.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rongxh7/services/trackbacks/303990.html</trackback:ping><description><![CDATA[用这题目吸引大家注意，请见谅！<br />
以下代码有些朋友可能会似曾熟识，可能也算不上&#8220;原创&#8221;，请见谅！<br />
不过，我出的这题，确定有点意思，考考大家。<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008000;">/**</span><span style="color: #008000;"><br />
&nbsp;*&nbsp;父类<br />
&nbsp;*&nbsp;</span><span style="color: #808080;">@author</span><span style="color: #008000;">&nbsp;rongxinhua<br />
&nbsp;*<br />
&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><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;Father{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;String&nbsp;name</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">FATHER</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;Father(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;whoAmI();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tellName(name);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;whoAmI(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">Father&nbsp;says,&nbsp;I&nbsp;am&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;name);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;tellName(String&nbsp;name){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">Father's&nbsp;name&nbsp;is&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;name);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</span></div>
<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008000;">/**</span><span style="color: #008000;"><br />
&nbsp;*&nbsp;子类<br />
&nbsp;*&nbsp;</span><span style="color: #808080;">@author</span><span style="color: #008000;">&nbsp;rongxinhua<br />
&nbsp;*<br />
&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><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;Son&nbsp;</span><span style="color: #0000ff;">extends</span><span style="color: #000000;">&nbsp;Father{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;String&nbsp;name</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">SON</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;Son(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;whoAmI();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tellName(name);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;whoAmI(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">Son&nbsp;says,&nbsp;I&nbsp;am&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;name);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;tellName(String&nbsp;name){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">Son's&nbsp;name&nbsp;is&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;name);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</span></div>
<br />
问题：当执行 <span style="color: #ff0000;"><span style="color: red;"><span style="color: red;">Father who = new Son();</span></span></span> 时，会输出什么？<br />
如果你去参加一个公司的笔试或面试时问了这么一道题，在没有环境测试的情况下，你会猜测什么答案？<br />
<br />
<img src ="http://www.blogjava.net/rongxh7/aggbug/303990.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rongxh7/" target="_blank">心梦帆影</a> 2009-11-28 03:21 <a href="http://www.blogjava.net/rongxh7/archive/2009/11/28/303990.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CSS的position:fixed的使用</title><link>http://www.blogjava.net/rongxh7/archive/2009/11/22/303225.html</link><dc:creator>心梦帆影</dc:creator><author>心梦帆影</author><pubDate>Sun, 22 Nov 2009 06:58:00 GMT</pubDate><guid>http://www.blogjava.net/rongxh7/archive/2009/11/22/303225.html</guid><wfw:comment>http://www.blogjava.net/rongxh7/comments/303225.html</wfw:comment><comments>http://www.blogjava.net/rongxh7/archive/2009/11/22/303225.html#Feedback</comments><slash:comments>25</slash:comments><wfw:commentRss>http://www.blogjava.net/rongxh7/comments/commentRss/303225.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rongxh7/services/trackbacks/303225.html</trackback:ping><description><![CDATA[<p>接触CSS已有相当长一段时间，我们竟然没有留意position:fixed的用法。</p>
<p>我们都知道CSS中定位属性position的值，除了默认的值外，还有absolute,relative和fixed。我平时比较常用absolute和relative，而position:fixed却没多关注。或许是因为当初在CSS中文手册中看到position:fixed旁边有说明&#8220;IE5.5及NS6尚不支持此属性&#8221;吧。</p>
<p>前段时间，在做一个项目时需要使一个层相对于浏览器边框固定，那时用position:absolute试了下，发觉absolute是对网页边框而言的。后来，上网查了一些根据滚动条的移动，动态地改变left和top的值的JavaScript语句，虽然能实现了类似的效果，但滚动条移动时，那个层晃来晃去的，感觉不好看，想要一种能使层固定不动的做法。</p>
<p>且看下面的代码：</p>
<table border="1" cellpadding="2" cellspacing="0" width="452">
    <tbody>
        <tr>
            <td valign="top" width="450">
            <p>&lt;style type="text/css"&gt;<br />
            &lt;!--<br />
            #help{<br />
            &nbsp;&nbsp;&nbsp; width:30px;<br />
            &nbsp;&nbsp;&nbsp; height:20px;<br />
            &nbsp;&nbsp;&nbsp; background-color:green;<br />
            &nbsp;&nbsp;&nbsp; <font color="#ff0080">position:fixed;</font><br />
            &nbsp;&nbsp;&nbsp; left:60px;<br />
            &nbsp;&nbsp;&nbsp; top:100px;<br />
            }<br />
            --&gt;<br />
            &lt;/style&gt;</p>
            </td>
        </tr>
    </tbody>
</table>
<p>我们用上面这段代码来定义页面上的一个层&#8220;help&#8221;（id=&#8220;help&#8221;）。这样就能实现我们想要的效果了。</p>
<p>在IE8、Firefox、Opera、Google等浏览器中测试，都没有问题，唯独低版本的IE中，这个属性无效。</p>
<img src ="http://www.blogjava.net/rongxh7/aggbug/303225.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rongxh7/" target="_blank">心梦帆影</a> 2009-11-22 14:58 <a href="http://www.blogjava.net/rongxh7/archive/2009/11/22/303225.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts 2.1.6 精简实例系列教程(6)：重写用户登录模块（整合Jquery+JSON）</title><link>http://www.blogjava.net/rongxh7/archive/2009/08/14/291207.html</link><dc:creator>心梦帆影</dc:creator><author>心梦帆影</author><pubDate>Fri, 14 Aug 2009 14:32:00 GMT</pubDate><guid>http://www.blogjava.net/rongxh7/archive/2009/08/14/291207.html</guid><wfw:comment>http://www.blogjava.net/rongxh7/comments/291207.html</wfw:comment><comments>http://www.blogjava.net/rongxh7/archive/2009/08/14/291207.html#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://www.blogjava.net/rongxh7/comments/commentRss/291207.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rongxh7/services/trackbacks/291207.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 网上有许多关于Struts2与JSON的文章，Google加百度，查阅了许多，有各种各样的做法。其中，大部分的文章都说要加进一个叫jsonplugin的插件，在Google Code可以下载。以前我有做过测试，也是用它，但着实麻烦，要让Struts2的package继承一个叫&#8220;json-default&#8221;的父package。网上的文章，大部分都是说从Struts的Action...&nbsp;&nbsp;<a href='http://www.blogjava.net/rongxh7/archive/2009/08/14/291207.html'>阅读全文</a><img src ="http://www.blogjava.net/rongxh7/aggbug/291207.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rongxh7/" target="_blank">心梦帆影</a> 2009-08-14 22:32 <a href="http://www.blogjava.net/rongxh7/archive/2009/08/14/291207.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts 2.1.6 精简实例系列教程(5)：用户注册模块（整合Jquery）</title><link>http://www.blogjava.net/rongxh7/archive/2009/08/01/289402.html</link><dc:creator>心梦帆影</dc:creator><author>心梦帆影</author><pubDate>Sat, 01 Aug 2009 08:16:00 GMT</pubDate><guid>http://www.blogjava.net/rongxh7/archive/2009/08/01/289402.html</guid><wfw:comment>http://www.blogjava.net/rongxh7/comments/289402.html</wfw:comment><comments>http://www.blogjava.net/rongxh7/archive/2009/08/01/289402.html#Feedback</comments><slash:comments>11</slash:comments><wfw:commentRss>http://www.blogjava.net/rongxh7/comments/commentRss/289402.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rongxh7/services/trackbacks/289402.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 学习Jquery，当然要首先去它的官方网站：http://jquery.com/，如下图。在有&#8220;download&#8221;字眼的地方下载就行，我这里下载的是当前最新的版本Jquery 1.3.2。下载解压后，其实，也就是JS文件jquery-1.3.2.min.js。 Jquery最好的学习材料莫过于Jquery 1.3 API 参考文档中文版（如下图），下载地址：http...&nbsp;&nbsp;<a href='http://www.blogjava.net/rongxh7/archive/2009/08/01/289402.html'>阅读全文</a><img src ="http://www.blogjava.net/rongxh7/aggbug/289402.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rongxh7/" target="_blank">心梦帆影</a> 2009-08-01 16:16 <a href="http://www.blogjava.net/rongxh7/archive/2009/08/01/289402.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts 2.1.6 精简实例系列教程(4)：新闻管理模块的实现</title><link>http://www.blogjava.net/rongxh7/archive/2009/07/27/288495.html</link><dc:creator>心梦帆影</dc:creator><author>心梦帆影</author><pubDate>Sun, 26 Jul 2009 17:14:00 GMT</pubDate><guid>http://www.blogjava.net/rongxh7/archive/2009/07/27/288495.html</guid><wfw:comment>http://www.blogjava.net/rongxh7/comments/288495.html</wfw:comment><comments>http://www.blogjava.net/rongxh7/archive/2009/07/27/288495.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/rongxh7/comments/commentRss/288495.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rongxh7/services/trackbacks/288495.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 上期讲了新闻管理模块Model层的开发，本期让我们来一起开发新闻管理的Action类和JSP页面。先从JSP页面写起吧，在admin目录下建两个文件，一个是显示新闻列表的article.jsp，另一个是新闻编辑的article-input.jsp，新闻添加和新闻修改归于同一文件，节省一点资源，这一点，学习了Springside开源项目。再建一个新闻管理的Action类ArticleAction...&nbsp;&nbsp;<a href='http://www.blogjava.net/rongxh7/archive/2009/07/27/288495.html'>阅读全文</a><img src ="http://www.blogjava.net/rongxh7/aggbug/288495.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rongxh7/" target="_blank">心梦帆影</a> 2009-07-27 01:14 <a href="http://www.blogjava.net/rongxh7/archive/2009/07/27/288495.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts 2.1.6 精简实例系列教程(3)：新闻管理Model层的开发（整合iBatis）</title><link>http://www.blogjava.net/rongxh7/archive/2009/07/26/288414.html</link><dc:creator>心梦帆影</dc:creator><author>心梦帆影</author><pubDate>Sat, 25 Jul 2009 19:02:00 GMT</pubDate><guid>http://www.blogjava.net/rongxh7/archive/2009/07/26/288414.html</guid><wfw:comment>http://www.blogjava.net/rongxh7/comments/288414.html</wfw:comment><comments>http://www.blogjava.net/rongxh7/archive/2009/07/26/288414.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.blogjava.net/rongxh7/comments/commentRss/288414.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rongxh7/services/trackbacks/288414.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 本期开始讲Model层的开发，整合iBatis框架，iBatis是Apache旗下Java数据持久层的框架，跟Hibernate是同一类型的框架。大家可到它的官方网站去下载http://ibatis.apache.org/java.cgi，如下图： 我这里下载的是当前最新版本iBatis 2.3.4 , 下载之后，解压包是这样的： 我们在lib目录下，找到&#8220;ibatis...&nbsp;&nbsp;<a href='http://www.blogjava.net/rongxh7/archive/2009/07/26/288414.html'>阅读全文</a><img src ="http://www.blogjava.net/rongxh7/aggbug/288414.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rongxh7/" target="_blank">心梦帆影</a> 2009-07-26 03:02 <a href="http://www.blogjava.net/rongxh7/archive/2009/07/26/288414.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts 2.1.6 精简实例系列教程(2)：用户登录模块的实现</title><link>http://www.blogjava.net/rongxh7/archive/2009/07/21/287554.html</link><dc:creator>心梦帆影</dc:creator><author>心梦帆影</author><pubDate>Mon, 20 Jul 2009 16:14:00 GMT</pubDate><guid>http://www.blogjava.net/rongxh7/archive/2009/07/21/287554.html</guid><wfw:comment>http://www.blogjava.net/rongxh7/comments/287554.html</wfw:comment><comments>http://www.blogjava.net/rongxh7/archive/2009/07/21/287554.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/rongxh7/comments/commentRss/287554.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rongxh7/services/trackbacks/287554.html</trackback:ping><description><![CDATA[<p>用户登录几乎是每一个Web系统的必需模块，本期教程就通过用户登录模块来讲解Struts2.1.6的Action和Result的Annotation配置。</p> <p>上期的<a href="http://www.blogjava.net/rongxh7/archive/2009/07/18/287258.html">Struts 2.1.6 精简实例系列教程(1)：环境的搭建与HelloSimple</a>中，我们建的package名为“cn.simple.action”，这些包名有一个规则的，只要包含“action,actions,struts,struts2”都会默认被扫描到为Action类，也就是说，我们只要配置了如“cn.simple.action”、“cn.simple.struts”、“cn.simple.action.admin”等包名，就可以不用在配置文件struts.xml（Struts2.0的配置文件）中配置这些Action类了。当然，这些包名，也可以是别的，但要写一点点配置，我们就用默认的吧。关于这方面的详细说明，还是强烈建议大家先看官方的文档<a href="http://struts.apache.org/2.1.6/docs/convention-plugin.html">http://struts.apache.org/2.1.6/docs/convention-plugin.html</a>。</p> <p>好，我们开始写我们的用户登录模块吧。先写个loginform.jsp，记得，不要忘记我们把JSP文件放在Web-Inf/content/目录下</p> <table border="1" cellspacing="0" cellpadding="2" width="582"> <tbody> <tr> <td valign="top" width="580"> <p>&lt;%@ page language="java" contentType="text/html; charset=UTF-8"<br>&nbsp;&nbsp;&nbsp; pageEncoding="UTF-8"%&gt;<br><font color="#ff00ff">&lt;%@ taglib prefix="s" uri="/struts-tags" %&gt;</font><br>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "<a href="http://www.w3.org/TR/html4/loose.dtd&quot;">http://www.w3.org/TR/html4/loose.dtd"</a>&gt;<br>&lt;html&gt;<br>&lt;head&gt;<br>&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;<br>&lt;title&gt;登录页&lt;/title&gt;<br>&lt;/head&gt;<br>&lt;body&gt;  <p><font color="#ff00ff">&lt;s:fielderror&gt;&lt;/s:fielderror&gt; </font> <p><font color="#ff00ff">&lt;form action="login.action" method="post"&gt;<br>&nbsp;&nbsp;&nbsp; 账号&lt;input type="text" name="loginName" value="${loginName}"/&gt;&lt;br/&gt;<br>&nbsp;&nbsp;&nbsp; 密码&lt;input type="password" name="password"&gt;&lt;br/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;input type="submit" value="登录"/&gt;<br>&lt;/form&gt;</font>  <p>&lt;/body&gt;<br>&lt;/html&gt;</p></td></tr></tbody></table> <p style="margin-right: 0px" dir="ltr">大家如果想用Struts 2的标签库的话，也可以用Struts 2的Form标签，用之前，要在JSP头配置上Struts 2标签库，换成Struts 2标签的版本后，即：</p> <table border="1" cellspacing="0" cellpadding="2" width="580"> <tbody> <tr> <td valign="top" width="578"> <p>&lt;%@ page language="java" contentType="text/html; charset=UTF-8"<br>&nbsp;&nbsp;&nbsp; pageEncoding="UTF-8"%&gt;<br><font color="#ff00ff">&lt;%@ taglib prefix="s" uri="/struts-tags" %&gt;</font><br>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "<a href="http://www.w3.org/TR/html4/loose.dtd&quot;">http://www.w3.org/TR/html4/loose.dtd"</a>&gt;<br>&lt;html&gt;<br>&lt;head&gt;<br>&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;<br>&lt;title&gt;Insert title here&lt;/title&gt;<br>&lt;/head&gt;<br>&lt;body&gt;  <p><font color="#ff00ff">&lt;s:fielderror&gt;&lt;/s:fielderror&gt; </font></p> <p><font color="#ff00ff">&lt;s:form action="login"&gt;<br>&nbsp;&nbsp;&nbsp; &lt;s:textfield name="loginName"&gt;&lt;/s:textfield&gt;<br>&nbsp;&nbsp;&nbsp; &lt;s:password name="password"&gt;&lt;/s:password&gt;<br>&nbsp;&nbsp;&nbsp; &lt;s:submit value="登录"&gt;&lt;/s:submit&gt;<br>&lt;/s:form&gt;</font>  <p>&lt;/body&gt;<br>&lt;/html&gt;</p></td></tr></tbody></table> <p>接着，我们写一个登录处理的Action类：loginAction.java，代码如下：</p> <table border="1" cellspacing="0" cellpadding="2" width="579"> <tbody> <tr> <td valign="top" width="577"> <p>package cn.simple.action;  <p>import org.apache.struts2.convention.annotation.Result;<br>import org.apache.struts2.convention.annotation.Results;<br>import com.opensymphony.xwork2.ActionSupport;  <p><font color="#ff00ff">@Results({<br>&nbsp;&nbsp;&nbsp; @Result(name="success", location="admin/index.action", type="redirect"),<br>&nbsp;&nbsp;&nbsp; @Result(name="input", location="loginform.jsp", type="dispatcher")<br>})</font><br>public class LoginAction <font color="#ff00ff">extends ActionSupport</font> {  <p>&nbsp;&nbsp;&nbsp; private String loginName;<br>&nbsp;&nbsp;&nbsp; private String password;<br>&nbsp;&nbsp;&nbsp; @Override<br>&nbsp;&nbsp;&nbsp; <font color="#ff00ff">public String execute() throws Exception {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return SUCCESS;<br>&nbsp;&nbsp;&nbsp; }</font>  <p>&nbsp;&nbsp;&nbsp; @Override<br><font color="#ff00ff">&nbsp;&nbsp;&nbsp; public void validate() {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if( ! "simple".equals(loginName)){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; addFieldError("loginName", "登录名不正确!");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(! "simple".equals(password)){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; addFieldError("password", "密码不正确!");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }</font>  <p>&nbsp;&nbsp;&nbsp; //*******Getter和Setter方法***********//<br>&nbsp;&nbsp;&nbsp; public String getLoginName() {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return loginName;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; public void setLoginName(String loginName) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.loginName = loginName;<br>&nbsp;&nbsp;&nbsp; }  <p>&nbsp;&nbsp;&nbsp; public String getPassword() {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return password;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; public void setPassword(String password) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.password = password;<br>&nbsp;&nbsp;&nbsp; }<br>}</p></td></tr></tbody></table> <p>解释一下这个类吧：</p> <table border="1" cellspacing="0" cellpadding="2" width="579"> <tbody> <tr> <td valign="top" width="577"> <p><font color="#ff00ff">execute</font> 这个方法是重写了父类ActionSupport的方法，是Action默认会执行的方法，即访问…/login.action或者…/login，它默认会执行这个方法。</p> <p><font color="#ff00ff">validate</font> 在执行execute方法之前，它会先执行validate这个方法，检查登录框是否输入正确，这个方法也是重写了父类的validate方法。</p> <p>getter和setter，有了setter方法，才能使action能拿到上一个JSP页面传过来的Request域的数据；有了getter方法，下一个转发（dispatcher）过去的页面才能拿到此Action的Request域的数据。</p> <p>执行过程是这样：表单提交给LoginAction，LoginAction先执行validate方法，检验loginName和password是否符合要求，如果不符合，就会<font color="#ff00ff">addFieldError</font> （把错误信息放到Field栈里），如果Field栈里有错误信息的话，它就不会再执行execute方法，直接转发（Dispatcher）到INPUT即“input”所指定的错误处理页面，这里为<font color="#ff00ff">location="loginform.jsp"，</font>即让它返回到表单登录页去，如果刚才validate方法中验证正确，即Field栈中没有错误信息，就会执行execute方法。在这里execute返回SUCCESS,即“success”，根据Result注解，就会重定向到admin/index.action这个action。</p></td></tr></tbody></table> <p>返回SUCCESS重定向到的后台主页，其实简单，admin/index.jsp，代码很简单，就在HTML中显示一句“登录成功”，代码略。</p> <p>这些的目录结构如下：</p> <p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Struts2.1.62Action_14DA2/image_2.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Struts2.1.62Action_14DA2/image_thumb.png" width="226" height="331"></a> </p> <p>运行一下吧：</p> <p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Struts2.1.62Action_14DA2/image_4.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Struts2.1.62Action_14DA2/image_thumb_1.png" width="371" height="165"></a> </p> <p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Struts2.1.62Action_14DA2/image_6.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Struts2.1.62Action_14DA2/image_thumb_2.png" width="366" height="143"></a> </p> <p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Struts2.1.62Action_14DA2/image_8.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Struts2.1.62Action_14DA2/image_thumb_3.png" width="369" height="114"></a> </p> <p>一点提醒：本项目网页的排版以精简为主，在真实的网站开发中，建议用Dreamweaver可视化排版，再作必要的修改和嵌入必要的动态标签。</p> <p>“Struts 2.1.6 精简实例系列教程(2)：用户登录模块的实现” 讲解就到此，你也试一下吧，好，敬请关注下文！</p><img src ="http://www.blogjava.net/rongxh7/aggbug/287554.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rongxh7/" target="_blank">心梦帆影</a> 2009-07-21 00:14 <a href="http://www.blogjava.net/rongxh7/archive/2009/07/21/287554.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts 2.1.6 精简实例系列教程(1)：环境的搭建与HelloSimple</title><link>http://www.blogjava.net/rongxh7/archive/2009/07/18/287258.html</link><dc:creator>心梦帆影</dc:creator><author>心梦帆影</author><pubDate>Sat, 18 Jul 2009 09:27:00 GMT</pubDate><guid>http://www.blogjava.net/rongxh7/archive/2009/07/18/287258.html</guid><wfw:comment>http://www.blogjava.net/rongxh7/comments/287258.html</wfw:comment><comments>http://www.blogjava.net/rongxh7/archive/2009/07/18/287258.html#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://www.blogjava.net/rongxh7/comments/commentRss/287258.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rongxh7/services/trackbacks/287258.html</trackback:ping><description><![CDATA[<p>下载Struts2.1.6，网址<a title="http://struts.apache.org/download.cgi#struts216" href="http://struts.apache.org/download.cgi#struts216">http://struts.apache.org/download.cgi#struts216</a>，点击下图中选中的部分即可下载。</p>
<p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Struts2.1.6_110F3/image_2.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Struts2.1.6_110F3/image_thumb.png" width="586" height="448" /></a> </p>
<p>下载Eclipse for JavaEE（3.4 or 3.5），网址<a title="http://www.eclipse.org/downloads/" href="http://www.eclipse.org/downloads/">http://www.eclipse.org/downloads/</a>，点击下图选中的链接，进入下一个页面，找到能够下载的地方下载就行。</p>
<p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Struts2.1.6_110F3/image_4.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Struts2.1.6_110F3/image_thumb_1.png" width="594" height="424" /></a> </p>
<p>JDK6.0和Tomcat6.0，请大家自行下载。</p>
<p>另外，建议下载JSP标准标准库JSTL，下载地址：<a href="/Files/rongxh7/jstl-jar.rar">/Files/rongxh7/jstl-jar.rar</a></p>
<p>好，暂时下载这些，以后，需要用到其他的时，再下载。至于JDK6.0，Tomcat6.0，Eclipse的安装，请大家自行安装，在这里就不演示安装过程了，如有什么问题，再联系我。</p>
<p>关于Eclipse的部分用法，如在Eclipse里配置Tomcat服务器，新建动态Web项目等，请看我的<a href="http://www.blogjava.net/rongxh7/category/39849.html">(Eclipse图解教程)</a>，或者上网找一下其他的资料学习一下。</p>
<p>来开始我们的项目吧，先做个简单的测试，New一个Dynamic Web Project，起名为&#8220;SimpleWeb&#8221;，将Struts2.1.6的下载包解压后得到的lib目录，在lib目录下，找到以面的jar包：</p>
<table border="0" cellspacing="0" cellpadding="2" width="400">
    <tbody>
        <tr>
            <td valign="top" width="400">
            <p><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" />xwork-2.1.2.jar<br />
            <img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" />struts2-core-2.1.6.jar<br />
            <img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" />struts2-convention-plugin-2.1.6.jar<br />
            <img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" />ognl-2.6.11.jar<br />
            <img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" />freemarker-2.3.13.jar<br />
            <img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" />commons-loggin-1.0.4.jar<br />
            <img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" />commons-fileupload-1.2.1.jar</p>
            </td>
        </tr>
    </tbody>
</table>
<p>把这些包放进项目的lib目录下，同时，建议也把JSTL的核心jar包也放到lib目录，这些JSTL的包主要有：</p>
<table border="0" cellspacing="0" cellpadding="2" width="400">
    <tbody>
        <tr>
            <td valign="top" width="400">
            <p>jstl.jar<br />
            standard.jar</p>
            </td>
        </tr>
    </tbody>
</table>
<p>我们先要在项目WEB-INF下的web.xml文件中配置Struts2应用，配置后，web.xml全部代码如下：</p>
<table border="0" cellspacing="0" cellpadding="2" width="666">
    <tbody>
        <tr>
            <td valign="top" width="664">
            <p>&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
            &lt;web-app xmlns:xsi="<a href='http://www.w3.org/2001/XMLSchema-instance"' href_cetemp='http://www.w3.org/2001/XMLSchema-instance"'>http://www.w3.org/2001/XMLSchema-instance"</a> xmlns="<a href='http://java.sun.com/xml/ns/javaee"' href_cetemp='http://java.sun.com/xml/ns/javaee"'>http://java.sun.com/xml/ns/javaee"</a> xmlns:web="<a href='http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"' href_cetemp='http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"'>http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"</a> xsi:schemaLocation="<a href="http://java.sun.com/xml/ns/javaee">http://java.sun.com/xml/ns/javaee</a> <a href='http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"' href_cetemp='http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"'>http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"</a> id="WebApp_ID" version="2.5"&gt;<br />
            &nbsp; &lt;display-name&gt;SimpleWeb&lt;/display-name&gt;<br />
            <font color="#ff00ff">&nbsp; &lt;filter&gt;<br />
            &nbsp;&nbsp;&nbsp; &lt;filter-name&gt;Struts2&lt;/filter-name&gt;<br />
            &nbsp;&nbsp;&nbsp; &lt;filter-class&gt;org.apache.struts2.dispatcher.FilterDispatcher&lt;/filter-class&gt;<br />
            &nbsp; &lt;/filter&gt;<br />
            &nbsp; &lt;filter-mapping&gt;<br />
            &nbsp;&nbsp;&nbsp; &lt;filter-name&gt;Struts2&lt;/filter-name&gt;<br />
            &nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;/*&lt;/url-pattern&gt;<br />
            &nbsp; &lt;/filter-mapping&gt;</font><br />
            &lt;/web-app&gt;</p>
            </td>
        </tr>
    </tbody>
</table>
<p>我们在项目的WEB-INF目录下新建一个文件夹命名为&#8220;content&#8221;，这个文件夹名一定要这样，如果写成别的，要另外配置一下，但初学的话，就按它默认的吧。我们新建的这个content目录，就是专门用来放JSP文件的。</p>
<p>我们在content目录下建一个JSP文件，命名为&#8220;hello.jsp&#8221;，内容可以很简单，就在里面写一个简单的话：Hello SImple，代码略。</p>
<p>这时，整个项目的文件夹视图如下：</p>
<p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Struts2.1.6_110F3/image_6.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Struts2.1.6_110F3/image_thumb_2.png" width="411" height="460" /></a> </p>
<p>我运行Tomcat服务器，测试一下Struts2配置能不能用。首先我们在地址栏输入：<a title="http://localhost:8060/SimpleWeb2/hello.jsp" href="http://localhost:8060/SimpleWeb/hello.jsp">http://localhost:8060/SimpleWeb/hello.jsp</a> ，很遗憾，不管用了，报错了：HTTP Status 404 - <u>The requested resource (/SimpleWeb/hello.jsp) is not available.</u>截图如下：</p>
<p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Struts2.1.6_110F3/image_20.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Struts2.1.6_110F3/image_thumb_9.png" width="532" height="290" /></a> </p>
<p>正确的做法是，输入地址： <a title="http://localhost:8060/SimpleWeb2/hello.action" href="http://localhost:8060/SimpleWeb/hello.action">http://localhost:8060/SimpleWeb/hello.action</a> 或者<a href="http://localhost:8060/SimpleWeb/hello">http://localhost:8060/SimpleWeb/hello</a> 如果出现如下结果，就说明Struts2配置成功了。</p>
<p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Struts2.1.6_110F3/image_18.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Struts2.1.6_110F3/image_thumb_8.png" width="389" height="100" /></a> </p>
<p>&nbsp;</p>
<p>注意一点，这只是在WEB-INF/content目录下的文件是通过这种方式访问的；如果不是在这目录下，而在项目目录下，即Eclipse对应项目的WebContent下，就不能这样访问了。举例说，在项目根目录下建个hello.jsp的文件，则我们只能通过<a title="http://localhost:8060/SimpleWeb2/hello.jsp" href="http://localhost:8060/SimpleWeb/hello.jsp">http://localhost:8060/SimpleWeb/hello.jsp</a>来访问。</p>
<p>能通过hello.action或者hello访问WEB-INF/content下的hello.jsp，这种做法，是Struts2.1.6跟Struts2.0不同之处之一。使用时请确保你使用的Struts版本是2.1.6+。相关的命名规范与默认的action匹配规则，请参考官方的文档：<a title="http://struts.apache.org/2.1.6/docs/convention-plugin.html" href="http://struts.apache.org/2.1.6/docs/convention-plugin.html">http://struts.apache.org/2.1.6/docs/convention-plugin.html</a></p>
<p>我们再新建一个Java类，命名为HelloAction，此类须继承com.opensymphony.xwork2.ActionSupport，代码如下：</p>
<table border="0" cellspacing="0" cellpadding="2" width="577">
    <tbody>
        <tr>
            <td valign="top" width="575">
            <p>package cn.simple.action;
            <p>import org.apache.struts2.convention.annotation.Result;<br />
            import org.apache.struts2.convention.annotation.Results;<br />
            import com.opensymphony.xwork2.ActionSupport; </p>
            <p><br />
            public class HelloAction <font color="#ff00ff">extends ActionSupport</font> { </p>
            <p>&nbsp;&nbsp;&nbsp; @Override<br />
            &nbsp;&nbsp;&nbsp; public String execute() throws Exception {<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#ff00ff">System.out.println("HelloAction execute ... ");</font><br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return <font color="#ff00ff">SUCCESS;</font><br />
            &nbsp;&nbsp;&nbsp; }<br />
            }</p>
            </td>
        </tr>
    </tbody>
</table>
<p>让我们再次访问：<a title="http://localhost:8060/SimpleWeb2/hello.action" href="http://localhost:8060/SimpleWeb/hello.action">http://localhost:8060/SimpleWeb/hello.action</a> 或者<a href="http://localhost:8060/SimpleWeb/hello">http://localhost:8060/SimpleWeb/hello</a>&nbsp;</p>
<p>可以看出，在Eclipse的控制台确定打印出了以下信息，这说明，访问请求确定经过了HelloAction类。</p>
<p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Struts2.1.6_110F3/image_12.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Struts2.1.6_110F3/image_thumb_5.png" width="483" height="56" /></a> </p>
<p>同时页面是跳到了WEB-INF/content/hello.jsp文件（如下图），这说明请求的确是从HelloAction类转发到了hello.jsp。</p>
<p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Struts2.1.6_110F3/image_16.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Struts2.1.6_110F3/image_thumb_7.png" width="463" height="119" /></a> </p>
<p>看来，好像在不做什么配置，Struts2.1.6也会找到名为HelloAction的类来处理&#8230;/hello.action或者&#8230;/hello的请求，而好像也没有做什么配置，HelloAction会自动将请求转发给名为hello.jsp的页面，这正是Struts2.1.6的妙用之处，全赖struts2-convention-plugin-2.1.6.jar这个插件，具体了解，可看我上面提供的官方链接，或者看这位帅哥的翻译之作：<a href="http://javeye.javaeye.com/blog/358744">struts2采用convention-plugin实现零配置</a>。</p>
<p>看了上面的HelloAction的代码若感到莫名其妙的话，我这里把那些默认的、约定俗成的代码也写出来，这样，修改后的HelloAction类如下：</p>
<table border="0" cellspacing="0" cellpadding="2" width="621">
    <tbody>
        <tr>
            <td valign="top" width="619">
            <p>package cn.simple.action;
            <p>import org.apache.struts2.convention.annotation.Result;<br />
            import org.apache.struts2.convention.annotation.Results;<br />
            import com.opensymphony.xwork2.ActionSupport;
            <p><font color="#ff00ff">@Results({<br />
            &nbsp;&nbsp;&nbsp; @Result(name="success",location="hello.jsp",type="dispatcher")<br />
            })</font><br />
            public class HelloAction extends ActionSupport {
            <p>&nbsp;&nbsp;&nbsp; @Override<br />
            &nbsp;&nbsp;&nbsp; public String execute() throws Exception {<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("HelloAction execute ... ");<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return <font color="#ff00ff">SUCCESS</font>;<br />
            &nbsp;&nbsp;&nbsp; }<br />
            }</p>
            </td>
        </tr>
    </tbody>
</table>
<p>这样就容易明白许多了。解释如下：</p>
<table border="0" cellspacing="0" cellpadding="2" width="621">
    <tbody>
        <tr>
            <td valign="top" width="619"><font color="#ff00ff">name = &#8220;success&#8221;</font> 跟 Action里的execute()方法的返回值SUCCESS（也可写成&#8220;success&#8221;）对应，即若此Action类一旦返回SUCCESS，就会跳到对应的这个Result去处理。<br />
            <font color="#ff00ff">location = &#8220;hello.jsp&#8221;，</font>表示请求由这个Action跳转到hello.jsp这个页面。<br />
            <font color="#ff00ff">type = &#8220;dispathcer</font>&#8221;，表示转发方式，具体解释见下面。</td>
        </tr>
    </tbody>
</table>
<p><br />
其中type=&#8221;dispatcher&#8221;表示请求转发,还有另一种常用的叫做type=&#8221;redirect&#8221;重定向,在下文会出现。Struts2的请求转发和重定向的区别其实跟Java Servlet里的是差不多的。Servlet里与其功能等价的的代码片断如下：</p>
<table border="0" cellspacing="0" cellpadding="2" width="599">
    <tbody>
        <tr>
            <td valign="top" width="597">
            <p>request.getRequestDispatcher("hello.jsp").forward(request, response);&nbsp;&nbsp;&nbsp; //请求转发<br />
            response.sendRedirect("hello.jsp");&nbsp;&nbsp;&nbsp; //重定向</p>
            </td>
        </tr>
    </tbody>
</table>
<p>两者的区别可以这样理解：请求转发（Dispatcher）在转发到的另一页面（如hello.jsp）还能保留Request域里的东西，而重定向（Redirect）的话，就跟它的名字&#8220;重定向&#8221;一样，跳到了另一个页面(如hello.jsp)，不再跟原来页面（或者一个action、或者一个Servlet，或者JSP页面）有任何瓜葛，不会保存原来页面Request域的东西。还有一个表面上的区别就是：请求转发（Dispatcher）到另一个页面（如hello.jsp）后，地址栏里显示的仍然是上一个页面（这里称页面不太合适）的路径（如hello.action），而重定向则显示的是新跳到的那个页面的路径。大家自己测试一下，观察一下，其实也挺容易理解的。</p>
<p>Struts 2.1.6 精简实例系列教程第一期——环境的搭建与HelloSimple介绍就到此，敬请期待下文！</p>
<img src ="http://www.blogjava.net/rongxh7/aggbug/287258.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rongxh7/" target="_blank">心梦帆影</a> 2009-07-18 17:27 <a href="http://www.blogjava.net/rongxh7/archive/2009/07/18/287258.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts 2.1.6 精简实例系列教程（正在发表中，敬请关注~~）</title><link>http://www.blogjava.net/rongxh7/archive/2009/07/04/285449.html</link><dc:creator>心梦帆影</dc:creator><author>心梦帆影</author><pubDate>Sat, 04 Jul 2009 03:55:00 GMT</pubDate><guid>http://www.blogjava.net/rongxh7/archive/2009/07/04/285449.html</guid><wfw:comment>http://www.blogjava.net/rongxh7/comments/285449.html</wfw:comment><comments>http://www.blogjava.net/rongxh7/archive/2009/07/04/285449.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.blogjava.net/rongxh7/comments/commentRss/285449.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rongxh7/services/trackbacks/285449.html</trackback:ping><description><![CDATA[<p>教程别名：基于Struts 2.1.6 的SimpleWeb小项目开发教程</p> <p>实例项目名：SimpleWeb</p> <p>内容提要：</p> <p><a href="http://www.blogjava.net/rongxh7/archive/2009/07/18/287258.html" target="_blank">Struts 2.1.6 精简实例系列教程(1)：环境的搭建与HelloSimple</a></p> <p><a href="http://www.blogjava.net/rongxh7/archive/2009/07/21/287554.html" target="_blank">Struts 2.1.6 精简实例系列教程(2)：用户登录模块的实现</a></p> <p><a href="http://www.blogjava.net/rongxh7/archive/2009/07/26/288414.html" target="_blank">Struts 2.1.6 精简实例系列教程(3)：新闻管理Model层的开发（整合iBatis）</a></p> <p><a href="http://www.blogjava.net/rongxh7/archive/2009/07/27/288495.html" target="_blank">Struts 2.1.6 精简实例系列教程(4)：新闻管理模块的实现</a></p> <p><a href="http://www.blogjava.net/rongxh7/archive/2009/08/01/289402.html" target="_blank">Struts 2.1.6 精简实例系列教程(5)：用户注册模块（整合Jquery）</a></p> <p><a href="http://www.blogjava.net/rongxh7/archive/2009/08/14/291207.html" target="_blank">Struts 2.1.6 精简实例系列教程(6)：重写用户登录模块（整合Jquery+JSON）</a></p> <p>&nbsp;</p> <p>…… 其他内容，如果大家需要，请跟我说一下，我会考虑加入我的教程中。</p> <p>&nbsp;</p> <p>原则：不要因技术而学技术，而要根据需要而学：Struts 2.x有些东西是不需要用或者很少用到的，在本教程中就没有涉及到。</p><img src ="http://www.blogjava.net/rongxh7/aggbug/285449.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rongxh7/" target="_blank">心梦帆影</a> 2009-07-04 11:55 <a href="http://www.blogjava.net/rongxh7/archive/2009/07/04/285449.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[图解教程]Eclipse不可不知的用法之四：配置服务器与项目的新建运行</title><link>http://www.blogjava.net/rongxh7/archive/2009/07/02/285241.html</link><dc:creator>心梦帆影</dc:creator><author>心梦帆影</author><pubDate>Thu, 02 Jul 2009 12:53:00 GMT</pubDate><guid>http://www.blogjava.net/rongxh7/archive/2009/07/02/285241.html</guid><wfw:comment>http://www.blogjava.net/rongxh7/comments/285241.html</wfw:comment><comments>http://www.blogjava.net/rongxh7/archive/2009/07/02/285241.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rongxh7/comments/commentRss/285241.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rongxh7/services/trackbacks/285241.html</trackback:ping><description><![CDATA[<p>这么有失水准的文章，真不好意思再写了。但毕竟还是有些初学者不熟悉，截些图来看一下配置服务器的过程吧。</p> <p><font color="#0000ff"><strong>(7) 配置Tomcat服务器</strong></font></p> <p>这里以配置Tomcat 6.0为例。</p> <p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Eclipse_12013/image_2.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Eclipse_12013/image_thumb.png" width="598" height="323"></a> </p> <p>选择Server下面的Runtime Environments：</p> <p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Eclipse_12013/image_4.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Eclipse_12013/image_thumb_1.png" width="563" height="444"></a> </p> <p>点击右边的&#8220;Add&#8221;按钮，进&#8220;New Server Runtime Environment&#8221;对话框，选择我们要配置的Tomcat版本，这里选用了Tomcat v6.0，注意要与你下载的版本一致。</p> <p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Eclipse_12013/image_6.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Eclipse_12013/image_thumb_2.png" width="528" height="535"></a> </p> <p>Next后进入下图:</p> <p></p> <p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Eclipse_12013/image_8.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Eclipse_12013/image_thumb_3.png" width="487" height="346"></a>&nbsp;</p> <p>在Tomcat installation directory右边的Browse按钮，点击它，进入本地磁盘目录，选择你的Tomcat安装目录，如下：</p> <p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Eclipse_12013/image_10.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Eclipse_12013/image_thumb_4.png" width="507" height="373"></a> </p> <p>确定后，回到刚才那个对话框，点击JRE右边的Installed JREs按钮，进入下图的界面：</p> <p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Eclipse_12013/image_12.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Eclipse_12013/image_thumb_5.png" width="601" height="357"></a> </p> <p>如果这里已经配置了JDK,则直接选择即行，如果没有配置的话，就点右边的&#8220;Add&#8221;,添加一个标准的JRE</p> <p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Eclipse_12013/image_14.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Eclipse_12013/image_thumb_6.png" width="535" height="378"></a> </p> <p>Next,下图，点右边的Directgry浏览本地文件系统，找到JDK的安装目录。</p> <p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Eclipse_12013/image_16.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Eclipse_12013/image_thumb_7.png" width="456" height="409"></a> </p> <p></p> <p></p> <p>好，确定 &#8211; finish，下一步，完成。如下图：</p> <p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Eclipse_12013/image_18.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Eclipse_12013/image_thumb_8.png" width="585" height="324"></a> </p> <p>&nbsp;</p> <p><font color="#0000ff"><strong>(8) 项目的新建、添加jar包、运行。</strong></font></p> <p>一般我们用这个工具来做Web项目，就建一个动态Web工程吧：</p> <p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Eclipse_12013/image_20.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Eclipse_12013/image_thumb_9.png" width="602" height="293"></a> </p> <p>如果上图的选项中没有Dynamic Web Project的话，可在最下面Other那里找到，又或者通过定制菜单将这一项显示在这里，关于如何定制菜单，请看我的<a href="http://www.blogjava.net/rongxh7/archive/2009/06/29/284564.html">[图解教程]Eclipse不可不知的用法之三：定制视图与New菜单项</a>。</p> <p>进入下图界面，在Project name中输入工程名，这里起名为&#8220;HelloWorld&#8221;，在Target runtime中选择刚才我们配置的Tomcat 6.0服务器。如下图：</p> <p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Eclipse_12013/image_22.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Eclipse_12013/image_thumb_10.png" width="613" height="456"></a>&nbsp;</p> <p>行了，完成。</p> <p>关于如何把外部的jar包引进我们的项目中来，这个其实很简单，复制那些jar文件，在下图的lib目录下右键粘贴即行。</p> <p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Eclipse_12013/image_24.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Eclipse_12013/image_thumb_11.png" width="490" height="415"></a> </p> <p>关于如何运行Web项目，Eclipse for JavaEE与MyEclipse的做法不同。</p> <p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Eclipse_12013/image_26.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Eclipse_12013/image_thumb_12.png" width="604" height="461"></a> </p> <p>进入下图，找到我们配置的服务器：</p> <p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Eclipse_12013/image_28.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Eclipse_12013/image_thumb_13.png" width="491" height="578"></a> </p> <p>Next &#8211; &gt; finish即行。</p> <p>&nbsp;</p> <p>好了，Eclipse系列图解教程，到这里，暂告一段落，都是说一些很基础的东西，有什么不足之处，请大家多多包涵！</p> <img src ="http://www.blogjava.net/rongxh7/aggbug/285241.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rongxh7/" target="_blank">心梦帆影</a> 2009-07-02 20:53 <a href="http://www.blogjava.net/rongxh7/archive/2009/07/02/285241.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[图解教程]Axis2与Eclipse整合开发Web Service之二：WSDL逆向生成服务端</title><link>http://www.blogjava.net/rongxh7/archive/2009/07/02/285193.html</link><dc:creator>心梦帆影</dc:creator><author>心梦帆影</author><pubDate>Thu, 02 Jul 2009 07:47:00 GMT</pubDate><guid>http://www.blogjava.net/rongxh7/archive/2009/07/02/285193.html</guid><wfw:comment>http://www.blogjava.net/rongxh7/comments/285193.html</wfw:comment><comments>http://www.blogjava.net/rongxh7/archive/2009/07/02/285193.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.blogjava.net/rongxh7/comments/commentRss/285193.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rongxh7/services/trackbacks/285193.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一般开发Web Service，是选写服务端，再根据生成的WSDL文件生成客户端。看过一本SOA的书中说，如果实现防止不同语言一些特定的数据类型的不兼容性，推荐先定义WSDL接口，包括一输入输出参数、返回值及相关的数据类型等，再通过WSDL来生成服务器端和客户端，这样的好处是：服务端不用关心客户端怎么调用，客户端也不用关系服务端如何实现。</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 关于Eclipse中Axis2的配置方法，请看我的<a href="http://www.blogjava.net/rongxh7/archive/2009/05/21/271982.html">[图解教程] Axis2与Eclipse整合开发Web Service之一：简单的计算服务例子</a>，下面来新建一个WSDL文件，如下图：</p> <p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Axis2EclipseWebServiceWSDL_C28D/image_2.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Axis2EclipseWebServiceWSDL_C28D/image_thumb.png" width="590" height="595"></a> </p> <p>改个名字为&#8220;manager.wsdl&#8221;，如下图：</p> <p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Axis2EclipseWebServiceWSDL_C28D/image_4.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Axis2EclipseWebServiceWSDL_C28D/image_thumb_1.png" width="546" height="465"></a> </p> <p>下一步，定义命名空间和协议等信息，默认即行。如下图：</p> <p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Axis2EclipseWebServiceWSDL_C28D/image_6.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Axis2EclipseWebServiceWSDL_C28D/image_thumb_2.png" width="504" height="429"></a> </p> <p>finish后，会在主工作区出现如下图：</p> <p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Axis2EclipseWebServiceWSDL_C28D/image_12.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Axis2EclipseWebServiceWSDL_C28D/image_thumb_5.png" width="612" height="195"></a> </p> <p>这是manager.wsdl的图形化形式，点击&#8220;Source&#8221;会可查看到源代码：</p> <p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Axis2EclipseWebServiceWSDL_C28D/image_14.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Axis2EclipseWebServiceWSDL_C28D/image_thumb_6.png" width="608" height="271"></a> </p> <p>这是默认生成的wsdl，我们要根据我们的项目需要，修改上面的图，首先对方法名进行修改，如下图：</p> <p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Axis2EclipseWebServiceWSDL_C28D/image_18.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Axis2EclipseWebServiceWSDL_C28D/image_thumb_8.png" width="472" height="170"></a> </p> <p>可见，修改之后，右边的input和output也跟着修改了，这两个就是定义plus的输入和输出。</p> <p>点击input参数&#8220;plus&#8221;右边的提示箭头，进入下图：</p> <p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Axis2EclipseWebServiceWSDL_C28D/image_20.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Axis2EclipseWebServiceWSDL_C28D/image_thumb_9.png" width="432" height="197"></a> </p> <p>就在这里定义输入参数和和参数类型等信息，因为我们plus(float x, float y)方法中有两个参数x和y，故我们将上图改成两个参数的序列：</p> <p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Axis2EclipseWebServiceWSDL_C28D/image_30.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Axis2EclipseWebServiceWSDL_C28D/image_thumb_14.png" width="416" height="229"></a> </p> <p>变成下图，对比一下方法plus(float x, float y)，下图也不会太难理解吧！</p> <p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Axis2EclipseWebServiceWSDL_C28D/image_32.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Axis2EclipseWebServiceWSDL_C28D/image_thumb_15.png" width="465" height="223"></a> </p> <p>我们返回manager.wsdl视图，选择output参数右边的箭头，进入下图：</p> <p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Axis2EclipseWebServiceWSDL_C28D/image_34.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Axis2EclipseWebServiceWSDL_C28D/image_thumb_16.png" width="451" height="168"></a> </p> <p>我们在这里设置float plus(float x, float y)方法的返回值及其类型，因其返回值只有一个，我们只须把上面的out的类型改成我们方法中用的float，改后，如下图：</p> <p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Axis2EclipseWebServiceWSDL_C28D/image_42.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Axis2EclipseWebServiceWSDL_C28D/image_thumb_20.png" width="530" height="203"></a> </p> <p>有没有注意到上图左上角有个<a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Axis2EclipseWebServiceWSDL_C28D/image_44.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Axis2EclipseWebServiceWSDL_C28D/image_thumb_21.png" width="37" height="32"></a> 图标，点击它，进入下图：</p> <p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Axis2EclipseWebServiceWSDL_C28D/image_48.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Axis2EclipseWebServiceWSDL_C28D/image_thumb_23.png" width="654" height="456"></a> </p> <p>我们可以在这里对输入输出的参数及其他数据类型进行修改，如果在上面的操作过程中，不小心产生了多余的标签的话，也可以在这里去除。</p> <p>好了，我们再回到manager.wsdl，在源代码视图里右键选&#8220;Validate&#8221;，对xml文档进行检验，如果有错误的，就根据需要修改。</p> <p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Axis2EclipseWebServiceWSDL_C28D/image_50.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Axis2EclipseWebServiceWSDL_C28D/image_thumb_24.png" width="318" height="216"></a> </p> <p>好了，图形化编写的wsdl文档完成了，顺便说一下，方法是可以定义多个的，如下图：</p> <p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Axis2EclipseWebServiceWSDL_C28D/image_52.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Axis2EclipseWebServiceWSDL_C28D/image_thumb_25.png" width="437" height="177"></a> </p> <p>为简单起见，我们就先以刚才做定义的那个方法为例，看看，如何根据wsdl文件，自动生成Web Service的服务器端。</p> <p>&nbsp;</p> <p>我们New一个Web Service，如下图：</p> <p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Axis2EclipseWebServiceWSDL_C28D/image_54.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Axis2EclipseWebServiceWSDL_C28D/image_thumb_26.png" width="523" height="497"></a> </p> <p>记得在Web Service type中选择&#8220;Top down Java Bean Web Service&#8221;，如下图：</p> <p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Axis2EclipseWebServiceWSDL_C28D/image_56.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Axis2EclipseWebServiceWSDL_C28D/image_thumb_27.png" width="545" height="185"></a></p> <p>然后，在Service definition中找到刚才写的那个manager.wsdl文件。</p> <p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Axis2EclipseWebServiceWSDL_C28D/image_58.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Axis2EclipseWebServiceWSDL_C28D/image_thumb_28.png" width="570" height="455"></a>&nbsp; </p> <p>回到Web Service对话框，将服务类型的滑块调到&#8220;Develop service&#8221;处，</p> <p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Axis2EclipseWebServiceWSDL_C28D/image_60.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Axis2EclipseWebServiceWSDL_C28D/image_thumb_29.png" width="584" height="398"></a> </p> <p>接下来，就next &#8211;&gt; next &#8211;-&gt; finish就行。它会自动生成Web Service服务端的接口和类，在类中，可找到我们定义的方法：</p> <p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Axis2EclipseWebServiceWSDL_C28D/image_62.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Axis2EclipseWebServiceWSDL_C28D/image_thumb_30.png" width="578" height="174"></a> </p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p>我们只要修改方法plus的方法体，以实现我们要实现的功能即行。如下：</p> <p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Axis2EclipseWebServiceWSDL_C28D/image_64.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Axis2EclipseWebServiceWSDL_C28D/image_thumb_31.png" width="579" height="188"></a> </p> <p>这是通过WSDL反向生成Web Service服务端的最简单一个例子，可能看不到有什么好处，没有像<a href="http://www.blogjava.net/rongxh7/archive/2009/05/21/271982.html">[图解教程] Axis2与Eclipse整合开发Web Service之一：简单的计算服务例子</a>那样的简便快捷，但如果是一些特有的数据类型，如List，Set，这些，我们有在WSDL图形化设计中找到相应的替代类型，先定义WSDL再生成服务端接口，这样做，不仅Java开发客户端是没有问题的，用C#开发客户端也能成功没有出错！</p> <p>但如果先开发服务器端的话，如果用到一些Java特有的数据类型，如List，Set，如果用其他语言生成的客户端，就可能出问题。同理，用C#开发服务端，如果用到像DataSet这样的返回类型的话，那如果用Java或者其他语言去开发客户端，也可能会出现问题的。</p> <p>如果统一先写WSDL，再根据WSDL生成服务端和客户端，应该是一种很不错的做法，Eclipse在这方面的图形化支持给带给我们事半功倍的效果，这样做，也比较符合SOA的做法。</p> <img src ="http://www.blogjava.net/rongxh7/aggbug/285193.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rongxh7/" target="_blank">心梦帆影</a> 2009-07-02 15:47 <a href="http://www.blogjava.net/rongxh7/archive/2009/07/02/285193.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[图解教程]Eclipse不可不知的用法之三：定制视图与New菜单项</title><link>http://www.blogjava.net/rongxh7/archive/2009/06/29/284564.html</link><dc:creator>心梦帆影</dc:creator><author>心梦帆影</author><pubDate>Mon, 29 Jun 2009 03:20:00 GMT</pubDate><guid>http://www.blogjava.net/rongxh7/archive/2009/06/29/284564.html</guid><wfw:comment>http://www.blogjava.net/rongxh7/comments/284564.html</wfw:comment><comments>http://www.blogjava.net/rongxh7/archive/2009/06/29/284564.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/rongxh7/comments/commentRss/284564.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rongxh7/services/trackbacks/284564.html</trackback:ping><description><![CDATA[<p>关键词：Show View , 显示视图， Customize Perspective ， 定制New菜单栏， Eclipse for JavaEE,&nbsp; 图解使用教程</p> <p><strong><font color="#0000ff">（5）定制视图</font></strong></p> <p>定制前的视图：</p> <p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/EclipseNew_964A/image_10.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/EclipseNew_964A/image_thumb_4.png" width="628" height="436"></a> </p> <p>菜单栏中Window &#8211;&gt; Show View &#8211;&gt; Other</p> <p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/EclipseNew_964A/image_12.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/EclipseNew_964A/image_thumb_5.png" width="478" height="286"></a> </p> <p>进入&#8220;Show View&#8221;对话框，在这里选择须要显示的视图，点&#8220;OK&#8221;即行。</p> <p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/EclipseNew_964A/image_14.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/EclipseNew_964A/image_thumb_6.png" width="409" height="631"></a> </p> <p>为测试，我选择几个常用的视图，如：java/Package Explorer , Data Management/Data Source Explorer , General/Internet Web Browser , General/Console 等等。</p> <p>定制后，我们将其拖放到想要放置的地方即行，显示如下图：</p> <p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/EclipseNew_964A/image_16.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/EclipseNew_964A/image_thumb_7.png" width="625" height="436"></a> </p> <p>&nbsp;</p> <p><font color="#0000ff"><strong>（6）定制New选项</strong></font></p> <p>原始的New选项：</p> <p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/EclipseNew_964A/image_2.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/EclipseNew_964A/image_thumb.png" width="614" height="517"></a> </p> <p>如果我们须要建的文件类型不在上图右边的选项栏中的话，就需要点&#8220;Other&#8221;进入下一个对话框去选择，有没有办法使得右边的选项栏中出现我们常常须要建的文件类型，而去掉那些不常使用的呢？</p> <p>点Window &#8211;&gt; Customize Perspective:</p> <p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/EclipseNew_964A/image_4.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/EclipseNew_964A/image_thumb_1.png" width="259" height="321"></a> </p> <p>进入Customize Perspective -Web对话框，选择最右边的选项卡Shortcuts,在Submenus中选择New，那么下面所列出的，若是选中的，则表示是在New菜单项中显示的。我们逐个逐个来，把要显示的选中，把不要显示的去掉。</p> <p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/EclipseNew_964A/image_6.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/EclipseNew_964A/image_thumb_2.png" width="616" height="433"></a> </p> <p>定制后的New选项：</p> <p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/EclipseNew_964A/image_8.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/EclipseNew_964A/image_thumb_3.png" width="625" height="395"></a> </p> <p>只显示我们常用的，简洁了许多吧。</p> <img src ="http://www.blogjava.net/rongxh7/aggbug/284564.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rongxh7/" target="_blank">心梦帆影</a> 2009-06-29 11:20 <a href="http://www.blogjava.net/rongxh7/archive/2009/06/29/284564.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[图解教程]Eclipse不可不知的用法之二：自动生成接口和JUnit测试类</title><link>http://www.blogjava.net/rongxh7/archive/2009/06/28/284438.html</link><dc:creator>心梦帆影</dc:creator><author>心梦帆影</author><pubDate>Sat, 27 Jun 2009 19:33:00 GMT</pubDate><guid>http://www.blogjava.net/rongxh7/archive/2009/06/28/284438.html</guid><wfw:comment>http://www.blogjava.net/rongxh7/comments/284438.html</wfw:comment><comments>http://www.blogjava.net/rongxh7/archive/2009/06/28/284438.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/rongxh7/comments/commentRss/284438.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rongxh7/services/trackbacks/284438.html</trackback:ping><description><![CDATA[<p>关键词：Extract Interface、抽取接口、JUnit Test Case、JUnit测试、自动生成接口、自动生成测试类、Eclipse-jee使用方法、自动生成代码、Eclipse3.5、图解使用教程</p> <p><strong><font color="#0000ff">（3）通过类自动生成它的接口：</font></strong></p> <p>在Spring应用中，常常会用到&#8220;接口+实现类&#8221;的形式，即要实现类又要写一个方法差不多的接口，有时候感觉比较烦琐。其实，Eclipse可以根据类自动抽取出接口来。</p> <p>PersonServiceImpl.java的代码如下：</p> <p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/EclipseforJavaEE_1F00/image_10.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/EclipseforJavaEE_1F00/image_thumb_4.png" width="619" height="417"></a> </p> <p>在上面代码的空白处点右键，或者在PersonServiceImpl类名上点右键 —&gt; Refactor &#8211;&gt; Extract Interface，如下图：  <p>&nbsp;<a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/EclipseforJavaEE_1F00/image_4.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/EclipseforJavaEE_1F00/image_thumb_1.png" width="597" height="415"></a> </p> <p>在&#8220;在Extract Interface&#8221;对话框中，Interface name框中输入接口名：PersonService，将addPerson和queryPerson方法钩选上，如下图：</p> <p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/EclipseforJavaEE_1F00/image_12.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/EclipseforJavaEE_1F00/image_thumb_5.png" width="502" height="392"></a> </p> <p>点OK后，即可自动生成PersonServiceImpl.java的接口类PersonService.java，如下图：</p> <p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/EclipseforJavaEE_1F00/image_14.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/EclipseforJavaEE_1F00/image_thumb_6.png" width="578" height="293"></a> </p> <p>而再看看PersonServiceImpl类代码有了什么变化：</p> <p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/EclipseforJavaEE_1F00/image_16.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/EclipseforJavaEE_1F00/image_thumb_7.png" width="472" height="94"></a> </p> <p>&nbsp;</p> <p><strong><font color="#0000ff">（4）自动生成Junit测试类</font></strong></p> <p>在类名上点右键 &#8211;&gt; New &#8211;&gt; Other ，如下图：</p> <p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/EclipseforJavaEE_1F00/image_18.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/EclipseforJavaEE_1F00/image_thumb_8.png" width="624" height="392"></a> </p> <p>在新建对话框中，选择Java &gt;&gt; Junit &gt;&gt; Junit Test Case</p> <p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/EclipseforJavaEE_1F00/image_20.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/EclipseforJavaEE_1F00/image_thumb_9.png" width="558" height="531"></a> </p> <p>在&#8220;New Junit Test Case&#8221;对话框中，填写测试类名，此处，用默认（PersonServiceTest）即行，如果不想测试类与PersonService类置同一包下，可在Package中选择指定的包来存放测试类，此处也默认处理。如下图：</p> <p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/EclipseforJavaEE_1F00/image_22.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/EclipseforJavaEE_1F00/image_thumb_10.png" width="534" height="528"></a> </p> <p>点Next后进入下图，将要测试的方法钩选中，Finish即行。</p> <p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/EclipseforJavaEE_1F00/image_24.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/EclipseforJavaEE_1F00/image_thumb_11.png" width="507" height="367"></a> </p> <p>如果第一次建测试类，它要求加入JUnit的jar包，点OK即行。如下图：</p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/EclipseforJavaEE_1F00/image_26.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/EclipseforJavaEE_1F00/image_thumb_12.png" width="510" height="251"></a> </p> <p>这时，JUnit测试类PersonServiceTest.java便自动生成了，如下图：</p> <p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/EclipseforJavaEE_1F00/image_28.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/EclipseforJavaEE_1F00/image_thumb_13.png" width="612" height="257"></a> </p> <p>我们只须修改测试类的方法的方法体，即可进行测试。</p> <img src ="http://www.blogjava.net/rongxh7/aggbug/284438.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rongxh7/" target="_blank">心梦帆影</a> 2009-06-28 03:33 <a href="http://www.blogjava.net/rongxh7/archive/2009/06/28/284438.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>