JavaRush /Java Blog /Random-ID /Bagian 5. Servlet, API servlet Java. Menulis aplikasi web...

Bagian 5. Servlet, API servlet Java. Menulis aplikasi web sederhana

Dipublikasikan di grup Random-ID
Materi ini merupakan bagian dari seri “Pengantar Pengembangan Usaha”. Artikel sebelumnya: Bagian 5. Servlet, API servlet Java.  Menulis aplikasi web sederhana - 1Apakah Anda sudah tahu cara menulis aplikasi Java yang mengeluarkan teks ke konsol, tetapi Anda masih belum tahu cara membuat aplikasi web pertama Anda? Bagus, buat dirimu nyaman. Pada artikel ini, kita akan mengenal servlet dan menulis aplikasi yang dapat Anda pamerkan kepada teman-teman Anda tanpa mengirimkan jarnik atau memaksa mereka mengunduh Java. Mari kita menulis aplikasi web . Jika Anda belum terbiasa dengan pendekatan yang digunakan dalam pemrograman web, saya menyarankan Anda untuk mulai membaca dari artikel pertama dalam seri “ Pengantar Pengembangan Usaha ”.

Apa itu servlet

Pertama, mari kita cari tahu apa itu servlet dan mengapa Anda begitu sering mendengarnya. Java Servlet API adalah API standar yang dirancang untuk implementasi di server dan bekerja dengan klien menggunakan skema permintaan-respons. Servlet adalah kelas yang dapat menerima permintaan dari klien dan mengembalikan tanggapannya. Ya, servlet di Java adalah elemen yang membangun arsitektur client-server. Jika Anda ingat, kami telah membicarakannya di salah satu artikel seri ini. Jangan bertele-tele: ayo segera tulis beberapa kode.

Apa yang Anda perlukan untuk membuat aplikasi web

Untuk bekerja dengan nyaman dengan servlet di Java, Anda memerlukan Intellij IDEA Ultimate Edition. Ini berbayar, tetapi Anda dapat mengaktifkan masa uji coba 30 hari atau menggunakan versi akses awal - selalu gratis. Instal juga server aplikasi kami - Apache Tomcat. Tomcat adalah wadah servlet: wadah yang memproses permintaan masuk dari luar dan meneruskannya ke aplikasi kita. Anda dapat mengunduh Tomcat dari tautan ini .

Membuat aplikasi web pertama

Jika semuanya sudah siap, mari kita buat proyek Maven. Jika Anda belum familiar dengan Maven, perhatikan artikel sebelumnya . Mari kita mulai!
  1. Di pom.xml, tambahkan ketergantungan javax.servlet-api dan atur perang pengemasan:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
       <modelVersion>4.0.0</modelVersion>
    
       <groupId>org.example</groupId>
       <artifactId>servlets</artifactId>
       <version>1.0-SNAPSHOT</version>
       <packaging>war</packaging>
    
       <dependencies>
           <dependency>
               <groupId>javax.servlet</groupId>
               <artifactId>javax.servlet-api</artifactId>
               <version>4.0.1</version>
           </dependency>
       </dependencies>
    </project>

    Kelas servlet sederhana:

    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.PrintWriter;
    
    @WebServlet("/hello")
    public class MainServlet extends HttpServlet {
    
       @Override
       protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
           resp.setContentType("text/html");
           PrintWriter printWriter = resp.getWriter();
           printWriter.write("Hello!");
           printWriter.close();
       }
    }
  2. Untuk menjalankan aplikasi, Anda perlu membuat konfigurasi Tomcat:

    Bagian 5. Servlet, API servlet Java.  Menulis aplikasi web sederhana - 2 Bagian 5. Servlet, API servlet Java.  Menulis aplikasi web sederhana - 3

  3. Selanjutnya, kami menunjukkan versi Tomcat mana yang akan kami gunakan, URL yang dapat kami gunakan untuk mengakses server, dan portnya. Anda harus mendapatkan sesuatu seperti ini:

    Bagian 5. Servlet, API servlet Java.  Menulis aplikasi web sederhana - 4
  4. Yang tersisa hanyalah menentukan artefak (proyek yang dirakit menjadi arsip jar), yang akan disebarkan dalam wadah. Anda dapat mengklik tombol Perbaiki dan memilih perang meledak : ini berarti bahwa setelah proyek dibangun kembali, artefak akan secara otomatis ditempatkan di wadah servlet. Bagian 5. Servlet, API servlet Java.  Menulis aplikasi web sederhana - 5

  5. Konteks Aplikasi diatur ke servlets_war_exploded secara default , yang berarti aplikasi harus diakses di: http://localhost:8080/servlets_war_exploded .

    Mengapa kita memerlukan teks tambahan? Mari kita hilangkan hal-hal yang tidak perlu. Sekarang alamat aplikasi kita adalah: http://localhost:8080 .

    Bagian 5. Servlet, API servlet Java.  Menulis aplikasi web sederhana - 6

  6. Klik Oke. Kami melihat bahwa sekarang kami memiliki kesempatan untuk meluncurkan aplikasi:

    Bagian 5. Servlet, API servlet Java.  Menulis aplikasi web sederhana - 7

    Sekarang, saat Anda meluncurkan aplikasi, browser akan terbuka dan menampilkan kesalahan 404. Ini logis, karena di alamat http://localhost:8080/ seharusnya ada servlet dengan pemetaan “/”, dan satu-satunya servlet kita yang memiliki pemetaan “/hello” .

  7. Kami menghubunginya di http://localhost:8080/hello dan mendapatkan respons yang diharapkan - string “Halo”!

Jika semuanya berfungsi, mari kita lihat kodenya. Untuk membuat servlet http dari kelas reguler , Anda perlu mewarisinya dari kelas HttpServlet. Di atas kelas kami menentukan anotasi @WebServlet(), yang mana kami mengikat (memetakan) servlet ke jalur tertentu (“/hello”). Anotasi ini hanya muncul di Java Servlet API 3.0, jadi ada banyak contoh di Internet di mana pemetaan servlet terjadi melalui file XML. Sekarang hal ini tidak perlu dilakukan. Untuk memproses permintaan GET , kami mengganti metode doGet(). Perhatikan argumen metode - HttpServletRequest dan HttpServletResponse. Dari objek HttpServletRequest kita dapat mengambil semua informasi yang diperlukan tentang permintaan tersebut, di HttpServletResponse kita dapat mencatat respons kita dan mengatur header yang diperlukan.

Bekerja dengan parameter dan sesi

Mari tingkatkan servlet kita sehingga dapat memproses parameter permintaan dan bekerja dengan sesi:
import javax.servlet.ServletException;
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 ServletException, 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" + "<br>");
       } else {
           printWriter.write("Hello, " + username + "<br>");
       }
       printWriter.write("Page was visited " + visitCounter + " times.");
       printWriter.close();
   }
}
Servlet sedang menjalankan sesi, menambah visitCounter setiap kali halaman dikunjungi. Jika atribut visitCounter belum dibuat (pertama kali Anda mengunjungi halaman), metode getAttribute() akan mengembalikan null, jadi Anda perlu memeriksa null. Hal yang sama berlaku untuk parameter permintaan. Jika pengguna tidak meneruskan parameter nama pengguna, nilainya akan menjadi nol. Dalam hal ini, kami akan menyapa pengguna sebagai anonim. Untuk meneruskan parameter dalam permintaan GET, variabel jalur digunakan, yaitu, Anda perlu mengakses tautan http://localhost:8080/hello?username=Pavel . Anda dapat membaca lebih lanjut tentang permintaan http di artikel seri sebelumnya. Sekarang aplikasi kita memiliki logika yang minim, namun error 404 pada jalur root sedikit mengganggu. Untuk memperbaikinya, mari buat servlet lain dan petakan ke halaman awal @WebServlet("/"). Tugas servlet ini adalah mengarahkan permintaan ke jalur “/ hello”. Ada dua cara untuk melakukan ini: menggunakan penerusan atau pengalihan. Mungkin ada baiknya memahami perbedaan di antara keduanya. meneruskan - mendelegasikan pemrosesan permintaan ke servlet lain di server, klien tidak terlibat. Untuk melakukannya, Anda perlu menambahkan kode berikut ke metode doGet() di servlet baru:
getServletContext().getRequestDispatcher("/hello").forward(req, resp);
Dalam kode ini, kita mengakses konteks servlet, mendapatkan manajer permintaan servlet yang diinginkan darinya dan memintanya untuk memproses permintaan spesifik dengan parameter yang ditentukan (req, resp). redirect - mengembalikan ke klien alamat yang perlu dia hubungi untuk memproses permintaannya. Sebagian besar browser membuka tautan yang dikirimkan secara otomatis. Untuk menerapkan pengalihan Anda perlu menambahkan kode ini:
resp.sendRedirect(req.getContextPath() + "/hello");
Di HttpServletResponse kita memanggil metode redirect() dan meneruskannya ke alamat yang perlu dihubungi klien. Detail penting: parameter http juga harus ditambahkan di akhir jalur pengalihan lengkap, yang sangat tidak nyaman. Dalam situasi kami, lebih baik menggunakan penerusan, tetapi kebetulan lebih baik menggunakan pengalihan. Jika Anda memahami perbedaan pekerjaan mereka, Anda tidak akan salah dalam memilih. Kode untuk servlet baru terlihat seperti ini:
import javax.servlet.ServletException;
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 ServletException, IOException {
//        getServletContext().getRequestDispatcher("/hello").forward(req, resp);
       resp.sendRedirect(req.getContextPath() + "/hello");
   }
}

Intinya

Aplikasi web pertama Anda sudah siap. Di artikel berikutnya Anda akan mempelajari cara menyebarkannya tanpa menggunakan Intellij IDEA. Kami menulis aplikasi yang hanya memproses permintaan GET. Metode http lainnya diproses dengan cara yang sama - mengganti metode yang sesuai dari kelas induk. Dengan menggunakan servlet sederhana, Anda dapat membangun aplikasi web yang kompleks dan kaya. Tentu saja, dengan menggunakan framework besar seperti Spring, hal ini jauh lebih mudah dilakukan. Namun jika Anda memang ingin mendalami semua kemampuan servlet lebih detail, Anda bisa membaca spesifikasi resminya . Bagian 6. Kontainer Servlet 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