1.1 antarmuka Servlet
Hari ini kami memulai topik baru dan menarik - servlet . Itu adalah penambahan servlet ke Java yang menyebabkan Java menjadi standar de facto untuk aplikasi server besar. 80% dari semua perangkat lunak perusahaan di dunia ditulis dalam Java. Dan di Cina, semuanya 100%. Jadi apa itu servlet?
Servlet inilah yang mengubah program Java menjadi layanan web dan memungkinkannya memproses permintaan dari klien. Dan itu seperti ini ...
Di tahun 90-an, segera setelah munculnya World Wide Web, klien web (browser) dan server web muncul. Server web biasanya hanya mendistribusikan file yang mereka simpan melalui Internet: halaman html, skrip, gambar, dll.
Pada titik tertentu, semua orang sampai pada kesimpulan bahwa kedua belah pihak perlu dibuat lebih pintar. JavaScript ditambahkan ke halaman HTML, dan plugin ditambahkan ke server - skrip khusus yang dipanggil sebagai tanggapan atas permintaan tertentu dan membuat perilaku server lebih fleksibel dan lebih pintar.
Jadi servlet adalah plugin Java yang dibangun Java web-server
dan memungkinkannya mengeksekusi kode Java saat diminta untuk halaman tertentu. Dan kode Java ini, yang diwakili oleh kelas yang diwarisi dari kelas Servlet, melakukan apa yang dimaksudkan oleh pengembangnya.
Dan seperti yang sudah Anda ketahui, server web Java yang paling populer adalah Tomcat . Ngomong-ngomong, dinamai untuk menghormati kucing Tom dari kartun "Tom and Jerry".
Bagaimana Tomcat berinteraksi dengan servlet? Bahkan, proses ini dibakukan dan disebut siklus hidup servlet . Di dalamnya, servlet adalah objek yang dapat dimuat, dan server web adalah wadah servlet .
Jika servlet belum dimuat , maka:
- Kelas servlet dimuat oleh wadah.
- Wadah membuat turunan dari kelas (objek) dari servlet.
- Kontainer memanggil metode
init()
pada objek servlet. Metode ini dipanggil hanya sekali.
Siklus kerja standar - melayani permintaan klien :
- Setiap permintaan diproses dalam utas terpisah.
- Kontainer memanggil metode
service()
di servlet dan meneruskan objek ServletRequest dan ServletResponse ke sana. - Untuk mengakhiri servlet, sebuah metode dipanggil
destroy()
pada objek servlet. Disebut hanya sekali.
Ada banyak alasan mengapa servlet berakhir:
- Pemrogram me-restart server web, semua servlet harus ditutup dengan anggun.
- Pemrogram memuat versi baru dari servlet, yang lama harus dibongkar dengan benar.
- Dan seterusnya.
Ingat hal utama: server web dan servletnya harus bekerja tanpa kegagalan dan restart selama berbulan-bulan, melayani ribuan permintaan per menit. Oleh karena itu, kode untuk memuat, dan bekerja, dan membongkar servlet harus selalu ditulis dengan kualitas sangat tinggi.
1.2 kelas HttpServlet
Kelas Servlet ada untuk membakukan cara kerja servlet dan wadah. Pemrogram tidak bekerja secara langsung dengan kelas ini. Yah, mereka jarang bekerja. Kelas yang paling umum digunakan HttpServlet
diwariskan dari Servlet.
Kelas ini memiliki beberapa metode yang akan berguna bagi kita. Anda akan sering menggunakannya:
metode | Keterangan | |
---|---|---|
1 | init() |
Dipanggil sekali saat servlet dimuat |
2 | destroy() |
Dipanggil sekali saat servlet dibongkar |
3 | service(HttpRequest, HttpResponse) |
Dipanggil untuk setiap permintaan baru ke servlet |
4 | doGet(HttpRequest, HttpResponse) |
Dipanggil untuk setiap permintaan GET baru ke servlet |
5 | doPost(HttpRequest, HttpResponse) |
Dipanggil untuk setiap permintaan POST baru ke servlet |
6 | doHead(HttpRequest, HttpResponse) |
Dipanggil untuk setiap permintaan HEAD baru ke servlet |
7 | doDelete(HttpRequest, HttpResponse) |
Dipanggil untuk setiap permintaan DELETE baru ke servlet |
8 | doPut(HttpRequest, HttpResponse) |
Dipanggil untuk setiap permintaan PUT baru ke servlet |
Metode init()
dan destroy()
diwarisi dari kelas Servlet. Oleh karena itu, jika Anda memutuskan untuk menimpanya di servlet, Anda juga perlu memanggil implementasinya dari kelas dasar. Perintah digunakan untuk ini super.method name()
.
Contoh servlet:
public class FirstHttpServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Getting the parameter “secret” from request
String secret = request.getParameter("secret");
// Put parameter “secret” into Http-session
HttpSession session = request.getSession(true);
session.setAttribute("secret", secret);
// Print HTML as response for browser
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
out.println("<html>");
out.println("<head>");
out.println("<title>Header</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Servlet example "+ secret +"</h1>");
out.println("</body>");
out.println("</html>");
} finally {
out.close();
}
}
}
1.3 metode layanan (HttpServletRequest, HttpServletResponse)
Jika Anda melihat pemrosesan permintaan klien dari sudut pandang servlet, maka semuanya menjadi seperti ini.
Untuk setiap permintaan klien, wadah (server web) membuat HttpServletRequest
dan objek HttpServletResponse
, lalu memanggil metode service(HttpServletRequest request, HttpServletResponse response)
pada servlet yang sesuai. Objek-objek ini diteruskan sehingga metode dapat mengambil data yang diperlukan dari request
dan memasukkan hasil pekerjaan ke dalam response
.
Metode ini service()
memiliki implementasi default. Jika tidak didefinisikan ulang, maka akan dieksekusi. Itulah yang dia lakukan.
Metode service()
menentukan jenis metode HTTP dari permintaan (GET, POST, ...) dan memanggil metode yang sesuai dengan permintaan.
metode | Keterangan | |
---|---|---|
1 | service(HttpRequest, HttpResponse) |
Dipanggil untuk setiap permintaan baru ke servlet |
2 | doGet(HttpRequest, HttpResponse) |
Dipanggil untuk setiap permintaan GET baru ke servlet |
3 | doPost(HttpRequest, HttpResponse) |
Dipanggil untuk setiap permintaan POST baru ke servlet |
4 | doHead(HttpRequest, HttpResponse) |
Dipanggil untuk setiap permintaan HEAD baru ke servlet |
5 | doDelete(HttpRequest, HttpResponse) |
Dipanggil untuk setiap permintaan DELETE baru ke servlet |
6 | doPut(HttpRequest, HttpResponse) |
Dipanggil untuk setiap permintaan PUT baru ke servlet |
Di kelas Anda, Anda dapat mendefinisikan ulang satu metode service()
, atau membiarkannya, tetapi kemudian mendefinisikan ulang metode doGet()
, doPost()
, ... sesuai kebutuhan.
GO TO FULL VERSION