1. 程式人生 > >web專案中獲取資源及資源路徑

web專案中獲取資源及資源路徑

public class PathServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        
        System.out.println("=============原始路徑(這樣寫不好使了!!!)==============");
        // 之前main方法 中路徑按如下填寫,為什麼能活得到?
        // 路徑相對的是虛擬機器開始執行的路徑. 在MyEclipse中, 執行main方法,虛擬機器執行開始於專案路徑.
        // 執行tomcat的虛擬機器.開始路徑在tomcat的bin目錄下.所以以前的路徑填寫方式 不好使了
//        FileInputStream fis = new FileInputStream("src/abc2.txt");
        //正確寫法參考
        FileInputStream fis = new FileInputStream("haha/abc.txt");
        System.out.println("fis=" + fis);
        
        
        System.out.println("=============ServletContext==============");
        //相對於當前web應用
        InputStream is = getServletContext().getResourceAsStream("/WEB-INF/classes/com/first/servlet/abc.txt");
        System.out.println("is=" + is);
        InputStream is2 = getServletContext().getResourceAsStream("/WEB-INF/classes/abc2.txt");
        System.out.println("is2=" + is2);
        
        URL url = getServletContext().getResource("/WEB-INF/classes/abc2.txt");
        String path = url.getPath();
        System.out.println("path=" + path);
//        String host = url.getHost();
//        System.out.println("host=" + host);
        
        System.out.println("==============Class=============");
        
        //加"/"相對於classes目錄
        InputStream stream = this.getClass().getResourceAsStream("/abc2.txt");
        System.out.println("stream=" + stream);
        //不加"/"獲取的是當前類所在包路徑
        InputStream stream2 = this.getClass().getResourceAsStream("abc.txt");
        System.out.println("stream2=" + stream2);
        
        URL url2 = this.getClass().getResource("abc.txt");
        String path2 = url2.getPath();
        System.out.println("path2=" + path2);
        
        URL url3 = this.getClass().getResource("/abc2.txt");
        String path3 = url3.getPath();
        System.out.println("path3=" + path3);
        
        System.out.println("==============ClassLoader=============");
        //加"/"和不加"/"都是想對於classes目錄下
        ClassLoader loader = this.getClass().getClassLoader();
        InputStream stream3 = loader.getResourceAsStream("/abc2.txt");
        System.out.println("stream3=" + stream3);
        InputStream stream4 = loader.getResourceAsStream("abc2.txt");
        System.out.println("stream4=" + stream4);
        
        URL url4 = loader.getResource("abc2.txt");
        URL url5 = loader.getResource("/com/first/servlet/abc.txt");
        System.out.println("url4=" + url4.getPath());
        System.out.println("url5=" + url5.getPath());
        
    }
    
    //路徑相對的是虛擬機器開始執行的路徑. 在MyEclipse中, 執行main方法,虛擬機器執行開始於專案路徑.
    public static void main(String[] args) throws Exception {
        System.out.println("=============原始路徑==============");
        FileInputStream fis = new FileInputStream("src/abc2.txt");
        System.out.println("fis=" + fis);
    }

}

檔案在工程中的位置: