Bài 2 – Cơ bản về Servlet
11/02/2022, bởi Thầy TiiL trong mục: Phát triển Webapp với JavaCác chủ đề chính
Đặc điểm của công nghệ web tĩnh
Chỉ chứa các nội dung cố định, Khó cập nhật nội dung, khó nâng cấp mở rộng nên chỉ thích hợp với những doanh nghiệp nhỏ, Không thân thiện với người dùng, người dùng muốn cập nhật, thêm mới thông tin thì phải hiểu biết ngôn ngữ lập trình HTML, Khả năng tương tác yếu.
Sự tiến hóa của công nghệ web
Do đó phát sinh nhu cầu sử dụng trang web như một ứng dụng:
- Kết nối đến CSDL, do đó web có thể lưu trữ lượng thông tin lớn
- Nhận yêu cầu từ phía client, xử lý và tính toán trên server
- Nhiều người có thể cùng lúc cập nhật, thêm mới dữ liệu cho web mà không cần hiểu biết ngôn ngữ lập trình
Có rất nhiều công nghệ để cho phép ta đưa ứng dụng vào chạy trong môi trường web như: CGI, ASP, ISAPI, JSP, Servlet… trong số đó có JSP/Servlet là công nghệ của Java
CGI là gì?
- Là một chuẩn để viết ứng dụng web, được lập trình bằng C, C++ hoặc Perl.
- CGI cho phép máy chủ web gọi chương trình bên ngoài và chuyển thông tin yêu cầu tới một chương trình bên
ngoài khác để xử lý. - Với mỗi yêu cầu, chương trình CGI sẽ khởi tạo một tiến trình mới
Nhược điểm của CGI
1. Nếu số client tăng thì thời gian trả lời yêu cầu từ client tăng lên
2. Với mỗi yêu cầu, nó khởi tạo một tiến trình trong khi máy chủ Web bị hạn chế về tài nguyên
Servlet là gì?
- Servlet là các đối tượng Java, mở rộng chức năng của một HTTP server, do đó được viết bằng ngôn ngữ Java
- Là những chương trình độc lập platform và chạy phía server
- Cơ chế hoạt động theo mô hình CGI mở rộng
- Với mỗi yêu cầu web, có luồng riêng để xử lý (thay vì 1 tiến trình như CGI)
- Chương trình servlet:
- Thường extends class HttpServlet. Không có method main
- Phải được dịch ra ở dạng byte-code và khai báo với web server
Servlet có nhiều ưu điểm so với CGI.
• Hiệu suất xử lý tốt hơn(better performance): vì nó tạo ra một thread cho một yêu cầu chứ không phải tiến
trình.
• Khả chuyển: bởi vì servlet được phát triển từ ngôn ngữ Java
• Mạnh(Robust): Servlet được quản lý bởi JVM, JVM chủ động quản lý bộ nhớ và thu thập rác.
• An toàn(Secure): bởi vì Java là ngôn ngữ an toàn
Vòng đời của servlet
Có 5 bước:
• Tải Servlet Class vào bộ nhớ.
• Tạo đối tượng Servlet.
• Gọi method servlets init()
• Gọi method servlets service().
• Gọi method servlets destroy()
Bước 1, 2 và 3 được thực thi một lần duy nhất, khi mà servlet được nạp lần đầu. Mặc định các servlet không được tải lên cho tới khi nó nhận một đòi hỏi đầu tiên từ người dùng. Ta có thể buộc ServletContainer (Bộ chứa các servlet) tải các servlet khi nó khởi động.
Bước 4 được thực thi nhiều lần, mỗi khi có đòi hỏi từ phía người dùng tới servlet.
Bước 5 nó được thực thi khi bộ chứa servlet (ServletContainer) trút bỏ (unloaded) servlet
Các phương thức trong vòng đời Servlet
- init()
- được gọi một lần khi một instance của servlet được tạo lần đầu tiên
- thường được sử dụng để thực hiện các khởi tạo, ví dụ kết nối CSDL
- destroy()
- được gọi trước khi hủy một instance của servlet
- thường được sử dụng để thực hiện các thao tác dọn dẹp, ví dụ đóng kết nối CSDL đã mở
- service()
- được gọi mỗi khi có request từ client đến. Tùy vào các tình huống cụ thể nó gọi đến một trong các method doGet(..), doPost(…),
- Tại các servlet của bạn, ta phải ghi đè và xử lý tại các method này
Ví dụ Servlet
- Tạo dự án Dynamic web, sau đó thêm vào dự án một Servlet, và code như sau
package TiiL; import java.io.IOException; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class hello */ @WebServlet("/hello") public class hello extends HttpServlet { private static final long serialVersionUID = 1L; private String chuoiThongBao; // Khai baos toanf cucj /** * Default constructor. */ public hello() { // TODO Auto-generated constructor stub } /** * @see Servlet#init(ServletConfig) */ public void init(ServletConfig config) throws ServletException { chuoiThongBao = "Hello Servlet!"; } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub response.setContentType("text/html"); response.getWriter().print("<h1>"+chuoiThongBao+"<h1>"); } }
Tải mã nguồn tại đây
Full video hướng dẫn tại đây
Thẻ:Java WebBài viết liên quan
- Bài 1 - Tổng quan vể phát triển ứng dụng web với Java EE [Phát triển Webapp với Java]
- Bài 1TH - Eclipse IDE và Tomcat Server [Phát triển Webapp với Java]
- Bài 4 - Spring MVC (maven)- ví dụ Hello [Phát triển Webapp với Java]