2012-12-22 31 views
5

Tôi có một loạt văn bản, xml và các tệp khác (tức là tài nguyên) mà tôi cần truy cập bằng các servlet trong ứng dụng web java. Ví dụ, có một tập tin xml, một phần trong đó được trả về với một servlet bởi một truy vấn người dùng. Tôi đang sử dụng Tomcat. Cách tốt nhất để lưu trữ những tệp này và truy cập chúng từ mã java là gì? 1) Các thư mục mặc định là nơi tôi nên đặt chúng, tôi có cần đưa chúng vào kho lưu trữ Web hoặc vào một trong các Lọ không? 2) Cách truy cập các tệp từ mã java? Làm thế nào tôi có thể thiết lập đường dẫn cho họ để nó sẽ làm việc trong bất kỳ môi trường nào? P.S. Tôi đã đọc một số bài viết liên quan đến chủ đề này, hầu hết trong số đó đề nghị lưu trữ tài nguyên trong các lọ và truy cập chúng bằng cách sử dụng java.lang.Class.getResourceAsStream (String). Có vẻ lạ vì các lớp và dữ liệu nên được tách ra.Các phương pháp hay nhất để lưu trữ và truy cập các tệp tài nguyên trong ứng dụng web java

Trả lời

7

Hoàn toàn tốt để tải tài nguyên tĩnh bằng trình nạp lớp. Đó là những gì mà ResourceBundle thực hiện để tải các tệp thuộc tính được quốc tế hóa chẳng hạn.

Đặt chúng trong WEB-INF/classes cùng với tệp lớp học của bạn hoặc trong một cái bình bên trong WEB-INF/lib và tải chúng bằng Trình nạp lớp như được chỉ ra bằng câu trả lời bạn đã đọc.

Điều đó không cấm bạn đặt các tệp này trong một thư mục riêng biệt từ các tệp nguồn Java trong dự án của bạn. Quá trình xây dựng chỉ nên đảm bảo đặt chúng vào vị trí thích hợp cho thời gian chạy. Công ước Maven và Gradle là đặt các tệp nguồn dưới src/main/java và các tệp tài nguyên theo src/main/resources.

+0

1) Nếu tôi đã có tài nguyên trong thư mục WEB-INF/resources thì sao? Chúng được sử dụng bởi JavaScript trong trang HTML. Trang này là WEB-INF/index.html và tập lệnh đề cập đến tài nguyên sử dụng đường dẫn tương đối. 2) Tôi nên lưu trữ đường dẫn đến thư mục tài nguyên ở đâu? Có một vị trí trong web.xml hoặc tài nguyên tĩnh khác không? – Alexander

+1

Tài nguyên trong WEB-INF không thể truy cập từ bên ngoài, do đó không thể tải tệp JS trong WEB-INF từ trình duyệt. Bạn có thể sử dụng ServletContext.getResourceAsStream() để tải các tài nguyên từ bất cứ đâu trong webapp (bao gồm cả WEB-INF), nhưng điều đó buộc lớp tải phải truy cập vào ServletContext. Tôi không hiểu câu hỏi thứ hai của bạn. Đó là một tài nguyên tĩnh. Tại sao bạn không mã hóa đường dẫn trong một số hằng số? –

+0

Cần một cá thể của một servlet để getContext và sau đó lấy tài nguyên hoặc đường dẫn thư mục. Có cách nào để làm nó tĩnh mà không instantiating bất cứ điều gì? Câu hỏi thứ hai của tôi liên quan đến nơi tôi nên lưu giữ các hằng số như vậy. Có một vị trí nào đó trong một số tài nguyên liên quan đến web chẳng hạn như web.xml (thay vì có một hằng số trong một trong các mã nguồn của lớp) không? – Alexander

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