绝对路径相对路径

来源:互联网 发布:nba2k17科比捏脸数据 编辑:程序博客网 时间:2024/04/30 02:17


         从.net中就会遇到找文件相对路径的问题, 每次都机械的去做, 没有思考没有总结.

 

        这次又遇到了, 在做分销商添加模块的时候,需要用Ajax调用验证分销商代码是否已经添加的servlet模块, Ajax在调用我们自己写的这个servlet的时候, 获取在请求的时候调用的url, 需要找到我们自己编写servlet的位置. 多次出现错误,每次都是请求失败,错误代码 404 , 从网上查看404 的问题,  xmlHttp.status 状态为404 的时候 ,错误在于 没有发现文件, 查询或者url, 所以猜想自己转到servlet的链接地址出现了错误,  查看链接地址, 发现是相对路径写错了. 

 

        径我们在中学学习物理课程的时候就接触过相对和绝对的概念, 比如物体的相对静止. 我们说当两个物体速度一样时, 我们可以说这两个物体是相对静止的. 坐在公交车里的乘客看到树在后退, 而在路边的人看到树是静止的, 而事实上,无论什么情况, 由于地球的公转,大树都在不停的运动着, 这是我们的绝对运动.    而我们计算机世界中又提到了这两个词, 在这里我们的绝对路径和相对路径是怎么一回事呢?

 

        绝对路径:

        计算机中的绝对路径是: 你的主页上的文件在硬盘上的真正的路径(URL和物理路径)

 

        相对路径:

        相对与某个基准的目录的路径. 包含web的相对路径, 例如 在web项目中"/"代表根目录.  "./ " 代表当前目录, "../"代表上一级目录, 这种类似的表示, 属于相对路径.

 

        这就相当于, 你们家的门牌号是绝对的, 不熟悉你的人, 问你的地址,你的籍贯,你会告诉你家的"绝对地址" , 河北省廊坊市XXXXXX, 而如果一个你知道是河北人问你的住址, 你不会再说河北省, 你会直接告诉他是哪个哪个市, 再比如你们是同一个市的,你会告诉他你在哪个哪个小区........和计算机中的相对路径和绝对路劲类似吧...嘿嘿

 

        使用绝对路径和相对路径的好处

 

        相对路径来说优点很明显了, 你把你的程序以及用到的资源放到任意一个地方都可以, 而绝对路径就不能随意移动资源文件夹啦.  使用相对路径方便, 不受资源文件位置的改变而改变.

 

        而有人就会问既然相对路径这么出色那为什么要用绝对路径呢? 俗话说: 存在即合理.就像世界上的万物一样存在就有它存在的价值, 再渺小也有自己的价值. 而对于我们的绝对路劲来说, 绝对路径网上也告诉了我们, 1 网站采用绝对路径可以防止被竞争对手恶意镜像. 2 可以确定首选域.. 3 如果网站不用相对地址, 那么当不同的域名同时解析一个网站时, 访问这么多域名, 内容一样. 这让搜索引擎分辨出到底哪一个是主站.

 

 

        具体相对路径的用法.

        第一种方法:

         " ./ " 是同级, " ../ "是上一级, "/"  是相对于根目录的, 看到一篇不错的文章:http://blog.csdn.net/beijiguangyong/article/details/7075982  让我们更加清晰了.

         例如, C:\site\index.html.   G:\siet\web\datas\a.html    

        1 如果index.html链接a.html       href地址为: C:\site是一样的, \web\datas\a.html

        2 如果a.html中链接index.html  href地址为:   ../../index.html.  因为index.html相当于a.html的上一级的上一级.

        

       

          第二种方法:

        我们可以把根目录定义为我们的"相对" , 从上述的例子可以看出, 相对路径相对的是相同的部分C:\site\ , 而我们也可以自己手动设置我们我的"参照物" (小女子这样理解的,不知道是否欠妥.....), 我们用html中的base标签进行设置.

 

        我们在jsp页面:

 

<%String path = request.getContextPath();//默认成为根了.String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%>

        request.getContextPath(): 得到项目的名字, 如果项目为根目录, 则得到一个"",即空字符串. 如果为 cccc, 则得到/cccc/服务器端自动加上.

        request.getScheme() :返回协议的名称 http, 和后面的:// 拼起来就成了http://

        request.getServerName(): 获取我们服务器的名称, 如果你的应用部署在本机那么就返回localhost或者127.0.0.1, 这两个等价.

        request.getServerPort(): 是我们使用的端口号, 比如8080 等.

我们把上面的拼接起来, 放到字符串变量basePath中, 也就是取得了根目录. 

 

 

        我们在html的<base>标签中设置相对值为根目录, <base>标签为页面上的所有链接规定默认的地址.  有了base后 , 我们设定了相对值, 就可以自己写全了. 这样貌似是"绝对路径" , 只不过提取出了相对值.

 

html页面head中:

         <head><base href="<%=basePath%>"></head>


 

        用这种 "类似绝对路径" 方式,1   index.html链接a.html 地址为,  web\datas\a.html  ,  而  2    a.html链接index.html地址为: index.html ,就不用加../../啦.   这样的好处就是提取出了公共的部分, 避免写错相对层.

 

这两种方式的区别就像, 第一种是我们没有规定参照物都是从地球开始 , 第二种是我们规定了具体参照物, 但都属于相对~~~而非绝对~~~