JavaRush /Java Blog /Random-ID /Tanpa kesedihan. Mari kita bicara tentang Java EE, servle...
eGarmin
Level 41

Tanpa kesedihan. Mari kita bicara tentang Java EE, servlet dan containernya

Dipublikasikan di grup Random-ID
Dalam topik ini, saya ingin terus terang berbicara tentang pemahaman saya tentang servlet, apa itu container servlet, apa itu sebagian besar, jika tidak semua, kerangka kerja front-end web, dan juga menyentuh topik tentang bagaimana container servlet dan server aplikasi berhubungan dengan satu sama lain, dan servlet dan wadah server web. Tanpa kesedihan.  Mari kita bicara tentang Java EE, servlet dan containernya - 1Sebelum memulai pembicaraan, saya ingin menyampaikan bahwa saya sangat mengharapkan akan adanya diskusi, karena... Di sini saya tidak ingin memberikan satu pun kode, tetapi hanya ingin menyentuh esensinya, yang selalu dapat diungkapkan dengan kata-kata. Saya akan mencoba menguraikan semua poin yang tidak jelas bagi saya ketika saya pertama kali memulai. Ketika saya mengajukan pertanyaan di berbagai forum tentang perbedaan antara wadah servlet Tomcat dan server aplikasi mana pun, katakanlah WebSphere atau Geronimo, satu-satunya orang yang berani menjawab adalah bajingan yang tidak bisa berkata apa-apa selain “lihat Wikipedia” atau “ sulit untuk mengatakan, aplikasi server - ini adalah infrastruktur yang kompleks untuk aplikasi perusahaan, yang..." bla bla bla. Saya tidak tahan dengan orang-orang seperti itu dan saya rasa sebagian besar dari Anda juga tidak tahan. Kami akan memperbaiki ketidakadilan sejarah. Pergi…

Servlet

Tidak peduli apa kata orang, servlet adalah halaman web yang ditulis dalam Java. Beberapa orang akan mengatakan bahwa saya salah dan bahwa servlet adalah aplikasi web dan ada perbedaan dalam konsep-konsep ini, tetapi sebenarnya tidak demikian. Sekarang tidak ada bedanya, dan situs yang ditulis dalam PHP juga dapat disebut aplikasi web dengan aman. Sekarang ini benar-benar wajar, karena... php sepenuhnya mendukung OOP, dan CMS seperti Joomla aktif menggunakan ini. Apa itu servlet pada level kode? Ini adalah kelas yang memiliki sejumlah metode yang tidur dan melihat apakah seseorang mengaksesnya melalui permintaan HTTP GET atau POST. Itu. Kami mengetik beberapa permintaan GET di browser, metode kelas servlet yang sesuai menerimanya dan kemudian menghasilkan respons dalam bentuk halaman HTML. Dalam pengertian klasik servlet, seperti yang dipahami oleh Sun, halaman ini dikirim ke klien baris demi baris, dimulai dengan baris <!DOCTYPE htm>> dan diakhiri dengan baris </html>. Jadi di Java ada kelas dasar servlet yang disebut Servlet. Selain itu, ada banyak kelas lain yang mewarisi kelas dasar ini dan dengan demikian memperluas fungsinya. Itulah yang dimaksud dengan servlet - tidak lebih. Itu hanyalah analogi Java dari kode PHP, yang juga dijalankan di server, dan hanya respons terhadap permintaan browser web dalam bentuk halaman web yang dikirim ke klien. Semua.

Kerangka kerja front-end web

Subjudulnya rumit dan biasanya mereka hanya menulis kerangka front-end atau bahkan moncong web , tetapi saya memutuskan untuk menekankan di sini bahwa ketika kita berbicara tentang kerangka front-end, kita berbicara tentang GUI untuk bekerja dengan Java melalui browser web. Itu. di sini sekali lagi kita berbicara tentang situs web di Java, mis. tentang servlet. Apa itu hampir semua kerangka front-end, misalnya Apache Struts. Ini hanyalah sekumpulan kelas yang memperluas kelas dasar Servlet. Tidak ada lagi. Itu. itu hanya cara berbeda untuk membuat servlet reguler yang sama. Hanya saja para pengembang kerangka ini (atau dengan kata lain, para pengembang teknologi ini) menganggap bahwa penambahan kelas dasar Servletdengan beberapa metode akan lebih nyaman bagi pemrogram daripada fungsionalitas sedikit yang dimiliki servlet klasik dari Sun/Oracle. memiliki.

halaman JSP

Segera, ide lain muncul di benak para pengembang konsep Java servlet. Karena kita sedang menulis servlet, yang tugasnya mengirim halaman html ke klien, maka mungkin lebih tepat untuk segera menulis halaman html ini, dan jika Anda memerlukan semacam logika di Java, cukup masukkan langsung ke dalam html. Jika tidak menjadi lebih jelas, maka frasa tersebut mungkin membantu: halaman jsp adalah analog dari halaman php. Sulit? Lalu saya akan menjelaskannya lagi. Apa yang kita lakukan saat menulis halaman di PHP? Kami memiliki html statis, dan ketika kami perlu memasukkan logika apa pun ke PHP seperti loop dan kondisi, kami memasukkannya ke dalam badan tag <?php … ?>. Dengan jsp semuanya sama, hanya logikanya yang ditulis dalam Java murni, kodenya dimasukkan ke dalam badan tag <% … %>. Mari kita kembali ke konsep servlet sekali lagi. Intinya, halaman JSP adalah servlet, tetapi ditulis sedikit berbeda. Dalam servlet biasa, kami menulis metode yang menjalankan beberapa logika dan, berdasarkan hasilnya, menghasilkan halaman HTML untuk klien. Hanya saja setelah beberapa waktu, para pengembang servlet mulai berpikir: bagaimana jika praktis tidak ada logika dalam metodenya, dan hampir hanya terjadi pembentukan halaman html, maka bukankah akan lebih mudah untuk segera menulis halaman html ke dalamnya? kode mana yang harus disisipkan Java minimal? Nah, satu hal lagi tentang halaman jsp. Pertama kali halaman tersebut diakses, halaman tersebut dikompilasi ke dalam servlet dan kemudian dieksekusi. Permintaan selanjutnya ke halaman jsp ini akan lebih cepat karena itu sudah dikompilasi dan hanya perlu dieksekusi.

Wadah servlet

Jadi kami menulis kelas servlet atau halaman JSP. Apa berikutnya? Bagaimana cara mendorongnya ke server web, misalnya Apache, sehingga dapat mengirimkannya ke browser web pengguna? Server web hanya dapat mengirim html, dan jika halaman kita memiliki, katakanlah, kode php, maka server web terlebih dahulu meneruskan halaman tersebut melalui juru bahasa yang menerjemahkan php ke html, dan baru kemudian hasilnya dikirim ke klien. Hal yang hampir sama terjadi dengan servlet - sebelum mengirim, mereka harus dieksekusi agar halaman HTML dapat dibuat, dan wadah servlet adalah hal yang bertanggung jawab untuk mengeksekusi servlet dan kode halaman jsp. Itu. Wadah servlet untuk java adalah analog dari modul penerjemah php di server web. Jadi, ketika pengguna memasukkan alamat di browser web, permintaan dikirim ke server web, server web memahami bahwa servlet sedang diminta dan meneruskan permintaan tersebut ke wadah servlet. Setelah ini, wadah servlet mengeksekusi servlet, mengirimkan halaman HTML yang dihasilkan ke server web, yang kemudian mengembalikannya ke klien. Bisakah wadah servlet berjalan sendiri, mis. tanpa server web? Sesuatu seperti Tomcat pasti bisa. Dan jika kita ingin membuat situs yang tidak memiliki halaman html lain kecuali yang berbasis servlet, maka wadah servlet sudah cukup bagi kita. Tetapi jika kita ingin menggabungkan situs dari servlet dan, katakanlah, halaman PHP, maka kita harus menginstal server web. Selain itu, tidak semua server web memiliki wadah servlet yang disertakan secara default, tetapi hampir semua server web mengizinkan Anda untuk menginstalnya sebagai plugin. Oleh karena itu, jika kita ingin meluncurkan situs web kita di beberapa hosting di Internet, yang kemungkinan besar menjalankan Apache, maka kita harus bertanya kepada penyedia apakah container servlet terhubung.

Jawa EE

Ada yang disebut JavaSE (Java Standard Edition). Konsep ini mencakup semua kelas java, untuk penggunaannya kita hanya perlu mengimpornya (misalnya, java.util.Date) atau bahkan tidak perlu melakukan ini (misalnya, Stringkarena letaknya di dalam paket java.lang). Dan ada Java EE (Java Enterprise Edition). Kelas-kelas ini juga milik Sun/Oracle, tetapi satu-satunya perbedaan adalah bahwa kelas-kelas ini lebih sulit untuk mulai digunakan dalam sebuah proyek. Garis sederhana import…tidak akan cukup, karena... proyek tidak akan dikompilasi. Untuk memperbaiki situasi ini, Anda perlu menemukan file perpustakaan javaee.jar dan memasukkannya ke dalam proyek. Hal ini dapat dilakukan melalui properti proyek di lingkungan pengembangan. Sering dikatakan bahwa proses koneksi ini disebut: mendaftarkan nama panggilan jar di jalur build atau classpath proyek.

Server aplikasi

Sekarang bayangkan kita telah mengkompilasi proyek servlet kita yang menggunakan Java EE. Semuanya baik-baik saja, tetapi sekarang kita perlu menempatkan kelas-kelas yang telah dikompilasi ke dalam wadah servlet. Katakanlah mereka melakukannya. Apakah aplikasi kita akan berfungsi? Jawabannya adalah tidak. Saat mengakses servlet, pengecualian akan diberikan yang menunjukkan bahwa beberapa kelas tidak ditemukan. Mengapa? Karena kami "menipu" kompiler dengan menyelipkan javaee.jar в classpath, mis. kompiler melihat bahwa kelas-kelas dari Java EE berada di tempatnya dan menjadi tenang, tetapi wadah servlet tidak melihat kelas-kelas ini, tetapi ia melihat tautan ke kelas-kelas tersebut dari servlet kami. Apakah situasi ini dapat diselesaikan dalam wadah servlet? Tentu saja ya, Anda hanya perlu menambahkan file perpustakaan javaee.jar ke folder dengan servlet kami di wadah servlet . Sekarang bayangkan akan ada banyak proyek seperti itu dan semuanya berjalan dalam satu wadah servlet Tomcat. Ini berarti Anda harus menyalin file jar ini ke folder setiap servlet. Ini tidak nyaman dan salah. Situasi ini diatasi dengan memperkenalkan konsep server aplikasi, di mana file ini telah lama berada dalam satu salinan, dan semua servlet dapat mengaksesnya, dan tidak memiliki salinannya sendiri. Menurut pendapat saya, ini sangat nyaman dan logis. Tentu saja, semua keributan ini bukan karena satu file jar (saya berikan sebagai contoh) - ada banyak file seperti itu. Tapi bukan itu saja yang diberikan server aplikasi kepada kita. Server aplikasi sendiri dapat memelihara koneksi ke banyak sumber daya, misalnya database. Dalam hal ini, servlet kami mungkin tidak membuka koneksi itu sendiri, tetapi hanya mengambilnya dari server aplikasi. Dalam wadah servlet, ini tidak mungkin, karena... sebuah container, sampai batas tertentu, adalah server aplikasi yang dipreteli. Dalam sebuah container, servlet harus selalu membuat koneksi ke database itu sendiri. Sesuatu seperti ini... arsip perang Apa itu arsip perang? WAR adalah arsip web. Faktanya, ini hanyalah file zip, seperti toples lainnya. Pada dasarnya ini hanyalah cara untuk menjejalkan website kita, yang terdiri dari banyak halaman web, halaman jsp dan kelas servlet, ke dalam satu file zip. web.xml web.xml disebut sebagai deskriptor penerapan. Ini adalah file yang dengan bodohnya menjelaskan baris browser web mana yang meminta untuk dikirim ke kelas servlet mana untuk diproses, sehingga wadah servlet tidak bingung, servlet mana yang bertanggung jawab atas apa. Secara umum, di Java sangat populer untuk mendeskripsikan pengaturan di semua jenis file xml, tetapi belakangan ini ada kecenderungan untuk menjauh dari tradisi ini. Bagaimana caranya, Anda bertanya? Dan melalui anotasi. Kelas anotasi sendiri tidak melakukan apa pun; mereka dibuat hanya untuk mendeskripsikan segala macam pengaturan (meta-data) bukan dalam file xml terpisah, tetapi langsung di dalam kode. Sangat nyaman. Namun, sekarang ada tahap peralihan tertentu, ketika beberapa pengaturan ditentukan oleh anotasi, dan beberapa oleh xml, dan ini dapat membingungkan, karena Anda melihat xml dan melihat satu pengaturan, tetapi menurut anotasi ada pengaturan lain. Manakah yang mempunyai prioritas tertinggi? Siapa tahu…

Kesimpulan

Setelah menulis ini, saya pikir ulasan singkat seperti itu tidak akan membantu siapa pun, karena... tidak memuat secara spesifik dan tidak ada contoh, namun sebaliknya jangan menghapus apa yang tertulis, biarlah.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION