137578346的gravatar头像
137578346 2016-06-28 20:26:32
java相对路径和绝对路径的使用

“./”表示当前目录,“../”来表示上一级目录,“http://www.cnblogs.com/”表示上上级的目录,以此类推。

1.基本概念的理解   绝对路径:绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL和物理路径)例如: C:\xyz\test.txt 代表了test.txt文件的绝对路径。http://www.sun.com/index.htm也代表了一个 URL绝对路径。 

  相对路径:相对与某个基准目录的路径。包含Web的相对路径(HTML中的相对目录),例如:在 Servlet中,"/"代表Web应用的跟目录。和物理路径的相对表示。例如:"./" 代表当前目录, "../"代表上级目录。这种类似的表示,也是属于相对路径。 另外关于URI,URL,URN等内容,请参考RFC相关文档标准。 RFC 2396: Uniform Resource Identifiers (URI): Generic Syntax, (http://www.ietf.org/rfc/rfc2396.txt) 

  2.关于JSP/Servlet中的相对路径和绝对路径。 

  2.1服务器端的地址 

  服务器端的相对地址指的是相对于你的web应用的地址,这个地址是在服务器端解析的 (不同于html和javascript中的相对地址,他们是由客户端浏览器解析的)也就是说这时候 在jsp和servlet中的相对地址应该是相对于你的web应用,即相对于http://192.168.0.1/webapp/的。 

  其用到的地方有: forward:servlet中的request.getRequestDispatcher(address);这个address是 在服务器端解析的,所以,你要forward到a.jsp应该这么写: request.getRequestDispatcher(“/user/a.jsp”)这个/相对于当前的web应用webapp, 其绝对地址就是:http://192.168.0.1/webapp/user/a.jsp。 sendRedirect:在jsp中 

  2.2、客户端的地址 所有的html页面中的相对地址都是相对于服务器根目录(http://192.168.0.1/)的, 而不是(跟目录下的该Web应用的目录)http://192.168.0.1/webapp/的。 Html中的form表单的action属性的地址应该是相对于服务器根目录(http://192.168.0.1/)的, 所以,如果提交到a.jsp为:action="/webapp/user/a.jsp"或action=""/user/a.jsp; 

  提交到servlet为actiom="/webapp/handleservlet" 

  Javascript也是在客户端解析的,所以其相对路径和form表单一样。 

  因此,一般情况下,在JSP/HTML页面等引用的CSS,Javascript.Action等属性前面最好都加上 ,以确保所引用的文件都属于Web应用中的目录。 另外,应该尽量避免使用类似".","./","http://www.cnblogs.com/"等类似的相对该文件位置的相对路径,这样 当文件移动时,很容易出问题。

3. JSP/Servlet中获得当前应用的相对路径和绝对路径 

  3.1 JSP中获得当前应用的相对路径和绝对路径 根目录所对应的绝对路径:request.getRequestURI() 文件的绝对路径  :application.getRealPath(request.getRequestURI()); 

  当前web应用的绝对路径 :application.getRealPath("/"); 

  取得请求文件的上层目录:new File(application.getRealPath(request.getRequestURI())).getParent() 

  3.2 Servlet中获得当前应用的相对路径和绝对路径 根目录所对应的绝对路径:request.getServletPath(); 

  文件的绝对路径 :request.getSession().getServletContext().getRealPath (request.getRequestURI()) 

  当前web应用的绝对路径 :servletConfig.getServletContext().getRealPath("/"); 

  (ServletContext对象获得几种方式: javax.servlet.http.HttpSession.getServletContext() javax.servlet.jsp.PageContext.getServletContext() javax.servlet.ServletConfig.getServletContext() ) 

  4.java 的Class中获得相对路径,绝对路径的方法 

  4.1单独的Java类中获得绝对路径 

  根据java.io.File的Doc文挡,可知: 默认情况下new File("/")代表的目录为: 

  System.getProperty("user.dir")。 一下程序获得执行类的当前路径 

  package org.cheng.file; 

  import java.io.File; 

  public class FileTest { 

  public static void main(String[] args) throws Exception { System.out.println(Thread.currentThread().getContextClassLoader().getResource("")); System.out.println(FileTest.class.getClassLoader().getResource(""));   System.out.println(ClassLoader.getSystemResource("")); System.out.println(FileTest.class.getResource("")); 

  System.out.println(FileTest.class.getResource("/")); 

  //Class文件所在路径 

  System.out.println(new File("/").getAbsolutePath()); 

  System.out.println(System.getProperty("user.dir")); 

  } 

  } 


打赏
最近浏览
茫茫人海中的小牛  LV10 2019年7月8日
zdm128136  LV8 2017年11月24日
junwuxie  LV5 2017年9月4日
zc125wy  LV3 2017年5月22日
yx2552421  LV4 2017年1月19日
sp朱盼  LV16 2016年12月27日
2836248478  LV3 2016年12月20日
springlala  LV2 2016年12月8日
li6540123  LV2 2016年11月30日
mxng  LV9 2016年11月27日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友