Tìm hiểu về Servlet là gì? và Servlet Container là gì?

1352
04-07-2018
Tìm hiểu về Servlet là gì? và Servlet Container là gì?

Khi tìm hiểu về Web server thì còn có thêm các khái niệm về servlet và servlet container. Vậy để hiểu rõ hơn về 2 khái niệm này, chúng đóng vai trò gì và hoạt động như thế nào trong 1 web server, cùng Bizfly Cloud tìm hiểu trong bài viết sau đây.

Trước tiên để hiểu được Servlet container là gì, chúng ta cần hiểu web server là gì.

Web server là gì?

Một web server sử dụng giao thức HTTP để chuyển giao dữ liệu. Để hiểu 1 cách đơn giản, người dùng sẽ gõ 1 đường dẫn URL (ví dụ: https://tech.vccloud.vn/) trên trình duyệt của người đó và nhận về 1 trang web để xem. Vậy thì công việc của 1 web server chính là gửi trang web đó cho khách truy cập. Sự chuyển đổi trên giao thức HTTP này được gọi là một cặp: request và response tương ứng với mỗi một lần có khách truy cập vào website.

Tìm hiểu về Servlet là gì? và Servlet Container là gì? - Ảnh 1.

Servlet Container là gì?

Như chúng ta thấy, user/client (người dùng/khách truy cập trước kia chỉ có thể yêu cầu 1 web tĩnh (static web) từ server. Tuy nhiên, như vậy vẫn là chưa đủ nếu người dùng muốn đọc trang web dựa trên input của người đó. Có nghĩa là người dùng yêu cầu gì thì web làm theo như thế (web động). Ví dụ user nhập thông tin vào web và yêu cầu webserver xử lý thông tin đó.

Ý tưởng cơ bản của servlet container là sử dụng Java để tự động tạo trang web ở phía máy chủ, xử lý các yêu cầu tính toán từ phía client và trả lại các kết quả theo request của client đó. Vậy nên, servlet container thực chất là một phần của một web server tương tác với các servlet. Và đúng như tên gọi servlet container giống như 1 cái thùng chứa, chứa tất cả các servlet ở bên trong.

Servlet là gì?

Servlet là một giao diện được định nghĩa trong package javax.servlet. Nó thiết lập 3 method cần thiết cho vòng đời của một servlet - init (), service () và destroy (). Chúng được thực hiện bởi mỗi servlet và được gọi vào các thời điểm cụ thể bởi máy chủ.

Các lớp Servlet (class) cài đặt giao diện javax.servlet.Servlet chạy trong một web container thuộc một web server, đáp ứng nhiều yêu cầu của khách hàng trong cùng 1 thời điểm, được chuyển tiếp thông qua server và web server. Trình duyệt và Servlet giao tiếp với nhau bằng giao thức HTTP (1 giao thức stateless). Trình duyệt web thiết lập kết nối socket đến máy chủ lưu trữ trong URL và gửi yêu cầu HTTP. Một servlet nhận 2 đối tượng khi được gọi từ client. Một "ServletRequest", bao gồm yêu cầu của máy khách từ máy khách và "ServletResponse", gói thông tin liên lạc từ Servlet và trả lại máy khách.

Để hiểu một cách đơn giản thì khi nhận request từ máy khách, sẽ xác định thông tin request để biết được cần response gì. Và trong lập trình java, chúng ta sẽ được cung cấp một class gọi là servlet để tính toán logic quá trình tương tác HTTP (request và response). Mỗi khi có request từ client đến, web server sẽ phân tách url, http method để xác định xem nên giao request cho servlet nào trong servlet container. Và servlet tương ứng khi được giao request sẽ tiến hành logic.

Tìm hiểu về Servlet là gì? và Servlet Container là gì? - Ảnh 2.

Vòng đời của Servlet

Web container chịu trách nhiệm quản lý vòng đời của servlet. Web container tạo một phiên bản (instance) của servlet và sau đó gọi ra init () method. Khi hoàn thành init () method thì servlet đang ở trạng thái sẵn sàng cho các yêu cầu dịch vụ từ clients. Container gọi service () method của servlet để xử lý từng yêu cầu bằng cách sinh ra 1 thread mới cho mỗi yêu cầu từ thread pool của Web Container. Trước khi phá hủy instance, container sẽ gọi destroy () method. Sau khi destroy (), servlet trở thành rác chờ thu gom.

Giống như bất kỳ chương trình Java nào, servlet chạy trong một JVM. Servlet container sẽ tham gia để xử lý sự phức tạp của các HTTP rerquest. Servlet container chịu trách nhiệm cho việc tạo, thực hiện và hủy của servlet.

Tìm hiểu về Servlet là gì? và Servlet Container là gì? - Ảnh 3.

Tìm hiểu công dụng chính của Servlet

Ngoài những công dụng chính như truyền tải, đọc thông tin giữa máy chủ web và máy khách, trao đổi thông tin. Servlet còn có những công dụng cụ thể như sau:

- Servlet có khả năng truy cập vào database và xử lý các vấn đề phát sinh trong quá trình sử dụng. Thông qua yêu cầu tương tác với database, lúc này Servlet sẽ tiến hành gọi CORBA hoặc RMI hoặc thậm chí nó có thể đưa ra phản hồi trực tiếp. Việc này giúp cho kết quả xử lý dữ liệu tạo ra chính xác nhất.

- Tiếp theo, Servlet sẽ nhận các yêu cầu từ máy khách sau đó lấy thông tin từ những gì đã nhận được. Các dữ liệu sau khi được gửi từ phía trình duyệt của máy khách, Servlet sẽ tiến hành đọc và tiếp nhận xử lý.

- Servlet còn có công dụng tạo - gửi các request đến máy khách hoặc tạo ra những request mới cho JSP. 

- Đôi khi, Servlet còn có vai trò giống như một bộ phận truyền tải dữ liệu. Những dữ liệu này có thể được trình bày dưới nhiều hình thức khác nhau như XML, Excel, văn bản dạng HTML,...

Nhiệm vụ của Servlet là gì?

Sở hữu rất nhiều công dụng khác nhau, Servlet chắc chắn sẽ mang trên mình rất nhiều nhiệm vụ. Và dĩ nhiên, mỗi nhiệm vụ của Servlet sẽ là trợ thủ đắc lực giúp cho các lập trình viên hoàn thiện trang web một cách nhanh chóng, hiệu quả nhất.

Dưới đây sẽ là những nhiệm vụ cụ thể của Servlet:

- Servlet có nhiệm vụ đọc dữ liệu mà khách hàng gửi đến dù nó là một mẫu HTML trên website hay là một chương trình HTTP tuỳ chỉnh.

- Dữ liệu HTTP ẩn do trình duyệt gửi đến.

- Servlet gửi các phản hồi HTTP ẩn đến khách hàng bằng cách tương tác với trình duyệt, máy khách và những tài liệu được trả về. Tiếp theo sẽ thiết lập cookie, tham số đệm và những tác vụ tiếp theo.

- Xử lý dữ liệu: Servlet sẽ trao đổi với database sau đó tiến hành cuộc gọi với CORBA, RMI hay dịch vụ web.

- Gửi dữ liệu đến trình duyệt dưới dạng Excel, văn bản,...

Cách Servlet container và web server xử lý một request

1. Máy chủ Web nhận HTTP request

2. Máy chủ Web chuyển tiếp yêu cầu tới servlet container

3. Servlet được lấy ra một cách tự động và tải lên địa chỉ không gian của container, nếu nó nằm trong container.

4. Container gọi init () method của servlet để khởi tạo (được gọi một lần khi servlet được load lần đầu tiên)

5. Container gọi service () method của servlet để xử lý HTTP request, tức là đọc dữ liệu trong yêu cầu và hình thành một response

6. Web server trả lại kết quả động đúng với vị trí yêu cầu

Tìm hiểu về Servlet là gì? và Servlet Container là gì? - Ảnh 4.

Vai trò của JVM

Việc sử dụng các servlet cho phép JVM xử lý từng yêu cầu trong một chuỗi Java riêng biệt, và đây là một trong những lợi thế chủ đạo của servlet container. Mỗi servlet là một Java class với các phần tử đặc biệt đáp ứng các HTTP request. Chức năng chính của Servlet container là chuyển tiếp các yêu cầu tới đúng servlet để xử lý và trả về các kết quả động tại đúng vị trí sau khi JVM đã xử lý chúng. Trong phần lớn các trường hợp, servlet container chạy trong một JVM duy nhất, tuy nhiên vẫn có các giải pháp khi container cần nhiều JVM.

Nguồn: Bizfly Cloud chia sẻ

>> Có thể bạn quan tâm: Tìm hiểu Web server hoạt động như thế nào?

SHARE