JavaRush /Blog Jawa /Random-JV /Layanan web. Langkah 1. Apa iku layanan web lan carane ng...
eGarmin
tingkat

Layanan web. Langkah 1. Apa iku layanan web lan carane nggarap?

Diterbitake ing grup
Irah-irahan topik pancen dadi pitakonan, amarga ... Aku dhewe ora ngerti apa iku lan kanggo pisanan aku bakal nyoba kanggo nggarap ing framework saka artikel iki. Siji-sijine sing bisa aku jamin yaiku kode sing ditampilake ing ngisor iki bakal bisa digunakake, nanging tembungku mung bakal dadi asumsi lan guess babagan carane aku ngerti kabeh iki. Dadi, ayo ... Layanan web.  Langkah 1. Apa iku layanan web lan carane nggarap?  - 1

Pambuka

Kita kudu miwiti kanthi ngapa konsep layanan web digawe. Nalika konsep iki muncul ing donya, teknologi wis ana sing ngidini aplikasi kanggo sesambungan ing kadohan, ngendi siji program bisa nelpon sawetara cara ing program liyane, kang bisa dibukak ing komputer dumunung ing kutha utawa negara liyane. Kabeh iki dicekak RPC (Remote Procedure Calling). Conto kalebu teknologi CORBA, lan kanggo Java - RMI (Remote Method Invoking). Lan kabeh katon apik ing dheweke, utamane ing CORBA, amarga ... Sampeyan bisa nggarap basa pamrograman apa wae, nanging isih ana sing ilang. Aku pracaya yen kerugian saka CORBA iku bisa liwat sawetara saka protokol jaringan dhewe tinimbang HTTP prasaja, kang bakal pas liwat firewall sembarang. Gagasan layanan web yaiku nggawe RPC sing bakal dilebokake menyang paket HTTP. Mangkono wiwit pangembangan standar. Apa konsep dhasar standar iki:
  1. SABUN . Sadurunge nelpon prosedur remot, sampeyan kudu njlèntrèhaké telpon iki ing file XML ing format SOAP. SOAP mung salah siji saka akeh markup XML sing digunakake ing layanan web. Kabeh sing arep kita kirim nang endi wae liwat HTTP pisanan diowahi dadi gambaran XML SOAP, banjur diiseni menyang paket HTTP lan dikirim menyang komputer liyane ing jaringan liwat TCP/IP.
  2. WSDL . Ana layanan web, i.e. program kang cara bisa disebut remot. Nanging standar kasebut mbutuhake program iki diiringi deskripsi sing ujar manawa "ya, sampeyan bener - iki pancen layanan web lan sampeyan bisa nelpon cara kasebut." Deskripsi iki diwakili dening file XML liyane, sing nduweni format sing beda, yaiku WSDL. Sing. WSDL mung file XML sing njlentrehake layanan web lan ora liya.
Napa sampeyan takon kanthi ringkes? Apa sampeyan ora bisa luwih spesifik? Bisa uga, nanging kanggo nindakake iki, sampeyan kudu mbukak buku kayata T. Mashnin, "Java Web Services." Ing kana, liwat 200 kaca pisanan, ana katrangan rinci babagan saben tag standar SOAP lan WSDL. Apa worth dilakoni? Miturut pendapatku, ora, amarga ... kabeh iki digawe kanthi otomatis ing Jawa, lan sampeyan mung kudu nulis isi saka cara sing mestine kanggo disebut mbatalake. Dadi, API kayata JAX-RPC muncul ing Jawa. Yen ana sing ora ngerti, nalika padha ngomong yen Jawa duwe API kuwi lan kuwi, tegese ana paket karo pesawat saka kelas sing encapsulate teknologi ing pitakonan. JAX-RPC ngalami évolusi saka wektu saka versi kanggo versi lan pungkasanipun dadi JAX-WS. WS temenan tegese WebService lan sampeyan bisa uga mikir yen iki mung ngganti jeneng RPC minangka tembung kunci populer saiki. Iki ora bener, amarga Saiki layanan web wis pindhah saka gagasan asli lan ngidini sampeyan ora mung nelpon cara remot, nanging uga mung ngirim pesen dokumen ing format SOAP. Aku ora ngerti kenapa iki dibutuhake; ora mungkin jawaban ing kene bakal dadi "yen perlu." Aku dhewe pengin sinau saka kanca sing luwih berpengalaman. Lan pungkasane, banjur JAX-RS muncul kanggo layanan web sing diarani RESTful, nanging iki minangka topik artikel sing kapisah. Pambuka bisa rampung ing kene, amarga ... Sabanjure kita bakal sinau nggarap JAX-WS.

