Chủ Nhật, 28/06/2026, 17:00 (GMT+0)

Servlet Là Gì? Vai Trò Của Servlet Trong Java Web 2026

Quay lại Trang chủ Blog
Trên trang này

Servlet là gì là câu hỏi mà bất kỳ ai bắt đầu học lập trình web bằng Java đều gặp phải. Bài viết này giúp bạn hiểu bản chất của Servlet, vai trò của nó trong ứng dụng Java Web, cũng như cách tự tay viết một chương trình Servlet cơ bản. Đọc hết bài, bạn sẽ nắm được vòng đời Servlet và phân biệt được Servlet với JSP.

Servlet là gì?

Servlet là một lớp Java chạy phía máy chủ, có nhiệm vụ tiếp nhận yêu cầu từ client, xử lý logic và tạo phản hồi. Servlet hoạt động trong Servlet Container thuộc nền tảng Java EE, nay là Jakarta EE, và thường được sử dụng để xử lý các yêu cầu HTTP trong ứng dụng web.

Servlet được phát triển nhằm khắc phục những hạn chế của CGI truyền thống. Thay vì tạo một tiến trình mới cho mỗi yêu cầu, Servlet Container có thể xử lý nhiều yêu cầu đồng thời bằng các luồng, giúp tiết kiệm tài nguyên và cải thiện hiệu suất. Servlet Container, chẳng hạn như Apache Tomcat, chịu trách nhiệm nạp, khởi tạo, quản lý vòng đời và điều phối yêu cầu đến Servlet phù hợp.

servlet-la-gi-6.webp
Servlet là một thành phần công nghệ Java được sử dụng để mở rộng chức năng của máy chủ web

Vai trò cốt lõi của Servlet trong Java Web

Trong hệ sinh thái Java Web, Servlet là một thành phần cốt lõi của Java EE, nay là Jakarta EE, đóng vai trò nền tảng cho nhiều công nghệ web Java khác. Nó cung cấp cơ chế cơ bản để xây dựng ứng dụng web động và là nền tảng cho các công nghệ như JSP.

Sự hiện diện của Servlet giúp ứng dụng Java giao tiếp hiệu quả với trình duyệt web thông qua giao thức HTTP. Nhờ đó, lập trình viên có một môi trường ổn định để phát triển các giải pháp web dù đơn giản hay phức tạp.

servlet-la-gi-7.webp
Servlet là một thành phần cốt lõi của Java EE, nay là Jakarta EE

Cụ thể, Servlet đảm nhiệm những nhiệm vụ chính sau trong một ứng dụng Java Web:

  • Xử lý yêu cầu và phản hồi: Servlet tiếp nhận yêu cầu từ người dùng, ví dụ như gửi form đăng nhập hoặc bấm nút. Sau đó nó đọc dữ liệu, xử lý logic nghiệp vụ và gửi phản hồi (HTML, JSON) về lại trình duyệt.
  • Xử lý đa luồng: Servlet Container có thể xử lý nhiều yêu cầu đồng thời bằng các luồng trong thread pool và chuyển chúng tới cùng một Servlet instance. Vì vậy, lập trình viên cần tránh lưu dữ liệu thay đổi theo từng request trong biến instance của Servlet. 
  • Quản lý phiên làm việc: Servlet cho phép lưu trữ thông tin trạng thái của người dùng, ví dụ giỏ hàng hoặc thông tin đăng nhập, xuyên suốt nhiều trang khác nhau.
  • Tương tác cơ sở dữ liệu: Servlet thu thập thông tin đầu vào từ người dùng, thực hiện truy vấn cơ sở dữ liệu và trả kết quả hiển thị cho người dùng.
  • Kiểm soát luồng ứng dụng: Servlet đóng vai trò điều hướng, chuyển hướng hoặc phân phối yêu cầu đến các tài nguyên khác như JSP hoặc một Servlet khác.
servlet-la-gi-2.webp
Kiến trúc của Servlet

Quy trình hoạt động của Servlet

Khi người dùng gửi một yêu cầu thông qua trình duyệt, máy chủ sẽ thực hiện tuần tự các bước sau để trả về kết quả.

  • Tiếp nhận yêu cầu: Bộ quản lý Servlet trên máy chủ nhận yêu cầu HTTP gửi đến từ người dùng.
  • Tạo hoặc gọi Servlet: Bộ quản lý kiểm tra xem Servlet đã được nạp vào bộ nhớ hay chưa. Nếu chưa, nó sẽ nạp và khởi tạo Servlet tương ứng.
  • Xử lý logic: Bộ quản lý tạo một luồng mới và gọi phương thức xử lý chính. Servlet đọc dữ liệu yêu cầu, tương tác với cơ sở dữ liệu nếu cần, rồi chuẩn bị dữ liệu phản hồi.
  • Trả về kết quả: Servlet gửi kết quả trả về cho người dùng thông qua phản hồi HTTP, hiển thị trên trình duyệt.
