มีสองวิธีในการทำเช่นนี้ ตราบใดที่ไฟล์ WAR ถูกขยาย (ชุดของไฟล์แทนที่จะเป็นไฟล์. war หนึ่งไฟล์) คุณสามารถใช้ API นี้:
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)
ซึ่งจะทำให้คุณได้รับเส้นทางระบบทั้งหมดไปยังทรัพยากรที่คุณกำลังมองหา อย่างไรก็ตามจะใช้ไม่ได้หาก Servlet Container ไม่เคยขยายไฟล์ WAR (เช่น Tomcat) สิ่งที่จะใช้ได้ผลคือการใช้getResource
วิธีการของ ServletContext
ServletContext context = getContext();
URL resourceUrl = context.getResource("/WEB-INF/test/foo.txt");
หรือหากคุณต้องการเพียงแค่สตรีมอินพุต:
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)
แนวทางหลังนี้จะใช้ได้ผลไม่ว่าคุณจะใช้ Servlet Container แบบใดและติดตั้งแอปพลิเคชันไว้ที่ใดก็ตาม วิธีการเดิมจะใช้ได้ก็ต่อเมื่อไฟล์ WAR ถูกคลายซิปก่อนการปรับใช้
แก้ไข:
วิธีการ getContext () เป็นสิ่งที่คุณต้องใช้อย่างชัดเจน เพจ JSP ทำให้พร้อมใช้งานเป็นcontext
ฟิลด์ ใน servlet คุณจะได้รับจากของคุณServletConfig
ซึ่งถูกส่งผ่านไปยังinit()
เมธอดของ servlet หากคุณเก็บไว้ในเวลานั้นคุณสามารถรับ ServletContext ได้ทุกเมื่อที่ต้องการหลังจากนั้น