2009-07-16 24 views
7

tôi đã nhận được như xa như thế này:Làm thế nào để tải tập tin một .properties thành một jsp

private Properties logoUrls = new Properties(); 
logoUrls.load(new FileInputStream("channelLogos.properties")); 

nơi channelLogos.properties là trong cùng thư mục với JSP của tôi. Tôi nhận được một ngoại lệ FileNotFound. Ứng dụng của tôi thực sự nghĩ rằng tôi có ý nghĩa gì bởi "channelLogos.properties", nếu không phải là cùng một thư mục với JSP? Làm cách nào để xác định đường dẫn chính xác để tải tệp thuộc tính?

+0

liên quan http://stackoverflow.com/questions/3920088/jsp-servlet-read-parameters-from-properties-file –

Trả lời

3

Hãy xem ServletContext.getRealPath(). Điều đó sẽ cung cấp cho bạn đường dẫn đầy đủ đến tệp thuộc tính.

+0

Thật tuyệt vời khi biết. Cảm ơn! Sử dụng kỹ thuật đó, nó cho tôi thấy rằng đường dẫn của tôi dường như đúng với tệp thuộc tính của tôi, nhưng tôi vẫn nhận được một tệp không ngoại lệ. Bất kỳ ý tưởng? – morgancodes

6

Tôi muốn cao khuyên bạn nên đọc về Model 2 Servlets. Tôi khuyên bạn nên nó cho tất cả mọi người vẫn đang làm mẫu 1 Servlets, đó là, làm "công việc thực tế" trong một JSP.

Đối với câu hỏi của bạn: Thứ nhất, ném nộp các thuộc tính trong classpath của bạn, sau đó đọc các tập tin sử dụng getResourceAsSttream:

 
Thread.currentThread().getContextClassLoader().getResourceAsStream("channelLogos.properties"); 

Có rất nhiều lựa chọn, tất nhiên, và tất cả mọi người sẽ phải yêu thích của họ.

+0

Tôi hoàn toàn trên tàu với các công cụ không thực sự trong một quy tắc jsp, nhưng tôi đang phá vỡ nó trong trường hợp. – morgancodes

+0

+1 cho việc sử dụng classpath – Thilo

+0

@morgancodes: Tôi hoàn toàn trên tàu với việc phá vỡ quy tắc của riêng tôi theo thời gian. ;) –

10

này sẽ thực hiện công việc:

<%@page import="java.io.InputStream" %> 
<%@page import="java.util.Properties" %> 

<% 
    InputStream stream = application.getResourceAsStream("/some.properties"); 
    Properties props = new Properties(); 
    props.load(stream); 
%> 

Dù sao tôi thực sự nghĩ rằng bạn nên có nộp các thuộc tính trong classpath và sử dụng một servlet

+2

Vâng, đó sẽ là cách phù hợp để thực hiện điều đó. Tôi đã thừa nhận rằng làm điều này nhanh chóng, xấu xí, bẩn thỉu và xấu. – morgancodes

+0

Vâng tôi biết, hehe ... Tôi vừa trả lời những gì bạn đã hỏi;) –

+0

FYI, có một application.getResourceAsStream ("...") sẽ giúp bạn tiết kiệm một vài dòng mã. –

4

Khi bạn nói "cùng một thư mục như JSP", chính xác thì ý bạn là gì khi nói vậy? Rằng JSP của bạn nằm ở đâu đó, ví dụ: /mywebapp/somefolder/my.jsp với số mywebapp là gốc ứng dụng của bạn và tệp thuộc tính của bạn là /mywebapp/somefolder/channelLogos.properties?

Nếu có thì rất có thể chúng KHÔNG nằm trong cùng một thư mục. JSP đã được biên soạn và vị trí thực sự của nó có thể khác nhau tùy thuộc vào thùng chứa servlet. Đặt cược tốt nhất của bạn là sử dụng ServletContext.getRealPath() như được đề xuất bởi pkaeding với đường dẫn tệp thuộc tính liên quan đến ngữ cảnh webapp làm đối số. Sử dụng ví dụ trên:

private Properties logoUrls = new Properties(); 
logoUrls.load(new FileInputStream(servletContext.getRealPath("/somefolder/channelLogos.properties"))); 

Điều đó nói rằng, hãy ghi nhớ rằng nếu bạn nhấn mạnh vào việc đưa tài sản của bạn trong thư mục tương tự như JSP bạn nên chăm sóc để hạn chế nó từ việc tiếp cận công khai (trừ khi đó là mục đích).

+0

Cảm ơn bạn. Những công việc này. Tuy nhiên, tôi đã lên kế hoạch thực hiện tất cả điều này bên trong jspInit, mà không có quyền truy cập dễ dàng vào servletContext. Có lẽ một cách tiếp cận classpath thực sự là tốt nhất. – morgancodes

+0

'getServletConfig().getServletContext() 'sẽ lấy cho bạn servletContext từ bên trong phương thức' jspInit'. Điều đó nói rằng, cách tiếp cận classpath là hoàn toàn tốt hơn và MVC là tốt hơn chưa :-) Tôi đã chỉ cung cấp câu trả lời này bởi vì bạn đã nhấn mạnh rằng bạn muốn làm điều đó trong JSP một mình. – ChssPly76

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