什么是类路径?
在项目中创建在src目录下的文件都会出现在Tomcat目录下的/项目名/WEB-INF/classes目录下。其中类文件会编译成.class文件,其他文件则原封不动的放在该路径下。
java代码中获取类路径(classes文件夹)
方案一:classload
package cn.itcast.web.servlet;
public class Hservlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ClassLoader classLoader=this.getClass().getClassLoader();
InputStream isInputStream=classLoader.getResourceAsStream("a.txt");
}
}
方案二: class
package cn.itcast.web.servlet;
public class Hservlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Class c = this.getClass();
//获取classes路径下文件
InputStream isInputStream = c.getResourceAsStream("/a.txt");
// 获取该类路径下的文件/classes/cn/itcast/web/servlet
// InputStream isInputStream2=c.getResourceAsStream("a.txt");
}
}
这里要注意加/和不加/的区别。
方案三:SercletContext
ServletContext默认是在WEB-INF目录
package cn.itcast.web.servlet;
public class Hservlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ServletContext servletContext = this.getServletContext();
InputStream isInputStream = servletContext
.getResourceAsStream("/classes/a.txt");
Set<String> set = servletContext.getResourcePaths("/");
System.out.println(set);
}
}
另外ServletContext还有一个方法:servletContext.getResourcePaths("/");
可以获取所有文件路径,以Set<String>
的形式返回。
注:该方法参数要带“/”
Tips:可在src中加../
跳到上一级目录
WEB.XML中的(Servlet路径)
以/开头相对于当前项目路径
转发和包含
以/开头相对于当前项目路径,不以/开头相对于当前Servlet
重定向、页面超链接、表单路径
以"/"开头相对于当前主机,即http://localhost:8080/,所以要手动添加项目名
ServletContext
相对于当前项目目录,即index.jsp所在目录