public class JServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //web-inf下的 String path1 = getServletContext().getRealPath("/WEB-INF/demo.xml"); //lib下的 String path2 = getServletContext().getRealPath("/WEB-INF/lib/demo.xml"); //src下的 String path3 = getServletContext().getRealPath("/WEB-INF/classes/demo.xml"); //cn.itcast.servlet.servlet_context包下的 String path4 = getServletContext().getRealPath("/WEB-INF/classes/cn/itcast/servlet/servlet_context/demo.xml"); //其实上面例子中path3 和 path4 这两种方式 有些麻烦 //在介绍一种获得资源的方式,是对.class ==> Class 和 classLoader的应用 InputStream is = this.getClass().getResourceAsStream("demo.xml"); // 如果不加"/"==> 相对的是类的当前(包)目录 InputStream is2 = this.getClass().getResourceAsStream("/demo.xml");//如果加了"/" ==> "/"就代表classes目录(src) //在说下classLoader 下也有方法 classLoader 就是类的加载器. ==> 专门来读取class文件的输入流 //也提供了读取其他文件的方法.(使用classLoader不要读取较大的文件) // this.getClass().getClassLoader() ==> 获得类的加载器 InputStream is3 = this.getClass().getClassLoader().getResourceAsStream("/demo.xml");// 不论加不加"/",都相对于 classes目录,跟class中加"/" 的相对路径是一样的. //使用class或classLoader 也可以获得文件的绝对路径 URL url = this.getClass().getResource("demo.xml"); System.out.println(url.getPath()); } }