JavaRush /Java Blog /Random-TK /Web hyzmatlary. Stepdim 1. Web hyzmaty näme we onuň bilen...
eGarmin
Dereje

Web hyzmatlary. Stepdim 1. Web hyzmaty näme we onuň bilen nädip işlemeli?

Toparda çap edildi
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 ... Web hyzmatlary.  Stepdim 1. Web hyzmaty näme we onuň bilen nädip işlemeli?  - 1

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:
  1. 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.
  2. 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.
Näme üçin gysga soraýarsyňyz? Has anyk aýdyp bolmazmy? Mümkin, mümkin, ýöne munuň üçin T. Maşnin, “Java web hyzmatlary” ýaly kitaplara ýüzlenmeli bolarsyňyz. Şol ýerde ilkinji 200 sahypada SOAP we WSDL standartlarynyň her belliginiň jikme-jik beýany bar. Etmäge mynasypmy? Meniň pikirimçe, ýok, sebäbi ... bularyň hemmesi Java-da awtomatiki usulda döredilýär we diňe uzakdan atlandyrylmaly usullaryň mazmunyny ýazmaly. Şeýlelikde, Java-da JAX-RPC ýaly API peýda boldy. Kimdir biri bilmeýän bolsa, Java-da şeýle we şeýle API bar diýseler, bu tehnologiýany öz içine alýan synplar toplumy bar diýmekdir. JAX-RPC wagtyň geçmegi bilen wersiýadan wersiýa geçdi we ahyrynda JAX-WS boldy. WS, elbetde, WebService diýmekdir we munuň diňe şu günler RPC-iň adynyň meşhur söz hökmünde üýtgedilmegi diýip pikir edip bilersiňiz. Bu dogry däl, sebäbi Indi web hyzmatlary asyl pikirden daşlaşdy we size diňe uzak usullara jaň etmek bilen çäklenmän, resminama habarlaryny SOAP görnüşinde ibermäge mümkinçilik berýär. Munuň näme üçin henizem zerurdygyny bilemok, bu ýerdäki jogabyň "zerur bolan ýagdaýynda" bolmagy gaty ähtimal. Özümem has tejribeli ýoldaşlardan öwrenmek isleýärin. Iň soňunda bolsa, “RESTful” web hyzmatlary diýlip atlandyrylýan JAX-RS peýda boldy, ýöne bu aýratyn makalanyň mowzugy. Giriş şu ýerde tamamlanyp biler, sebäbi ... Geljekde JAX-WS bilen işlemegi öwreneris.

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:
  1. Web hyzmatymyzyň interfeýsini aýdyp beriň
  2. Bu interfeýsi durmuşa geçiriň
  3. Web hyzmatymyzy işe giriziň
  4. Müşderi ýazyň we islenýän web hyzmat usulyna uzakdan jaň ediň
Web hyzmatyny dürli usullar bilen açyp bilersiňiz: ýa-da bir usuly synp bilen suratlandyryň mainwe 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örederis HelloWebService:
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 WebServicewe WebMethodinterfeý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 SOAPBindingparametrler bilen düşündiriş. Bu ýagdaýda styleweb 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.endpointsynp dörederis : HelloWebServicePublishermain
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örederis ru.javarush.clientwe onda HelloWebServiceClientusul 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.

Netije

Bu mowzuk web hyzmatlaryna gysga gezelenç berdi. Againene-de bir gezek aýdaryn, ýazan zatlarymyň köpüsiniň nähili işleýändigi baradaky çaklamam, şonuň üçin maňa kän ynanmaly däl. Bilimli adamlar meni düzedse minnetdar bolardym, sebäbi şonda bir zat öwrenerin. UPD. Gepleşigi dowam etdireliň
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION