Servlet là gì? Công dụng Servlet và Phân biệt giữa JSP và Servlet
Công nghệ Servlet được các lập trình viên dùng để xây dựng những ứng dụng website. Chúng tồn tại trên máy chủ, nhằm thực hiện việc tạo ra trang web động.
https://hostingviet.vn/servlet-la-gi
Công nghệ Servlet được các lập trình viên dùng để xây dựng những ứng dụng website. Chúng tồn tại trên máy chủ, nhằm thực hiện việc tạo ra trang web động. Chia sẻ sau của Hosting Việt sẽ giúp bạn hiểu rõ hơn về Servlet là gì và điểm khác biệt của nó so với JSP (Java server page) nhé.
Servlet là gì?
Tùy theo ngữ cảnh sử dụng mà Servlet được định nghĩa bằng nhiều cách khác nhau như:
- Servlet chính là công nghệ được dùng để thiết lập ra các ứng dụng web.
- Servlet được xem là một API cung cấp các interface, lớp và cả các tài liệu.
- Servlet cũng là một thành phần website được lập trình viên triển khai trên máy chủ, phục vụ cho mục đích tạo các trang web động.
Với Servlet, bạn được phép thu thập dữ liệu đầu vào của người dùng thông qua website. Cụ thể, chúng sẽ hiển thị bản ghi từ một nguồn cơ sở dữ liệu hay từ nguồn khác.
Servlet sử dụng công nghệ mạnh mẽ và cho phép mở rộng. Mặc dù trước khi Servlet ra đời, đã có ngôn ngữ kịch bản CGI (viết tắt của Common Gateway Interface) được dùng làm ngôn ngữ lập trình phổ biến, tuy nhiên, nó vẫn còn tồn tại nhiều bất cập. Do đó, Servlet được nghiên cứu và phát triển để có thể khắc phục những hạn chế mà CGI mang lại.
Công dụng Servlet là gì?
- Nhận request từ client và lấy các thông tin từ request đã nhận: Servlet sẽ thực hiện chức năng đọc dữ liệu đã nhận được từ trình duyệt khách hàng truy cập gửi.
- Truy cập database để xử lý các nghiệp vụ và những phát sinh: Thông qua việc yêu cầu tương tác với cơ sở dữ liệu, thực hiện cuộc gọi RMI hoặc CORBA, gọi dịch vụ web hoặc thậm chí là phản hồi trực tiếp để xử lý các dữ liệu, tiếp đến tạo ra kết quả tương ứng.
- Thực hiện việc tạo, sau đó gửi request đến client hay tạo một request mới đến Servlet và JSP mới: Servlet đóng vai trò gửi dữ liệu rõ ràng đến người dùng (trình duyệt) thể hiện dưới nhiều hình thức như văn bản dạng HTMLL hoặc XML, hình ảnh Gif, excel… Đồng thời, nó còn gửi cả phản hồi HTTP ẩn cho trình duyệt. Hoạt động này được hiểu là nó trao đổi với trình duyệt và các trình khác về định dạng những tài liệu được trả về, thiết lập cookie cũng như tham số cho bộ nhớ đệm, ngoài ra còn có thêm nhiều tác vụ khác.
Môi trường làm việc của Servlet
Một Servlet chính là một lớp Java nên nó cần được thực thi trên máy ảo Java (gọi là JVM) thông qua một dịch vụ có tên là Servlet engine. Theo đó, Servlet engine sẽ thực hiện tải lớp Servlet đầu tiên mà nó được yêu cầu hoặc tại thời điểm khi servlet engine bắt đầu. Tiếp đến, servlet sẽ ngừng tải để tập trung nguồn lực xử lý các yêu cầu khi Servlet engine bị dừng hoặc tắt.
Nói tóm lại, về lý thuyết, JSP chính là phần mở rộng của Servlet. Tuy nhiên, thực tế chúng được sử dụng đồng thời nhằm phục vụ cho việc phát triển các ứng dụng web. Cụ thể, JSP là đại diện của trang web, còn Servlet chính là đại diện cho thành phần Java.
Servlet viết code Java dễ dàng nên người mới làm quen với Java web sẽ thấy dễ dàng và không gặp trở ngại. Bù lại viết code HTML bằng Servlet rất khó khăn. Còn JSP thì ngược lại, nó viết code HTML dễ nhưng code Java cực kỳ khó. Do đó, sử dụng cả hai để bổ trợ và tạo sự thuận tiện cho lập trình viên.
Tìm hiểu vòng đời của Servlet
Web container có nhiệm vụ quản lý vòng đời của một Servlet. Nó sẽ tạo ra một phiên bản Servlet, rồi gọi ra init () method. Khi init () method được hoàn thành, Servlet sẽ ở trạng thái sẵn sàng cho bất kỳ yêu cầu dịch vụ nào đã nhận được từ clients.
Còn Container thực hiện xử lý yêu cầu thông qua việc tạo ra một thread mới cho từng yêu cầu mà nó được nhận từ thread pool trong Web Container, và sau khi nó tiến hành gọi service () method của Servlet. Trước khi tiến hành phá hủy instance, Container sẽ thực hiện lệnh gọi destroy () method. Sau khi phá hủy, Servlet bị chuyển thành rác chờ thu gom.
Tương tự như các chương trình Java khác, Servlet được chạy trong JVM. Trong khi đó, Servlet Container tham gia giải quyết những vấn đề phức tạp của HTTP rerquest. Nó cũng chịu trách nhiệm tạo, thực hiện cũng như hủy Servlet.
Phương thức xử lý một request của Servlet container và web server
Để xử lý một request bất kỳ, Servlet Container và web server trải qua các bước sau:
- Bước 1: Đầu tiên, máy chủ Web sẽ thực hiện nhận HTTP request.
- Bước 2: Web server chuyển tiếp yêu cầu đã nhận đến Servlet Container.
- Bước 3: Servlet tự động tiến hành lấy yêu cầu rồi tải chúng lên địa chỉ không gian Container (áp dụng trong trường hợp nó thuộc Container).
- Bước 4: Container thực hiện lệnh gọi init () method của Servlet (chỉ gọi một lần khi Servlet tải lên lần đầu) để khởi tạo.
- Bước 5: Container tiến hành gọi service () method của Servlet nhằm mục đích xử lý HTTP request. Điều này có nghĩa, chúng thực hiện việc đọc toàn bộ dữ liệu có trong yêu cầu, sau đó hình thành một response.
- Bước 6: Cuối cùng, máy chủ Web trả lại kết quả động tương ứng với vị trí yêu cầu.
Vai trò của JVM Servlet là gì?
Sử dụng Servlet cho phép JVM có thể tiến hành xử lý từng yêu cầu riêng lẻ trong mỗi chuỗi Java riêng biệt. Đây cũng là lợi thế nổi bật mà Servlet Container mang lại. Theo đó, một Servlet chính là một lớp Java có các phần tử đặc biệt nhằm dễ dàng đáp ứng được HTTP requests. Lúc này, vai trò của Servlet Container là thực hiện chuyển tiếp những yêu cầu đến chính xác Servlet xử lý, đồng thời trả lại kết quả động tại vị trí tương ứng sau khi JVM hoàn tất xử lý chúng.
Hầu hết Servlet Container chỉ chạy trong duy nhất một JVM, tuy nhiên trong thực tế vẫn có một số ít trường hợp Servlet Container cần nhiều JVM.
JSP Servlet là gì?
JSP tag đặc biệt phần lớn đều bắt đầu bằng ký tự <% và kết thúc bằng ký tự %>.
Trong các ứng dụng mvc pattern, JSP được dùng làm view. Thực tế, JSP hoàn toàn có thể đáp ứng được các yêu cầu khác. Tuy nhiên để thuận tiện trong công tác debug và tái sử dụng những đoạn mã thì hầu hết lập trình viên dùng JSP làm view, Servlet làm controller.
Các thành phần của một trang JSP Servlet là gì?
Một trang JSP gồm các phần sau:
- Thẻ Root: Đây là thẻ chứa các thuộc tính và tất cả thông tin của một trang JSP.
- Comment: Tương tự trang HTML, bạn hoàn toàn có thể sử dụng tính năng comment trong JSP với kí hiệu là <! your comment –>
- Declaration: Đây là thành phần dùng để khai báo các biến hoặc phương thức của Java có trong trang JSP. Tuy nhiên, bạn cần lưu ý là nếu khai báo quá nhiều sẽ xảy ra tình trạng nhầm lẫn code JSP với code Java. Cú pháp khai báo của nó: <%! your code %>
- Expression: Thành phần này được dùng để chèn trực tiếp một giá trị vào trang.
- Thẻ biểu thức JSP: Đây là thành phần được dùng để đánh giá biểu thức, cũng như định hướng các output đến trình duyệt website thích hợp. Cú pháp của nó là: <%= your code %>
- Directive Elements
Ưu điểm của JSP Servlet là gì?
- Nhờ có một phần mở rộng cho Java nên JSP dễ dàng sử dụng các tính năng của Java Servlet là gì. Bên cạnh đó, các thẻ tùy chỉnh cũng được dùng cùng với chúng.
- Khi có sự thay đổi thì người dùng không cần biên dịch lại JSP. Bởi khi JSP chạy, những thay đổi này sẽ tự động xuất hiện.
- Các thẻ dễ hiểu và dễ viết.
- Có khả năng hỗ trợ Java API nên lập trình viên dễ dàng sử dụng và thuận tiện trong việc tích hợp cùng với mã HTML.
- Tất cả kết quả trả về đều có định dạng HTML nên dễ dàng mở được trên mọi trình duyệt.
- Thẻ JSP tùy chỉnh dễ sử dụng, điển hình như thẻ có XML.
- Dễ dàng thêm thay đổi vào business logic page, đem đến sự thuận tiện cho người dùng hơn. Bởi nó đã loại bỏ được thao tác thay đổi trong từng trang.
Nhược điểm của JSP Servlet là gì?
- Theo lý thuyết, người dùng có thể truy cập cơ sở dữ liệu bằng JSP nhưng thực tế khó thực hiện vì phần các servlet không hỗ trợ.
- JSP thực chất cũng là một servlet nên trong trường hợp code có vấn đề thì rất khó theo dõi.
- Thời gian biên dịch JSP lâu.
Phân biệt giữa JSP và Servlet
Dù JSP có bản chất là một Servlet nhưng nó cũng có nhiều điểm khác biệt so với Servlet. Vậy điểm khác biệt với Servlet là gì? Đó chính là những điểm sau:
- JSP là mã dựa trên HTML, còn Servlet là mã Java.
- Mã của JSP là Java trong HTML nên viết khá dễ, còn Servlet là HTML trong Java nên viết mã khó hơn.
- JSP tiếp cận MVC và hiển thị đầu ra, còn Servlet điều khiển cách tiếp cận MVC.
- Bước đầu tiên của JSP là dịch mã Java rồi biên dịch nên JSP làm việc chậm hơn so với Servlet.
- JSP chỉ chấp nhận duy nhất yêu cầu của giao thức HTTP. Trong khi đó, Servlet chấp nhận được tất cả yêu cầu của các giao thức.
- JSP không cho phép người dùng ghi đè lên phương thức service (), còn Servlet thì cho phép.
- JSP bật tự động quản lý phiên. Đối với Servlet thì người dùng phải thực hiện thao tác bật quản lý phiên.
- Bằng cách dùng JavaBeans, trong logic nghiệp vụ, người dùng có thể tách JSP khỏi logic trình bày. Còn với Servlet thì người dùng phải thực hiện cả logic nghiệp vụ lẫn logic trình bày.
- JSP có khả năng sửa lỗi nhanh thông qua việc người dùng chỉ cần nhấn vào nút làm mới. Ngược lại, Servlet sẽ khiến các lập trình viên tiêu tốn nhiều thời gian, vì nó phải trải qua các hoạt động như tải lại, tái biên dịch và tái khởi động máy chủ.