JSP và Servlet
* JSP (viết tắt của Java Server Pages)
+ Đây là ngôn ngữ scripting được dùng ở server để hỗ trợ ứng dụng trong việc trình bày trang web động – cập nhật dữ liệu.
+ JSP tích hợp bao gồm HTML, XML, Java Code, và kể cả Servlet nghĩa là:
- Nó tạo thuận lợi cho người dùng trong việc xây dựng giao diện – khắc phục nhược điểm của servlet về giao diện.
- Ngoài ra, nó cho người dùng mở rộng khả năng sử dụng JSP qua việc định nghĩa các tag mới như XML – khắc phục nhược điểm của HTML.
- Đặc biệt cho phép người dùng sử dụng nhúng trưc tiếp code Java vào trong JSP thông qua Declaration – khai báo biến và hàm, Scriptlets – chứa code trực tiếp của Java và Expression – tính toán biểu thức và in kết quả ra màn hình. Những điều này tạo điều kiện cho người lập trình Java không cần học các ngôn ngữ script mới khi lập trình.
+ Bản chất của JSP là Servlet, do vậy các thành phần của Servlet sẽ có tồn tại hết trên JSP.
+ Ngoài ra, JSP không cần phải biên dịch mà nó được biên dịch khi có request lần đầu tiên yêu cầu đến server, do vậy JSP khắc phục nhược điểm chỉnh sửa phải cần có source code và biên dịch lại khi deploy sau khi chỉnh sửa của Servlet.
+ JSP cung cấp các thành phần implicit Object để người dùng có thể sử dụng các thành phần tương tác trên server mà không cần khai báo và khởi tạo.
+ Kết xuất của JSP thực chất là HTML. File JSP có phần mở rộng là .jsp
* Chu kỳ sống của JSP
+ Khi có một yêu cầu từ client đến server, container xác định trang jsp được yêu cầu.
+ Trang JSP được đưa qua JSP Engine để xử lý. JSP Engine thực hiện các bước sau.
- Đọc cấu trúc file của JSP File từ trên xuống dưới, từ trái qua phải để chuyên đổi (Parsing) sang Java code tương ứng.
- Phát sinh Servlet từ nội dung parsing ở bước trên để cấu tạo thành servlet.
- Thực hiện biên dịch code Servlet.
- Sau khi biên dịch thành công thì quá trình hoạt động sẽ thực hiện đúng theo chu kỳ sống của Servlet như đã nêu trong các phần trên.
- Tương tự 03 phương thức init, services, destroy của Servlet thì JSP sẽ có 03 phương thức tương ứng là jspInit, jspService và jspDestroy.
+ JSP định nghĩa ra 4 tầm vực thao tác đó là page – tồn tại trong page, request – tồn tại từ lúc bắt đầu gửi request cho đến khi response thành cồng, session, application (từ khi deploy đến khi kết thúc ứng dụng) – ServletContext.
* Servlet
+ Servlet là đoạn chương trình java thực thi trên Web Server hỗ trợ người lập trình Java xây dựng trang web động mà không cần học ngôn ngữ lập trình web mới.
+ Servlets nhận request – yêu cầu từ client, sao đó thực hiện các yêu cầu xử lý để gửi response – phản hồi đến người dùng sử dụng HTTP.
+ Servlet được load sẵn ở Web Server duy nhất lần đầu tiên khi ứng dụng được deploy và đáp ứng tức thời yêu cầu của người dùng thông qua Web Container. Người dùng không lo lắng đến chuyện khởi tạo servlet (như cách chúng ta phải dùng lệnh new đối với việc tạo ra một instance mới cho một object).
+ Servlet được server hỗ trợ cơ chế multithread giúp giảm tài nguyên và quá tải trong việc xử lý của server hay container.
+ Khuyết điểm:
- Không thích hợp cho việc trình bày và xử lý giao diện vì code html được viết trong chuỗi String của các câu lệnh Java, rất khó trong việc checking và kiểm tra lỗi về tính đúng đắn của văn bản xml (well-form).
- Không hỗ trợ đầy đủ các thành phần liên quan đến session.
- Về phía người dùng có thể nói tương tác chỉ là single thread vì người dùng không thể xác định instance servlet phục vụ cho mình mà container và server tự động xác định instance tương ứng và yêu cầu nó xử lý. Chúng ta chỉ biết được xử lý khi thấy kết quả được hiển thị ở browser. Nghĩa là mọi thứ xử lý phải lệ thuộc container.
+ Cơ chế:
- Khi có request từ client gửi đến Server hay Web Container.
- Container sẽ lựa chọn một instance Servlet tương ứng để đáp ứng request đó (người dùng sẽ không bao giờ biết instance nào được lựa chọn, nó lựa chọn khi nào, servlet xử lý khi nào).
- Servlet lựa chọn sẽ thực hiện xử lý và kết nối DB nếu cần.
- Sau khi servlet thực hiện xong, sẽ gửi kết quả ra container để gửi response về cho người dùng.
- Browser đón nhận kết quả và trình bày ra màn hình dữ liệu.
+ Chu kỳ sống hay tồn tại của servlet trong server hay container
- Khi một ứng dụng chưa được deploy vào trong server thì servlet chưa được khởi tạo (uninstantiated).
- Khi ứng dụng được deploy vào server thì container sẽ thực hiện khởi tạo instance cho servlet, trong lúc khới tạo kích hoạt hàm init. Lưu ý, hàm init chỉ được kích hoạt lần duy nhất khi deploy.
- Khi có một request đến servlet của người dùng, container đón nhận request và chọn instance bean bất kỳ tương ứng với yêu cầu để đáp ứng.
- Sau khi chọn được bean, container sẽ kích hoạt hàm service tương ứng. Lưu ý ở đây, ở lần yêu cầu thứ 2 thì container cũng sẽ chọn bean và kích hoạt hàm service tương ứng, do vậy, hàm service sẽ được gọi rất nhiều lần.
- Khi servlet được cập nhật mới hay server bị crash hay undeploy ứng dụng ra khỏi server – container, thì hàm destroy của servlet được kích hoạt. Nghĩa là servlet chỉ kích hoạt phương thức destroy lần cuối cùng duy nhất.
- Các giá trị chỉ số ‘ trong hình trên thể hiện khi lỗi xảy ra thì server sẽ báo lỗi.
+ Để tạo một servlet chúng ta phải implements HttpServlet
- HttpServlet được kế thừa từ GenericServlet.
- GenericServlet được kế thừa từ phần chính yếu là Servlet, đây là interface cho tất cả servlet và định nghĩa một trong ba phương thức đã được định nghĩa trong chu kỳ sống (init, services, destroy).
- GenericServlet ngoài được kế thức từ Servlet, nó còn được kế thừa từ ServletConfig, java.io.Serializable.
+ Đây là ngôn ngữ scripting được dùng ở server để hỗ trợ ứng dụng trong việc trình bày trang web động – cập nhật dữ liệu.
+ JSP tích hợp bao gồm HTML, XML, Java Code, và kể cả Servlet nghĩa là:
- Nó tạo thuận lợi cho người dùng trong việc xây dựng giao diện – khắc phục nhược điểm của servlet về giao diện.
- Ngoài ra, nó cho người dùng mở rộng khả năng sử dụng JSP qua việc định nghĩa các tag mới như XML – khắc phục nhược điểm của HTML.
- Đặc biệt cho phép người dùng sử dụng nhúng trưc tiếp code Java vào trong JSP thông qua Declaration – khai báo biến và hàm, Scriptlets – chứa code trực tiếp của Java và Expression – tính toán biểu thức và in kết quả ra màn hình. Những điều này tạo điều kiện cho người lập trình Java không cần học các ngôn ngữ script mới khi lập trình.
+ Bản chất của JSP là Servlet, do vậy các thành phần của Servlet sẽ có tồn tại hết trên JSP.
+ Ngoài ra, JSP không cần phải biên dịch mà nó được biên dịch khi có request lần đầu tiên yêu cầu đến server, do vậy JSP khắc phục nhược điểm chỉnh sửa phải cần có source code và biên dịch lại khi deploy sau khi chỉnh sửa của Servlet.
+ JSP cung cấp các thành phần implicit Object để người dùng có thể sử dụng các thành phần tương tác trên server mà không cần khai báo và khởi tạo.
+ Kết xuất của JSP thực chất là HTML. File JSP có phần mở rộng là .jsp
* Chu kỳ sống của JSP
+ Khi có một yêu cầu từ client đến server, container xác định trang jsp được yêu cầu.
+ Trang JSP được đưa qua JSP Engine để xử lý. JSP Engine thực hiện các bước sau.
- Đọc cấu trúc file của JSP File từ trên xuống dưới, từ trái qua phải để chuyên đổi (Parsing) sang Java code tương ứng.
- Phát sinh Servlet từ nội dung parsing ở bước trên để cấu tạo thành servlet.
- Thực hiện biên dịch code Servlet.
- Sau khi biên dịch thành công thì quá trình hoạt động sẽ thực hiện đúng theo chu kỳ sống của Servlet như đã nêu trong các phần trên.
- Tương tự 03 phương thức init, services, destroy của Servlet thì JSP sẽ có 03 phương thức tương ứng là jspInit, jspService và jspDestroy.
+ JSP định nghĩa ra 4 tầm vực thao tác đó là page – tồn tại trong page, request – tồn tại từ lúc bắt đầu gửi request cho đến khi response thành cồng, session, application (từ khi deploy đến khi kết thúc ứng dụng) – ServletContext.
* Servlet
+ Servlet là đoạn chương trình java thực thi trên Web Server hỗ trợ người lập trình Java xây dựng trang web động mà không cần học ngôn ngữ lập trình web mới.
+ Servlets nhận request – yêu cầu từ client, sao đó thực hiện các yêu cầu xử lý để gửi response – phản hồi đến người dùng sử dụng HTTP.
+ Servlet được load sẵn ở Web Server duy nhất lần đầu tiên khi ứng dụng được deploy và đáp ứng tức thời yêu cầu của người dùng thông qua Web Container. Người dùng không lo lắng đến chuyện khởi tạo servlet (như cách chúng ta phải dùng lệnh new đối với việc tạo ra một instance mới cho một object).
+ Servlet được server hỗ trợ cơ chế multithread giúp giảm tài nguyên và quá tải trong việc xử lý của server hay container.
+ Khuyết điểm:
- Không thích hợp cho việc trình bày và xử lý giao diện vì code html được viết trong chuỗi String của các câu lệnh Java, rất khó trong việc checking và kiểm tra lỗi về tính đúng đắn của văn bản xml (well-form).
- Không hỗ trợ đầy đủ các thành phần liên quan đến session.
- Về phía người dùng có thể nói tương tác chỉ là single thread vì người dùng không thể xác định instance servlet phục vụ cho mình mà container và server tự động xác định instance tương ứng và yêu cầu nó xử lý. Chúng ta chỉ biết được xử lý khi thấy kết quả được hiển thị ở browser. Nghĩa là mọi thứ xử lý phải lệ thuộc container.
+ Cơ chế:
- Khi có request từ client gửi đến Server hay Web Container.
- Container sẽ lựa chọn một instance Servlet tương ứng để đáp ứng request đó (người dùng sẽ không bao giờ biết instance nào được lựa chọn, nó lựa chọn khi nào, servlet xử lý khi nào).
- Servlet lựa chọn sẽ thực hiện xử lý và kết nối DB nếu cần.
- Sau khi servlet thực hiện xong, sẽ gửi kết quả ra container để gửi response về cho người dùng.
- Browser đón nhận kết quả và trình bày ra màn hình dữ liệu.
+ Chu kỳ sống hay tồn tại của servlet trong server hay container
- Khi một ứng dụng chưa được deploy vào trong server thì servlet chưa được khởi tạo (uninstantiated).
- Khi ứng dụng được deploy vào server thì container sẽ thực hiện khởi tạo instance cho servlet, trong lúc khới tạo kích hoạt hàm init. Lưu ý, hàm init chỉ được kích hoạt lần duy nhất khi deploy.
- Khi có một request đến servlet của người dùng, container đón nhận request và chọn instance bean bất kỳ tương ứng với yêu cầu để đáp ứng.
- Sau khi chọn được bean, container sẽ kích hoạt hàm service tương ứng. Lưu ý ở đây, ở lần yêu cầu thứ 2 thì container cũng sẽ chọn bean và kích hoạt hàm service tương ứng, do vậy, hàm service sẽ được gọi rất nhiều lần.
- Khi servlet được cập nhật mới hay server bị crash hay undeploy ứng dụng ra khỏi server – container, thì hàm destroy của servlet được kích hoạt. Nghĩa là servlet chỉ kích hoạt phương thức destroy lần cuối cùng duy nhất.
- Các giá trị chỉ số ‘ trong hình trên thể hiện khi lỗi xảy ra thì server sẽ báo lỗi.
+ Để tạo một servlet chúng ta phải implements HttpServlet
- HttpServlet được kế thừa từ GenericServlet.
- GenericServlet được kế thừa từ phần chính yếu là Servlet, đây là interface cho tất cả servlet và định nghĩa một trong ba phương thức đã được định nghĩa trong chu kỳ sống (init, services, destroy).
- GenericServlet ngoài được kế thức từ Servlet, nó còn được kế thừa từ ServletConfig, java.io.Serializable.
Nhận xét
Đăng nhận xét