日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

WEBSERVICE之JDK开发webservice

發(fā)布時(shí)間:2025/3/21 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WEBSERVICE之JDK开发webservice 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

轉(zhuǎn)自:https://www.cnblogs.com/w-essay/p/7357262.html

一、開(kāi)發(fā)工具與環(huán)境

1、?jdk1.6版本以上(jdk1.6.0_21及以上版本)

2 、eclipse4.5版本

3、與Web服務(wù)相關(guān)的類(lèi),都位于Javax.jws.*包中

??????? @WebService——此注解用在類(lèi)上指定將此類(lèi)發(fā)布成一個(gè)WebService

? ? ? ? @WebMethod——此注解用在類(lèi)中所定義的方法上,將方法發(fā)布成一個(gè)WebService服務(wù);可省略,但要將發(fā)布服務(wù)的方法設(shè)置為public;

??????? EndPoint——此類(lèi)為端點(diǎn)服務(wù)類(lèi),其中publish()方法用于將一個(gè)已經(jīng)添加了@WebService注解對(duì)象綁定到一個(gè)地址的端口上,用于發(fā)布。

4使用jdk的EndPoint發(fā)布web服務(wù)要點(diǎn)

4.1.在要發(fā)布服務(wù)的類(lèi)上添加@WebService注解。將要發(fā)布服務(wù)的方法設(shè)置為public。

4.2.調(diào)用EndPoint.publish(,)發(fā)布服務(wù)

其他注意事項(xiàng):

1.給類(lèi)添加上@WebService注解后,類(lèi)中所有的非靜態(tài)方法都將會(huì)對(duì)外公布。
2.不支持靜態(tài)方法,final方法。
3.如果希望某個(gè)方法(非static,非final)不對(duì)外公開(kāi),可以在方法上添加@WebMethod(exclude=true),阻止對(duì)外公開(kāi)。
4.被添加了@WebService注解的類(lèi)至少要有一個(gè)可以公開(kāi)的方法,否則將會(huì)啟動(dòng)失敗。

二、JDK開(kāi)發(fā)webservice

1、定義一個(gè)interface,使用@WebService注解標(biāo)注接口,使用@WebMethod注解標(biāo)注接口中定義的所有方法,如下所示:

package com.me.ws;

import javax.jws.WebMethod;
import javax.jws.WebService;
/**
*?
* @author Administrator
* 使用@WebService注解將接口注解為一個(gè)webservice服務(wù)
*/

@WebService
public interface WebServiceInterface {
  /*
  * 使用@WebMethod注解標(biāo)注WebServiceInterface接口中的方法
  */
  @WebMethod
  public String sayHello(String name);
  @WebMethod
  public String save( String name);
}

2、定義一個(gè)實(shí)現(xiàn)類(lèi)實(shí)現(xiàn)接口中所有方法,并用@WebService注解將實(shí)現(xiàn)類(lèi)也注解成一個(gè)webservice服務(wù),如下所示:

package com.me.ws;

import javax.jws.WebService;
/**
*?
* @author Administrator
* 使用@WebService注解標(biāo)注實(shí)現(xiàn)類(lèi),將實(shí)現(xiàn)類(lèi)注解成為一個(gè)webservice服務(wù)
*/
//
@WebService
public class WebServiceImpl implements WebServiceInterface {

  @Override
  public String sayHello(String name) {
    System.out.println("hello world "+name);
    return "hello world "+name;
  }

  @Override
  public String save(String name) {  
    System.out.println("save "+name);
    return "save "+name;
  }

}

3、發(fā)布服務(wù)

3.1 、使用Endpoint(終端)類(lèi)發(fā)布webservice,如下所示:

package com.me.ws;

import javax.xml.ws.Endpoint;

/**
*?
* @author Administrator?
* 發(fā)布webservice服務(wù)(JDK是使用Endpoint(終端)類(lèi)發(fā)布webservice服務(wù)的)
*/
public class WebServicePublish {

  public static void main(String[] args) {
    /**
    *1、先提供一個(gè)給別人訪問(wèn)的url地址
    */
    String address = "http://192.168.1.72:8089/ws_service/hello";
    // 2、使用Endpoint的publish方法來(lái)發(fā)布這個(gè)服務(wù)
    //Endpoint.publish(address, 接口實(shí)現(xiàn)類(lèi))
    Endpoint.publish(address, new WebServiceImpl());
    System.out.println("發(fā)布webservice成功!");
  }

}

?運(yùn)行WebServicePublish 類(lèi)?后,就可以將編寫(xiě)好的WebService發(fā)布好了,它的WSDL訪問(wèn)地址是http://192.168.1.72:8089/ws_service/hello?wsdl。

以上是java工程的webservice發(fā)布,如果是web項(xiàng)目,則我們可以使用監(jiān)聽(tīng)器或者Servlet來(lái)發(fā)布WebService(在這里就需要注意一點(diǎn),項(xiàng)目中引用的servlet包必須是3.0及以上版本才行),

3.2 、使用監(jiān)聽(tīng)器發(fā)布webservice,代碼如下:

package ?com.me.ws;import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextListener;import javax.servlet.annotation.WebListener;import javax.xml.ws.Endpoint;import me.gacl.ws.WebServiceImpl;/*** @author gacl* 用于發(fā)布WebService的監(jiān)聽(tīng)器*///使用Servlet3.0提供的@WebListener注解將實(shí)現(xiàn)了ServletContextListener接口的WebServicePublishListener類(lèi)標(biāo)注為一個(gè)Listener@WebListenerpublic class WebServicePublishListener implements ServletContextListener {@Overridepublic void contextDestroyed(ServletContextEvent sce) {}@Overridepublic void contextInitialized(ServletContextEvent sce) {//WebService的發(fā)布地址String address = "http://192.168.1.72:8089/ws_service/hello";//發(fā)布WebService,WebServiceImpl類(lèi)是WebServie接口的具體實(shí)現(xiàn)類(lèi)Endpoint.publish(address , new WebServiceImpl());System.out.println("使用WebServicePublishListener發(fā)布webservice成功!");}}
在web.xml上進(jìn)行配置:

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">

? ? ? <display-name>ws_service</display-name>?
? ? ? <!-- 加載自定義監(jiān)聽(tīng)器 -->
  <listener>
    <listener-class>?com.me.ws.webServicePublishLinster</listener-class>
  </listener>?
</web-app>

將Web應(yīng)用部署到服務(wù)器運(yùn)行時(shí),在初始化Web應(yīng)用上下文時(shí),就會(huì)發(fā)布WebService了。
接著我們可以使用發(fā)布的URL地址訪問(wèn)WebService

3.3、使用servlet發(fā)布webservice,代碼如下:

package com.me.ws;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.xml.ws.Endpoint;import me.gacl.ws.WebServiceImpl;/*** @author gacl* 用于發(fā)布WebService的Servlet*///使用Servlet3.0提供的@WebServlet注解將繼承HttpServlet類(lèi)的普通Java類(lèi)標(biāo)注為一個(gè)Servlet//將value屬性設(shè)置為空字符串,這樣WebServicePublishServlet就不提供對(duì)外訪問(wèn)的路徑//loadOnStartup屬性設(shè)置WebServicePublishServlet的初始化時(shí)機(jī)@WebServlet(value="",loadOnStartup=0)public class WebServicePublishServlet extends HttpServlet {/* (non-Javadoc)* @see javax.servlet.GenericServlet#init()* 在WebServicePublishServlet初始化時(shí)發(fā)布WebService*/public void init() throws ServletException {//WebService的發(fā)布地址String address = "http://192.168.1.72:8089/ws_service/hello";//發(fā)布WebService,WebServiceImpl類(lèi)是WebServie接口的具體實(shí)現(xiàn)類(lèi)Endpoint.publish(address , new WebServiceImpl());System.out.println("使用WebServicePublishServlet發(fā)布webservice成功!");}}

在web.xml上不再需要對(duì)servlet進(jìn)行配置,如下(因?yàn)閟ervlet3.0中的@WebServlet注解已經(jīng)將該類(lèi)注解為了servlet類(lèi),所以不需要另外在web.xml中定義):

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>ws_service</display-name>   
</web-app>

將Web應(yīng)用部署到服務(wù)器運(yùn)行時(shí),在初始化WebServicePublishServlet時(shí),就會(huì)發(fā)布WebService了。如下圖所示:

  

接著我們可以使用發(fā)布的URL地址訪問(wèn)WebService
以上是webservice服務(wù)開(kāi)發(fā),下面講它的客戶端的開(kāi)發(fā)

三、開(kāi)發(fā)WebService客戶端

  1、借助jdk的wsimport.exe工具生成客戶端代碼,wsimport.exe工具位于Jdk的bin目錄下,如下圖所示:

  

  執(zhí)行命令:wsimport -keep url(url為wsdl文件的路徑)生成客戶端代碼。

  創(chuàng)建一個(gè)WebService客戶端測(cè)試項(xiàng)目,如下圖所示:

  

  打開(kāi)命令行窗口,切換到src目錄,執(zhí)行"wsimport -keep?http://192.168.1.72:8089/ws_service/hello?wsdl"生成客戶端代碼,如下圖所示:

  

?

  執(zhí)行命令的過(guò)程中沒(méi)有出現(xiàn)任何錯(cuò)誤,那么代碼就生成成功了,刷新一下src目錄,就可以看到生成的代碼了,如下圖所示:

  

  2、?借助生成的代碼編寫(xiě)調(diào)用WebService對(duì)外提供的方法

  wsimport工具幫我們生成了好幾個(gè)java類(lèi),但我們只需要關(guān)心WebServiceImplService類(lèi)和WebServiceImpl接口的使用即可,如下所示:

