2012-01-06 31 views
5

Tôi đang cố tải một tệp hình ảnh nhị phân để thực hiện một số xử lý bên trong mã Java phía máy chủ của tôi. Tôi hiện đang đặt hình ảnh của tôi trong gói mà lớp thực hiện của tôi tồn tại và gọi:Làm cách nào để đọc tệp tài nguyên trong tệp chiến tranh chưa được giải mã được triển khai trong Tomcat?

Image img = Image.getInstance(this.getClass().getResource("logo.png")); 

này hoạt động tốt khi tôi đang chạy Tomcat trên hộp phát triển của tôi trong một thiết lập chiến tranh bùng nổ, nhưng khi tôi triển khai đến một máy chủ chạy Tomcat, nơi nó không phát nổ các tập tin chiến tranh, lệnh gọi hàm getResource trả về null.

Tôi cũng đã cố gắng di chuyển hình ảnh vào thư mục gốc bối cảnh của tôi và truy cập vào nó như thế này:

Image img = Image.getInstance(this.getClass().getResource("/../../logo.png")); 

Một lần nữa, điều này hoạt động trên hộp phát triển của tôi, nhưng không phải khi tôi triển khai nó ở nơi khác.

Có cách nào tốt hơn để truy cập tệp này không? Tôi đang làm gì sai?

Cảm ơn !!

+0

tôi có lẽ nên có cũng đề cập rằng tôi sử dụng Maven để xây dựng ứng dụng web của tôi. Tôi có một câu trả lời hoàn chỉnh để khắc phục sự cố của mình, nhưng tôi không thể đăng câu hỏi đó trong 8 giờ theo câu hỏi của riêng tôi. – 11101101b

+0

Đặt tài nguyên vào thư mục "src/main/resources" của bạn. Sau đó truy cập chúng với: this.getClass(). GetResource ("/ logo.png"); hoặc: Thread.currentThread(). GetContextClassLoader(). GetResource ("logo.png"); – 11101101b

Trả lời

5

Nếu bạn đang xây dựng sử dụng Maven, bạn sẽ muốn chắc chắn rằng hình ảnh thực sự được đặt vào kho lưu trữ.

Đặt tài nguyên trong thư mục src/main/resources của bạn. Sau đó truy cập chúng với:

this.getClass().getResource("/logo.png"); 

hay:

Thread.currentThread().getContextClassLoader().getResource("logo.png"); 

(Mã mẫu từ bình luận ở trên, nhưng đặt trong câu trả lời là rõ ràng hơn)

+0

Xin đừng quên '/' trước tên tệp trong trường hợp đầu tiên –

1

Bạn có thể đưa hình ảnh của bạn ở thư mục gốc của classpath của bạn và cố gắng này:

Thread.currentThread().getContextClassLoader() 
       .getResource("logo.png"); 
+1

+1 - Bằng thư mục gốc của đường dẫn lớp của bạn, "WEB-INF/classes" bên trong tệp WAR là nơi nhiều người sẽ đặt tài nguyên cho biết. Mặc dù họ có thể sắp xếp bằng cách sử dụng các thư mục như "images/logo.png" trong đó. – rfeak

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