相对路径貌似逼格很高,不建议使用;
任何时候都建议使用绝对路径;
绝对路径以/开头;
在javaweb项目中,绝对路径的根/是什么?分以下情况:
1 主机根目录,即http://localhost:8080/,体现在客户端行为,如
1.1. src、url;
1.2. 表单action;
1.3. 超链接href;
1.4. 重定向sendRedirect;
2 项目根目录,即http://localhost:8080/projectname/,体现在服务器端行为,如
2.1. <url-pattern>这个必须使用“/”开头;
2.2. 转发request.getRequestDispatcher("/BServlet").forward(request, response);
2.3. ServletContext获取资源
必须是相对路径,可以“/”开头,也可以不使用“/”开头,但无论是否使用“/”开头都是相对当前应用路径
String path1 =this.getServletContext().getRealPath("a.txt");
String path2 =this.getServletContext().getRealPath("/a.txt");
path1和path2都是http://localhost:8080/projectname/a.txt
3 classes目录,即http://localhost:8080/projectname/WEB-INF/classes/,如
3.1. Class获取资源,必须是相对路径,可以“/”开头,也可以不使用“/”开头,
InputStream in1 = Demo.class.getResourceAsStream("/a.txt");
InputStream in2 = Demo.class.getResourceAsStream("a.txt");
假如Demo类位于WEB-INF/classes/cn/test,则in1的路径是WEB-INF/classes/a.txt,in2的路径是WEB-INF/classes/cn/test/a.txt(相对于当前Demo.classes的位置)
3.2. ClassLoader获取资源
必须是相对路径,可以“/”开头,也可以不使用“/”开头。但无论是否以“/”开头,资源都是相对当前类路径。
InputStream in1 = Demo.class.getClassLoader().getResourceAsStream("/a.txt");
InputStream in2 = Demo.class.getClassLoader().getResourceAsStream("a.txt");
in1和in2的路径都是http://localhost:8080/projectname/WEB-INF/classes/a.txt