網上有很多文章都說eclipse要安裝額外的外掛程式才能支援weblogic,可能以前需要這樣,但自從bea的weblogic被oracle收購後,現在已經很簡單了
一、先下載 Free Oracle WebLogic Server 12c (12.1.1) Zip Distribution and Installers for Developers
http://www.oracle.com/technetwork/middleware/fusion-middleware/downloads/index.html
這個安裝以後,就已經內建了Eclipse(而且已經整合了weblogic外掛程式),安裝完成後,可以通過 “開始菜單->所有程式->Oracle Enterprise Pack for Eclipse->Oracle Enterprise Pack for Eclipse” 啟動
二、64位機器上,Eclipse啟用失敗的問題
出錯時,提示資訊如下:
Java was started but returned exit code=1
...
網上找了很多文章,都說是修改eclipse.ini配置或重新安裝32位JVM,但我試了貌似都無效,最後發現還是得在環境變數裡修改:
2.1 添加系統內容變數JAVA_HOME,其值為 c:\bea\jdk160_29\ (此處修改為自己機器上的jdk實際物理目錄)
2.2 PATH環境變數添加 c:\bea\jdk160_29\bin\ (此處修改為自己機器上的jdk實際物理目錄)
2.3 添加系統內容變數 CLASSPATH,其值為 .;C:\bea\jdk160_29\lib\tools.jar;C:\bea\jdk160_29\lib\dt.jar;(此處根據實際情況修改)
檢測這些變數是否正確的最簡單辦法:在命令列cmd視窗裡,輸入javac -version,要是能出java版本號碼就說明ok
三、在Eclipse裡設定Weblogic Server
找到Servers面板,點擊"New Server wizard"
選擇 對應的weblogic版本
指定weblogic的domain目錄
如果你已經建立了dynamic web project,還可以把指定的項目應用到該weblogic伺服器
(當然也可以直接點擊Finish)完成,弄完後,就能看到當前伺服器的狀態(如果沒有啟用,就會顯示Stopped)
可以右鍵->Start,就可以直接在Eclipse下啟用WebLogic了
四、svn外掛程式的安裝
啟用Eclipse,在Help菜單下,找到 Install New Software...,在work with 裡輸入 http://subclipse.tigris.org/update
把Subclipse Plugin、Subversion Book 這二個都勾上,然後一路Next就OK了,安裝過程中,可能會彈一個警告框,不用理會,全部選擇繼續安裝
五、測試svn
5.1 先建立一個Dynamic Web Project
注意:Traget runtime以及Configuration 二項都要選擇對應的Weblogic(後面還會利用這個項目,測試部署weblogic)
5.2、簽入代碼(check in)
在Project Explorer 中,選中剛建立的myWeb,然後右鍵->Team->Share Projet 就能簽入代碼了(當然要填寫一些基本資料,比如svn資產庫路徑,使用者名稱、密碼等)
5.3、簽出代碼(check out)
建立項目時,也可以選擇直接從svn伺服器上check out,方法:New->Other
六、測試 WebLogic
6.1、項目運行時的自動部署
在剛建立的myWeb裡建立二個jsp檔案:home.jsp和about.jsp
啟動後,eclipse會自動start weblogic server,同時會自動部署myWeb應用
6.2、網站的預設頁設定
剛才的樣本,我們必須在地址欄明確指定要訪問的頁面,即http://localhost:7001/myWeb/home.jsp 才以正確訪問,如果把home.jsp去掉,直接用 http://localhost:7001/myWeb來訪問,就會出錯:
在iis中,可以通過佈建網站的預設文件來實現這個需求。在weblogic中,就得通過其它方式來處理,修改web.xml檔案:
把web.xml中,webcome-file-list中的第一個welcome-file節點值設定成home.jsp,這樣就行了。
6.3、純手動部署應用(war包)
開發時,我們可以藉助eclipse自動實現weblogic部署,但是真正上線時,通常都是通過war包來手動部署的。
6.3.1、 通過eclipse匯出war包
在項目myWeb上右擊->export->war file,這樣就得到了一個war檔案:myWeb.war ,它本質上就是一個標準的壓縮檔,可以用winrar,7-zip之類的壓縮軟體開啟。
6.3.2、登入weblogic手動部署war包
登入http://localhost:7001/console 控制台(具體路徑大家根據weblogic的安裝情況,自行調整)
找到"部署"介面,如果是新安裝的weblogic,部署列表裡應該是空的(另外如果剛才在eclipse環境中,運行過項目myWeb,部署列表中可能會有一個自動部署的myWeb,建議大家先在eclipse環境中的server面板中,把自動部署的myWeb給delete掉,否則後面再手動部署一個同名應用時會失敗)
找到剛才匯出的myWeb.war包,然後猛擊“下一步”,一路向西,直至完成
部署完成後,應用會自動運行
此時,在瀏覽器裡輸入 http://localhost:7001/myWeb應該就能看到home.jsp的內容了
6.3.2、網域名稱綁定
每次通過http://localhost:7001/myWeb來訪問實在太煩人,如果能象訪問其它網站那樣,直接用類似 http://yjmyzz.com/ 來訪問就fashion多了。iis裡,通過設定網站的主機頭,可以輕鬆搞定,weblogic裡也有類似的功能,那就是"虛擬機器主機"
6.3.2.1、 建立一個虛擬機器主機
找到虛擬機器主機面板
建立一個新虛擬機器主機,命名為"VirturlHost-myWeb"
建立完成後,雙擊"VirtualHos-myWeb"
修改"網路存取點名稱",輸入要綁定的網域名稱: www.yjmyzz.com
6.3.2.2、 將myWeb應用掛到虛擬機器主機上
在部署面板,雙擊myWeb修改目標屬性,將虛擬機器主機Virtualhost-myWeb前的勾選中
6.3.2.3、 修改7001連接埠為80
在伺服器面板,雙擊"AdminServer"把監聽連接埠從7001,改成80
6.3.2.4、 修改根路徑myWeb為/
以部署面板,雙擊myWeb,修改上下文根,從"myWeb"改成"/"
弄完之後,應該就能直接用http://localhost/ 來訪問myWeb了
剛才我們輸入的網域名稱www.yjmyzz.com是隨便想的,實際上並不存在,為了驗證剛才這一系列修改是否有效,可以先修改本機hosts檔案,加入一行
127.0.0.1 www.yjmyzz.com
這樣就能本機類比網域名稱解析(註:可在命令列視窗輸入ping www.yjmyzz.com來驗證,正常情況下,應該能ping通過,而且返回的ip就是127.0.0.1),直接在地址欄輸入 http://www.yjmyzz.com/ 應該就大功告成了(如果瀏覽器設定了代理,建議先去掉代理,或添加例外)
6.3.3、建立weblogic web service
建立一個WebLogic Web Service Project 命名為myWebService
6.3.3.1、建立用於傳輸的實體類PersonEntity
package model;import java.util.*;public class PersonEntity {private String _name;private int _age;private Date _birthday;private float _salary;/** * @return the _name */public String getName() {return _name;}/** * @param _name the _name to set */public void setName(String _name) {this._name = _name;}/** * @return the _age */public int getAge() {return _age;}/** * @param _age the _age to set */public void setAge(int _age) {this._age = _age;}/** * @return the _birthday */public Date getBirthday() {return _birthday;}/** * @param _birthday the _birthday to set */public void setBirthday(Date _birthday) {this._birthday = _birthday;}/** * @return the _salary */public float getSalary() {return _salary;}/** * @param _salary the _salary to set */public void setSalary(float _salary) {this._salary = _salary;}}
6.3.3.2、建立web service“介面契約”及“實現”
介面定義
package contract;import javax.jws.WebMethod;import javax.jws.WebService;import model.*;@WebService(name = "Person", targetNamespace = "http://jmyang.com/")public interface Person {@WebMethod(operationName = "getPersonByName")public PersonEntity getPersonByName(String name);}
介面實現
package contract; import javax.jws.*;import model.*; @WebService(portName = "PersonPort", serviceName = "PersonService", targetNamespace = "http://jmyang.com/", endpointInterface = "contract.Person")public class PersonImpl implements Person { public PersonEntity getPersonByName(String name) { PersonEntity p = new PersonEntity(); p.setName(name); if (name.equals("jmyang")){ p.setAge(30); p.setSalary(1000); } else if(name.equals("zhangsan")){ p.setAge(20); p.setSalary(1500); } else{ p.setAge(25); p.setSalary(1200); } return p; }}
6.3.3.3、部署 及 WSDL測試
6.3.3、eclipse 環境中調用weblogic web service
6.3.3.1、建立用戶端調jar包
File->New 建立一個Weblogic Web Service Client
WSDL選擇Remote,並輸入WSDL的遠程地址
指定產生用戶端jar的路徑(其實用預設的就行了)
指定“運行時從遠程擷取wsdl”
完成後,eclipse就會產生一個jar包
6.3.3.2、利用用戶端jar包,調用web service
隨便建立一個java project,命名為wsCallDemo,在project屬性時,把剛才產生的jar包添加進來
在eclipse裡,雙擊PersonService.jar包,可以看到裡面有很多自動產生的類
寫幾行代碼測試一下:
package test;import com.jmyang.*;public class CallWsSample {/** * @param args */public static void main(String[] args) {PersonService service = new PersonService();Person serviceInterface = service.getPort(Person.class);//取得服務介面PersonEntity jimmy= serviceInterface.getPersonByName("jmyang");//調用服務System.out.println(jimmy.getName() + "/" + jimmy.getAge() + "/" + jimmy.getSalary());//輸出結果PersonEntity zhangsan= serviceInterface.getPersonByName("zhangsan");//調用服務System.out.println(zhangsan.getName() + "/" + zhangsan.getAge() + "/" + zhangsan.getSalary());//輸出結果、}}
註:以上方法,對於調用.net wcf服務同樣適用。需要特別注意的是:對於String類型的比較,在java web service中,一定要用 equals來判斷二個字串(內容)是否相等,如果用==號,永遠返回false,但是在常規java project中,==號與equals結果卻相同(初次接觸java web service,暫時尚未完全參透,看了一些相關的文章,==號是判斷二個字串是否引用相同,而equals是判斷二個字串是否內容相同,在常規java project中測試時,String未被序列化傳輸,jvm內部二個字串的引用、內容都是相同的,但在web service中使用時,字串會被序列化傳輸,還原序列化時,相當於建立了一個全新的字串執行個體對象,導致引用不同)