Pengantar Java Servlets

1. Ikhtisar

Pada artikel ini, kita akan melihat aspek inti pengembangan web di Java - Servlets.

2. Servlet dan Wadah

Sederhananya, Servlet adalah kelas yang menangani permintaan, memprosesnya, dan membalas dengan respons.

Misalnya, kita dapat menggunakan Servlet untuk mengumpulkan input dari pengguna melalui formulir HTML, melakukan kueri catatan dari database, dan membuat halaman web secara dinamis.

Servlet berada di bawah kendali aplikasi Java lain yang disebut Servlet Container. Ketika aplikasi yang berjalan di server web menerima permintaan , Server menyerahkan permintaan tersebut ke Servlet Container - yang kemudian meneruskannya ke Servlet target.

3. Ketergantungan Maven

Untuk menambahkan dukungan Servlet di aplikasi web kami, javax . ketergantungan servlet-api diperlukan:

 javax.servlet javax.servlet-api 3.1.0 

Ketergantungan maven terbaru dapat ditemukan di sini.

Tentu saja, kita juga harus mengonfigurasi wadah Servlet untuk menerapkan aplikasi kita; ini adalah tempat yang baik untuk memulai tentang cara menyebarkan WAR di Tomcat.

4. Siklus Hidup Servlet

Mari kita lihat kumpulan metode yang menentukan siklus hidup Servlet.

4.1. init ()

The init metode dirancang untuk dipanggil hanya sekali. Jika sebuah instance dari servlet tidak ada, wadah web:

  1. Memuat kelas servlet
  2. Membuat instance dari kelas servlet
  3. Melakukan inisialisasi dengan memanggil metode init

The init metode harus menyelesaikan berhasil sebelum servlet dapat menerima permintaan apapun. Kontainer servlet tidak dapat menempatkan servlet ke dalam layanan jika metode init melempar ServletException atau tidak kembali dalam jangka waktu yang ditentukan oleh server Web.

public void init() throws ServletException { // Initialization code like set up database etc.... }

4.2. layanan()

Metode ini hanya dipanggil setelah metode init () servlet berhasil diselesaikan .

Container memanggil metode service () untuk menangani permintaan yang datang dari klien, menafsirkan jenis permintaan HTTP ( GET , POST , PUT , DELETE , dll.) Dan memanggil metode doGet , doPost , doPut , doDelete , dll. Sebagaimana mestinya.

public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException { // ... }

4.3. menghancurkan()

Dipanggil oleh Servlet Container untuk menghentikan Servlet dari layanan.

Metode ini hanya dipanggil setelah semua utas dalam metode layanan servlet telah keluar atau setelah periode waktu tunggu telah berlalu. Setelah penampung memanggil metode ini, ia tidak akan memanggil metode layanan lagi di Servlet.

public void destroy() { // }

5. Contoh Servlet

Sekarang mari kita siapkan contoh lengkap penanganan informasi menggunakan formulir.

Untuk memulai, mari kita definisikan servlet dengan mapping / countServlet yang akan menangkap informasi yang diposkan oleh formulir dan mengembalikan hasilnya menggunakan RequestDispatcher:

@WebServlet(name = "FormServlet", urlPatterns = "/calculateServlet") public class FormServlet extends HttpServlet { @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String height = request.getParameter("height"); String weight = request.getParameter("weight"); try { double bmi = calculateBMI( Double.parseDouble(weight), Double.parseDouble(height)); request.setAttribute("bmi", bmi); response.setHeader("Test", "Success"); response.setHeader("BMI", String.valueOf(bmi)); RequestDispatcher dispatcher = request.getRequestDispatcher("index.jsp"); dispatcher.forward(request, response); } catch (Exception e) { response.sendRedirect("index.jsp"); } } private Double calculateBMI(Double weight, Double height) { return weight / (height * height); } }

Seperti yang ditunjukkan di atas, kelas yang dianotasi dengan @WebServlet harus memperluas kelas javax.servlet.http.HttpServlet . Penting untuk diperhatikan bahwa anotasi @WebServlet hanya tersedia mulai dari Java EE 6 dan seterusnya.

The @WebServlet penjelasan diproses oleh wadah pada waktu penyebaran, dan sesuai servlet tersedia pada pola URL tertentu. Perlu diperhatikan bahwa dengan menggunakan anotasi untuk menentukan pola URL, kita dapat menghindari penggunaan deskriptor penerapan XML bernama web.xml untuk pemetaan Servlet kita.

Jika kita ingin memetakan Servlet tanpa anotasi, kita dapat menggunakan web.xml tradisional sebagai gantinya:

  FormServlet com.root.FormServlet   FormServlet /calculateServlet  

Selanjutnya, mari buat formulir HTML dasar :


    
Your Weight (kg) :
Your Height (m) :

${bmi}

Terakhir - untuk memastikan semuanya berfungsi seperti yang diharapkan, mari kita juga menulis tes singkat:

public class FormServletLiveTest { @Test public void whenPostRequestUsingHttpClient_thenCorrect() throws Exception { HttpClient client = new DefaultHttpClient(); HttpPost method = new HttpPost( "//localhost:8080/calculateServlet"); List nvps = new ArrayList(); nvps.add(new BasicNameValuePair("height", String.valueOf(2))); nvps.add(new BasicNameValuePair("weight", String.valueOf(80))); method.setEntity(new UrlEncodedFormEntity(nvps)); HttpResponse httpResponse = client.execute(method); assertEquals("Success", httpResponse .getHeaders("Test")[0].getValue()); assertEquals("20.0", httpResponse .getHeaders("BMI")[0].getValue()); } }

6. Servlet, HttpServlet dan JSP

Penting untuk dipahami bahwa teknologi Servlet tidak terbatas pada protokol HTTP.

Dalam praktiknya hampir selalu demikian, tetapi Servlet adalah antarmuka generik dan HttpServlet adalah ekstensi dari antarmuka itu - menambahkan dukungan khusus HTTP - seperti doGet dan doPost , dll.

Terakhir, teknologi Servlet juga merupakan penggerak utama sejumlah teknologi web lainnya seperti JSP - JavaServer Pages, Spring MVC, dll.

7. Kesimpulan

Dalam artikel singkat ini, kami memperkenalkan dasar-dasar Servlet di aplikasi web Java.

Proyek contoh dapat diunduh dan dijalankan sebagaimana adanya sebagai proyek GitHub.