JavaRush /Java Blog /Random-ID /Bagian 6: Kontainer Servlet

Bagian 6: Kontainer Servlet

Dipublikasikan di grup Random-ID
Materi ini merupakan bagian dari seri “Pengantar Pengembangan Usaha”. Artikel sebelumnya: Bagian 6. Kontainer Servlet - 1Pada artikel terakhir, kita mengenal servlet dan mempelajari cara membuat aplikasi web dengan bantuannya. Saatnya untuk melihat lebih dekat apa yang tidak mungkin terjadi tanpa liburan ini - wadah servlet.

Isi:

Apa itu wadah servlet

Ini adalah program yang berjalan di server dan dapat berinteraksi dengan servlet yang kita buat. Dengan kata lain, jika kita ingin menjalankan aplikasi web kita di server, pertama-tama kita menyebarkan container servlet dan kemudian menempatkan servlet di dalamnya. Cara kerjanya sederhana: ketika klien menghubungi server, container memproses permintaannya, menentukan servlet mana yang harus memprosesnya dan meneruskannya. Bagian 6. Kontainer Servlet - 2

Cara menggunakan wadah servlet

Selain merutekan permintaan, kontainer servlet melakukan fungsi lain:
  1. Menghasilkan halaman HTML secara dinamis dari file JSP.
  2. Mengenkripsi/mendekripsi pesan HTTPS.
  3. Menyediakan akses terbatas untuk administrasi servlet.
Secara umum, kedengarannya bagus, yang tersisa hanyalah memikirkan bagaimana menerapkan semuanya. Nah, untuk mempelajari cara menggunakan sesuatu, kamu hanya perlu... mencoba menggunakannya :) Jadi hari ini kita akan berlatih! Kontainer servlet yang paling populer adalah Apache Tomcat . Ini adalah open source dan gratis untuk digunakan. Unduh Tomcat untuk sistem operasi Anda dari tautan ini , dan mari kita lihat cara bekerja dengan container dalam tindakan.

Menginstal dan menjalankan Tomcat

  1. Untuk menginstal Tomcat, cukup ekstrak arsip yang diunduh ke direktori yang diinginkan.

  2. Harap dicatat bahwa Tomcat memerlukan Java versi 8 atau lebih tinggi untuk dijalankan. Pastikan variabel lingkungan JAVA_HOME mengacu pada versi jdk saat ini.

  3. Selanjutnya Anda perlu mengkonfigurasi akses pengguna ke Tomcat . Ini dilakukan di file Tomcat-users.xml, yang terletak di folder conf.

    Tomcat hadir dengan empat peran:

    • manager-gui - akses ke antarmuka grafis dan halaman status;
    • skrip manajer - akses ke antarmuka teks dan halaman status;
    • manager-jmx - akses ke JMX dan halaman status;
    • status manajer - akses hanya ke halaman status.

    Di dalam tag <Tomcat-users>, kami akan secara eksplisit menulis peran ini dan menugaskannya ke pengguna kami:

    <role rolename="manager-gui"/>
    <role rolename="manager-script"/>
    <role rolename="manager-jmx"/>
    <role rolename="manager-status"/>
    <user username="user" password="password"
        roles="manager-gui, manager-script, manager-jmx, manager-status"/>

    Sekarang semuanya siap diluncurkan!

  4. Di folder bin, jalankan file startup.bat (startup.sh di Linux).

  5. Setelah beberapa detik, buka link http://localhost:8080/ di browser Anda . Manajer grafis akan muncul di sana:

    Bagian 6: Kontainer Servlet - 3

    Jika Anda melihat menu seperti itu, berarti Tomcat sedang berjalan.

  6. Jika tidak berhasil, periksa variabel lingkungan JAVA_HOME dan CATALINA_HOME secara manual:

    • JAVA_HOME - harus mengacu pada versi Java 8+ saat ini;
    • CATALINA_HOME - harus merujuk ke Tomcat atau tidak ada (tidak boleh menunjuk ke Tomcat versi lain).

Menyebarkan Aplikasi ke Tomcat

Kami berhasil meluncurkan Tomcat, jadi inilah waktunya untuk menerapkan semacam proyek di dalamnya. Mari gunakan servlet dari artikel sebelumnya . Server Utama:
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/hello")
public class MainServlet extends HttpServlet {

   @Override
   protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
       HttpSession session = req.getSession();
       Integer visitCounter = (Integer) session.getAttribute("visitCounter");
       if (visitCounter == null) {
           visitCounter = 1;
       } else {
           visitCounter++;
       }
       session.setAttribute("visitCounter", visitCounter);
       String username = req.getParameter("username");
       resp.setContentType("text/html");
       PrintWriter printWriter = resp.getWriter();
       if (username == null) {
           printWriter.write("Hello, Anonymous" + "
"
); } else { printWriter.write("Hello, " + username + "
"
); } printWriter.write("Page was visited " + visitCounter + " times."); printWriter.close(); } }
IndeksServlet:
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/")
public class IndexServlet extends HttpServlet {

   @Override
   protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
       resp.sendRedirect(req.getContextPath() + "/hello");
   }
}
Sebelum diterapkan, servlet kami harus dikemas dalam arsip perang. Biasanya Maven digunakan untuk ini, tetapi untuk membuat arsip perang Anda memerlukan file web.xml di mana semua servlet dipetakan. Kami menulis servlet menggunakan anotasi @WebServlet yang baru, jadi kami tidak memiliki web.xml. Untungnya, IDEA dapat melakukan pekerjaan kotor untuk kami dan membungkus proyek kami satu per satu dalam arsip perang. Untuk melakukan ini, Anda perlu membuka struktur proyek (Ctrl + Shift + Alt + S) -> Artefak -> Pilih build yang diinginkan -> Centang kotak di sebelah “Sertakan dalam build proyek” -> Klik “OK”. Bagian 6: Kontainer Servlet - 4Bangun proyek menggunakan kombinasi Ctrl + F9. Sekarang arsip perang kita ada di direktori target, Bagian 6: Kontainer Servlet - 5file tersebut dapat diganti namanya menjadi sesuatu yang lebih sederhana - misalnya, servlet.war - dan dipindahkan ke tempat yang lebih nyaman - di C:\my\. Jika hasil seduhan sudah siap digunakan, masukkan ke dalam wadah . Hal ini dapat dilakukan dengan dua cara.
  1. Melalui GUI

    Untuk melakukan ini, ikuti tautan http://localhost:8080/manager/html . Tomcat akan meminta Anda login dan kata sandi.

    Jika Anda mengulangi semua langkah setelah saya, maka loginnya adalah pengguna, kata sandinya adalah kata sandi .

    Setelah otorisasi berhasil, Anda akan melihat Tomcat Web Application Manager. Bagian Aplikasi sudah berisi 5 aplikasi - ini adalah aplikasi utilitas Tomcat yang diperlukan untuk menyederhanakan pekerjaan dengannya. Mereka dapat dihapus di masa depan.

    Bagian 6: Kontainer Servlet - 6

    Di bawah ini adalah bagian Penerapan. Dengan menggunakannya, Anda dapat memilih arsip perang untuk ditempatkan. Mari masukkan jalur dan konteks secara manual:

    Bagian 6. Kontainer Servlet - 7

    Klik “Deploy”, kita melihat aplikasi kita telah muncul di bagian Aplikasi:

    Bagian 6: Kontainer Servlet - 8 Dengan menggunakan GUI Tomcat kita dapat menghentikannya, memulai ulang, mengatur durasi sesi, dan menghapusnya. Saat menerapkan, kami menentukan konteks /demo, yang berarti aplikasi kami harus diakses melalui tautan http://localhost:8080/demo . Periksa, semuanya harus berfungsi.

  2. Melalui sistem file

    Untuk menyebarkan aplikasi dengan cara ini, Anda perlu membuka direktori tempat Tomcat dibuka ritsletingnya dan membuka aplikasi web. Berikut adalah aplikasi utilitas yang kami kenal:

    Bagian 6: Kontainer Servlet - 9

    Yang perlu kita lakukan hanyalah memindahkan servlet.war kita ke sini.

    Kita tunggu beberapa detik, kita lihat sudah muncul folder servlet baru yang artinya aplikasi kita sudah di-deploy. Mari kita beralih ke antarmuka Manajer Aplikasi yang sudah dikenal - http://localhost:8080/manager/ . Di sini kita melihat bahwa aplikasi kita dikerahkan dalam konteks /servlet:

    Bagian 6: Kontainer Servlet - 10

    Ketika disebarkan dengan cara ini, konteksnya secara otomatis ditetapkan ke nama arsip perang yang dikerahkan. Untuk mengubah konteks, Anda dapat mengganti nama folder yang baru dibuat dengan aplikasi tersebut, tetapi sebelum itu Anda perlu menghapus file: jika tidak, Tomcat akan memindahkan aplikasi dengan nama arsip.

    Seperti yang Anda lihat, menyebarkan aplikasi ke Tomcat jauh lebih mudah daripada yang terlihat. Namun fungsi lainnya mudah digunakan. Mari kita periksa.

Menggunakan protokol HTTPS, bukan HTTP

Jika Anda ingat, kami membahas perbedaan HTTP dan HTTPS di artikel terpisah . HTTPS adalah protokol yang sama dengan HTTP, tetapi menggunakan enkripsi data yang ditransfer. Di sisi klien, enkripsi ditangani oleh browser, dan kita harus menyediakan enkripsi di sisi server. Karena permintaan HTTP diterima dan dirutekan oleh Tomcat, masuk akal untuk mendelegasikan enkripsi padanya. Untuk melakukan ini, Anda perlu:
  1. Hasilkan sertifikat yang ditandatangani sendiri;
  2. Buat pengaturan server tambahan.
Mari kita praktekkan ini.

Menghasilkan sertifikat

JDK hadir dengan sejumlah besar utilitas, apa pun versinya, salah satunya adalah keytool . Ini adalah alat untuk menghasilkan kunci enkripsi dan bekerja dengannya. Untuk menggunakannya, menggunakan baris perintah, buka direktori C:\Program Files\Java\jdk1.8.0_181\bin dan jalankan perintah keytool -genkey -alias tomcat -keyalg RSA .
  • keytool - meluncurkan utilitas dengan parameter;
  • -genkey - menunjukkan bahwa kami ingin membuat kunci baru;
  • -alias tomcat — membuat alias kunci;
  • -keyalg RSA - pilih RSA sebagai algoritma pembangkitan kunci.
Setelah menjalankan perintah, utilitas akan memulai dialog dengan kami: Bagian 6: Kontainer Servlet - 11Masukkan informasi yang diperlukan. Sekarang kita telah membuat keystore di direktori home kita (untuk Windows adalah C:\Users\{username}\.keystore) dan kunci kucing jantan di dalamnya. Kami telah membuat sertifikat sederhana yang dapat diterima oleh sebagian besar browser. Sertifikat ini tidak cocok untuk aplikasi komersial: hanya dapat digunakan untuk tujuan pengujian. Di server produksi, Anda harus menggunakan sertifikat dari otoritas sertifikat (misalnya, https://letsencrypt.org/ ).

Menyiapkan server

Sekarang sertifikat sudah siap, Anda perlu menyesuaikan pengaturan server yaitu konektor SSL. Ini dilakukan di file server.xml, yang terletak di Apache-Tomcat-9.0.30/conf/ . Kami menemukan blok seperti:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true">
        <SSLHostConfig>
            <Certificate certificateKeystoreFile="conf/localhost-rsa.jks"
                         type="RSA" />
        </SSLHostConfig>
 </Connector>
dan di sebelahnya kami menempatkan konfigurasi kami:
<Connector
       protocol="org.apache.coyote.http11.Http11NioProtocol"
       port="8443" maxThreads="200"
       scheme="https" secure="true" SSLEnabled="true"
       keystoreFile="C:\Users\user\.keystore" keystorePass="mypass"
       clientAuth="false" sslProtocol="TLS"/>
Kami menetapkan parameter keystoreFile dan keystorePass nilai yang relevan bagi kami, simpan dan mulai ulang Tomcat menggunakan file shutdown.bat dan startup.bat. Sekarang server siap memproses permintaan https, cukup sedikit di alamat yang diubah - https://localhost:8443/demo/hello . Saat Anda mengeklik tautan tersebut, Anda akan melihat peringatan tentang sertifikat yang dipertanyakan, dan hal ini tidak mengejutkan. Seperti yang dijelaskan sedikit sebelumnya, untuk mendapatkan sertifikat normal Anda perlu menggunakan layanan salah satu layanan sertifikasi. Namun sejauh ini kami telah mencapai tujuan kami: aplikasi bekerja menggunakan protokol HTTPS, dan ini yang utama!

Pembuatan halaman HTML yang dinamis

Sekarang mari kita lanjutkan ulasan kita tentang fitur lain dari wadah servlet - pembuatan halaman HTML secara dinamis. Bayangkan sebuah dunia ideal di mana, alih-alih menggunakan kode HTML statis yang membosankan, Anda dapat menulis kode JAVA menggunakan variabel, loop, array, dan konstruksi bahasa lainnya. Apakah Anda membayangkannya? Kabar baiknya adalah hal serupa itu ada, kabar buruknya adalah hal itu tidak sepenuhnya ada. Jika Anda belum menebaknya, kita berbicara tentang teknologi JSP (Java Server Pages). Singkatnya, ini adalah teknologi yang memungkinkan Anda memasukkan potongan kode JAVA ke dalam halaman HTML. Benar, kode ini masih diubah menjadi HTML sebelum dikirim ke klien, tetapi akan dibuat secara dinamis dengan mempertimbangkan berbagai faktor. Misalnya, Anda dapat menggunakan konstruksi bersyarat dan menyajikan konten yang berbeda bergantung pada beberapa kondisi. Contoh halaman JSP:
<%@ page language="java"" %>
<html>
<head>
<title>JSP</title>
</head>

<body>
<%
String firstName="name";
String secondName="surname";

    if(firstName.equals("name")){
      out.print("Hello :"+firstName+"<br>");
    }

    if(firstName.equals("name") && secondName.equals("surname"))
    {
      out.print("Hello, my dear friend! <br>");
    }
    else
    {
      out.print("I don’t know you. Go away! <br>");
    }
%>
</body>
</html>
Anda dapat membaca lebih lanjut tentang JSP di sini . Sebenarnya... kami di sini bukan untuk ini, tapi demi container servlet! Apa hubungannya JSP dengan itu? Sederhana saja: transformasi kode JAVA dari JSP menjadi kode HTML dilakukan oleh container servlet. Ketika servlet akan mengembalikan konten JSP sebagai respons, container memperhatikan dan terlebih dahulu mengubahnya menjadi halaman HTML yang dapat dibaca browser sebelum mengirimkan konten tersebut ke klien. Saat ini ada banyak analog dari teknologi JSP - Thymeleaf, FreeMarket, Moustache dan lain-lain. Semuanya bekerja dengan prinsip yang sama. Yang mana yang harus dipilih untuk bekerja adalah masalah selera. Hal ini juga berlaku untuk memilih wadah servlet. Dalam contoh kami menggunakan Tomcat, wadah yang paling umum, tetapi beberapa proyek menggunakan wadah lain. Sebaiknya Anda membiasakan diri secara singkat dengan yang paling populer dan melihat perbedaannya dari Tomcat.

Alternatif untuk Tomcat

  1. GlassFish adalah wadah sumber terbuka yang didukung oleh Oracle.

    Tidak seperti Tomcat, ini adalah server web lengkap yang, selain servlet, dapat mengoperasikan komponen lain dari kerangka JavaEE. Pada saat yang sama, ia menggunakan lebih banyak RAM. Lebih fleksibel saat menyempurnakan server, sehingga lebih sulit digunakan. Layak digunakan ketika mengembangkan aplikasi menggunakan kerangka JavaEE.

  2. WildFly - sebelumnya Jboss . Juga sumber terbuka. Dikembangkan oleh Red Hat. Nama tersebut diubah untuk menghindari kebingungan dengan produk perusahaan lain - JBoss Enterprise Application Platform.

    WildFly, seperti GlassFish, adalah server web lengkap. Omong-omong, WildFly menggunakan Tomcat sebagai wadah servlet. Berbeda dengan GlassFish, WildFly lebih ringan dan mudah diatur.

  3. Jetty - mirip dengan yang sebelumnya, bersifat open source. Dikembangkan oleh Eclipse.

    Seperti Tomcat, ini adalah wadah servlet sederhana, tanpa dukungan untuk semua komponen kerangka JavaEE. Pada saat yang sama, ini lebih ringan dan dapat dijalankan bahkan di ponsel. Ini dimulai dan berhenti dengan cepat dan berskala dengan baik. Berbeda dengan Tomcat, ia memiliki komunitas dan basis pengetahuan yang lebih kecil.

  4. WebLogic adalah perangkat lunak berlisensi yang memerlukan pembelian sebelum digunakan. Dimiliki oleh Oracle.

    Dibandingkan Tomcat, fungsinya sedikit lebih luas. Dapat bekerja dengan protokol ftp. Namun hal ini tidak begitu fleksibel ketika mengembangkan dan menguji aplikasi.

  5. WebSphere (WebSphere Application Server tepatnya) adalah perangkat lunak berbayar. Dikembangkan oleh IBM. Mirip dengan WildFly dan GlassFish, ini adalah server aplikasi lengkap. Namun ia memiliki antarmuka pengaturan yang lebih ramah, ditambah keandalan operasional yang tinggi.

    Sisi negatifnya adalah ia menggunakan banyak sumber daya, membutuhkan waktu lama untuk memulai dan menghentikan, sehingga sangat tidak nyaman ketika mengembangkan proyek kecil.

Kontainer servlet atau server aplikasi mana yang harus dipilih bergantung pada proyek spesifik. Ada proyek-proyek di mana bahkan orang luar pun dapat membuktikan dirinya dengan kualitas terbaik, tetapi pada awalnya lebih baik untuk memahami satu hal secara menyeluruh. Mungkin kandidat ideal untuk yang satu ini adalah Tomcat. Kami telah mengambil langkah pertama dalam mempelajarinya, dan terserah Anda! Dalam artikel terakhir dari seri “Pengantar Pengembangan Perusahaan”, kita akan mengenal pola MVC. Bagian 7. Pengenalan pola MVC (Model-View-Controller) Bagian 8. Menulis aplikasi kecil di spring-boot
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION