2012-04-11 20 views
28

Tôi đang tạo một servlet cần tải thông tin cấu hình. Một phần thông tin cấu hình mà tôi cần là danh sách các chuỗi (cụ thể là danh sách tên máy chủ và/hoặc URL).Java Servlets - Lưu trữ một danh sách các giá trị trong web.xml (nhiều giá trị param cho tên tham số đơn)

Tôi đã hy vọng lưu trữ thông tin này trong tệp web.xml của servlet (vì vậy tôi không phải viết trình phân tích cú pháp của riêng tôi) làm ngữ cảnh-param hoặc init-param; về cơ bản nhiều giá trị param cho một tên param duy nhất.

Ví dụ về những gì tôi muốn:

<context-param> 
    <param-name>validHosts</param-name> 
    <param-value>example1.com</param-value> 
    <param-value>example2.com</param-value> 
    <param-value>example3.com</param-value> 
</context-param> 

nghiên cứu ban đầu của tôi dường như biết điều này là không thể - mà chỉ có thể có một param-giá trị duy nhất đối với bất kỳ param-name (trong vòng hai context- param hoặc init-param).

Tôi biết tôi chỉ có thể sử dụng danh sách được phân tách trong một giá trị tham số duy nhất, nhưng đó thực sự là lựa chọn duy nhất của tôi nếu tôi vẫn muốn sử dụng web.xml? Tôi có nên ngừng rên rỉ và viết trình phân tích cú pháp tệp cấu hình của riêng mình không?

Trả lời

37

Servlet spec nói rằng bạn có thể chỉ có một giá trị cho bất kỳ tham số bối cảnh. Vì vậy, bạn đang đi với chỉ với danh sách giới hạn.

<context-param> 
    <param-name>validHosts</param-name> 
    <param-value>example1.com,example2.com,.....</param-value> 
</context-param> 
+4

Tôi nghi ngờ .... được rồi, tôi sẽ làm, nhưng điều đó không có nghĩa là tôi phải thích nó! – greenlaw

11

Vâng, chỉ cần sử dụng delimiters (như không có lựa chọn khác có sẵn cho việc này):

<context-param> 
    <param-name>validHosts</param-name> 
    <param-value>example1.com,example2.com,example3.com</param-value> 
</context-param> 



then simply 
String[] validHosts = param.split(","); // not really much to do 
18

Đặt từng thông số trên một dòng riêng. Tôi đã làm như sau và nó hoạt động tốt:

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value> 
     /WEB-INF/spring-beans.xml 
     /WEB-INF/security-config.xml  
    </param-value> 
</context-param> 
+1

Vì vậy, tôi giả sử bạn chỉ cần chia nhỏ với một ký tự dòng mới và khoảng trắng được cắt bớt? Điều này chắc chắn sẽ làm cho nó dễ đọc hơn. – greenlaw

+3

Điều này chỉ hoạt động vì mùa xuân chia tách các giá trị cho bạn trong ContextLoaderListener. Từ [tài liệu của họ] (https://github.com/spring-projects/spring-framework/blob/f38a4b9040f50328ccc8c8c4fe54d366ff2c99ba/spring-context/src/main/java/org/springframework/context/support/AbstractRefreshableConfigApplicationContext.java#L62) : _Đặt vị trí cấu hình cho ngữ cảnh ứng dụng này theo kiểu init-param, tức là với các vị trí riêng biệt được phân tách bằng dấu phẩy, dấu chấm phẩy hoặc khoảng trắng._ – Lucas