2010-09-09 18 views
11

Tôi muốn khởi tạo một thể hiện toàn cục của một lớp trước khi máy chủ Tomcat của tôi hoàn tất việc khởi động và bắt đầu cung cấp các servlet của tôi. Nếu dịch vụ này bằng cách nào đó thất bại khởi tạo, tôi muốn toàn bộ chuỗi khởi động thất bại (hoặc càng gần càng tốt, nó sẽ là vô nghĩa cho máy chủ để chạy khác). Cách tốt nhất tôi có thể thực hiện việc này là gì?Có phương tiện thực thi mã trong khi khởi động Apache Tomcat 6.x để thực hiện các thường trình khởi tạo, v.v. không?

Trả lời

18

Mỗi ứng dụng web có ServletContext được liên kết với nó. Đối tượng ServletContext được tạo khi ứng dụng được khởi động và bị hủy khi ứng dụng bị tắt. ServletContext có phạm vi toàn cầu và tương tự như một biến toàn cầu trong một ứng dụng.

http://www.javabeat.net/tips/178-servletcontextlistener-example.html

hoàn toàn giải thích ở đây

http://onjava.com/pub/a/onjava/2001/04/12/listeners.html

+0

Đó là những gì tôi cần. Cảm ơn sự giúp đỡ nhanh chóng và súc tích! – NBJack

+2

bạn có thể đánh dấu câu trả lời là được chấp nhận không? nó sẽ hỗ trợ trong việc đưa những người khác trả lời khi bạn yêu cầu –

2

Một điều bạn có thể làm portably là để thực hiện một servlet mà khởi tất cả mọi thứ bạn cần trong init của nó() phương pháp (và có thể gọi System.exit() nếu nó không thành công, tôi không biết nếu bạn có quyền để làm điều này trong Tomcat). Sau đó, bạn sẽ tải nó bằng cách sử dụng <load-on-startup> trong web.xml để chỉ định thứ tự khởi tạo.

+0

Không phải là một giải pháp tốt. Tất cả các bộ lọc được khởi tạo trước tất cả các servlet. Vì vậy, các bộ lọc sẽ được khởi tạo trước khi khởi tạo nếu lớp trong câu hỏi. –

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