網上有很多文章都說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環境變量最后添加 ;%JAVA_HOME%\bin\
2.3 添加系統環境變量 CLASSPATH,其值為 .;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\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中使用時,字符串會被序列化傳輸,反序列化時,相當於創建了一個全新的字符串實例對象,導致引用不同)