zoukankan      html  css  js  c++  java
  • Java的绝对路径和相对路径

    1. 绝对路径

    以根部件开始的路径是绝对路径,比如/(Linux系统中)或者C:(Windows系统中)。
    默认文件系统的路径分隔符,类Unix文件系统是/,Windows是
    其实就是在硬盘上真正的路径,(URL和物理路径)例如:
    C:xyz est.txt 代表了test.txt文件的绝对路径。http://www.sun.com/index.htm也代表了一个URL绝对路径。

    2. 相对路径

    相对路径:相对于某个基准目录的路径。包含Web的相对路径(HTML中的相对目录),例如:在Servlet中,”/”代表Web应用的根目录,”./” 代表当前目录,“../”代表上级目录。

    3. java中的应用

    归根结底,Java本质上只能使用绝对路径来寻找资源。所有的相对路径寻找资源的方法,都不过是API在底层帮助我们构建了绝对路径,从而找到资源的!

    3.1 request.getContextPath()

    <%=request.getContextPath()%>是为了解决相对路径的问题,可返回站点的根路径或者叫根目录,分为两种情况:

    1. 将web项目中的webRoot下的文件直接拷贝到webapps/ROOT下(删除ROOT下的原有文件);
    2. 在Tomcat下的webapps中创建以项目名称命名(当然也可以用其他的名称)的文件夹,并将webRoot下的文件直接拷贝到该文件夹下。
      对于第一部署方法,request.getContextPath()的返回值为空(即:"",中间无空格,注意区分null)。
      对于第二部署方法,其返回值为:/创建的文件夹的名称。

    对于第1种方法,当你直接在浏览器中输入你的服务器ip+端口号,就会到你的jsp页面,而不是tomcat的默认页面,所以你通过request.getContextPath()得到的字符串是为空字符串;
    如果你想得到工程文件的实际物理路径,可通过:<%=request.getRealPath("/")%>。
    效果:

    <%
    
    String path = request.getContextPath();
    
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    
    %>
    
    path: /jspSmartUpLoad
    
    basePath: http://yangm1203.oicp.net:8080/jspSmartUpLoad/
    
    request.getScheme(): http
    
    request.getServerName(): yangm1203.oicp.net
    
    request.getServerPort(): 8080

    实际应用中,一般用来解决jsp测试和生产环境路径不同的问题
    request.getScheme();
    返回的协议名称,默认是http。对于ssl则返回"https"

    request.getServerName()
    返回的是服务器域名,如果是在本地的话就是localhost

    getServerPort()
    获取服务器端口号

    比如<a href="<%=request.getContextPath()%>/catalog.jsp">,但当这两个文件是在同一个目录下时,也可以直接用<a href="catalog.jsp">
    比如你要生成一个文件放在服务器上的一个目录下,可以使用request.getContextPath()+/dir,组成一个完整得目录结构!

    注意在velocity中的写法可能要改为

    $!{request.getContextPath()}

    一些常用的获取项目根目录写法:

    在jsp里去<%=request.getContextPath()%>这就是项目的根路径了。
    js的引入方法如下:
    <script src="<%=request.getContextPath() %> /home/test.js"></script>
    css的引入方法:
    <link href="<%=request.getContextPath() %>/css/one.css" rel="stylesheet" type="text/css">

    3.2 Classpath:

    指定类搜索路径。即用来告诉编译器导入的包或者类所在路径。
    比如我们安装JDK的配置:

    Classpath:

    .;%JAVA_HOME%lib;%JAVA_HOME%jrelib;

    分别表示当前目录,即自己的java类路径;jdk自带的标准类库路径。

    JAVA_HOME

    C:Program FilesJavajdk1.8._77

    设置jdk的安装路径。

    3.3 request.getRealPath()

    用来获得绝对路径

    • request.getRealPath("/");//不推荐使用获取工程的根路径
    • request.getRealPath(request.getRequestURI());//获取jsp的路径,这个方法比较好用,可以直接在servlet和jsp中使用
    • this.getClass().getClassLoader().getResource("").getPath();//获取工程classes 下的路径,这个方法可以在任意jsp,servlet,java文件中使用,因为不管是jsp,servlet其实都是java程序,都是一个 class。所以它应该是一个通用的方法。

    4. 相对路径的几种使用情况

    1.若引用的资源和本身在同一路径下(既在同一目录下),直接:

    <img src="tupian.gif" border="0"/> 

    2.要引用的文件在下一级文件夹下,文件名前加子文件夹名称

    假设info.html路径是:c:Inetpubwwwrootsiteslablainfo.html 
    假设index.html路径是:c:Inetpubwwwrootsiteslablahtml	utorialsindex.html 
    在info.html加入index.html超链接的href应该这样写:html/tutorials/index.html 

    3.要引用的文件在上一级文件夹下,文件名前加../

    假设info.html路径是:c:Inetpubwwwrootsiteslablainfo.html 
    假设index.html路径是:c:Inetpubwwwrootsitesindex.html 
    在info.html加入index.html超链接的代码应该这样写: 
    <a href="../index.html">index.html</a> 

    举一反三: ../表示源文件所在目录的上一级目录,../../表示源文件所在目录的上上级目录,以此类推

    4.更复杂的情况:

    假设info.html路径是:c:Inetpubwwwrootsiteslablainfo.html 
    假设index.html路径是:c:Inetpubwwwrootsiteshtmlindex.html 
    在info.html加入index.html超链接的代码应该这样写:<a href="../html/index.html">index.html</a> 

    5.最后一个例子

    假设路径:D:例子htmlstyleviewpop.css 
    D:例子htmlimagesview	upian.gif  
    在css中引用这个图片:<img src="../../images/view/tupian.gif" border="0"/> 

    在JSP/HTML等页面引用CSS,Javascript.Action等属性时,前面可以加上< %=request.getContextPath()%>,以确保所引用的文件都属于Web应用所在目录。因为当使用类似”.”,”./”,”../../”等相对路径时,文件移动很容易出问题,但对于目录结构不变的应用影响不大。

  • 相关阅读:
    常用jquery
    常用记录
    mysql proxy 读写分离
    Linux 学习笔记
    php 1116
    php 1115
    php 1110
    php 1109
    php 1108
    php 1105
  • 原文地址:https://www.cnblogs.com/liubin1988/p/7840183.html
Copyright © 2011-2022 走看看