新聞中心
如何在Java中快速發(fā)布WebService服務(wù)
1,在Java項目中發(fā)布一個WebService服務(wù):
創(chuàng)新互聯(lián)建站專業(yè)為企業(yè)提供易縣網(wǎng)站建設(shè)、易縣做網(wǎng)站、易縣網(wǎng)站設(shè)計、易縣網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、易縣企業(yè)網(wǎng)站模板建站服務(wù),10多年易縣做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。
如何發(fā)布?
——JDK1.6中JAX-WS規(guī)范定義了如何發(fā)布一個WebService服務(wù);
(1)用jdk1.6.0_21以后的版本發(fā)布;
(2)與Web服務(wù)相關(guān)的類,都位于Javax.jws.*包中
@WebService——此注解用在類上指定將此類發(fā)布成一個WebService;
EndPoint——此類為端點服務(wù)類,其中publish()方法用于將一個已經(jīng)添加了@WebService注解對象綁定到一個地址的端口上,用于發(fā)布。
2,例子:
(1)發(fā)布WebService服務(wù)
HelloWebService.java:
[java]?view plain?copy
span?style="font-family:KaiTi_GB2312;font-size:18px;"package?cn.tgb.ws;
importjavax.jws.WebMethod;
importjavax.jws.WebService;
importjavax.xml.ws.Endpoint;
/**
*??@WebService?-?它是一個注解,用在類上指定將此類發(fā)布成一個ws.
Endpoint?–?此類為端點服務(wù)類,它的方法publish用于將一個已經(jīng)添加了@WebService注解對象綁定到一個地址的端口上。
*?@author?xuemin
*
*/
@WebService
public?classHelloWebService?{
publicString?HelloWord(String?name){
return"Hello:?"+name;
}
/**
*添加exclude=true后,HelloWord2()方法不會被發(fā)布
*?@param?name
*?@return
*/
@WebMethod(exclude=true)
publicString?HelloWord2(String?name){
return"Hello:?"+name;
}
publicstatic?void?main(String[]?args)?{
/**
*參數(shù)1:服務(wù)的發(fā)布地址
*參數(shù)2:服務(wù)的實現(xiàn)者
*/
Endpoint.publish("",new?HelloWebService());
}
}/span
注:
@WebService-?它是一個注解,用在類上指定將此類發(fā)布成一個ws.
Endpoint –此類為端點服務(wù)類,它的方法publish用于將一個已經(jīng)添加了@WebService注解對象綁定到一個地址的端口上。
運行以上程序進行發(fā)布。
(2)查看wsdl
地址:
只要在客戶端瀏覽器能看到此WSDL文檔,說明服務(wù)發(fā)布成功
以上服務(wù)發(fā)布成功;
總結(jié):
如何發(fā)布一個Web服務(wù):
a,在類上添加@WebService注解
(注:此注解是jdk1.6提供的,位于javax.jws.WebService包中)
b,通過EndPoint(端點服務(wù))發(fā)布一個WebService
(注:EndPoint是jdk提供的一個專門用于發(fā)布服務(wù)的類,該類的publish方法接收兩個參數(shù),一個是本地的服務(wù)地址,二是提供服務(wù)的類。位于?javax.xml.ws.Endpoint包中)
c,注:
類上添加注解@WebService,類中所有非靜態(tài)方法都會被發(fā)布;
靜態(tài)方法和final方法不能被發(fā)布;
方法上加@WebMentod(exclude=true)后,此方法不被發(fā)布;
(3)客戶端訪問發(fā)布的服務(wù)
根據(jù)WSDL文檔來在客戶端編寫代碼,訪問發(fā)布的服務(wù);
但是,WSDL文檔看不懂怎么辦?代碼該如何編寫?
——你看不懂,JDK看得懂,wsimport是JDK自帶的,可以根據(jù)WSDL文檔生成客戶端調(diào)用代碼的工具。無論服務(wù)器端WebService使用什么語言編寫的,豆?jié){在客戶端生成Java代碼。所以服務(wù)器用什么語言編寫的并不重要。
wsimport.exe命令參數(shù)熟知:
-d:生成class文件。默認參數(shù)。
-s:生成Java文件
-p:自定義包結(jié)構(gòu)
解析地址生成源碼到E盤:
執(zhí)行以上命令后,即可在E盤下生成如下包及類
注:還可以自定義包結(jié)構(gòu):
自定義包結(jié)構(gòu)的命令:
將生成的包及.java文件復(fù)制到客戶端:如下圖
創(chuàng)建訪問服務(wù)的類:MyClient.java:
MyClient.java:
[java]?view plain?copy
span?style="font-family:KaiTi_GB2312;font-size:18px;"package?cn.tgb.ws;
public?classMyClient?{
publicstatic?void?main(String[]?args)?{
HelloWebServiceServicehwss?=?new?HelloWebServiceService();
HelloWebServicehws?=?hwss.getHelloWebServicePort();
Stringresult=hws.helloWord("hanxuemin");
System.out.println(result);
}
}/span
java的項目發(fā)布是什么意思?如何發(fā)布?請高手詳細解釋一下,謝謝!!
要看你說的哪種了 是j2se還是j2ee
j2se的話,首先將java項目打包成jar文件,這個不用多說,很多開發(fā)平臺都有此功能,如eclipse就可以直接將java項目export成jar文件,然后寫一個bat文件(Windows操作系統(tǒng)下)或者sh文件(unix系列操作系統(tǒng)下),這個文件大致語句包括以下:java –jar myjar.jar
還可以通過相關(guān)輔助軟件發(fā)布,比如exe4j軟件輔助創(chuàng)建可執(zhí)行文件
這款軟件專門針對java項目發(fā)布成可執(zhí)行文件,具體操作可以見如下鏈接
你如果要 我可以發(fā)一個軟件給你 叫j2ewiz蠻簡單的 給個郵箱就可以了
對于j2ee的話,就是將web工程部署至服務(wù)器,可以通過控制臺命令或者eclipse等工具生成war包 也可以直接使用eclipse部署至服務(wù)器 將war包拷貝至tomcat的webapps下 當(dāng)然你服務(wù)器可以使用其他的
javaweb工程如何發(fā)布到internet(只有本地tomcat和java工程代碼)
如果是把代碼發(fā)給別人,把整個工程復(fù)制或者導(dǎo)出,壓縮下發(fā)給別人或者放到網(wǎng)上一個網(wǎng)絡(luò)硬盤或代碼托管平臺。
如果是把web工程部署到網(wǎng)上給他人訪問,先把web工程以war的形式導(dǎo)出,war類型的文件可以說就是web工程的webroot的壓縮文件,可以把這個war文件放到運行狀態(tài)的tomcat的webapps的目錄下,tomcat會自動把你的war文件解壓縮并運行(相關(guān)處理這里不解釋),然后就可以項目正常的運行(比如數(shù)據(jù)庫啥的可以正常連接),就可以通過瀏覽器訪問了。這是在本地的情況,如果是放到網(wǎng)絡(luò)上,你就必須要有的網(wǎng)絡(luò)上的主機,域名,這些你可以在網(wǎng)上找到免費的,免費資源部落可以找到很多,注意要找提供相關(guān)web服務(wù)環(huán)境的主機,網(wǎng)絡(luò)上有asp主機,php主機等,你的javaweb就需要jsp的主機,同時你要注意提供數(shù)據(jù)庫服務(wù)的主機是跟你提供tomcat主機是否是同一主機!!部署到網(wǎng)絡(luò)上的項目不成功,經(jīng)常是因為數(shù)據(jù)庫的連接不成功導(dǎo)致。
如何把java的web工程發(fā)布到另外一臺服務(wù)器上
JDK 1.4.2 + Myeclipse 6.0(實在經(jīng)不起誘惑,嘗嘗鮮) + Tomcat 5.0.28 + AXIS 1.4。 AXIS 1.4包可以在 找到。 假設(shè)所有的環(huán)境你已經(jīng)搭好,并且AXIS包也已經(jīng)下好了。OK, Here we go~
解壓axis-bin-1_4.zip這個包可以看到webapps目錄,雙擊進入把里面的AXIS文件夾拷到 %TOMCAT_HOME%\webapps目錄下,之后拷貝activation.jar、mail.jar、tools.jar到% TOMCAT_HOME%\webapps\axis\WEB-INF\lib目錄下。啟動tomcat,訪問 如果訪問成功,恭喜你!基本的配置你已經(jīng)做完了。
PS:此處的%TOMCAT_HOME%指的是Tomcat的安裝目錄,至于那另外的三個jar包,J2EE 1.4庫里就能找的到。
現(xiàn)在來說一下最關(guān)鍵的Webservice的發(fā)布。AXIS提供了兩種發(fā)布方式,一種是即時發(fā)布(Instant Deployment),另外一種是定制發(fā)布(Custom Deployment)。即時發(fā)布提供了一種非常簡單的webservice的發(fā)布方式,但是其中限制太多,因此在實際的開發(fā)中定制發(fā)布才是首選。這里也將會以定制發(fā)布為重點來介紹。
1.即時發(fā)布 JWS (Java Web Service) Files - Instant Deployment
即時發(fā)布提供了一種非常簡單發(fā)布方式,發(fā)布者只要有Java源代碼(也就是.java文件),然后把其后綴名改成jws(也就是 java web service的縮寫)拷貝到%TOMCAT_HOME%\webapps\axis目錄下即完成了所有的發(fā)布工作。AXIS的編譯引擎會處理接下來的所有事情。下面是一段示例代碼:
java 代碼
1. public class HelloAXIS {
2.
3. public String Hello(String name){
4. return "AXIS say hello to " + name;
5. }
6. }
把 HelloAXIS.java 文件改成 HelloAXIS.jws 然后拷貝到%TOMCAT_HOME%\webapps\axis目錄下,啟動Tomcat之后訪問 如果能看到 Click to see the WSDL這個超鏈接就說明已經(jīng)發(fā)布成功了,點擊進去就可以看到這個Webservice的WSDL描述文件。server端的發(fā)布已經(jīng)完成了,接下來就是編寫Client端測試代碼了。
java 代碼
1. package com.chnic.test;
2.
3. import java.net.URL;
4.
5. import javax.xml.namespace.QName;
6.
7. import org.apache.axis.client.Call;
8. import org.apache.axis.client.Service;
9.
10. public class Test {
11.
12. public static void main(String[] args) throws Exception{
13. String targetEendPoint = "" ;
14. Service service = new Service();
15. Call call = (Call) service.createCall();
16. call.setOperationName( new QName(targetEendPoint, "Hello" ));
17. call.setTargetEndpointAddress( new URL(targetEendPoint));
18. String result = (String) call.invoke( new Object[]);
19. System.out.println(result);
20. }
21. }
測試代碼很簡單,如果熟悉java反射機制的朋友不用兩分鐘就能看明白。運行后客戶端控制臺出現(xiàn) AXIS say hello Robert。測試成功。果然很簡單吧。不過在這簡單背后卻是以犧牲靈活性為代價的。假如你現(xiàn)在手里只有.class 或者一個jar包,jws就不再能滿足你的需求了,最要命的就是即時發(fā)布不支持帶包的類,這點AXIS的用戶手冊上寫的也很明白。
Important: JWS web services are intended for simple web services. You cannot use packages in the pages, and as the code is compiled at run time you can not find out about errors until after deployment. Production quality web services should use Java classes with custom deployment.
2.定制發(fā)布 Custom Deployment - Introducing WSDD
比起即時發(fā)布定制發(fā)布更加煩瑣也更復(fù)雜,但是換來的卻是更大的靈活性,因此在實際項目中定制發(fā)布還是不二的選擇。定制發(fā)布需要你自己編寫一個WSDD (Web Service Deployment Descriptor)文件,這個東東類似與XML稍后會做出介紹。廢話不多說,我們來看代碼:
java 代碼
1. package com.chnic.webservice;
2.
3. public class HelloWorld {
4.
5. public HelloWorld(){
6.
7. }
8.
9. public String hello(String str){
10. return "Hello " + str;
11. }
12.
13. public int add( int a, int b){
14. return a + b;
15. }
16.
17. }
一個帶包的很簡單的類,在eclipse下編譯后按照包名拷到 %TOMCAT_HOME%\webapps\axis\WEB-INF\classes 目錄下。以這個類為例,拷貝完之后這個HelloWorld.class的路徑就是 %TOMCAT_HOME%\webapps\axis\WEB-INF\classes\com\chnic\webservice。PS: 如果嫌這樣太麻煩,可以另外建一個Java Web工程用myeclipse的發(fā)布工具發(fā)布到Tomcat之后,整體一次性拷貝到websericve的工程中。
接下來就需要編寫發(fā)布文件deploy.wsdd。到%TOMCAT_HOME%\webapps\axis\WEB-INF 目錄下建立這個文件并在其中添加如下內(nèi)容:
xml 代碼
1. deployment xmlns =
2. xmlns:java = ""
3.
4. service name = "HelloWorld" provider = "java:RPC"
5. parameter name = "className" value = "com.chnic.webservice.HelloWorld" /
6. parameter name = "allowedMethods" value = "*" /
7. / service
8. / deployment
簡單的介紹下各個節(jié)點的含義,"HelloWorld"當(dāng)然是這個webservice的名字,后面緊跟的java:RPC指的是服務(wù)類型。這里一共有有4種類型,分別是:RPC, Document, Wrapped 和 Message。有興趣可以看下 org.apache.axis.providers這個包和子包下面的類的API文檔。之后的parameter節(jié)點第一個當(dāng)然是指出具體的類,第二個從字面上也很好理解:允許調(diào)用的方法。這里的配置告訴引擎可以調(diào)用所有的public方法,當(dāng)然你也可以自己指定。
編寫完配置發(fā)布文件之后,cmd打開windows的控制臺,進入%TOMCAT_HOME%\webapps\axis\WEB-INF目錄下鍵入如下命令
1. java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient deploy.wsdd
之后控制臺返回Processing file deploy.wsdd 和 Done processing 這兩段話即說明發(fā)布成功。(此時會在同級目錄生成一個server-config.wsdd文件 )在這里的AdminClient是AXIS提供的一個客戶端管理工具。至于java.ext.dirs的含義可以去了解一下classloader和JVM類裝載機制方面的知識,在這里就不多解釋。 還有一點要注意的是在發(fā)布的時候Tomcat服務(wù)必須處于啟動狀態(tài),否則就會拋出一堆無法連接的異常信息。發(fā)布成功之后你可以通過訪問 來查看你所有的定制發(fā)布的服務(wù)。
客戶端測試代碼
1. String targetEendPoint = "" ;
2. Service service = new Service();
3. Call call = (Call) service.createCall();
4. call.setTargetEndpointAddress( new URL(targetEendPoint));
5.
6. call.setOperationName( new QName(targetEendPoint, "hello" ));
7. String result = (String) call.invoke( new Object[]);
8. System.out.println(result);
9.
10. call.setOperationName( new QName(targetEendPoint, "add" ));
11. Integer res = (Integer) call.invoke( new Object[]);
12. System.out.println( "The result is: " + res);
運行測試代碼,控制臺顯示 Hello Robert 和 The result is: 3 這兩句話,說明發(fā)布成功。仔細觀察下發(fā)現(xiàn)其實除了那個targetEndpoint 之外,即時發(fā)布和定制發(fā)布的客戶端調(diào)用代碼基本上都是一樣的。定制發(fā)布的URL可以在WSDL文件里找到。
網(wǎng)站題目:java代碼如何發(fā)布,java源代碼怎么發(fā)
本文來源:http://www.dlmjj.cn/article/hdpjps.html