Servlet là phần lập trình phía server để hồi đáp lại những yêu cầu từ network, chủ yếu là các HTTP request. Servlet được sử dụng để triển khai các ứng dụng web. Thông thường Servlet sẽ sử dụng các framework khác nhau như Struts, Spring, Hibernate,.. để cung cấp những tính năng cao cấp cho việc phát triển ứng dụng server mạnh mẽ hơn.

Servlet Interface và Life Cycle

Mỗi Servlet đều phải implement từ javax.servlet.Servlet interface, nhằm cung cấp những phương thức cần thiết cho việc quản lý vòng đời của servlet. Một vòng đời của Servlet bao gồm: khởi tạo servlet, nhận và hồi đáp request từ phía client, hủy servlet và giải phóng tài nguyên. Bạn có thể hiểu vòng đời của 1 servlet như sau.
  1. Servlet được tạo ra sau đó khởi tạo
  2. 0 hoặc nhiều service gọi từ phía client sẽ được xử lý
  3. Servlet bị hủy, sau đó garbage collection sẽ thực hiện trách nhiệm của nó và tài nguyên được giải phóng
Java Servlet

Trạng thái sau khi Servlet container nạp và khởi tạo servlet class và trước khi nó xử lý bất kỳ một request nào từ client được gọi là khởi tạo servlet. Việc khởi tạo 1 server tiêu tốn khá nhiều thời gian và tài nguyên. Trong giai đoạn này chúng ta có thể thiết lập ứng dụng như nạp cấu hình và đặc tính, bắt đầu các thread trợ giúp và khởi tạo các nguồn tài nguyên khác. Chính vì vậy mà trong ứng dụng Servlet người ta thường áp dụng Front Controller pattern và khởi tạo mọi thứ bằng cách ghi đè phương thức init() của Servlet. Bạn có thể tìm hiểu thêm khi muốn lập trình nâng cao về servlet.

Servlet Containers

Các servlet chạy trên một Servlet Container để xử lý phía mạng (VD. phân tách HTTP request, xử lý kết nối,...). Tomcat là một open-source được sử dụng nhiều nhất để đảm nhận phần này.

Tạo trang Hello World

Chắc hẳn ai bắt đầu làm quen với những thứ mới trong khuôn khổ lập trình thì sẽ chẳng bao giờ bỏ qua được chương trình Hello World đâu nhỉ. Bằng cách thực hiện lại các bước dưới đây các bạn sẽ tạo được trang Hello World đầu tiên khi bắt đầu với Servlet + JSP.

Điều kiện tiên quyết

Như các bạn đã biết, trước khi ta bắt đầu bước chân vào "chế biến món mới" thì đều phải có "nguyên liệu" và "vật dụng" cần thiết. Chính vì vậy nên mới sinh ra mục này. Các bạn cần chuẩn bị và cài đặt những thứ sau đây:
  1. Cài đặt Java JDK (Khuyến khích phiên bản mới nhất). Các bạn có thể tải về từ trang Oracle bằng cách nhấp vào đây.
  2. Tải về Eclipse IDE for Java EE Developers. Trong ví dụ này mình đang dùng bản Mars
  3. Tải về phiên bản ổn định mới nhất của Tomcat web server. Trong ví dụ mình đang dùng Tomcat 8
  4. Cài đặt và chắc chắn rằng nó đã chạy ổn định trên máy tính của bạn
Bước 1: Tạo dự án mới trên Eclipse bằng cách chọn File > New > Dynamic Web Project.
Tạo dự án Dynamic Web

Nếu như đây là lần đầu tiên tạo dự án web, thì trên màn hình New Web Dynamic Project, bạn phải bấm chọn New Runtime và thiết lập Tomcat cho dự án nhé.

Bước 2: Trong Java Resources-> src, tạo package và đặt tên cho nó là com.vanthuong.tutorial bằng cách nhấp chuột phải và chọn New > Package.
Cấu trúc dự án Servlet
Sau đó tạo tiếp một class mới và đặt tên cho nó là HelloWorld.java. Copy và dán mã bên dưới vào lớp HelloWorld mà bạn vừa tạo ra.

HelloWorld.java
package com.vanthuong.tutorial;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloWorld extends HttpServlet {

 private static final long serialVersionUID = 1L;

 @Override
 public void init() throws ServletException {
  // Servlet initialization code here
  super.init();
 }

 @Override
 protected void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {

  // Set response content type
  response.setContentType("text/html");

  // Actual logic goes here.
  PrintWriter out = response.getWriter();
  out.println("<h1>Hello World | VanThuong.Com</h1>");
 }

 @Override
 protected void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {

 }

 @Override
 public void destroy() {
  // resource release
  super.destroy();
 }
}
Bước 3: Trong thư mục WebContent/WEB-INF, tạo mới tập tin "web.xml" và dán vào đoạn mã bên dưới đây.

web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns="http://java.sun.com/xml/ns/javaee"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
 id="WebApp_ID" version="3.0">
 <display-name>HelloWorld</display-name>

 <servlet>
  <servlet-name>HelloWorld</servlet-name>
  <servlet-class>com.vanthuong.tutorial.HelloWorld</servlet-class>
 </servlet>
 <servlet-mapping>
  <servlet-name>HelloWorld</servlet-name>
  <url-pattern>/HelloWorld</url-pattern>
 </servlet-mapping>

</web-app>

OK, như vậy là bạn vừa thực hiện xong các bước lập trình đơn giản nhất để có được trang HelloWorld bằng Servlet. Để chạy thử ứng dụng các bạn nhấp chuột phải vào dự án > Run as > Run on server. Dưới console bạn sẽ thấy Tomcat service được khởi chạy và tự động triển khai dự án của bạn. Mở trình duyệt và gõ vào đường dẫn http://localhost:8080/HelloWorld/HelloWorld và xem kết quả nhé.
Chương trình Hello World

Chúc các bạn thành công!