Perbedaan antara servlet dan layanan web

89

Apa perbedaan antara 2 ini? Saya menemukan beberapa hasil di google tidak ada yang meyakinkan.

Ini pertanyaan lanjutannya:

Katakanlah saya membuat aplikasi web musim semi mvc menganotasi beberapa kelas dengan anotasi @Controller dan membuat sesuatu yang akan berhasil mentransfer beberapa informasi dari ujung depan -> ujung belakang dan sebaliknya dan mungkin beberapa database mungkin terlibat di sisi ujung belakang.

Kamu sebut apa itu? Istirahatkan layanan web atau servlet atau yang lainnya?

Gandalf StormCrow
sumber
6
Sebuah saran: jika Anda tidak tahu apa itu servlet, Anda kemungkinan besar akan kesulitan dengan pegas MVC (dengan anotasi). Solusi yang lebih sederhana (vanilla servlet + jdbc) mungkin akan membantu Anda mempelajari dasar-dasarnya lebih cepat.
biziclop
1
Jika servlet hanya memiliki satu perilaku yang berarti dan servlet itu dipetakan ke URL eksplisit, saya tidak melihat alasan mengapa (1) GET atau parameter POST tidak dapat dikirim ke Servlet (2) Respon Servlet bisa untuk mengembalikan beban XML dengan set tipe MIME yang sesuai (3) bahwa ini tidak sama dengan Layanan Web dalam arti akademis?
8bitjunkie
@GandalfStormCrow Dengan servlet, data aktual yang sedang dilewatkan bukanlah data tetapi dokumen html. html dokumen lebih sesuai untuk permintaan seperti 1) mendapatkan dokumen 2) menampilkan dokumen , dari manusia ke komputer. Namun, kebutuhannya adalah komunikasi aplikasi-aplikasi dengan cara yang tidak bergantung pada mesin. Jadi, layanan web berbicara tentang transfer data menggunakan xml melalui http.
pertukaran berlebih

Jawaban:

91

Layanan web adalah layanan yang menyediakan metode layanan kepada kliennya menggunakan paradigma pemrograman REST atau protokol SOAP untuk komunikasi. Ada beberapa cara untuk mengimplementasikan layanan web. Cara paling sederhana untuk menulis layanan web adalah dengan menulis kelas dan menambahkan anotasi @WebServicedan @WebMethodanotasi dari javax.jws, lalu meluncurkannya dari main-method dengan:

Endpoint.publish("http://localhost:8089/myservice", new MyWebService());

Hasilnya adalah Anda dapat melihat WSDL di URL terdaftar dan jika Anda memiliki SoapUI atau klien SOAP lainnya, Anda juga dapat menguji dan menggunakan layanan web Anda.

Sebuah servlet di sisi lain digunakan untuk transportasi HTTP permintaan dan tanggapan. Ini dapat digunakan untuk menulis aplikasi web dengan JSP dan HTML, atau untuk melayani tanggapan XML dan JSON (seperti dalam layanan RESTful) dan tentu saja juga untuk menerima dan mengembalikan pesan SOAP. Anda dapat menganggapnya sebagai satu lapisan di bawah layanan web . Servlet memiliki standarnya sendiri yang saat ini merupakan Spesifikasi Servlet Java Versi 4.0

Pendekatan yang lebih komprehensif dan praktis adalah menulis layanan web dengan kerangka kerja dan mempublikasikannya di server aplikasi atau wadah servlet seperti Tomcat atau JBoss. Dalam hal ini Anda akan menggunakan Servlet untuk menangani pengangkutan permintaan HTTP yang mengirimkan pesan SOAP atau REST Anda.

Untuk menulis layanan web dengan teknologi servlet misalnya, Anda dapat menggunakan JAX-WS (misalnya untuk SOAP). Untuk menulis layanan RESTful, Anda dapat menggunakan JAX-RS (dengan implementasi referensi menjadi Jersey ), atau sebagai alternatif Anda dapat menggunakan Spring WebMVC , tetapi sejauh yang saya tahu itu bukan tujuan utama dari kerangka kerja ini dan Jersey sangat banyak. lebih mudah digunakan.

Mengenai pertanyaan kedua: @ControllerAnotasi adalah anotasi stereotip khusus Spring yang memberi tahu Spring tentang apa yang seharusnya dilakukan bean Anda. Apa sebenarnya metode yang akan dikembalikan oleh pengontrol bergantung pada implementasi aktual metode Anda, Anda dapat mengonfigurasi Spring untuk menampilkan teks biasa, HTML, JSON, XML, data biner, atau apa pun yang Anda inginkan.

Catatan di samping, kelas yang diberi anotasi @Controllerbelum menjadi servlet, itu hanyalah kacang. Bagaimana Anda menggunakan servlet tergantung pada Framework yang Anda gunakan. Misalnya, saat Anda menggunakan Spring, tugas servlet dilakukan oleh Springs DispatcherServletyang meneruskan permintaan ke biji yang benar. Jika Anda menggunakan Tomcat, maka Anda dapat langsung menulis servlet Anda sendiri hanya dengan mensubkelas javax.servlet.http.HttpServletkelas dan menimpa metode yang diperlukan seperti doGetyang menanggapi permintaan HTTP GET dari browser Anda.

lanoxx.dll
sumber
3
"baik REST atau SOAP sebagai protokolnya" ... Tapi REST bukanlah protokol !!
Bukan bug
3
Jelasnya bukan, itu adalah paradigma pemrograman. Saya telah mengoreksi formulasi saya untuk mencerminkan itu.
lanoxx
@lanoxx Tujuan layanan Web adalah membantu mengintegrasikan satu aplikasi perusahaan dengan yang lain dengan mudah, dengan asumsi aplikasi tersebut baru, perlu saling berkomunikasi. Integrasi aplikasi perusahaan .
pertukaran berlebih
Di atas spesifikasi Java Servlet (sekarang 4.0) link sudah mati, sekarang dapat ditemukan di halaman rumah baru / github di javaee.github.io/servlet-spec/DOWNLOADS.html
Manohar Reddy Poreddy
43

Yang Anda gambarkan adalah aplikasi web , di mana manusia menggunakan browser untuk berinteraksi dengan sistem perangkat lunak.

Layanan web adalah cara sistem perangkat lunak untuk berkomunikasi satu sama lain menggunakan HTTP dan XML atau JSON, tanpa melibatkan manusia.

Sebuah servlet adalah cara Java-spesifik menulis perangkat lunak yang merespon permintaan HTTP. Spring MVC mengabstraksi banyak detail implementasi untuk membuat penulisan aplikasi web lebih mudah, tetapi menggunakan servlet di balik sampulnya.

artbristol
sumber
gaya pemrograman aplikasi web juga dapat digunakan untuk sistem perangkat lunak untuk berkomunikasi satu sama lain, tetapi saya berasumsi itu bukan cara pemrograman terstruktur, dan bukan standar yang digunakan dalam industri TI.
Mohamed Iqzas
10

Pandangan saya adalah bahwa Layanan Web mendefinisikan abstraksi tingkat yang lebih tinggi seperti beberapa fungsi khusus bisnis. Sedangkan Servlet hanyalah komponen implementasi perangkat lunak yang bertanggung jawab untuk pengangkutan data.

Implementasi Layanan Web biasanya akan mengandalkan servlet untuk menerima data. Namun, itu juga dapat menggunakan lapisan khusus untuk menangani data protokol.

@Controller mungkin lebih terkait dengan Layanan Web daripada servlet yang, sekali lagi, merupakan cara untuk mengimplementasikan transport.

Alex Gitelman
sumber
1
@Controlleradalah bagian dari kerangka MVC Spring Web (ini adalah C), jadi ini jelas bukan hal layanan web, tetapi juga tidak terkait erat dengan servlet.
biziclop
Saya setuju, @Controller sama sekali bukan layanan web dengan sendirinya. Tetapi secara pribadi saya cenderung sering menggunakan @Controller sebagai titik akhir untuk layanan REST. Saya menduga itu adalah penggunaan Spring MVC yang kurang populer.
Alex Gitelman
3

