`

java(Web)中相对路径,绝对路径问题总结

    博客分类:
  • Java
阅读更多

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中<%response.sendRedirect("/rtccp/user/a.jsp");%>

2.22、客户端的地址
 
       所有的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="<%=request.getContextPath()%>"/user/a.jsp;
  提交到servlet为actiom="/webapp/handleservlet"  
   Javascript也是在客户端解析的,所以其相对路径和form表单一样。
 

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


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"));   
 }
}

4.2服务器中的Java类获得当前路径(来自网络)
(1).Weblogic

WebApplication的系统文件根目录是你的weblogic安装所在根目录。
例如:如果你的weblogic安装在c:\bea\weblogic700.....
那么,你的文件根路径就是c:\.
所以,有两种方式能够让你访问你的服务器端的文件:
a.使用绝对路径:
比如将你的参数文件放在c:\yourconfig\yourconf.properties,
直接使用 new FileInputStream("yourconfig/yourconf.properties");
b.使用相对路径:
相对路径的根目录就是你的webapplication的根路径,即WEB-INF的上一级目录,将你的参数文件放

在yourwebapp\yourconfig\yourconf.properties,
这样使用:
new FileInputStream("./yourconfig/yourconf.properties");
这两种方式均可,自己选择。

(2).Tomcat

在类中输出System.getProperty("user.dir");显示的是%Tomcat_Home%/bin

(3).Resin

不是你的JSP放的相对路径,是JSP引擎执行这个JSP编译成SERVLET
的路径为根.比如用新建文件法测试File f = new File("a.htm");
这个a.htm在resin的安装目录下

(4).如何读相对路径哪?

在Java文件中getResource或getResourceAsStream均可

例:getClass().getResourceAsStream(filePath);//filePath可以是"/filename",这里的/代表web

发布根路径下WEB-INF/classes

默认使用该方法的路径是:WEB-INF/classes。已经在Tomcat中测试。

分享到:
评论
1 楼 qsfwy 2010-02-01  
<div class="quote_title">yaofeng911 写道</div>
<div class="quote_div">
<p>1.基本概念的理解</p>
<p>  绝对路径:绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL和物理路径)例如:<br>C:\xyz\test.txt 代表了test.txt文件的绝对路径。<a href="http://www.sun.com/index.htm">http://www.sun.com/index.htm</a>也代表了一个<br>URL绝对路径。</p>
<p>  相对路径:相对与某个基准目录的路径。包含Web的相对路径(HTML中的相对目录),例如:在<br>Servlet中,"/"代表Web应用的跟目录。和物理路径的相对表示。例如:"./" 代表当前目录,<br>"../"代表上级目录。这种类似的表示,也是属于相对路径。</p>
<p>另外关于URI,URL,URN等内容,请参考RFC相关文档标准。</p>
<p>RFC 2396: Uniform Resource Identifiers (URI): Generic Syntax, <br>(<a href="http://www.ietf.org/rfc/rfc2396.txt">http://www.ietf.org/rfc/rfc2396.txt</a>)</p>
<p><br>2.关于JSP/Servlet中的相对路径和绝对路径。</p>
<p>2.1服务器端的地址 </p>
<p>   服务器端的相对地址指的是相对于你的web应用的地址,这个地址是在服务器端解析的<br>(不同于html和javascript中的相对地址,他们是由客户端浏览器解析的)也就是说这时候<br>在jsp和servlet中的相对地址应该是相对于你的web应用,即相对于<a href="http://192.168.0.1/webapp/">http://192.168.0.1/webapp/</a>的。 </p>
<p>  其用到的地方有: <br> forward:servlet中的request.getRequestDispatcher(address);这个address是<br>在服务器端解析的,所以,你要forward到a.jsp应该这么写:<br>request.getRequestDispatcher(“/user/a.jsp”)这个/相对于当前的web应用webapp,<br>其绝对地址就是:<a href="http://192.168.0.1/webapp/user/a.jsp">http://192.168.0.1/webapp/user/a.jsp</a>。 <br>sendRedirect:在jsp中&lt;%response.sendRedirect("/rtccp/user/a.jsp");%&gt; </p>
<p>2.22、客户端的地址 <br> <br>       所有的html页面中的相对地址都是相对于服务器根目录(<a href="http://192.168.0.1/">http://192.168.0.1/</a>)的,<br>而不是(跟目录下的该Web应用的目录)http://192.168.0.1/webapp/的。 <br> Html中的form表单的action属性的地址应该是相对于服务器根目录(<a href="http://192.168.0.1/">http://192.168.0.1/</a>)的,<br>所以,如果提交到a.jsp为:action="/webapp/user/a.jsp"或action="&lt;%=request.getContextPath()%&gt;"/user/a.jsp;<br>  提交到servlet为actiom="/webapp/handleservlet"  <br>   Javascript也是在客户端解析的,所以其相对路径和form表单一样。 <br> </p>
<p>  因此,一般情况下,在JSP/HTML页面等引用的CSS,Javascript.Action等属性前面最好都加上<br>&lt;%=request.getContextPath()%&gt;,以确保所引用的文件都属于Web应用中的目录。<br>另外,应该尽量避免使用类似".","./","../../"等类似的相对该文件位置的相对路径,这样<br>当文件移动时,很容易出问题。</p>
<p><br>3. JSP/Servlet中获得当前应用的相对路径和绝对路径<br>3.1 JSP中获得当前应用的相对路径和绝对路径<br> 根目录所对应的绝对路径:request.getRequestURI()<br> 文件的绝对路径     :application.getRealPath(request.getRequestURI());<br> 当前web应用的绝对路径 :application.getRealPath("/");<br> 取得请求文件的上层目录:new File(application.getRealPath(request.getRequestURI())).getParent()</p>
<p>3.2 Servlet中获得当前应用的相对路径和绝对路径<br> 根目录所对应的绝对路径:request.getServletPath();<br> 文件的绝对路径    :request.getSession().getServletContext().getRealPath<br>(request.getRequestURI())   <br> 当前web应用的绝对路径 :servletConfig.getServletContext().getRealPath("/");<br>     (ServletContext对象获得几种方式:<br>       javax.servlet.http.HttpSession.getServletContext() <br>       javax.servlet.jsp.PageContext.getServletContext() <br>       javax.servlet.ServletConfig.getServletContext() <br>     )</p>
<p>4.java 的Class中获得相对路径,绝对路径的方法<br>4.1单独的Java类中获得绝对路径<br>  根据java.io.File的Doc文挡,可知:<br> 默认情况下new File("/")代表的目录为:System.getProperty("user.dir")。<br> 一下程序获得执行类的当前路径<br>package org.cheng.file;<br>import java.io.File;</p>
<p>public class FileTest {<br>    public static void main(String[] args) throws Exception {      </p>
<p>  System.out.println(Thread.currentThread().getContextClassLoader().getResource(""));     </p>
<p>  System.out.println(FileTest.class.getClassLoader().getResource(""));        </p>
<p>  System.out.println(ClassLoader.getSystemResource(""));        <br>  System.out.println(FileTest.class.getResource(""));        <br>  System.out.println(FileTest.class.getResource("/")); //Class文件所在路径  <br>  System.out.println(new File("/").getAbsolutePath());        <br>  System.out.println(System.getProperty("user.dir"));    <br> }<br>}</p>
<p>4.2服务器中的Java类获得当前路径(来自网络)<br>(1).Weblogic</p>
<p>WebApplication的系统文件根目录是你的weblogic安装所在根目录。<br>例如:如果你的weblogic安装在c:\bea\weblogic700.....<br>那么,你的文件根路径就是c:\.<br>所以,有两种方式能够让你访问你的服务器端的文件:<br>a.使用绝对路径:<br>比如将你的参数文件放在c:\yourconfig\yourconf.properties,<br>直接使用 new FileInputStream("yourconfig/yourconf.properties");<br>b.使用相对路径:<br>相对路径的根目录就是你的webapplication的根路径,即WEB-INF的上一级目录,将你的参数文件放</p>
<p>在yourwebapp\yourconfig\yourconf.properties,<br>这样使用:<br>new FileInputStream("./yourconfig/yourconf.properties");<br>这两种方式均可,自己选择。</p>
<p>(2).Tomcat</p>
<p>在类中输出System.getProperty("user.dir");显示的是%Tomcat_Home%/bin</p>
<p>(3).Resin</p>
<p>不是你的JSP放的相对路径,是JSP引擎执行这个JSP编译成SERVLET<br>的路径为根.比如用新建文件法测试File f = new File("a.htm");<br>这个a.htm在resin的安装目录下 </p>
<p>(4).如何读相对路径哪?</p>
<p>在Java文件中getResource或getResourceAsStream均可</p>
<p>例:getClass().getResourceAsStream(filePath);//filePath可以是"/filename",这里的/代表web</p>
<p>发布根路径下WEB-INF/classes</p>
<p>默认使用该方法的路径是:WEB-INF/classes。已经在Tomcat中测试。</p>
</div>
<p> </p>

相关推荐

    java Web 中相对路径绝对路径问题总结

    以下是对Java Web中相对路径与绝对路径问题的深入总结: ### 一、路径概念与标准 #### 1. URL与URI URL(Uniform Resource Locator)统一资源定位符,是一种用于标识网络上资源位置的标准格式,如`...

    java中相对路径与绝对路径的问题

    "Java 中相对路径与绝对路径的问题" Java 中的路径问题一直是困扰许多编程人员的问题之一。在 Java 中,我们需要了解相对路径和绝对路径的概念,以及如何获取它们。下面我们将详细地讨论 Java 中的相对路径和绝对...

    Java相对路径绝对路径总结

    通过上述总结,我们可以了解到在Java Web开发中,正确理解和使用相对路径和绝对路径是非常重要的。它们在服务器端和客户端有不同的含义,并且在不同的应用场景下有着不同的使用方式。了解这些基础知识有助于我们编写...

    java中File的相对路径与绝对路径总结

    ### Java中File的相对路径与绝对路径总结 在Java Web开发过程中,经常需要处理文件的读写操作,尤其是在运行时获取配置文件、动态加载对象等情况。对于这些需求,理解和掌握文件的相对路径与绝对路径至关重要。 ##...

    java绝对路径和相对路径

    ### Java中的绝对路径与相对路径 在Java编程中,路径管理是进行文件操作的重要组成部分,尤其是在Web应用开发中。本文将详细介绍如何在Java中获取不同类型的路径,包括Web服务器下的文件路径、本地路径以及相对路径...

    java中相对路径,绝对路径问题总结.doc

    总的来说,正确理解和使用Java中的相对路径和绝对路径是开发Web应用的基础,这有助于确保资源的正确访问,提高代码的可移植性和维护性。在实际开发中,应当避免过于依赖于特定的文件系统结构,尽可能使用相对路径,...

    Java开发绝对和相对路径问题

    Java 开发中,路径问题是非常重要的一方面,不同的路径表示方式会带来不同的结果,了解绝对路径和相对路径的概念和使用方法对Java 开发非常重要。本文总结了Java 开发中的路径问题,帮助开发朋友方便解决路径问题,...

    java项目中获取路径详解

    Java 项目中获取路径详解 在 Java 项目中,获取路径是非常重要的,因为它关系到项目的正确运行。特别是在 Java Web 项目中,...在 Java Web 项目中,获取路径变得更加复杂,需要注意编译后的目录和相对路径的关系。

    JAVA获取各种路径总结

    在Java开发中,特别是在Web应用开发中,经常需要获取不同类型的路径,例如:当前Web应用的路径、特定文件的真实路径等。本文将详细讲解如何通过不同的方式来获取这些路径。 #### JSP中获取路径 1. **获取当前应用...

    绝对路径和相对路径

    在Web开发中,尤其是在使用Java Servlet和JSP技术时,正确理解和使用相对路径和绝对路径至关重要。 ##### 2.1 服务器端的地址 服务器端的相对地址是指相对于你的Web应用的地址,这个地址是在服务器端进行解析的,...

    java web开发中的路径问题

    在Java Web开发中,路径问题是一个常见的挑战,尤其是在处理JSP页面、Servlet以及web.xml配置文件时。理解和正确使用路径对于构建稳定、高效的应用程序至关重要。以下是对标题和描述中提及的知识点的深入探讨。 ###...

    在JAVA文件中获取该项目的相对路径.doc

    JAVA 文件中获取项目的相对路径 在 JAVA 文件中获取项目的相对路径是非常重要的,特别是在 JSP/Servlet 中。下面将详细介绍在 JAVA 文件中获取项目的相对路径的相关知识点。 1. 绝对路径和相对路径的概念 在讨论...

    WEB 项目中JAVA取得WEBROOT物理路径

    在Java Web开发中,获取WEB-INF目录或者更广泛的WEBROOT(Web应用的根目录)的物理路径是一项常见的需求。这通常涉及到服务器环境变量、Servlet API的使用以及对Web应用部署结构的理解。以下将详细讲解如何在Java中...

    Java用相对路径连接Access数据库

    如果是传统Java项目,需要手动下载并添加到项目的类路径中。 2. **建立数据库连接**:使用`DriverManager.getConnection()`方法,提供一个包含数据库URL的字符串。对于Access,URL格式通常为`jdbc:odbc:driver={...

    java开发中的路径问题

    在Java开发中,路径问题是一个常见且重要的主题,特别是在Servlet和JSP的上下文中。路径主要分为两种类型:相对路径和绝对路径。 **1. 相对路径与绝对路径** - **相对路径**:它是相对于某个基准目录的路径。例如...

    Java或web中解决所有路径问题

    在Java Web开发中,路径问题往往困扰着许多开发者,尤其是在处理资源定位、文件读取以及配置文件加载等场景时。本文将深入解析Java Web中所有路径问题的解决方法,涵盖Servlet、Action、Controller、Filter、...

    JSP中绝对路径与相对路径

    本文将深入探讨JSP(JavaServer Pages)环境中绝对路径与相对路径的区别及其应用场景,帮助开发者更好地理解这两种路径类型,并在实际开发中做出合适的选择。 #### 二、绝对路径与相对路径的基本概念 1. **绝对...

Global site tag (gtag.js) - Google Analytics