2008-10-07 27 views
20

Tôi nhận được một loạt các trình lắng nghe ngữ cảnh servlet trong ứng dụng web Java của tôi, mỗi người trong số họ thu thập một số thông tin về môi trường.Làm thế nào để xác định thứ tự của người nghe trong web.xml

Một số người trong số họ phụ thuộc vào thông tin được thu thập bởi người nghe khác. Nhưng tôi không thể xác định thứ tự mà người nghe được đăng ký và gọi, vì vậy tôi phải lặp lại mã.

Tôi hiểu rằng người nghe được đăng ký theo thứ tự đặt hàng của họ trong web.xml nhưng điều này nghe có vẻ hơi mơ hồ với tôi, quá mơ hồ để dựa vào nó.

Bạn có gợi ý về cách giải quyết vấn đề của mình không?

Trả lời

25

Tất cả các thùng chứa servlet và các thùng chứa Java EE thực hiện phần này của thông số kỹ thuật nghiêm ngặt. Bạn có thể dựa vào thực tế là người nghe được gọi theo thứ tự bạn đã chỉ định trong tệp web.xml.

Bạn có thể có cấu trúc Dữ liệu LEVEL ứng dụng (HashMap) sẽ được cập nhật bởi mỗi Bộ lọc/Trình nghe khi nó gặp dữ liệu từ các yêu cầu. Điều này sẽ cho phép mỗi Listener cập nhật chỉ những gì là cần thiết. Bạn có thể đặt mã phổ biến trong Trình nghe cơ bản sao cho không có sự sao chép mã.

2

Có vẻ như bạn có thể tạo một ListenerManager mà bạn đặt làm người nghe duy nhất và duy nhất của bạn, và có chứa những Người nghe khác. Khi sự kiện xuất hiện, chỉ cần gọi từng Trình nghe khác theo thứ tự bạn yêu cầu (có thể là thứ tự bạn đã tạo trong trình xây dựng của ListenerManager).

Thật không may, điều này có nghĩa là thay đổi mã khi bạn thêm người nghe, nhưng bạn có thể tránh điều này thông qua việc sử dụng thông minh các tệp thuộc tính và mã tạo từ lớp.

8

Tại sao điều đó mơ hồ? Thứ tự trong web.xml rất cụ thể thứ tự mà chúng được gọi, nó được trình bày rõ ràng trong đặc tả Java EE. Nó hoàn toàn OK để dựa vào nó.

Các vấn đề liên quan