Ada beberapa cara untuk melakukan ini. Selama file WAR diperluas (satu set file, bukan satu file .war), Anda dapat menggunakan API ini:
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)
Itu akan memberi Anda jalur sistem lengkap ke sumber daya yang Anda cari. Namun, itu tidak akan berhasil jika Servlet Container tidak pernah memperluas file WAR (seperti Tomcat). Apa yang akan berhasil adalah menggunakan metode ServletContext getResource
.
ServletContext context = getContext();
URL resourceUrl = context.getResource("/WEB-INF/test/foo.txt");
atau sebagai alternatif jika Anda hanya menginginkan aliran input:
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)
Pendekatan terakhir akan bekerja tidak peduli apa Servlet Container yang Anda gunakan dan di mana aplikasi diinstal. Pendekatan sebelumnya hanya akan berfungsi jika file WAR dibuka ritsletingnya sebelum penerapan.
EDIT:
Metode getContext () jelas merupakan sesuatu yang harus Anda terapkan. Halaman JSP membuatnya tersedia sebagai context
lapangan. Dalam servlet Anda mendapatkannya dari Anda ServletConfig
yang diteruskan ke metode servlet init()
. Jika Anda menyimpannya pada waktu itu, Anda bisa mendapatkan ServletContext kapan pun Anda mau setelah itu.