servlet-la-gi-5.webp
Quy trình hoạt động của Servlet

Các chức năng nổi bật của Servlet

Servlet là chương trình Java chạy trên máy chủ, hoạt động như tầng trung gian cốt lõi để phát triển ứng dụng web. Dưới đây là năm chức năng nổi bật và quan trọng nhất của Servlet.

Xử lý yêu cầu và phản hồi

Servlet tiếp nhận các yêu cầu HTTP từ trình duyệt của người dùng, ví dụ như form đăng nhập hay dữ liệu truyền tải. Sau khi đọc và phân tích dữ liệu, nó tạo nội dung phản hồi như HTML, JSON hoặc XML để trả về cho trình duyệt.

Điều phối luồng trong mô hình MVC

Trong kiến trúc mô hình - khung nhìn - bộ điều khiển, Servlet đóng vai trò bộ điều khiển. Nó nhận lệnh từ người dùng, gọi các logic nghiệp vụ, cập nhật dữ liệu rồi lựa chọn trang hiển thị phù hợp để trả về.

Quản lý trạng thái phiên làm việc

Giao thức HTTP vốn không lưu trạng thái, nhưng Servlet có khả năng theo dõi phiên làm việc của từng người dùng thông qua session hoặc cookie. Nhờ vậy, thông tin như giỏ hàng hay trạng thái đăng nhập được giữ lại xuyên suốt nhiều trang.

Tương tác với cơ sở dữ liệu

Servlet có thể kết nối trực tiếp với cơ sở dữ liệu như MySQL, Oracle, SQL Server thông qua JDBC. Nó cũng có thể giao tiếp với các thành phần khác để thực hiện những nghiệp vụ phức tạp hơn.

Tạo nội dung động linh hoạt

Servlet có khả năng tạo nội dung HTML trực tiếp trong mã Java, hoặc kết hợp cùng JSP để tách biệt phần xử lý logic và phần giao diện. Cách kết hợp này giúp trang web tương tác theo thời gian thực với người dùng.

Các giai đoạn vòng đời của Servlet

Servlet Container (ví dụ Tomcat, Jetty) là thành phần chịu trách nhiệm quản lý toàn bộ vòng đời của một Servlet, từ lúc sinh ra đến lúc bị huỷ. Quá trình này gồm 4 giai đoạn nối tiếp nhau như sau:

  1. Nạp lớp và khởi tạo đối tượng: Khi có yêu cầu sử dụng đến Servlet, Container sẽ nạp lớp Servlet tương ứng vào bộ nhớ, sau đó tạo ra một đối tượng (instance) duy nhất từ lớp đó. Đối tượng này sẽ được tái sử dụng cho tất cả các yêu cầu sau này, thay vì tạo mới mỗi lần.
  2. Khởi tạo cấu hình ban đầu: Ngay sau khi đối tượng được tạo, Container gọi phương thức init() đúng một lần duy nhất trong suốt vòng đời Servlet. Đây là bước thiết lập các thông số, kết nối hoặc tài nguyên cần thiết trước khi Servlet có thể tiếp nhận và xử lý yêu cầu từ client.
  3. Tiếp nhận và xử lý yêu cầu: Đây là giai đoạn hoạt động chính, lặp đi lặp lại trong suốt thời gian sống của Servlet. Mỗi khi có yêu cầu mới từ client, Container mở một luồng (thread) riêng và gọi phương thức service(). Phương thức này đọc loại yêu cầu (GET, POST, PUT...) rồi tự động điều hướng sang hàm xử lý phù hợp, như doGet() hay doPost(), để trả kết quả tương ứng.
  4. Giải phóng và huỷ bỏ: Khi ứng dụng ngừng hoạt động hoặc Servlet không còn được sử dụng, Container gọi phương thức destroy() một lần cuối để dọn dẹp các tài nguyên đang chiếm giữ (kết nối, bộ nhớ đệm...). Sau bước này, đối tượng Servlet coi như hết vòng đời và sẽ được bộ thu gom rác (Garbage Collector) của JVM tự động giải phóng khỏi bộ nhớ.

