Sunday, February 26, 2017

JSP life cycle

JSP life cycle





I. JSP (JavaServer Pages)


1. JSP là gì ????



- JavaServer Pages (JSP) là một công nghệ lập trình Server-Side mà cho bạn khả năng xây dựng các ứng dụng trên Web động, độc lập nền tảng. JSP có quyền truy cập tới toàn bộ gia đình Java APIs, bao gồm JDBC API để truy cập Enterprise Database.

2. Tại sao phải dùng JSP?



  • Sử dụng JSP, bạn có thể thu thập input từ người dùng thông qua các Webpage Form, trình bày các record từ một Database hoặc đăng ký quyền ưu tiên của người dùng, truy cập các thành phần JavaBeans, truyền điều khiển giữa các page và chia sẻ thông tin giữa các Request, page, …
  • Hiệu năng tốt hơn đáng kể bởi vì JSP cho phép nhúng các phần tử động trong chính các HTML page thay vì phải có một CGI file riêng biệt.
  • JSP luôn luôn được biên dịch trước khi nó được xử lý bởi Server, không giống như CGI/Perl mà yêu cầu Server tải một trình thông dịch (Interpreter) và Target Script mỗi khi trang được yêu cầu.
  • Các JSP page có thể được sử dụng để kết nối với Servlet mà xử lý Business logic, mô hình được hỗ trợ bởi Java Servlet.


II. JSP Life Cycle


- Vòng đời của JSP có thể được định nghĩa như là toàn bộ tiến trình từ khi tạo ra đến khi hủy nó, tương tự như vòng đời của một Servlet, nhưng thêm một bước để biên dịch một JSP thành Servlet.

Life cycle of a JSP Page
  • Translation of JSP Page to Servlet
  • Compilation of JSP Page
  • Classloading (class file is loaded by the classloader)
  • Instantiation (Object of the Generated Servlet is created).
  • Initialization ( jspInit() method is invoked by the container).
  • Reqeust processing ( _jspService() method is invoked by the container).
  • Destroy ( jspDestroy() method is invoked by the container).




- Với request đầu tiên sau khi được deploy, JSP phải trải qua 2 step là translationcompilation
  • Translation: translate jsp sang servlet. JSP syntax được kiểm tra tại step này
  • Compilation: container compile servlet sang bytecode (.class file). Java language/syntax được kiểm tra tại step này.




- JSP translate thành Servlet bao gồm 3 methods :

  • jspInit(): được gọi bởi init() method (từ HttpServlet), method này có thể được override.
  • jspDestroy(): được gọi bởi destroy() method, method này cũng có thể được override.
  • _jspService(): được gọi bởi service() method, method này không nên override.


- Sau đây là các giai đoạn chính trong vòng đời của JSP
  • Biên dịch
  • Khởi tạo
  • Thực thi
  • Hủy

1. Biên dịch


- 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.

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 đó.


- Các file JSP được dịch thành mã Servlet. Sau đó mã này mới được biên dịch tiếp.
- Thực hiện tự động nhờ container, ở lần đầu tiên trang JSP được truy cập (hoặc khi chỉnh sửa).
- Dữ liệu được chuyển thành mã java, tác động tới output stream trả dữ liệu về cho client.
- Các phần tử JSP được xử lý khác nhau:
  • Các chỉ dẫn (Directives) được dùng để điều khiển Web container biên dịch và thực thi trang JSP.
  • Phần tử Scripting được thêm vào lớp servlet tương ứng của trang JSP.
  • Phần tử dạng <jsp:xxx .../> được chuyển thành lời gọi phương thức tới JavaBeans components

2. Khởi tạo


- Phương thức jspInit(): Khi một container tải một JSP, nó gọi phương thức jspInit() trước khi thực hiện bất kỳ yêu cầu nào. Nếu bạn muốn thực hiện code của bạn, bạn nên override phương thức jspInit() của giao diện JspPage.

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


Note : 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.

3. Thực thi


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, …

4. Hủy


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.

Override 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.

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

III. Tổng hợp

  • JSPs Làm việc cùng với các servlet để xử lý yêu cầu của khách hàng và đáp ứng chúng. Các yêu cầu và đáp ứng của khách hàng là các yêu cầu và đáp ứng của HTTP .
  • Sử dụng JSP thuận tiện do nền tảng độc lập và tính di động của Java
  • Khi chạy, JSP được chuyển đổi thành các servlet và thực thi.
  • JSP có một kho lưu trữ của thẻ để thực hiện các chức năng khác nhau được gọi là JSTL
  • EL được sử dụng để đánh giá biểu thức JSP như vậy mà chúng tương thích với JSFs.

  • Ưu điểm của JSP :
    • JSP có thể chạy trên nhiều hệ điều hành khác nhau
    • Có tất cả lợi thế của java và khiến trang HTML tĩnh trở nên năng động hơn
    • Thiết kế giao diện web trở nên dễ dàng
    • JSP luôn biên dịch trước khi nó được xử lý bởi các máy chủ
  • Nhược điểm của JSP :
    • Khó kiểm tra lỗi vì vừa phải đóng vai trò như view lẫn controller 

  • So với Active Server Pages (ASP): Lợi thế của JSP có thể coi là gấp đôi. Đầu tiên, các phần động được viết bằng Java, không phải bằng Visual Basic hoặc ngôn ngữ MS khác, vì thế nó mạnh mẽ hơn và dễ dàng để sử dụng hơn. Thứ hai, nó thích hợp cho các Hệ điều hành khác, không chỉ là Microsoft Web Server.
  • So với Pure Servlets: Nó tiện lợi hơn khi viết (và sửa đổi) HTML, vì có nhiều lệnh println hơn.
  • So với Server-Side Includes (SSI): SSI chỉ dành cho các thể đơn giản, không dành cho các chương trình “thực” mà sử dụng Form Data, tạo kết nối Database.
  • So với JavaScript: JavaScript có thể tạo HTML động trên Client nhưng lại tương tác khó khăn với Web Server để thực hiện các tác vụ phức tạp như truy cập Database và xử lý hình ảnh,…
  • So với Static HTML: Tất nhiên, HTML thông thường không thể chứa thông tin động.

IV. Tài liệu tham khảo

Tài liệu Oracle
Tài liệu Tiếng Việt

No comments:

Post a Comment