然而,使用可變參數(shù)時,要注意幾個問題:
1) 可變參數(shù)方法與數(shù)組參數(shù)方法重載時
public class MethodParams{ //帶可變參數(shù)的方法 public void hello(String ...params) { System.out.println("執(zhí)行帶可變參數(shù)的方法,參數(shù)個數(shù)為:" + params.length); } //帶數(shù)組參數(shù)的方法 public void hello(String[] params) { System.out.println("執(zhí)行帶數(shù)組參數(shù)的方法,數(shù)組長度為:" + params.length); } }
我們寫個測試代碼運行一下看看結(jié)果如何:
MethodParams mp = new MethodParams(); mp.hello("AAA","BBB","CCC");
編譯時報錯:
MethodParams.java:7: 無法在 MethodParams 中同時聲明 hello(java.lang.String[]) 和 hello(java.lang.String...) public void hello(String[] params) { ^ 1 錯誤
結(jié)論: JDK不允許存在, 帶可變參數(shù)的方法和帶數(shù)組參數(shù)的方法在同一類中重載。
可變參數(shù)==數(shù)組參數(shù)? 在帶可變參數(shù)的方法體時,讀取可變參數(shù)列表時,就是以數(shù)組的方式來讀取;
帶可變參數(shù)的方法可以傳入一個數(shù)組參數(shù),但帶數(shù)組參數(shù)的方法卻不能傳入可變參數(shù)。
2) 可變參數(shù)方法與可變參數(shù)方法重載時
//帶可變參數(shù)的方法 public void hello(String ...params) { System.out.println("執(zhí)行帶可變參數(shù)的方法,參數(shù)個數(shù)為:" + params.length); } //帶固定參數(shù)和可變參數(shù) public void hello(String param1, String ...params) { System.out.println("執(zhí)行帶固定參數(shù)和可變參數(shù)的方法,參數(shù)個數(shù)為:" + params.length); }
測試代碼跟上例中一樣,編譯時報錯:
MethodParams.java:18: 對 hello 的引用不明確,MethodParams 中的 方法 hello(java.l ang.String...) 和 MethodParams 中的 方法 hello(java.lang.String,java.lang.String ...) 都匹配 mp.hello("AAA","BBB","CCC"); ^ 1 錯誤
結(jié)論:JDK不允許存在,帶相同參數(shù)類型列表(Type List)的參數(shù)列表的方法在同一類中重載。
3)可變參數(shù)方法與無參數(shù)方法重載時
//帶可變參數(shù)的方法 public void hello(String ...params) { System.out.println("執(zhí)行帶可變參數(shù)的方法,參數(shù)個數(shù)為:" + params.length); } //不帶參數(shù)的方法 public void hello() { System.out.println("執(zhí)行不帶參數(shù)的方法"); }
我們都知道,可變參數(shù)即可帶0個或者多個參數(shù),如果帶0個參數(shù)即不帶參數(shù)時,JDK會怎么處理呢?
那我們就以執(zhí)行"mp.hello()"來測試一下。編譯通過,運行正常,調(diào)用的還帶參數(shù)的hello()方法。
結(jié)論:當可變參數(shù)方法與不帶參數(shù)的方法重載時,JDK默認調(diào)用的是無參數(shù)的方法。若類中沒有定義無參數(shù)的方法,則會調(diào)用可變參數(shù)的方法。
提供給外部調(diào)用的cn.idchecker.check.Checker類的相關(guān)方法如下表:
方法 | 方法作用 | 參數(shù)及返回值 |
Checker(String num) | 構(gòu)造方法 | 參數(shù)num為18位身份證號碼的字符串 |
boolean checkLength() | 驗證身份證長度是否正確 | 長度為18,則返回true,否則返回false |
boolean checkBirth() | 驗證出生生日碼是否合法 | 合法則返回true,否則返回false |
boolean checkAddr() | 驗證地址碼是否存在 | 存在則返回true,否則返回false |
boolean checkCheckCode() | 計算校驗碼是否正確 | 正確則返回true,否則返回false |
boolean check() | 總的身份證驗證,驗證順序:長度 -> 生日 -> 最后一位校驗碼 -> 地址 | 若遇到有一項目不合法即返回false,所有驗證通過才返回true。驗證后,可通過調(diào)用getErrorMsg()方法獲取錯誤信息 |
boolean checkAll() | 總的身份證驗證,驗證項目包括長度、地址、生日、最后一位校驗碼 | 身份證合法則返回true,否則false。驗證后,可調(diào)用getErrorMsgs()方法獲取錯誤信息集合 |
String getBirth() | 獲取出生年月日 | 返回“2010年01月12日”格式的生日字符串通串 |
String getAddr() | 獲取公民籍貫 | 返回籍貫字符串("xx省xx市xx縣”) |
String getSex() | 獲取性別 | 返回“男”或“女” |
String getErrorMsg() | 獲取錯誤信息 | 返回錯誤信息字符串 |
public Set<String> getErrorMsgs() | 獲取錯誤信息集合 | 返回錯誤信息集合 |
用法舉例 1 :解壓縮“idchecker.zip”,將其目錄下的“idchecker.jar” 包引進Java Project中,以下是測試程序:
運行結(jié)果:
用法舉例 2 :將“idchecker.jar” 包引進到Web Project的lib目錄下,以下是測試程序:
運行結(jié)果:
從截圖中, 我們可看出,
問題1:右邊的內(nèi)容多時,會導致左邊露空白;或者左邊內(nèi)容多時,會導致右邊露空白。怎么解決?
問題2:右邊那一大塊層的寬度應該設置多少呢?設置小了,會與右邊界不對齊,設置大了,整塊層會被擠到下一行去。怎么辦?
其實,兩個問題,都可歸結(jié)到同一個問題,即如何使得層的高度或?qū)挾冗_到自適應的效果?
且看下面的HTML和CSS代碼,詳細講解在CSS代碼注釋中:
運行截圖如下:
我們來探討一下影響DIV寬度或高度的屬性有哪些?
DIV的寬度 = width + padding + border + margin |
僅從一條公式上看,可能有點難理解,我們通過測試代碼和截圖來觀察一下。為了測試結(jié)果觀察直觀,我們只測試一邊,即左邊,即本來padding、border、margin的寬度計算,都是左右兩邊都算在內(nèi)的,這里就只測試左邊,右邊同理。
我們在Firefox中測試,截圖如下:
我們來分析一下DIV4,如下圖:
對照上面的代碼和截圖,我們可以清楚地理解“div的寬度 = width + padding + border + margin”這條公式。
對于Web前端開發(fā)者來說,最頭痛的事情就是因瀏覽器的差異而引起的網(wǎng)頁顯示效果的差異,而對于這條寬度計算公式,在其他瀏覽器中會不會有不兼容的問題呢?
幸好,大部分常用的瀏覽器,我機器上都安裝了,測試結(jié)果是:在Firefox、Opera、Google、IE8、IE7顯示都跟上面的截圖一樣,也就是說,在這些瀏覽器中,寬度的計算公式是:
DIV的寬度 = width + padding + border + margin |
而在IE6中測試,結(jié)果卻不是這樣,請看運行截圖:
由上圖可以看出,在IE6的寬度計算是:
DIV的寬度 = width + margin |
而border和padding,是占用了width的位置。這一點,在前端開發(fā)中要注意。
我們都知道CSS中定位屬性position的值,除了默認的值外,還有absolute,relative和fixed。我平時比較常用absolute和relative,而position:fixed卻沒多關(guān)注。或許是因為當初在CSS中文手冊中看到position:fixed旁邊有說明“IE5.5及NS6尚不支持此屬性”吧。
前段時間,在做一個項目時需要使一個層相對于瀏覽器邊框固定,那時用position:absolute試了下,發(fā)覺absolute是對網(wǎng)頁邊框而言的。后來,上網(wǎng)查了一些根據(jù)滾動條的移動,動態(tài)地改變left和top的值的JavaScript語句,雖然能實現(xiàn)了類似的效果,但滾動條移動時,那個層晃來晃去的,感覺不好看,想要一種能使層固定不動的做法。
且看下面的代碼:
<style type="text/css"> |
我們用上面這段代碼來定義頁面上的一個層“help”(id=“help”)。這樣就能實現(xiàn)我們想要的效果了。
在IE8、Firefox、Opera、Google等瀏覽器中測試,都沒有問題,唯獨低版本的IE中,這個屬性無效。
上期的Struts 2.1.6 精簡實例系列教程(1):環(huán)境的搭建與HelloSimple中,我們建的package名為“cn.simple.action”,這些包名有一個規(guī)則的,只要包含“action,actions,struts,struts2”都會默認被掃描到為Action類,也就是說,我們只要配置了如“cn.simple.action”、“cn.simple.struts”、“cn.simple.action.admin”等包名,就可以不用在配置文件struts.xml(Struts2.0的配置文件)中配置這些Action類了。當然,這些包名,也可以是別的,但要寫一點點配置,我們就用默認的吧。關(guān)于這方面的詳細說明,還是強烈建議大家先看官方的文檔http://struts.apache.org/2.1.6/docs/convention-plugin.html。
好,我們開始寫我們的用戶登錄模塊吧。先寫個loginform.jsp,記得,不要忘記我們把JSP文件放在Web-Inf/content/目錄下
<%@ page language="java" contentType="text/html; charset=UTF-8" <s:fielderror></s:fielderror> <form action="login.action" method="post"> </body> |
大家如果想用Struts 2的標簽庫的話,也可以用Struts 2的Form標簽,用之前,要在JSP頭配置上Struts 2標簽庫,換成Struts 2標簽的版本后,即:
<%@ page language="java" contentType="text/html; charset=UTF-8" <s:fielderror></s:fielderror> <s:form action="login"> </body> |
接著,我們寫一個登錄處理的Action類:loginAction.java,代碼如下:
package cn.simple.action; import org.apache.struts2.convention.annotation.Result; @Results({ private String loginName; @Override //*******Getter和Setter方法***********// public String getPassword() { |
解釋一下這個類吧:
execute 這個方法是重寫了父類ActionSupport的方法,是Action默認會執(zhí)行的方法,即訪問…/login.action或者…/login,它默認會執(zhí)行這個方法。 validate 在執(zhí)行execute方法之前,它會先執(zhí)行validate這個方法,檢查登錄框是否輸入正確,這個方法也是重寫了父類的validate方法。 getter和setter,有了setter方法,才能使action能拿到上一個JSP頁面?zhèn)鬟^來的Request域的數(shù)據(jù);有了getter方法,下一個轉(zhuǎn)發(fā)(dispatcher)過去的頁面才能拿到此Action的Request域的數(shù)據(jù)。 執(zhí)行過程是這樣:表單提交給LoginAction,LoginAction先執(zhí)行validate方法,檢驗loginName和password是否符合要求,如果不符合,就會addFieldError (把錯誤信息放到Field棧里),如果Field棧里有錯誤信息的話,它就不會再執(zhí)行execute方法,直接轉(zhuǎn)發(fā)(Dispatcher)到INPUT即“input”所指定的錯誤處理頁面,這里為location="loginform.jsp",即讓它返回到表單登錄頁去,如果剛才validate方法中驗證正確,即Field棧中沒有錯誤信息,就會執(zhí)行execute方法。在這里execute返回SUCCESS,即“success”,根據(jù)Result注解,就會重定向到admin/index.action這個action。 |
返回SUCCESS重定向到的后臺主頁,其實簡單,admin/index.jsp,代碼很簡單,就在HTML中顯示一句“登錄成功”,代碼略。
這些的目錄結(jié)構(gòu)如下:
運行一下吧:
一點提醒:本項目網(wǎng)頁的排版以精簡為主,在真實的網(wǎng)站開發(fā)中,建議用Dreamweaver可視化排版,再作必要的修改和嵌入必要的動態(tài)標簽。
“Struts 2.1.6 精簡實例系列教程(2):用戶登錄模塊的實現(xiàn)” 講解就到此,你也試一下吧,好,敬請關(guān)注下文!
下載Eclipse for JavaEE(3.4 or 3.5),網(wǎng)址http://www.eclipse.org/downloads/,點擊下圖選中的鏈接,進入下一個頁面,找到能夠下載的地方下載就行。
JDK6.0和Tomcat6.0,請大家自行下載。
另外,建議下載JSP標準標準庫JSTL,下載地址:/Files/rongxh7/jstl-jar.rar
好,暫時下載這些,以后,需要用到其他的時,再下載。至于JDK6.0,Tomcat6.0,Eclipse的安裝,請大家自行安裝,在這里就不演示安裝過程了,如有什么問題,再聯(lián)系我。
關(guān)于Eclipse的部分用法,如在Eclipse里配置Tomcat服務器,新建動態(tài)Web項目等,請看我的(Eclipse圖解教程),或者上網(wǎng)找一下其他的資料學習一下。
來開始我們的項目吧,先做個簡單的測試,New一個Dynamic Web Project,起名為“SimpleWeb”,將Struts2.1.6的下載包解壓后得到的lib目錄,在lib目錄下,找到以面的jar包:
|
把這些包放進項目的lib目錄下,同時,建議也把JSTL的核心jar包也放到lib目錄,這些JSTL的包主要有:
jstl.jar |
我們先要在項目WEB-INF下的web.xml文件中配置Struts2應用,配置后,web.xml全部代碼如下:
<?xml version="1.0" encoding="UTF-8"?> |
我們在項目的WEB-INF目錄下新建一個文件夾命名為“content”,這個文件夾名一定要這樣,如果寫成別的,要另外配置一下,但初學的話,就按它默認的吧。我們新建的這個content目錄,就是專門用來放JSP文件的。
我們在content目錄下建一個JSP文件,命名為“hello.jsp”,內(nèi)容可以很簡單,就在里面寫一個簡單的話:Hello SImple,代碼略。
這時,整個項目的文件夾視圖如下:
我運行Tomcat服務器,測試一下Struts2配置能不能用。首先我們在地址欄輸入:http://localhost:8060/SimpleWeb/hello.jsp ,很遺憾,不管用了,報錯了:HTTP Status 404 - The requested resource (/SimpleWeb/hello.jsp) is not available.截圖如下:
正確的做法是,輸入地址: http://localhost:8060/SimpleWeb/hello.action 或者http://localhost:8060/SimpleWeb/hello 如果出現(xiàn)如下結(jié)果,就說明Struts2配置成功了。
注意一點,這只是在WEB-INF/content目錄下的文件是通過這種方式訪問的;如果不是在這目錄下,而在項目目錄下,即Eclipse對應項目的WebContent下,就不能這樣訪問了。舉例說,在項目根目錄下建個hello.jsp的文件,則我們只能通過http://localhost:8060/SimpleWeb/hello.jsp來訪問。
能通過hello.action或者hello訪問WEB-INF/content下的hello.jsp,這種做法,是Struts2.1.6跟Struts2.0不同之處之一。使用時請確保你使用的Struts版本是2.1.6+。相關(guān)的命名規(guī)范與默認的action匹配規(guī)則,請參考官方的文檔:http://struts.apache.org/2.1.6/docs/convention-plugin.html
我們再新建一個Java類,命名為HelloAction,此類須繼承com.opensymphony.xwork2.ActionSupport,代碼如下:
package cn.simple.action; import org.apache.struts2.convention.annotation.Result;
@Override |
讓我們再次訪問:http://localhost:8060/SimpleWeb/hello.action 或者http://localhost:8060/SimpleWeb/hello
可以看出,在Eclipse的控制臺確定打印出了以下信息,這說明,訪問請求確定經(jīng)過了HelloAction類。
同時頁面是跳到了WEB-INF/content/hello.jsp文件(如下圖),這說明請求的確是從HelloAction類轉(zhuǎn)發(fā)到了hello.jsp。
看來,好像在不做什么配置,Struts2.1.6也會找到名為HelloAction的類來處理…/hello.action或者…/hello的請求,而好像也沒有做什么配置,HelloAction會自動將請求轉(zhuǎn)發(fā)給名為hello.jsp的頁面,這正是Struts2.1.6的妙用之處,全賴struts2-convention-plugin-2.1.6.jar這個插件,具體了解,可看我上面提供的官方鏈接,或者看這位帥哥的翻譯之作:struts2采用convention-plugin實現(xiàn)零配置。
看了上面的HelloAction的代碼若感到莫名其妙的話,我這里把那些默認的、約定俗成的代碼也寫出來,這樣,修改后的HelloAction類如下:
package cn.simple.action; import org.apache.struts2.convention.annotation.Result; @Results({ @Override |
這樣就容易明白許多了。解釋如下:
name = “success” 跟 Action里的execute()方法的返回值SUCCESS(也可寫成“success”)對應,即若此Action類一旦返回SUCCESS,就會跳到對應的這個Result去處理。 location = “hello.jsp”,表示請求由這個Action跳轉(zhuǎn)到hello.jsp這個頁面。 type = “dispathcer”,表示轉(zhuǎn)發(fā)方式,具體解釋見下面。 |
其中type=”dispatcher”表示請求轉(zhuǎn)發(fā),還有另一種常用的叫做type=”redirect”重定向,在下文會出現(xiàn)。Struts2的請求轉(zhuǎn)發(fā)和重定向的區(qū)別其實跟Java Servlet里的是差不多的。Servlet里與其功能等價的的代碼片斷如下:
request.getRequestDispatcher("hello.jsp").forward(request, response); //請求轉(zhuǎn)發(fā) |
兩者的區(qū)別可以這樣理解:請求轉(zhuǎn)發(fā)(Dispatcher)在轉(zhuǎn)發(fā)到的另一頁面(如hello.jsp)還能保留Request域里的東西,而重定向(Redirect)的話,就跟它的名字“重定向”一樣,跳到了另一個頁面(如hello.jsp),不再跟原來頁面(或者一個action、或者一個Servlet,或者JSP頁面)有任何瓜葛,不會保存原來頁面Request域的東西。還有一個表面上的區(qū)別就是:請求轉(zhuǎn)發(fā)(Dispatcher)到另一個頁面(如hello.jsp)后,地址欄里顯示的仍然是上一個頁面(這里稱頁面不太合適)的路徑(如hello.action),而重定向則顯示的是新跳到的那個頁面的路徑。大家自己測試一下,觀察一下,其實也挺容易理解的。
Struts 2.1.6 精簡實例系列教程第一期——環(huán)境的搭建與HelloSimple介紹就到此,敬請期待下文!
實例項目名:SimpleWeb
內(nèi)容提要:
Struts 2.1.6 精簡實例系列教程(1):環(huán)境的搭建與HelloSimple
Struts 2.1.6 精簡實例系列教程(2):用戶登錄模塊的實現(xiàn)
Struts 2.1.6 精簡實例系列教程(3):新聞管理Model層的開發(fā)(整合iBatis)
Struts 2.1.6 精簡實例系列教程(4):新聞管理模塊的實現(xiàn)
Struts 2.1.6 精簡實例系列教程(5):用戶注冊模塊(整合Jquery)
Struts 2.1.6 精簡實例系列教程(6):重寫用戶登錄模塊(整合Jquery+JSON)
…… 其他內(nèi)容,如果大家需要,請跟我說一下,我會考慮加入我的教程中。
原則:不要因技術(shù)而學技術(shù),而要根據(jù)需要而學:Struts 2.x有些東西是不需要用或者很少用到的,在本教程中就沒有涉及到。
(7) 配置Tomcat服務器
這里以配置Tomcat 6.0為例。
選擇Server下面的Runtime Environments:
點擊右邊的“Add”按鈕,進“New Server Runtime Environment”對話框,選擇我們要配置的Tomcat版本,這里選用了Tomcat v6.0,注意要與你下載的版本一致。
Next后進入下圖:
在Tomcat installation directory右邊的Browse按鈕,點擊它,進入本地磁盤目錄,選擇你的Tomcat安裝目錄,如下:
確定后,回到剛才那個對話框,點擊JRE右邊的Installed JREs按鈕,進入下圖的界面:
如果這里已經(jīng)配置了JDK,則直接選擇即行,如果沒有配置的話,就點右邊的“Add”,添加一個標準的JRE
Next,下圖,點右邊的Directgry瀏覽本地文件系統(tǒng),找到JDK的安裝目錄。
好,確定 – finish,下一步,完成。如下圖:
(8) 項目的新建、添加jar包、運行。
一般我們用這個工具來做Web項目,就建一個動態(tài)Web工程吧:
如果上圖的選項中沒有Dynamic Web Project的話,可在最下面Other那里找到,又或者通過定制菜單將這一項顯示在這里,關(guān)于如何定制菜單,請看我的[圖解教程]Eclipse不可不知的用法之三:定制視圖與New菜單項。
進入下圖界面,在Project name中輸入工程名,這里起名為“HelloWorld”,在Target runtime中選擇剛才我們配置的Tomcat 6.0服務器。如下圖:
行了,完成。
關(guān)于如何把外部的jar包引進我們的項目中來,這個其實很簡單,復制那些jar文件,在下圖的lib目錄下右鍵粘貼即行。
關(guān)于如何運行Web項目,Eclipse for JavaEE與MyEclipse的做法不同。
進入下圖,找到我們配置的服務器:
Next – > finish即行。
好了,Eclipse系列圖解教程,到這里,暫告一段落,都是說一些很基礎(chǔ)的東西,有什么不足之處,請大家多多包涵!
關(guān)于Eclipse中Axis2的配置方法,請看我的[圖解教程] Axis2與Eclipse整合開發(fā)Web Service之一:簡單的計算服務例子,下面來新建一個WSDL文件,如下圖:
改個名字為“manager.wsdl”,如下圖:
下一步,定義命名空間和協(xié)議等信息,默認即行。如下圖:
finish后,會在主工作區(qū)出現(xiàn)如下圖:
這是manager.wsdl的圖形化形式,點擊“Source”會可查看到源代碼:
這是默認生成的wsdl,我們要根據(jù)我們的項目需要,修改上面的圖,首先對方法名進行修改,如下圖:
可見,修改之后,右邊的input和output也跟著修改了,這兩個就是定義plus的輸入和輸出。
點擊input參數(shù)“plus”右邊的提示箭頭,進入下圖:
就在這里定義輸入?yún)?shù)和和參數(shù)類型等信息,因為我們plus(float x, float y)方法中有兩個參數(shù)x和y,故我們將上圖改成兩個參數(shù)的序列:
變成下圖,對比一下方法plus(float x, float y),下圖也不會太難理解吧!
我們返回manager.wsdl視圖,選擇output參數(shù)右邊的箭頭,進入下圖:
我們在這里設置float plus(float x, float y)方法的返回值及其類型,因其返回值只有一個,我們只須把上面的out的類型改成我們方法中用的float,改后,如下圖:
我們可以在這里對輸入輸出的參數(shù)及其他數(shù)據(jù)類型進行修改,如果在上面的操作過程中,不小心產(chǎn)生了多余的標簽的話,也可以在這里去除。
好了,我們再回到manager.wsdl,在源代碼視圖里右鍵選“Validate”,對xml文檔進行檢驗,如果有錯誤的,就根據(jù)需要修改。
好了,圖形化編寫的wsdl文檔完成了,順便說一下,方法是可以定義多個的,如下圖:
為簡單起見,我們就先以剛才做定義的那個方法為例,看看,如何根據(jù)wsdl文件,自動生成Web Service的服務器端。
我們New一個Web Service,如下圖:
記得在Web Service type中選擇“Top down Java Bean Web Service”,如下圖:
然后,在Service definition中找到剛才寫的那個manager.wsdl文件。
回到Web Service對話框,將服務類型的滑塊調(diào)到“Develop service”處,
接下來,就next –> next –-> finish就行。它會自動生成Web Service服務端的接口和類,在類中,可找到我們定義的方法:
我們只要修改方法plus的方法體,以實現(xiàn)我們要實現(xiàn)的功能即行。如下:
這是通過WSDL反向生成Web Service服務端的最簡單一個例子,可能看不到有什么好處,沒有像[圖解教程] Axis2與Eclipse整合開發(fā)Web Service之一:簡單的計算服務例子那樣的簡便快捷,但如果是一些特有的數(shù)據(jù)類型,如List,Set,這些,我們有在WSDL圖形化設計中找到相應的替代類型,先定義WSDL再生成服務端接口,這樣做,不僅Java開發(fā)客戶端是沒有問題的,用C#開發(fā)客戶端也能成功沒有出錯!
但如果先開發(fā)服務器端的話,如果用到一些Java特有的數(shù)據(jù)類型,如List,Set,如果用其他語言生成的客戶端,就可能出問題。同理,用C#開發(fā)服務端,如果用到像DataSet這樣的返回類型的話,那如果用Java或者其他語言去開發(fā)客戶端,也可能會出現(xiàn)問題的。
如果統(tǒng)一先寫WSDL,再根據(jù)WSDL生成服務端和客戶端,應該是一種很不錯的做法,Eclipse在這方面的圖形化支持給帶給我們事半功倍的效果,這樣做,也比較符合SOA的做法。
(5)定制視圖
定制前的視圖:
菜單欄中Window –> Show View –> Other
進入“Show View”對話框,在這里選擇須要顯示的視圖,點“OK”即行。
為測試,我選擇幾個常用的視圖,如:java/Package Explorer , Data Management/Data Source Explorer , General/Internet Web Browser , General/Console 等等。
定制后,我們將其拖放到想要放置的地方即行,顯示如下圖:
(6)定制New選項
原始的New選項:
如果我們須要建的文件類型不在上圖右邊的選項欄中的話,就需要點“Other”進入下一個對話框去選擇,有沒有辦法使得右邊的選項欄中出現(xiàn)我們常常須要建的文件類型,而去掉那些不常使用的呢?
點Window –> Customize Perspective:
進入Customize Perspective -Web對話框,選擇最右邊的選項卡Shortcuts,在Submenus中選擇New,那么下面所列出的,若是選中的,則表示是在New菜單項中顯示的。我們逐個逐個來,把要顯示的選中,把不要顯示的去掉。
定制后的New選項:
只顯示我們常用的,簡潔了許多吧。
(3)通過類自動生成它的接口:
在Spring應用中,常常會用到“接口+實現(xiàn)類”的形式,即要實現(xiàn)類又要寫一個方法差不多的接口,有時候感覺比較煩瑣。其實,Eclipse可以根據(jù)類自動抽取出接口來。
PersonServiceImpl.java的代碼如下:
在上面代碼的空白處點右鍵,或者在PersonServiceImpl類名上點右鍵 —> Refactor –> Extract Interface,如下圖:
在“在Extract Interface”對話框中,Interface name框中輸入接口名:PersonService,將addPerson和queryPerson方法鉤選上,如下圖:
點OK后,即可自動生成PersonServiceImpl.java的接口類PersonService.java,如下圖:
而再看看PersonServiceImpl類代碼有了什么變化:
(4)自動生成Junit測試類
在類名上點右鍵 –> New –> Other ,如下圖:
在新建對話框中,選擇Java >> Junit >> Junit Test Case
在“New Junit Test Case”對話框中,填寫測試類名,此處,用默認(PersonServiceTest)即行,如果不想測試類與PersonService類置同一包下,可在Package中選擇指定的包來存放測試類,此處也默認處理。如下圖:
點Next后進入下圖,將要測試的方法鉤選中,F(xiàn)inish即行。
如果第一次建測試類,它要求加入JUnit的jar包,點OK即行。如下圖:
這時,JUnit測試類PersonServiceTest.java便自動生成了,如下圖:
我們只須修改測試類的方法的方法體,即可進行測試。