Toàn bộ 4 giai đoạn trên đều diễn ra bên trong môi trường JVM, dưới sự kiểm soát của container. Container không chỉ quản lý vòng đời Servlet mà còn xử lý các nghiệp vụ liên quan đến HTTP request, đảm bảo việc tạo, thực thi và huỷ Servlet diễn ra an toàn, ổn định và không gây rò rỉ tài nguyên.

Tại sao nên chọn Servlet?

Vì Servlet giải quyết được đúng những điểm yếu của CGI (Common Gateway Interface, công nghệ xử lý phía server cho web động ra đời trước Servlet):

  • Tiết kiệm tài nguyên hơn: CGI tạo và huỷ một tiến trình (process) riêng cho mỗi request, còn Servlet chạy dưới dạng luồng (thread) trong cùng một tiến trình, không phải khởi tạo lại từ đầu mỗi lần có yêu cầu, nên nhẹ và nhanh hơn nhiều.
  • Chịu tải tốt hơn khi lượng truy cập tăng: Do không phải sinh tiến trình mới liên tục, Servlet mở rộng tốt hơn CGI khi số lượng client tăng lên.
  • Có tính di động (portable): Servlet chạy trên bất kỳ Servlet Container nào tuân theo chuẩn Jakarta (Tomcat, Jetty...), trong khi CGI phụ thuộc nhiều vào hệ điều hành và cấu hình server cụ thể.
  • Chia sẻ dữ liệu được giữa các request: Servlet cho phép dùng chung tài nguyên, biến, kết nối... giữa các lần gọi, còn mỗi tiến trình CGI hoạt động độc lập, không chia sẻ được gì.
  • Giao tiếp trực tiếp với webserver: Servlet nói chuyện thẳng với webserver, không cần lớp trung gian như CGI.
  • Hỗ trợ cookie, chi phí vận hành thấp hơn: Servlet quản lý cookie sẵn trong API. CGI không hỗ trợ và tốn chi phí vận hành hơn do phải sinh tiến trình liên tục.

Phân biệt Servlet và JSP

Servlet là các lớp Java thuần tuý dùng để xử lý logic, còn JSP là công nghệ dạng HTML được nhúng mã Java để hiển thị giao diện. Servlet biên dịch thành mã bytecode ngay từ đầu, còn JSP cần chuyển đổi thành Servlet trước khi thực thi.

Tiêu chí

Servlet

JSP

Bản chấtLà một lớp Java thuần túy chạy trên máy chủLà tệp văn bản có cấu trúc HTML được nhúng các đoạn mã Java
Vai tròĐóng vai trò Bộ điều khiển (Controller), chuyên nhận yêu cầu, xử lý logic, gọi cơ sở dữ liệuĐóng vai trò Khung nhìn (View), chuyên dùng để hiển thị giao diện và trả kết quả về cho người dùng
Mã nguồnChứa chủ yếu code Java. Mã HTML phải viết dưới dạng chuỗi out.print() nên rất khó đọc và khó bảo trì giao diệnChứa chủ yếu code HTML. Các đoạn code Java được đưa vào các thẻ đặc biệt (ví dụ <% %>) giúp dễ thiết kế giao diện hơn
Hiệu suấtTốc độ phản hồi nhanh ngay từ đầu vì là mã Java đã được biên dịch sẵn thành bytecode.Phản hồi chậm hơn ở lần chạy đầu tiên (do phải dịch ra Servlet rồi mới biên dịch), nhưng các lần chạy sau có tốc độ tương đương Servlet
Vòng đờiQuản lý bởi các phương thức: init(), service(), destroy()Được bộ quản lý tự động chuyển đổi thành Servlet, vòng đời quản lý bởi: jspInit(), _jspService(), jspDestroy()

 

Nắm vững Servlet là gì, vai trò và vòng đời của nó chính là bước nền tảng để bạn hiểu sâu hơn về Java Web. Dù ít khi viết Servlet thuần trong dự án thực tế hiện đại, kiến thức này vẫn giúp bạn gỡ lỗi nhanh hơn và thiết kế hệ thống backend Java vững chắc hơn.

#Server
#Server
Sovereign Cloud không chỉ là đặt máy chủ trong nước. Với bối cảnh pháp lý dữ liệu mới tại Việt Nam, đây đang trở thành bài toán hạ tầng quan trọng cho doanh nghiệp Việt và doanh nghiệp nước ngoài hoạt động tại Việt Nam
Sovereign Cloud - Đám mây chủ quyền là gì? Và vì sao doanh nghiệp hoạt động tại Việt Nam nên quan tâm từ bây giờ?
Tiếp tục đọc