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 ...
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:- 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.
- 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.
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:- Nerangake antarmuka layanan web kita
- Ngleksanakake antarmuka iki
- Bukak layanan web kita
- Tulis klien lan nelpon saka jarak adoh cara layanan web sing dikarepake
main
lan 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 antarmukaHelloWebService
:
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 WebService
lan WebMethod
ora nindakake apa-apa kajaba menehi tandha antarmuka lan metode kasebut minangka layanan web. Semono uga ing kelas SOAPBinding
. Bentenipun mung iku SOAPBinding
anotasi karo paramèter. Ing kasus iki, parameter digunakake style
kanthi 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 HelloWebServicePublisher
kanthi 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 paketru.javarush.client
, lan ing kelas kasebut HelloWebServiceClient
kanthi 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.
GO TO FULL VERSION