JSP-Giới thiệu JSP

JSP (JavaServer Pages) là một công nghệ được sử dụng để tạo các trang web động trong Java. JSP được sử dụng để tách biệt nội dung và giao diện của trang web. Nó cho phép lập trình viên tạo các trang web động một cách dễ dàng bằng cách sử dụng các thẻ và biểu thức được nhúng trong HTML.

Trong một trang JSP, các mã Java có thể được nhúng vào HTML bằng cách sử dụng các thẻ JSP. Ví dụ, để hiển thị một thông báo chào mừng cho người dùng, bạn có thể sử dụng đoạn mã sau:

<html>
   <body>
      <h2>Hello, <%= request.getParameter("name") %>!</h2>
   </body>
</html>

Trong đoạn mã này, <%= %> là một thẻ JSP được sử dụng để nhúng mã Java vào HTML. request.getParameter("name") là một biểu thức Java được sử dụng để lấy giá trị của tham số name được gửi đến từ yêu cầu.

JSP cũng hỗ trợ các thẻ đặc biệt để sử dụng các thư viện Java và JSP. Các thẻ này bao gồm:

  • <%@ page %>: định nghĩa các thuộc tính của trang JSP, chẳng hạn như ngôn ngữ lập trình, thư mục gốc và các thông số khác.
  • <%@ include %>: chèn nội dung của một tệp JSP hoặc HTML khác vào trang JSP hiện tại.
  • <%@ taglib %>: định nghĩa một thư viện JSP sử dụng các thẻ tùy chỉnh.

Để triển khai một trang JSP, bạn cần sử dụng một máy chủ web như Apache Tomcat hoặc Jetty. Trang JSP sẽ được biên dịch thành mã servlet và chạy trên máy chủ web. Trong tệp web.xml của ứng dụng web, bạn cần chỉ định URL mà trang JSP được phục vụ.

Ví dụ, để phục vụ trang JSP có tên là hello.jsp tại địa chỉ http://localhost:8080/myapp/hello, bạn có thể thêm các cấu hình sau vào tệp web.xml:

<servlet>
   <servlet-name>helloJsp</servlet-name>
   <jsp-file>/hello.jsp</jsp-file>
</servlet>

<servlet-mapping>
   <servlet-name>helloJsp</servlet-name>
   <url-pattern>/hello</url-pattern>
</servlet-mapping>

Trong ví dụ này, helloJsp là tên của servlet được tạo ra từ trang JSP hello.jsp.

JSP-Mối quan hệ JSP và Servlet

Servlet và JSP là hai công nghệ quan trọng trong phát triển ứng dụng web Java. Cả hai công nghệ đều được sử dụng để tạo ra các trang web động trong Java, tuy nhiên có mối quan hệ khác nhau như sau:

  • Servlet là một thành phần lập trình được sử dụng để xử lý các yêu cầu HTTP và tạo ra các phản hồi tương ứng. Servlet có thể sử dụng để lấy dữ liệu từ cơ sở dữ liệu, xử lý các yêu cầu và trả về kết quả phù hợp. Servlet có thể tạo ra động các phản hồi HTML, JSON, XML hoặc bất kỳ loại phản hồi nào khác. Servlet thường được sử dụng để xử lý các tác vụ nghiêm túc như xác thực người dùng, kiểm tra lỗi và tạo trang web động.
  • JSP là một công nghệ mẫu dựa trên servlet được sử dụng để tạo ra các trang web động bằng cách sử dụng các thẻ và biểu thức được nhúng trong HTML. JSP cho phép các lập trình viên tách biệt nội dung và giao diện của trang web. Nó cho phép lập trình viên tạo các trang web động một cách dễ dàng bằng cách sử dụng các thẻ và biểu thức được nhúng trong HTML.

Mối quan hệ giữa Servlet và JSP là:

  • Servlet và JSP đều được sử dụng để tạo ra các trang web động bằng cách sử dụng Java.
  • Servlet thường được sử dụng để xử lý các yêu cầu và trả về các phản hồi tương ứng, trong khi JSP được sử dụng để tạo giao diện cho các trang web.
  • Servlet và JSP thường được sử dụng cùng nhau để tạo ra các ứng dụng web động phức tạp. Servlet được sử dụng để xử lý các tác vụ nghiêm túc và JSP được sử dụng để tạo giao diện cho các trang web. Thông thường, Servlet sẽ truyền dữ liệu vào JSP, JSP sẽ hiển thị các thông tin này trên trang web và sau đó trả về các kết quả được nhập từ người dùng về Servlet để xử lý các yêu cầu.

Vòng đời (Life Cycle) trong JSP

Vòng đời (Life Cycle) của JSP

Biên dịch JSP

Khi môt trình duyệt yêu cầu một JSP, đầu tiên JSP engine kiểm tra để biết có hay không nó cần biên dịch trang này. Nếu trang chưa được biên dịch, hoặc nếu JSP đã được sửa đổi từ lần sửa đổi cuối cùng, thì JSP engine biên dịch trang này.

Tiến trình biên dịch gồm 3 bước:

  • Parse một JSP
  • Biên dịch JSP thành một Servlet
  • Biên dịch Servlet đó.

Khởi tạo JSP

Khi một container tải một JSP, nó gọi phương thức jspInit() trước khi phục vụ bất kỳ yêu cầu nào. Nếu bạn cần thực hiện sự khởi tạo JSP riêng, ghi đề phương thức jspInit():

public void jspInit(){
  // Initialization code...
}

Nét đặc trưng là, việc khởi tạo được thực hiện chỉ một lần và với phương thức int của Servlet, nói chung bạn khởi tạo các kết nối Database, mở các file, và tạo các bảng tra cứu trong phương thức jspInit.

Thực thi JSP

Giai đoạn này trong vòng đời JSP biểu diễn tất cả các tương tác với Request tới khi JSP đó bị hủy.

Bất cứ khi nào một trình duyệt yêu cầu một JSP và trang đã được tải và được khởi tạo, thì JSP engine triệu hồi phương thức _jspService() trong JSP đó.

Phương thức _jspService() nhận một HttpServletRequest và một HttpServletResponse như là các tham số của nó.

void _jspService(HttpServletRequest request, 
                 HttpServletResponse response)
{
   // Service handling code...
}

Phương thức _jspService() của một JSP được triệu hồi một lần cho mỗi yêu cầu và nó chịu trách nhiệm tạo Response cho Request đó và phương thức này cũng chịu trách nhiệm tạo các phản hồi tới tất cả 7 phương thức của HTTP, ví dụ: GET, POST, DELETE, …

Hủy JSP

Giai đoạn hủy một JSP trong vòng đời JSP biểu thị khi nào thì một JSP bị gỡ bỏ khỏi một container.

Phương thức jspDestroy() trong JSP là phương thức hủy tương đương với trong Servlet. Ghi đè phương thức jspDestroy khi bạn cần thực hiện bất kỳ quá trình hủy nào, ví dụ như giải phóng kết nối với Database, hoặc đóng các file.

Phương thức jspDestroy() có form sau:

public void jspDestroy()
{
   // Your cleanup code goes here.
}