绝对路径相对路径


从.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,就不用加../../啦. 这样的好处就是提取出了公共的部分, 避免写错相对层.

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值