JDK1.6中自帶了webservice的功能,由於集成了JAX-WS,這很是方便,不用再用第三方包來開發了。java
下面咱們開始構建:web
1,先用Eclipse創建一個動態網站,注意須要生成web.xml,建工程的時候不要忘記勾選;apache
2,創建類實現Web Services接口,下面是一個簡單定義Web Services接口的實現類:瀏覽器
代碼app
1 package javaWebServiceTest;
2
3 import javax.jws.WebMethod;
4 import javax.jws.WebParam;
5 import javax.jws.WebResult;
6 import javax.jws.WebService;
7 import javax.jws.WebParam.Mode;
8 import javax.jws.soap.SOAPBinding;
9 import javax.jws.soap.SOAPBinding.Style;
10 import javax.jws.soap.SOAPBinding.Use;
11
12 import webServiceInterface.Person;
13
14 @WebService(name="SayHello", portName="SayHellowServicePort", serviceName="SayHelloServiceName",
15 targetNamespace="http://www.webservice.com")
16 @SOAPBinding(style = Style.RPC,use = Use.LITERAL)
17 public class ChService {
18
19 @WebMethod(action="sayHello", operationName="saySomeWord")
20 @WebResult(name="Person", partName="PersonName")
21 public Person sayHelloWord(@WebParam(name="paramA", partName="p1", mode = Mode.IN)String name){
22 Person persons = new Person();
23 persons.setName("My name is " +name);
24 return persons;
25 }
26
27 }
28 網站
3,Person類this
1 package webServiceInterface;
2
3
4 public class Person
5 {
6 String name;
7
8 public String getName() {
9 return name;
10 }
11
12 public void setName(String name) {
13 this.name = name;
14 }
15 }編碼
這樣,咱們基本上就實現了webservice的構建,是否是感受不是很難,跟寫普通的java方法同樣,其實jdk自帶的webservice是經過註釋注入方法實現的。因此上面那些以"@"符號開頭的都是很是重要的,也是必須的。url
下面咱們來配置咱們寫的WebService到Apache中:spa
1,上面第一步,咱們生成了一個web.xml類,咱們向<web-app>節點裏面加入如下內容:
代碼
1 <listener>
2 <listener-class>
3 com.sun.xml.ws.transport.http.servlet.WSServletContextListener
4 </listener-class>
5 </listener>
6
7 <servlet>
8 <servlet-name>TestService</servlet-name>
9 <servlet-class>
10 com.sun.xml.ws.transport.http.servlet.WSServlet
11 </servlet-class>
12 </servlet>
13
14 <servlet-mapping>
15 <servlet-name>TestService</servlet-name>
16 <url-pattern>/jdkService</url-pattern>
17 </servlet-mapping>
2,在web.xml的目錄中再創建一個sun-jaxws.xml來配置endpoint的相關內容。
代碼
1 <?xml version="1.0" encoding="UTF-8"?>
2 <endpoints xmlns='http://java.sun.com/xml/ns/jax-ws/ri/runtime' version='2.0'>
3 <endpoint
4 name='TestService'
5 implementation='javaWebServiceTest.ChService'
6 binding="http://java.sun.com/xml/ns/jaxws/2003/05/soap/bindings/HTTP/"
7 url-pattern='/jdkService'/>
8 </endpoints>
好了,配置完了。把咱們創建的項目加入到apache7.0中,而後啓動。
在瀏覽器輸入:http://localhost:8080/TestWebService/jdkService?wsdl,即可以訪問到。
如圖:
如今咱們來講說那些以"@"符號開頭的內容。
1,@WebService(name="SayHello", portName="SayHellowServicePort", serviceName="SayHelloServiceName", targetNamespace="http://www.possystem.com")
name: SayHello
用戶實例化用,例:
private WinService.SayHelloClient win = new winformService.WinService.SayHelloClient();
WSDL中:<portType name="SayHello">
serviceName: SayHelloServiceName
指定Web Service的名稱 ,WSDL中:<service name="SayHelloServiceName">
portName: SayHellowServicePort
WSDL中:<port name="SayHellowServicePort" binding="tns:SayHellowServicePortBinding">
wsdlLocation:wsdlLocation 是引用預先存在的 WSDL 文件的 URL(相對或絕對)。
targetNamespace:wsdl命名空間
2,@SOAPBinding(style = Style.RPC,use = Use.LITERAL)
style: 定義發送到 Web Service 的消息和從 Web Service 發送的消息的編碼樣式。
Document和RPC兩種形式
默認值:
javax.jws.soap.SOAPBinding.Style.DOCUMENT
use: 定義發送到 Web Service 的消息和從 Web Service 發送的消息的格式樣式。
ENCODED和 LITERAL兩種形式
默認值:
javax.jws.soap.SOAPBinding.Use.LITERAL
3, @WebMethod(action="sayHello", operationName="saySomeWord")
action: sayHello
此操做的動做。 對於 SOAP 綁定,此方法可肯定 soap 動做的值。
WSDL中: <soap12:operation soapAction="sayHello" />
operationName: sayHelloWord1
與此方法匹配的 wsdl:operation 的名稱。
此名稱也用於客戶端調用的方法的名稱。
exclude
將某一方法標記爲不做爲一個 web 方法公開。
4, @WebResult(name="Person", partName="PersonName")
name: Person
返回值的名稱。 若是操做是 rpc 樣式,而且partName還沒有指定, 表示此返回值的 wsdl:part 的名稱
WSDL中:<part name="Person" type="tns:person" />
partName: PersonName
表示此返回值的 wsdl:part 的名稱。
此名稱只在操做是 rpc 樣式,或者操做是文檔樣式且參數樣式爲 BARE 時使用。
WSDL中:<part name="PersonName" type="tns:person" />
5, public Person sayHelloWord(@WebParam(name="paramA", partName="p1", mode = Mode.IN)String name){……}
name: paramA
若是該操做是 rpc 樣式的,而且還沒有指定 @WebParam.partName,則此名稱是表示參數的 wsdl:part 的名稱。
若是該操做是文檔樣式的,或者參數映射到某一個頭,則此名稱是表示參數的 XML 元素的本地名稱。
若是操做是文檔樣式的,參數樣式爲 BARE 而且模式爲 OUT 或 INOUT,則必須指定一個名稱。
客戶端調用時參數名稱顯示該值。
partName: p1
表示此參數的 wsdl:part 的名稱。
此名稱僅在操做是 rpc 樣式,或者操做是文檔樣式且參數樣式爲 BARE 時使用。
WSDL中:
<message name="sayHelloWord1">
<part name="p1" type="xsd:string" />
</message>
客戶端調用時參數名稱顯示該值。
這個主要是根據樣式來。
mode:參數的流向(IN、OUT 或 INOUT 之一)。
以上只是對一些經常使用的做了一些解釋,都是自我理解的,有不正確的地方,還請指正。