首先明白什么是绝对路径,什么是相对路径
简单来说:
绝对路径就是以电脑的盘符为根目录
相对路径是以项目文件为根目录
使用绝对路径还是相对路径是看开发的项目是否需要移动
以此为基础看下面内容
web应用开发下是WebRoot目录
一般用request.getContextPath()来解决,返回的是相对于项目的路径,在请求转发和请求重定向
注: 在web开发过程中,由于开发和部署使用的不是同一个路径,开发是在workspace下,部署是部署到服务器,由于不知道部署的绝对路径,在读取资源时,需要指定该资源的绝对路径,解决办法就是通过方法动态来动态获取当前应用所在的绝对路径
方法: String path = this.getServletContext().getRealPath("相对于web应用的路径");返回的是该资源的绝对路径
如果没用Servlet则利用类加载器来加载资源,要求传入的文件路径必须是相对于类加载器的路径
xxx.class.getClassLoader().getResource("/资源文件").getPath() 这种方法只有在WebRoot/WEB-INF/classes下才能生效,如果打包,则失效
String path = this.getServletContext().getRealPath("相对于web应用的路径");
System.out.println("path:"+path);
String path1 = RegistServlet.class.getClassLoader().getResource("").getPath();
System.out.println("path1"+path1);
path:D:\tomcat\webapps\Test\
path1:/D:tomcat/webapps/Test/WEB-INF/classes/
两个方式产生的相对路径都是相对于上面的结果的路径
ServletContext方式生成的是基于Web项目的路径
类加载器生成的是相对于字节码文件的路径
注: 在用myeclipse工具开发过程中WEB-INF/classes是不可见的,只有在工作空间下可以找到
问题小解决:
使用mysql中遇到一个问题,rs.executeQuery()方式返回的结果集,在只有一条结果的情况下
next()指针遍历
if(rs.next()){
如果上面输出了一次rs.next(),则第二次值为false,今天在这里栽了两个坑
}else{
}