JavaRush /Java blogi /Random-UZ /Veb-xizmatlar. Qadam 2. Mijoz yozishni qanday soddalashti...
eGarmin
Daraja

Veb-xizmatlar. Qadam 2. Mijoz yozishni qanday soddalashtirish mumkin?

Guruhda nashr etilgan
Ushbu tezkor eslatmada men avvalgi bosqichda yozgan veb-xizmat mijoz kodini qayta ko'rib chiqmoqchiman . Bunday holda, sizda IDEA ochiq va unda 1-bosqichdan boshlab loyiha bor deb taxmin qilaman. Bizning veb-xizmatimiz ushbu loyihada ishga tushirilishi kerak:
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"));
    }
}
Oldindan qancha bilishimiz kerakligiga e'tibor bering. Bundan tashqari, siz wsdl tavsifiga kirishingiz kerak (busiz, afsuski, hech qanday yo'l yo'q):
URL url = new URL("http://localhost:1986/wss/hello?wsdl");
bu xml faylni o'zingiz ochishingiz va tegga definitionsva undagi atributlarga qarashingiz targetNamespaceva namekonstruktorni chaqirishingiz kerak QName:
QName qname = new QName("http://ws.javarush.ru/", "HelloWebServiceImplService");
keyin tegga qo'lda ulanishingiz kerak service:
Service service = Service.create(url, qname);
va unda tegga port:
HelloWebService hello = service.getPort(HelloWebService.class);
va shundan keyingina biz masofaviy usulni chaqirishimiz mumkin:
hello.getHelloString("JavaRush")
Savol tug'iladi: nega bizning bobolarimiz jang maydonlarida halok bo'lgan, endi biz hammasini qo'l bilan qilamiz? Va agar bu bizning veb-xizmatimiz emas, balki boshqa birovniki bo'lsa. Keyin bu jarayon yanada yoqimsiz bo'ladi. XML formati odamlar tomonidan emas, balki mashinalar tomonidan o'qish uchun mo'ljallangan. Shunday qilib, keling, mashina iflos ishlarni qilsin va jarayondan zavqlanaylik. Buning uchun biz maxsus hech narsa qilishimiz shart emas, chunki... Java-da JDK deb nomlangan bizning sevimli SDK-miz wsimport deb nomlangan maxsus yordam dasturini o'z ichiga oladi . Lekin birinchi navbatda... Birinchidan, menyudan File > New Project... ni tanlab , loyihaga HelloWS nomini berish orqali IDEA da yangi loyiha yarataylik . Yangi yaratilgan loyihani qayerda ochishimiz so'ralganda, biz javob berishimiz kerak Yangi oyna , ya'ni. yangi oynada, chunki men yana bir bor ta'kidlaymanki, avvalgi loyiha ochiq bo'lishi juda muhim, chunki Biz 1-bosqichdan boshlab ushbu loyihada bizning veb-xizmatimiz ishlayotganini eslaymiz. Albatta, uni Windows konsoli orqali ishga tushirishingiz mumkin, lekin men buni yoqtirmayman. Yangi loyihadan View > Tool Windows > Terminal-ni tanlash orqali konsolni oching yoki shunchaki Alt+F12 tugmalarini bosing . Endi biz loyihaning ildizidamiz va biz src jildiga kirishimiz kerak , shuning uchun konsolga quyidagi buyruqni kiritamiz: Endi wsimportcd src yordam dasturidan foydalanish vaqti keldi . U quyidagi printsip asosida ishlaydi: biz unga WSDL tavsifini beramiz va bunga javoban u veb-xizmatga kirishimiz uchun zarur bo'lgan barcha funksiyalarni o'z ichiga olgan stub fayllarni (-sinflar deb ataladi) yaratadi . Ushbu sinflar paketga joylashtiriladi . Agar siz paket nomi qaerdan kelganini so'rasangiz, javob quyidagicha bo'ladi: paket nomi WSDL tavsifidagi teskari maqsadli nom maydonidir. WSDL yorlig'idagi atributni eslab qoling . U erda biz quyidagilarni yozdik . Va bu sayt manzili emas, xml-da nom bo'shliqlarini shunday tasvirlash odatiy holdir va agar biz teskari tartibda qolgan narsalarni tashlab, kengaytirsak, biz paket nomini olamiz. Shunday qilib, yordam dasturini ishga tushiramiz: Uning ishlashi uchun unga boradigan yo'l PATH muhit o'zgaruvchisida ko'rsatilishi kerak yoki shunchaki unga to'liq yo'ldan foydalanishingiz mumkin. Men uchun u C:\Program Files\Java\jdk1.8.0_31\bin papkasida joylashgan . Shuni esda tutingki, WSDL faylini havola orqali masofadan turib foydalanish mumkin bo'lgan –keep kaliti orqali o'tkazish kifoya , albatta, agar biz veb-xizmatni o'chirib qo'ymagan bo'lsak. Bu stub sinflar nima? Ulardan faqat ikkitasi bor. Ulardan biriStubru.javarush.wstargetNamespacedefinitionshttp:// ws.javarush.ru/http://wsimport -keep http://localhost:1986/wss/hello?wsdlHelloWebService, bu aslida biz 1-qadamda qoʻlda yaratgan bir xil veb-xizmat interfeysi. Farqi minimal va biz allaqachon duch kelgan izohlar biroz boshqacha ishlatilganligida va qoʻshimcha ravishda qoʻshimcha izohlardan foydalanilganligidadir. Men hech narsani bilmasligimni aytdim, lekin ularsiz hamma narsa biz uchun ishlaganligi sababli, ular aniq majburiy emas. Ikkinchi sinf stub bo'lib HelloWebServiceImplService, u sinfdan meros bo'lib qoladi Service. ServiceBiz allaqachon mijozimizda sinfga duch kelganmiz. Men bu sinfning kodini bermayman, chunki ... Men uning barcha satrlarini tushuntirishga deyarli tayyor emasman, lekin sinfning mohiyati shundan iboratki, biz avval veb-xizmatga ulanish uchun mijozga qo'lda yozgan barcha narsalar ushbu sinfda avtomatik ravishda yaratilgan va biz shunchaki qilishimiz kerak. uning usullaridan birini chaqiring va biz ochiq ishda hamma narsaga ega bo'lamiz. Shunday qilib, keling, ushbu sinflardan foydalangan holda mijoz kodimizni yangi loyihada qayta yozamiz va kod qisqaroq ekanligiga ishonch hosil qilamiz. Birinchidan, yangi loyihaning src papkasida paketni yaratamiz ru.javarush.clientva unda HelloWebServiceClientusul bilan sinf yaratamiz main:
package ru.javarush.client;

