java(web)相对路径,绝对路径

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java(web)相对路径,绝对路径相关的知识,希望对你有一定的参考价值。

1、定义

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

  相对路径:相对与某个基准目录的路径。包含Web的相对路径(html中的相对目录),例如:在
Servlet中,"/"代表Web应用的根目录。和物理路径的相对表示。例如:"./" 代表当前目录,
"../"代表上级目录。这种类似的表示,也是属于相对路径。

 

2、JSP/Servlet中的相对路径写法

  2.1带有"/"的相对路径

  要点:确定是服务器调用  还是  浏览器调用

  (1)服务器端带有"/"的相对路径(服务器调用)

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

 

  例如:request.getRequestDispatcher("/reg/reg.jsp").forward(request,response)

这里的地址就是服务器端调用,“/”相对于当前的web应用webapp,
其绝对地址就是:http://localhost:8080/webapp/reg/reg.jsp

  (2)客户端带有"/"的相对路径(浏览器调用)

   所有的html页面中的相对地址都是相对于服务器根目录(http://localhost:8080/)的,
而不是(跟目录下的该Web应用的目录)http://localhost:8080/webapp/的。
 Html中的form表单的action属性的地址应该是相对于服务器根目录(http://localhost:8080/)的

例如:如果提交到toreg.jsp为:action="/webapp/reg.jsp"或action="<%=request.getContextPath()%>"/reg.jsp;
  提交到servlet为actiom="/webapp/regservlet"  
   Javascript也是在客户端解析的,所以其相对路径和form表单一样。
 

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

 2.2不带"/"的相对路径

例如,假如当前的页面路径是http://localhost:8080/myWebApp/login.jsp那么在这个页面访问"main.jsp"即是访问http://localhost:8080/myWebApp/main.jsp

也就是说,使用不带"/"的相对路径  那么访问的是  当前页面路径  所属 目录下的文件路径(这个特征无论是服务器端还是客户端都适用)

  

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()
     )

3.3 在SSH各个层次获得项目根目录 REQUEST 等

Java代码 
  1. 1.System.out.println(ServletActionContext.getServletContext().getRealPath("/"));     
  2. 2.ystem.out.println(Struts2Utils.getParameter("loginName"));    
  3.     System.out.println(ServletActionContext.getServletContext().getRealPath("/"));  
  4. System.out.println(Struts2Utils.getParameter("loginName"));  


利用了STRUTS2的ServletActionContext类
他是线程安全的 使用了threadlocal

或者利用springside的Struts2Utils类
他封装了struts2的ServletActionContext类

以上是关于java(web)相对路径,绝对路径的主要内容,如果未能解决你的问题,请参考以下文章

Java Web中相对路径与绝对路径的分析

java中如何判断web工程中图片的绝对路径是不是存在

java web中读取文件,相对路径怎么写

相对路径和绝对路径的区别是啥?

java中的绝对路径和相对路径

在Java web中相对路径和绝对路径区别及应用方法