2010-01-06 20 views
8

Tôi có một servlet được triển khai như một cuộc chiến tranh trong JBoss 4.0.2. Tôi có một tệp thuộc tính cho ứng dụng được triển khai. Tôi nên đặt tập tin này ở đâu? Dưới thư mục conf trong thư mục jboss server \ default \ conf? Làm cách nào để tải tệp thuộc tính đó theo cách di động?Tải tệp thuộc tính trong một servlet java được triển khai trong JBoss như một chiến tranh

+0

Dự án yêu cầu điều này đã bị hủy vì vậy tôi chưa bao giờ theo dõi. – Carlosfocker

Trả lời

17

Để tải rằng thuộc tính tập tin trong một di cách , cách tốt nhất là nên đặt nó trên classpath của ứng dụng web (hoặc trong một JAR dưới WEB-INF/lib/ hoặc dưới WEB-INF/classes/ hoặc trên classpath máy chủ ứng dụng nếu bạn muốn để có thể chỉnh sửa tệp đó mà không cần đóng gói lại ứng dụng web của bạn) và sử dụng Class#getResourceAsStream(String).

Các mã sau đây được một InputStream cho một tập tin bất động sản mà nằm trong gói giống như servlet trong đó mã được thực thi:

InputStream inStream = Thread.currentThread().getContextClassLoader() 
       .getResourceAsStream("myfile.properties"); 

Sau đó, load(InputStream) nó thành một (xử lý ngoại lệ bỏ qua) Properties đối tượng :

Properties props = new Properties(); 
props.load(inStream); 
1

Nơi tốt nhất để đặt nó nằm trong tài liệu gốc của ứng dụng web, chẳng hạn như "./WEB-INF/myapp.properties", tức là liên quan đến nơi gói chứa servlet đã giải nén tệp .war hoặc .ear của bạn. Bạn có thể cung cấp tệp thuộc tính trực tiếp trong .war.

ServletContext có phương thức getRealPath(String path) trả về đường dẫn thực trong hệ thống tệp. Sử dụng đường dẫn thực bạn có thể tải nó trong bộ sưu tập Properties.

Cập nhật Các mã trong bình luận của bạn cố gắng để tra cứu đường thực sự cho "/", bạn nên yêu cầu cho con đường tương đối so với tài sản của bạn tập tin, như trong:

String propertiesFilePath = getServletContext().getRealPath("WEB-INF/application.properties"); 
Properties props = properties.load(new FileInputStream(propertiesFilePath)); 
+0

Vì vậy, tôi đã thử các cách sau: Thuộc tính chuỗiFilePath = getServletContext(). GetRealPath ("/") + File.separator + "WEB-INF" + File.separator + "application.properties"; properties.load (new FileInputStream (propertiesFilePath)); Tôi nhận được một FileNotFoundException. Tôi không thấy những gì tôi đã làm sai. – Carlosfocker

2

Nếu tập tin thuộc tính có thể được triển khai cùng với ứng dụng làm cho nó trở thành một phần của cây nguồn của bạn. Điều này sẽ dẫn đến tệp thuộc tính nằm trong thư mục WEB-INF/classes.

này sau đó có thể được đọc bằng

Properties properties = loadProperties("PropertyFileName.properties", this.getClass()); 
... 

public static Properties loadProperties(String resourceName, Class cl) { 
    Properties properties = new Properties(); 
    ClassLoader loader = cl.getClassLoader(); 
    try { 
     InputStream in = loader.getResourceAsStream(resourceName); 
     if (in != null) { 
      properties.load(in); 
     } 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return properties; 
} 
4

Chỉ cần có được giữ của ServletContext và sau đó

InputStream stream = getServletContext().getResourceAsStream("/WEB-INF/log4j.properties"); 
Properties props = new Properties(); 
props.load(stream); 

này sẽ luôn luôn làm việc, bất kể bạn triển khai một cuộc chiến tranh hoặc chiến tranh bùng nổ.

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