Perbedaan paling jelas antara Servlet dan Layanan Web adalah: Anda mengakses servlet melalui HTTP sementara mengakses Layanan Web melalui SOAP (Simple Object Access Protocol). Namun pada kenyataannya, Anda tidak dapat secara langsung memanggil servlet, Anda hanya dapat membuka koneksi URL dan meletakkan beberapa parameter pada servlet jika pemanggil keluar dari aplikasi Anda. Dan Anda tidak dapat membatasi parameter apa yang dapat diletakkan oleh pemanggil. Penelepon juga tidak tahu parameter apa yang dapat diterima oleh servlet Anda. Jadi, Anda sebaiknya menggunakan layanan web untuk menyediakan API ke aplikasi lain, file WSDL dari layanan web Anda dapat memberikan informasi yang cukup kepada pemanggil untuk memanggil layanan web Anda.

Chinni
sumber
2

Servlet adalah penangan kueri HTTP. Anda dapat melakukan apa yang Anda inginkan dengan kueri yang masuk. Sebuah servlet berjalan di JVM.

Layanan web terikat dengan protokol yang kurang lebih kaku: Antarmuka (API) ditentukan dengan metode yang tersedia dan argumennya serta nilai kembalian untuk layanan tersebut.

Antarmuka ini diekspos menggunakan mekanisme protokol. Protokol ini bersifat agnostik tentang host yang akan menjalankan layanan: Anda dapat menentukan layanan web yang sama menggunakan PHP, Java, C # atau bahasa Anda sendiri. Anda hanya perlu memiliki sepotong kode yang dapat memahami kueri untuk protokol dan dapat menghasilkan jawaban yang dapat dibaca oleh klien.

Misalnya SOAP adalah protokol layanan web: Definisi Wikipedia:

SOAP, awalnya didefinisikan sebagai Simple Object Access Protocol, adalah spesifikasi protokol untuk bertukar informasi terstruktur dalam implementasi Layanan Web di jaringan komputer.

Guillaume
sumber
2

Layanan web beroperasi pada level yang lebih tinggi daripada servlet. Servlet adalah API yang sederhana dan menyediakan kemampuan untuk menulis komponen sisi server.

Misalnya RESTfull adalah Layanan Web yang berisi banyak "fungsionalitas" lainnya bersama dengan servlet. Untuk menerapkan, kita dapat mendefinisikan web.xml sebagai -

<servlet>
<servlet-name>jersey-serlvet</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
    <param-name>com.sun.jersey.config.property.packages</param-name>
    <param-value>jersey.rest.test</param-value>
</init-param>
<load-on-startup>1</load-on-startup>

yang tidak lain adalah servlet

dgm
sumber
2

Layanan Web menggunakan kelas ServletContainer yang juga merupakan kelas Servlet, yang menangani permintaan dengan cara yang bersih dan terstruktur. SISA adalah singkatan dari REpresentational STateless Protocol. Di sini permintaan tidak akan menyimpan data apa pun.

Layanan Web REST mendukung metode HTTP

  1. GET - Biasanya untuk mengambil data.
  2. POST - Untuk memasukkan Objek baru.
  3. PUT - Untuk memperbarui Objek yang ada.
  4. HAPUS -Untuk menghapus Objek.

Kami dapat memetakan sejumlah URL ke kelas Layanan Web yang dapat memiliki semua jenis metode HTTP.

Di sisi lain, hanya ada 1 pemetaan URL yang dapat dilakukan untuk setiap servlet. Meskipun persyaratan akhir dapat dicapai dengan bantuan kondisi parameter permintaan, tetapi menggunakan servlet saat ini tidak akan memberikan cara yang bersih.

Di webservice kita dapat menentukan jalur URL pada tingkat Kelas serta tingkat Metode , yang memungkinkan kita untuk membuat kode dengan cara yang lebih terstruktur.

Kranti123
sumber