// подключаем классы-заглушки
import ru.javarush.ws.*;

public class HelloWebServiceClient {
    public static void main(String[] args) {
        // подключаемся к тегу service в wsdl описании
        HelloWebServiceImplService helloService = new HelloWebServiceImplService();
        // получив информацию из тега service подключаемся к самому веб-сервису
        HelloWebService hello = helloService.getHelloWebServiceImplPort();

        // обращаемся к веб-сервису и выводим результат в консоль
        System.out.println( hello.getHelloString("JavaRush Community") );
    }
}
Kodni tahlil qilish oddiy va men izohlarda tasvirlangan narsa etarli. Mijozni ishga tushirgandan so'ng, biz quyidagi qatorni ko'rishimiz kerak: Hello, JavaRush Community!Shu bilan birga, 1-bosqichdagi loyiha mijozi ishlashni davom ettiradi va biz unda yozgan matnni ko'rsatadi, ya'ni: Hello, JavaRush! Hozir, ehtimol, biz buni tugatishimiz mumkin. Qadam, chunki uning maqsadi amalga oshdi. Biz tushundikki, agar veb-xizmatning WSDL tavsifi mavjud bo'lsa , jdkstub ushbu veb-xizmat uchun mijoz yozishni soddalashtirish uchun bizga stub sinflarini avtomatik yaratishni taqdim etishga tayyor . Menimcha, bu boshqa birovning veb-xizmatini sinab ko'rmoqchi bo'lganingizda va uning WSDL tavsifiga nazar tashlamasangiz, juda foydali xususiyatdir. Kelajakga qarash Veb-xizmatlar haqidagi keyingi maqolada men veb-xizmatni Tomcat servlet konteyneriga va turli dastur serverlariga qanday joylashtirish bo'yicha g'oyalarni bayon qilmoqchiman, shunda siz veb-xizmatni ishga tushirishingiz shart emas. birinchi 2 bosqichda qilganimiz kabi alohida dastur. Lekin bundan oldin menimcha, servletlar, servlet konteynerlari nima va ular ilova serverlari va oddiy internetdan nimasi bilan farq qilishi... mavzusida qisqacha to'xtalib o'tsangiz yaxshi bo'lardi . Bundan tashqari, biz ilova serverlari haqida qisqacha ma'lumot berishimiz kerak , bu mening fikrimcha, bizning e'tiborimizga loyiqdir.
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION