CodeGym /Java Blog /Acak /Bagian 5. Servlet dan Java Servlet API. Menulis aplikasi ...
John Squirrels
Level 41
San Francisco

Bagian 5. Servlet dan Java Servlet API. Menulis aplikasi web sederhana

Dipublikasikan di grup Acak
Materi ini merupakan bagian dari seri "Pengantar Pengembangan Usaha". Artikel sebelumnya: Bagian 5. Servlet dan Java Servlet API.  Menulis aplikasi web sederhana - 1Apakah Anda sudah tahu cara menulis aplikasi Java yang menampilkan teks di konsol, tetapi Anda masih belum benar-benar tahu cara membuat aplikasi web pertama Anda? Hebat, buat dirimu nyaman. Pada artikel ini, kita akan berkenalan dengan servlet dan menulis aplikasi yang dapat Anda banggakan kepada teman Anda tanpa mengirimi mereka file JAR dan tanpa memaksa mereka mengunduh Java. Mari kita menulis aplikasi web sederhana . Jika Anda belum terbiasa dengan pendekatan yang digunakan dalam pengembangan web, saya sarankan Anda mulai dengan membaca artikel pertama dalam seri " Pengantar Pengembangan Perusahaan ".

Apa itu servlet?

Pertama, mari kita cari tahu apa itu servlet dan mengapa Anda begitu sering mendengarnya. Java Servlet API adalah API standar yang dimaksudkan untuk diimplementasikan di server. Ini berinteraksi dengan klien sesuai dengan skema permintaan-respons. Servlet adalah kelas yang dapat menerima permintaan dari klien dan mengembalikan respons ke klien . Faktanya, servlet adalah blok bangunan yang kami gunakan untuk membuat arsitektur client-server di Java. Anda mungkin ingat bahwa kami telah berbicara tentang arsitektur itu di salah satu artikel lain dalam seri ini. Kami tidak akan bertele-tele: mari kita menulis beberapa kode segera.

Apa yang Anda butuhkan untuk membuat aplikasi web

Untuk kenyamanan maksimal saat bekerja dengan servlet Java, Anda memerlukan IntelliJ IDEA Ultimate Edition. Ini adalah produk berbayar, tetapi Anda dapat mengaktifkan uji coba 30 hari atau menggunakan versi akses awal, yang selalu gratis. Juga, instal Apache Tomcat — server aplikasi kita. Tomcat adalah wadah servlet: ia memproses permintaan yang masuk dan meneruskannya ke aplikasi kita. Unduh Tomcat di sini .

Mari buat aplikasi web pertama kita

Jika semuanya sudah siap, buat proyek Maven. Jika Anda tidak terbiasa dengan Maven, lihat artikel sebelumnya . Mari kita mulai!
  1. Di pom.xml, tambahkan dependensi javax.servlet-api dan tentukan kemasan WAR:

    
    <?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 dan Java Servlet API.  Menulis aplikasi web sederhana - 2Bagian 5. Servlet dan Java Servlet API.  Menulis aplikasi web sederhana - 3

  3. Selanjutnya, kami menunjukkan versi Tomcat mana yang akan kami gunakan, dan URL serta port untuk berkomunikasi dengan server. Anda harus memiliki sesuatu seperti ini:

    Bagian 5. Servlet dan Java Servlet API.  Menulis aplikasi web sederhana - 4
  4. Sekarang kita hanya perlu menentukan artefak (proyek rakitan di arsip JAR) yang akan diterapkan di 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 dan Java Servlet API.  Menulis aplikasi web sederhana - 5

  5. Nilai default untuk Application context adalah servlets_war_exploded . Artinya kita mengakses aplikasi di: http://localhost:8080/servlets_war_exploded .

    Mengapa kita menginginkan teks tambahan? Mari kita hapus apa yang tidak perlu. Sekarang alamat aplikasi web kami adalah: http://localhost:8080 .

    Bagian 5. Servlet dan Java Servlet API.  Menulis aplikasi web sederhana - 6
  6. Klik Oke. Kami melihat bahwa kami sekarang dapat meluncurkan aplikasi:

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

    Sekarang ketika Anda membuka aplikasi di browser Anda, Anda akan mendapatkan error 404. Ini masuk akal, karena alamatnya http://localhost:8080/ membutuhkan servlet yang dipetakan ke "/", tetapi satu-satunya servlet kami dipetakan ke "/hello" .

  7. Kita dapat mengaksesnya di http://localhost:8080/hello . Setelah kami melakukannya, kami mendapatkan jawaban yang diharapkan — string "Halo"!

Jika semuanya berfungsi, mari kita analisis kodenya. Untuk membuat HTTP-servlet dari kelas biasa , ia harus mewarisi kelas HttpServlet. Di atas deklarasi kelas, kami menunjukkan @WebServlet()anotasi. Di sinilah kami mengikat (atau memetakan) servlet ke jalur tertentu ("/hello"). Anotasi ini hanya muncul di Java Servlet API 3.0, sehingga Internet memiliki banyak contoh di mana pemetaan servlet terjadi melalui file XML. Ini tidak lagi diperlukan. Untuk menangani permintaan GET , kami mengganti doGet()metode. Perhatikan parameter metode: HttpServletRequestdan HttpServletResponse. Objek tersebut HttpServletRequestmemberi kami semua informasi yang diperlukan tentang permintaan tersebut. Di HttpServletResponse, kami menulis tanggapan kami dan mengatur tajuk yang diperlukan.

Bekerja dengan parameter dan sesi

Mari tingkatkan servlet kita sehingga dapat memproses parameter permintaan dan bekerja dengan sebuah 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();
   }
}
Sekarang servlet bekerja dengan sebuah sesi, meningkatkan nilai visitCountersetiap kali halaman dikunjungi. Jika visitCounteratribut belum dibuat (pada kunjungan pertama ke halaman), metode getAttribute()mengembalikan null, jadi kita perlu memeriksa null. Hal yang sama berlaku untuk parameter permintaan. Jika pengguna tidak melewati parameter username, maka nilainya akan menjadi null. Dalam hal ini, kami menyapa pengguna sebagai pengunjung anonim. Untuk mengirimkan parameter dalam permintaan GET, string kueri digunakan, Misalnya, kita dapat menggunakan URL berikut: http:// localhost:8080/hello? Nama pengguna=Paul. Anda dapat membaca lebih lanjut tentang permintaan HTTP di artikel sebelumnyadalam seri. Aplikasi kami saat ini tidak memiliki banyak logika, tetapi agak mengganggu karena kami mendapatkan kesalahan 404 di jalur root. Untuk memperbaikinya, kami akan membuat servlet lain dan memetakannya ke halaman awal: @WebServlet("/"). Tujuan dari servlet ini adalah untuk mengalihkan permintaan ke jalur "/hello". Ada dua cara untuk melakukannya: menggunakan "maju" atau "mengalihkan". Mungkin bermanfaat untuk memahami perbedaan di antara mereka. Forward mendelegasikan pemrosesan permintaan ke servlet lain di server . Klien tidak terlibat. Untuk melakukannya, tambahkan kode berikut ke metode doGet() servlet yang baru:

getServletContext().getRequestDispatcher("/hello").forward(req, resp);
Dalam kode ini, kami mengakses konteks servlet, mendapatkan pengirim permintaan untuk servlet yang relevan, dan memintanya memproses permintaan khusus dengan argumen yang ditentukan (req, resp). Redirect mengembalikan ke klien alamat yang harus digunakan klien untuk memproses permintaannya . Sebagian besar browser secara otomatis menavigasi ke URL yang dikembalikan. Untuk mengimplementasikan pengalihan, Anda perlu menambahkan kode ini:

resp.sendRedirect(req.getContextPath() + "/hello");
Kami memanggil redirect()metode pada HttpServletResponseparameter dan meneruskannya ke alamat yang perlu digunakan klien. Inilah detail penting: Parameter HTTP juga harus ditambahkan di akhir jalur pengalihan penuh, yang sangat tidak nyaman. Dalam situasi kami, lebih baik menggunakan forward, tetapi terkadang menggunakan redirectlebih baik. Jika Anda memahami perbedaan cara kerjanya, Anda tidak akan membuat pilihan yang salah. 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");
   }
}

Ringkasan

Aplikasi web pertama Anda selesai. Di artikel selanjutnya, Anda akan mempelajari cara menerapkannya tanpa menggunakan IntelliJ IDEA. Kami menulis aplikasi yang hanya memproses permintaan GET. Metode HTTP yang tersisa ditangani dengan cara yang sama — dengan mengganti metode yang sesuai dari kelas induk. Anda dapat menggunakan servlet sederhana seperti ini untuk membuat aplikasi web serbaguna yang canggih. Tentu saja, menggunakan framework besar seperti Spring membuatnya lebih mudah. Namun jika Anda benar-benar ingin mendalami semua kemampuan servlet, Anda dapat membaca spesifikasi resminya . Bagian 6. Servlet containers Bagian 7. Memperkenalkan pola MVC (Model-View-Controller)
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION