Có một số cách để làm điều này. Miễn là tệp WAR được mở rộng (một tập hợp các tệp thay vì một tệp .war), bạn có thể sử dụng API này:
ServletContext context = getContext();
String fullPath = context.getRealPath("/WEB-INF/test/foo.txt");
http://tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/ServletContext.html#getRealPath(java.lang.String)
Điều đó sẽ cung cấp cho bạn đường dẫn hệ thống đầy đủ đến tài nguyên bạn đang tìm kiếm. Tuy nhiên, điều đó sẽ không hoạt động nếu Servlet Container không bao giờ mở rộng tệp WAR (như Tomcat). Những gì sẽ hoạt động bằng cách sử dụng các getResource
phương thức của ServletContext .
ServletContext context = getContext();
URL resourceUrl = context.getResource("/WEB-INF/test/foo.txt");
hoặc cách khác nếu bạn chỉ muốn luồng đầu vào:
InputStream resourceContent = context.getResourceAsStream("/WEB-INF/test/foo.txt");
http://tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/ServletContext.html#getResource(java.lang.String)
Cách tiếp cận thứ hai sẽ hoạt động cho dù bạn sử dụng Servlet Container nào và ứng dụng được cài đặt ở đâu. Cách tiếp cận trước đây sẽ chỉ hoạt động nếu tệp WAR được giải nén trước khi triển khai.
CHỈNH SỬA:
Phương thức getContext () rõ ràng là thứ bạn sẽ phải triển khai. Các trang JSP cung cấp nó dưới dạng context
trường. Trong một servlet, bạn lấy nó từ của bạn ServletConfig
, nó được chuyển vào init()
phương thức của servlet . Nếu bạn lưu trữ nó tại thời điểm đó, bạn có thể nhận ServletContext bất kỳ lúc nào bạn muốn sau đó.