TiiL Tutorials
@TinhocTiiL

Bài 2 – Cơ bản về Servlet

Đặ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

Avatar
https://khoacntt.ntu.edu.vn/giang-vien/mai-cuong-tho

một GV Đại học. TiiL đã phụ trách một số môn học như: Lập trình Java, Phát triển web với Java, Lập trình thiết bị di động, Lập trình hệ thống nhúng và IoT.

Comments are closed.