1 package me.gacl.ws.client;2 3 import me.gacl.ws.WebServiceImpl;4 import me.gacl.ws.WebServiceImplService;5 6 /**7 * @author gacl8 * 調(diào)用WebService的客戶端9 */ 10 public class WSClient { 11 12 public static void main(String[] args) { 13 //創(chuàng)建一個(gè)用于產(chǎn)生WebServiceImpl實(shí)例的工廠,WebServiceImplService類(lèi)是wsimport工具生成的 14 WebServiceImplService factory = new WebServiceImplService(); 15 //通過(guò)工廠生成一個(gè)WebServiceImpl實(shí)例,WebServiceImpl是wsimport工具生成的 16 WebServiceImpl wsImpl = factory.getWebServiceImplPort(); 17 //調(diào)用WebService的sayHello方法 18 String resResult = wsImpl.sayHello("孤傲蒼狼"); 19 System.out.println("調(diào)用WebService的sayHello方法返回的結(jié)果是:"+resResult); 20 System.out.println("---------------------------------------------------"); 21 //調(diào)用WebService的save方法 22 resResult = wsImpl.save("孤傲蒼狼","123"); 23 System.out.println("調(diào)用WebService的save方法返回的結(jié)果是:"+resResult); 24 } 25 }

  客戶端調(diào)用服務(wù)器端的WebService方法運(yùn)行結(jié)果如下:

  

  從調(diào)用返回的結(jié)果顯示,借助wsimport工具生成的客戶端代碼已經(jīng)成功調(diào)用到了WebService中的方法。以上就是使用JDK開(kāi)發(fā)WebService的相關(guān)內(nèi)容。

總結(jié)

以上是生活随笔為你收集整理的WEBSERVICE之JDK开发webservice的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 男人的网站在线观看 | 91草草草 | 妖精视频污 | 一级毛毛片 | 日本韩国欧美一区二区三区 | 欧美日韩一级黄色片 | 欧美日韩一区二区电影 | 亚洲精品乱码久久 | 献给魔王伊伏洛基亚吧动漫在线观看 | av天天色| 30一40一50老女人毛片 | 成人观看视频 | 成人黄色激情小说 | 日韩视频一区二区三区 | 神马影院一区二区三区 | 亚洲福利| 男生裸体视频网站 | 99久久婷婷国产综合精品草原 | 久久国内精品视频 | 亚洲va韩国va欧美va精品 | 九九久久综合 | 国产a一区二区三区 | 亚洲精品少妇久久久久久 | 久久韩日 | 国产精品一区二区在线免费观看 | 青草热视频 | 91成人在线观看喷潮蘑菇 | 黑人多p混交群体交乱 | 一区二区三区在线免费 | 日本污网站 | 无码国产精品一区二区免费式直播 | 国产日韩一区 | 91麻豆精品一区二区三区 | 欧美日韩免费做爰视频 | 亚洲午夜无码久久久久 | 日韩黄片一区二区三区 | 日本免费中文字幕 | 日韩中文字幕亚洲 | 国产福利久久久 | 女同一区二区 | xxxx国产| 国内精品国产三级国产aⅴ久 | 在线黄色免费 | 精品国产乱码久久久久久郑州公司 | 亚洲影院在线播放 | 深夜视频一区二区三区 | 一卡二卡三卡在线观看 | 香蕉久久网站 | 中文字幕在线观看二区 | 亚洲免费成人在线 | 国产欧美一区二区三区精品酒店 | 日韩av动漫 | exo妈妈mv在线播放高清免费 | 好吊妞视频在线 | 性感美女被草 | 国产又黄又硬又粗 | 奇米影视大全 | 美国式禁忌1980 | 337p亚洲精品色噜噜狠狠 | 杨幂一区二区三区免费看视频 | 久久久99精品免费观看 | 毛片视频播放 | 特大黑人巨交吊性xx | 在线免费中文字幕 | 青青草精品 | 好屌妞视频这里有精品 | 在线中文字幕亚洲 | 中文字幕在线播 | zjzjzjzjzj亚洲女人 | 91精品国产成人 | 国产4区| 毛片基地站 | 欧美在线观看a | 国产精品一区二区自拍 | 日日爱夜夜操 | 久久精品国产亚洲AV无码男同 | 91久久国产综合久久91精品网站 | 亚洲国产成人一区二区精品区 | 亚洲一区精品视频在线观看 | 中文字幕乱码一区 | 国产在线观看免费视频今夜 | 午夜伦视频| 免费看的黄色 | 蜜乳av一区| jizz中国女人| 亚洲自拍天堂 | 巨乳xxx| 国产视频福利在线 | 国产精品11 | 久久免费高清视频 | 国内自拍欧美 | 都市激情国产精品 | 国产免费一级 | 亚洲中文字幕一区二区在线观看 | 国产剧情一区二区三区 | 国产九九精品 | 日韩视频在线免费播放 | 欧美日韩国产一区二区在线观看 | 果冻av在线 |