Trong khi điều này không phải là yêu cầu đặc biệt thì có một số giao tiếp cho phép chúng ta cài đặt vào Beans. Các giao tiếp này có thể được dùng để mở rộng tính năng các Bean của chúng ta đối với các tình huống khác nhau.
1.Giao tiếp BeanInfo
Chúng ta đã biết về cơ chế tương phản (reflection) trong mục trước, nhưng có phương pháp khác mà một lớp Bean có thể báo cho Bean container (như JSP container) biết về các thuộc tính của nó bằng cách cài đặt giao tiếp
BeanInfo. Giao tiếp BeanInfo cho phép chúng ta tạo ra một lớp đồng hành với Bean của chúng ta mà định nghĩa các thuộc tính và các cấp độ truy cập của nó. Giao tiếp có thể được dùng để thích ứng với các lớp Java đã có đối với việc sử dụng của Bean mà không cần thay đổi giao tiếp đã tạo. Nó cũng được sử dụng để che dấu các thuộc tính nào được truy cập thường xuyên từ client, vì thỉnh thoảng cơ chế reflection chuẩn của Java có thể phơi bày nhiều thông tin mà chúng ta lại không muốn như thế.
Để tạo lớp BeanInfo chúng ta chỉ cần đặt tên lớp cùng với tiếp vị ngữ
BeanInfo (như SimpleBeanBeanInfo) và cài đặt giao tiếp java.beans.BeanInfo. Quy tắc đặt tên này là cách báo cho Bean container (như JSP container) biết để xác định lớp BeanInfo thích hợp cho Bean chúng ta.
2.Giao tiếp Serializable
JavaBeans sau khi được thiết kế và đem vào sử dụng người dùng sẽ tuỳ ý thay đổi các thuộc tính mà Bean cung cấp. Tuy nhiên khi chấm dứt chương trình thì các thuộc tính này cũng mất đi. Lần sau khi dùng các thuộc tính này phải được khởi tạo và đặt lại giá trị mới. Như vậy chu trình sống của Bean chỉ hạn hẹp trong quá trình hoạt động của chương trình, không sử dụng lại sau này được. Java cung cấp một khả năng lưu lại các đối tượng JavaBeans lên đĩa bằng cơ chế Serializable. Khi một đối tượng hay Bean được lưu xuống tập tin nhị phân thì tất cả biến hay các đối tượng con nằm bên trong lớp cha đều được lưu theo.
Một số server hổ trợ cơ chế persistent session bằng cách ghi bất kỳ dữ liệu nào của session vào đĩa giữa các lần server ngừng hoạt động. Khi server hoạt đông trở lại thì dữ liệu được serialization được phục hồi trở lại. Một nguyên nhân tương tự đưa vào các server để hổ trợ cho việc nhóm các session lại trong các môi trường truyền thông chậm chạp (do hoạt động nhiều, ...). Nhiều server sử dụng cơ chế serialization để sao lặp dữ liệu của session giữa các web server trong nhóm. Nếu Beans của chúng ta không cài đặt giao tiếp
Hải
Serializable thì server không thể lưu trữ hoặc chuyển Beans của chúng ta trong các tình huống này.
3.Giao tiếp HttpSessionBindingListener
Việc cài đặt giao tiếp HttpSessionBindingListener của Servlet API trong Beans chúng ta sẽ cho phép các thể hiện nhận được thông báo của các sự kiện session. Giao tiếp này khá đơn giản, chỉ cần định nghĩa hai phương thức:
public void valueBound(HttpSessionBindingListener event) public void valueUnBound(HttpSessionBindingListener event)
Phương thức valueBound() được gọi khi Bean được lưu trữ trong session của người dùng. Trong trường hợp của JSP, điều này sẽ thường xảy ra ngay khi Bean được khởi tạo bởi <jsp:useBean> tag mà có xác định phạm vi “session” trong thuộc tính scope.
Phương thức valueUnBound() được gọi khi đối tượng bị xoá khỏi session. Có vài tình huống làm cho Bean của chúng ta sẽ bị xoá khỏi session. Khi JSP container dự định chấm dứt một session của người dùng vì hoạt động kém, trước tiên JSP container xoá từng mục dữ liệu trong session, rồi kích hoạt valueUnBound(). Thứ hai, Sự kiện này sẽ được kích hoạt nếu servlet,
scriptlet, hay đoạn mã Java nào đó xoá bỏ Bean khỏi session vì một số lý
nguyên nhân.
Mỗi sự kiện kết hợp với giao tiếp HttpSessionBindingListener thì có thể sử dụng để đạt được sự truy cập vào đối tượng session. Việc cài đặt giao tiếp này sẽ cho phép chúng ta tác động trở lại các sự kiện của session. Ví dụ đóng các nối kết không cần thiết, tạo các giao tác hoặc thực hiện các hoạt động bảo trì khác.
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Chương III : TAG LIBRARIES