Temanyň ady hakykatdanam sorag, sebäbi ... Özümiň nämedigini bilemok we ilkinji gezek bu makalanyň çäginde işlemäge synanyşaryn. Garantiýa berip biljek ýekeje zadym, aşakda görkezilen koduň işlemegi, ýöne sözlemlerim, bularyň hemmesine nädip düşünýändigim baradaky çaklamalar we çaklamalar bolar. Geliň, gideli ...
Giriş
Web hyzmatlary düşünjesiniň näme üçin döredilendigi bilen başlamaly. Bu düşünje dünýäde peýda bolanda, programmalaryň başga bir şäherde ýa-da hatda bir ýurtda ýerleşýän kompýuterde işe girizilip bilinjek başga bir programmada haýsydyr bir usuly çagyryp bilýän uzak aralykda täsirleşmegine mümkinçilik berýän tehnologiýalar bar. Bularyň hemmesi gysgaldylan RPC (Uzakdan prosedura jaň etmek). Mysal üçin CORBA tehnologiýalary, Java üçin bolsa - RMI (Uzakdan çagyryş usuly). Olarda hemme zat gowy ýaly, esasanam CORBA-da, sebäbi ... Islendik programmirleme dilinde onuň bilen işläp bilersiňiz, ýöne henizem bir zat ýokdy. CORBA-nyň ýetmezçiligi, islendik gorag diwaryna gabat gelýän ýönekeý HTTP ýerine derek käbir tor protokollarynyň üstünde işleýändigine ynanýaryn. Web hyzmatynyň pikiri, HTTP paketlerine salynjak RPC döretmekdi. Şeýlelik bilen standartyň ösüşi başlandy. Bu standartyň esasy düşünjeleri haýsylar:- SOAP . Uzakdaky prosedura jaň etmezden ozal, bu jaňy SOAP formatda XML faýlynda suratlandyrmaly. SOAP web hyzmatlarynda ulanylýan köp sanly XML belliklerinden biridir. HTTP arkaly bir ýere ibermek isleýän zatlarymyzyň hemmesi ilki bilen XML SOAP beýanyna öwrüler, soň bolsa HTTP paketine doldurylýar we TCP / IP arkaly tordaky başga bir kompýutere iberilýär.
- WSDL . Web hyzmaty bar, ýagny usullaryny uzakdan atlandyryp boljak programma. Theöne standart bu programmanyň “hawa, dogry aýdýarsyňyz - bu hakykatdanam web hyzmaty we siz şular ýaly usullary çagyryp bilersiňiz” diýlen düşündiriş bilen bilelikde berilmegini talap edýär. Bu düşündiriş, WSDL atly başga bir formata eýe bolan başga bir XML faýly bilen görkezilýär. Bular. WSDL diňe web hyzmatyny suratlandyrýan XML faýly we başga hiç zat däl.
Umumy çemeleşme
Web hyzmatlarynda elmydama müşderi we serwer bar. Serwer biziň web hyzmatymyzdyr we käwagt ahyrky nokat diýilýär (müşderiniň SOAP habarlarynyň ýetýän ahyrky nokady). Aşakdakylary etmeli:- Web hyzmatymyzyň interfeýsini aýdyp beriň
- Bu interfeýsi durmuşa geçiriň
- Web hyzmatymyzy işe giriziň
- Müşderi ýazyň we islenýän web hyzmat usulyna uzakdan jaň ediň
main
we web hyzmatyny göni serwer hökmünde açyp bilersiňiz, ýa-da Tomcat ýa-da başga bir serwere ýerleşdirip bilersiňiz. Ikinji ýagdaýda, özümiz täze serwer açmaýarys we kompýuterde başga bir port açmaýarys, diňe Tomcat servlet konteýnerine “bu ýerde web hyzmat sapaklaryny ýazdyk, habarlaşýanlaryňyzyň hemmesi bilen habarlaşmagyňyzy haýyş edýäris. web hyzmatymyzy ulanyň. " Web hyzmatyny açmagyň usulyna garamazdan, şol bir müşderimiz bolar.
Serwer
IDEA işe başlalyň we täze taslama döredeliň . HelloWebService adyny görkeziň we " Indiki" düwmesine , soňra "Finish" düwmesine basyň . Src bukjasynda ru.javarush.ws bukjasyny dörederis . Bu paketde interfeýs dörederisHelloWebService
:
package ru.javarush.ws;
// это аннотации, т.е. способ отметить наши классы и методы,
// How связанные с веб-сервисной технологией
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
// говорим, что наш интерфейс будет работать How веб-сервис
@WebService
// говорим, что веб-сервис будет использоваться для вызова методов
@SOAPBinding(style = SOAPBinding.Style.RPC)
public interface HelloWebService {
// говорим, что этот метод можно вызывать удаленно
@WebMethod
public String getHelloString(String name);
}
Bu kodda synplar düşündiriş diýilýär WebService
we WebMethod
interfeýsimizi we usulyny web hyzmaty hökmünde bellemekden başga hiç zat etmeýär. Bu hem klasa degişlidir SOAPBinding
. Onlyeke-täk tapawut, bu SOAPBinding
parametrler bilen düşündiriş. Bu ýagdaýda style
web hyzmatynyň resminama habarlary arkaly däl-de, nusgawy RPC hökmünde işlejekdigini görkezýän baha bilen ulanylýar. usuly çagyrmak. Geliň, interfeýs logikamyzy durmuşa geçireliň we bukjamyzda synp döredeliň HelloWebServiceImpl
. Theeri gelende aýtsak, “Impl” bilen bir synpy gutarmagyň Java-daky konwensiýa bolup, oňa laýyklykda interfeýsleriň ýerine ýetirilişi şeýle kesgitlenýär (Impl - ýerine ýetiriş sözünden, ýagny durmuşa geçirmek). Bu talap däl we synpyňyza islän zadyňyzy aýdyp bilersiňiz, ýöne edep-terbiýe talap edýär:
package ru.javarush.ws;
// таже annotation, что и при описании интерфейса,
import javax.jws.WebService;
// но здесь используется с параметром endpointInterface,
// указывающим полное Name класса интерфейса нашего веб-сервиса
@WebService(endpointInterface = "ru.javarush.ws.HelloWebService")
public class HelloWebServiceImpl implements HelloWebService {
@Override
public String getHelloString(String name) {
// просто возвращаем приветствие
return "Hello, " + name + "!";
}
}
Garaşsyz serwer hökmünde web hyzmatymyza başlalyň, ýagny haýsydyr bir Tomcat we amaly serwerleriň gatnaşmazdan (bu aýratyn pikir alyşmak üçin mowzuk). Munuň üçin src bukjasyndaky taslama gurluşynda bir paket dörederis we onda usul bilen ru.javarush.endpoint
synp dörederis : HelloWebServicePublisher
main
package ru.javarush.endpoint;
// класс, для запуска веб-serverа с веб-сервисами
import javax.xml.ws.Endpoint;
// класс нашего веб-сервиса
import ru.javarush.ws.HelloWebServiceImpl;
public class HelloWebServicePublisher {
public static void main(String... args) {
// запускаем веб-server на порту 1986
// и по addressу, указанному в первом аргументе,
// запускаем веб-сервис, передаваемый во втором аргументе
Endpoint.publish("http://localhost:1986/wss/hello", new HelloWebServiceImpl());
}
}
Indi “Shift + F10” basyp bu synpy işledeliň . Konsolda hiç zat peýda bolmaz, ýöne serwer işleýär. Muny brauzeriňizde http: // localhost: 1986 / wss / salam? Wsdl setirini ýazyp tassyklap bilersiňiz . Bir tarapdan açylýan sahypa, kompýuterimizde (ýerlihost) 1986-njy portda işleýän web serwerimiziň (http: //) bardygyny subut edýär, beýleki tarapdan web hyzmatymyzyň WSDL beýanyny görkezýär. Programmany togtatsaňyz, web hyzmatynyň özi ýaly düşündiriş elýeterli bolmaz, şonuň üçin muny etmeris, ýöne müşderini ýazmaga geçiň.
Müşderi
Taslama bukjasynda src bukjany dörederisru.javarush.client
we onda HelloWebServiceClient
usul bilen synp dörederis main
:
package ru.javarush.client;
// нужно, чтобы получить wsdl описание и через него
// дотянуться до самого веб-сервиса
import java.net.URL;
// такой эксепшн возникнет при работе с an objectом URL
import java.net.MalformedURLException;
// классы, чтобы пропарсить xml-ку c wsdl описанием
// и дотянуться до тега service в нем
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
// интерфейс нашего веб-сервиса (нам больше и нужно)
import ru.javarush.ws.HelloWebService;
public class HelloWebServiceClient {
public static void main(String[] args) throws MalformedURLException {
// создаем ссылку на wsdl описание
URL url = new URL("http://localhost:1986/wss/hello?wsdl");
// Параметры следующего конструктора смотрим в самом первом теге WSDL описания - definitions
// 1-ый аргумент смотрим в атрибуте targetNamespace
// 2-ой аргумент смотрим в атрибуте name
QName qname = new QName("http://ws.javarush.ru/", "HelloWebServiceImplService");
// Теперь мы можем дотянуться до тега service в wsdl описании,
Service service = Service.create(url, qname);
// а далее и до вложенного в него тега port, чтобы
// получить ссылку на удаленный от нас an object веб-сервиса
HelloWebService hello = service.getPort(HelloWebService.class);
// Ура! Теперь можно вызывать удаленный метод
System.out.println(hello.getHelloString("JavaRush"));
}
}
Sanawdaky koda iň köp teswir berdim. Meniň goşjak zadym ýok, geliň (Shift + F10). Teksti konsolda görmeli: Hello, JavaRush!
Eger görmedik bolsaňyz, web hyzmatyny başlamagy ýatdan çykaran bolsaňyz gerek.
GO TO FULL VERSION