Pendekatan umum

Ing layanan web tansah ana klien lan server. Server minangka layanan web kita lan kadhangkala disebut titik pungkasan (kaya ing, titik pungkasan ing ngendi pesen SOAP saka klien tekan). Kita kudu nindakake ing ngisor iki:
  1. Nerangake antarmuka layanan web kita
  2. Ngleksanakake antarmuka iki
  3. Bukak layanan web kita
  4. Tulis klien lan nelpon saka jarak adoh cara layanan web sing dikarepake
Sampeyan bisa miwiti layanan web kanthi macem-macem cara: njlèntrèhaké kelas kanthi cara mainlan miwiti layanan web langsung minangka server, utawa nyebarke menyang server kaya Tomcat utawa liyane. Ing kasus kaloro, kita dhewe ora mbukak server anyar lan ora mbukak port liyane ing komputer, nanging mung ngandhani wadhah servlet Tomcat yen "kita wis nulis kelas layanan web ing kene, mangga nerbitake supaya saben wong sing ngubungi sampeyan bisa. gunakake layanan web kita." Preduli saka cara ngluncurake layanan web, kita bakal duwe klien sing padha.

Server

Ayo miwiti IDEA lan nggawe proyek anyar Gawe Proyek Anyar . Sebutake jeneng HelloWebService banjur klik tombol Sabanjure , banjur tombol Rampung . Ing folder src kita bakal nggawe paket ru.javarush.ws . Ing paket iki kita bakal nggawe antarmuka 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);
}
Ing kode iki, kelas kasebut diarani anotasi WebServicelan WebMethodora nindakake apa-apa kajaba menehi tandha antarmuka lan metode kasebut minangka layanan web. Semono uga ing kelas SOAPBinding. Bentenipun mung iku SOAPBindinganotasi karo paramèter. Ing kasus iki, parameter digunakake stylekanthi nilai sing nuduhake yen layanan web ora bisa digunakake liwat pesen dokumen, nanging minangka RPC klasik, yaiku. kanggo nelpon cara. Ayo ngleksanakake logika antarmuka lan nggawe kelas ing paket kita HelloWebServiceImpl. Miturut cara, aku nyathet yen mungkasi kelas karo Impl minangka konvensi ing Jawa, miturut implementasine antarmuka sing ditunjuk (Impl - saka implementasi tembung, yaiku implementasine). Iki dudu syarat lan sampeyan bebas menehi jeneng kelas apa wae sing dikarepake, nanging sopan santun mbutuhake:
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 + "!";
    }
}
Ayo miwiti layanan web minangka server independen, yaiku. tanpa partisipasi sembarang Tomcat lan server aplikasi (iki topik kanggo diskusi kapisah). Kanggo nindakake iki, ing struktur proyek ing folder src , kita bakal nggawe paket ru.javarush.endpoint, lan ing kana kita bakal nggawe kelas HelloWebServicePublisherkanthi metode 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());
    }
}
Saiki ayo mbukak kelas iki kanthi mencet Shift + F10 . Ora ana sing katon ing console, nanging server mlaku. Sampeyan bisa verifikasi iki kanthi ngetik baris http://localhost:1986/wss/hello?wsdl ing browser Panjenengan . Kaca sing mbukak, ing tangan siji, mbuktekake manawa kita duwe server web (http: //) sing mlaku ing port 1986 ing komputer kita (localhost), lan, ing sisih liya, nuduhake deskripsi WSDL babagan layanan web kita. Yen sampeyan mungkasi aplikasi kasebut, katrangan bakal ora kasedhiya, uga layanan web dhewe, mula kita ora bakal nindakake iki, nanging terus nulis klien.

Klien

Ing folder proyek src kita bakal nggawe paket ru.javarush.client, lan ing kelas kasebut HelloWebServiceClientkanthi metode 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"));
    }
}
Aku menehi komentar maksimum ing kode ing listing. Aku ora duwe apa-apa kanggo nambah, supaya mbukak (Shift + F10). Kita kudu ndeleng teks ing console: Hello, JavaRush!Yen sampeyan ora weruh, sampeyan bisa uga kelalen miwiti layanan web.

Kesimpulan

Topik iki nyedhiyakake kunjungan singkat menyang layanan web. Sepisan maneh, aku bakal ujar manawa akeh sing dakcritakake yaiku guess babagan cara kerjane, mula sampeyan ora kudu percaya banget. Aku bakal matur nuwun yen wong pinter mbenerake aku, amarga banjur aku bakal sinau soko. UPD. Ayo nerusake obrolan
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION