请求路径的奇葩之处(二)

昨天简单分析了下路径的相对于绝对,然后在项目中遇到一个问题:如下
首先我所在url:http://localhost:8080/OnlineC/r/findAll
想到达的url:http://localhost:8080/OnlineC/r/findFiles
可以看出都是在r子目录下的请求,一个为findAll另一个是findFiles
所以我可以用相对路径进入,href="findFiles"

当我想反过来的时候http://localhost:8080/OnlineC/r/findFiles
到http://localhost:8080/OnlineC/r/findAll
请求href="findAll"发现不行,总是r/findAll才可以;

这里我们需要去了解下服务器work中,对jsp请求转换servlet有一定的了解,先不说这个;
先解释下为什么出现这个错误,原来是第二次的jsp中开头有个路径声明

<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

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

request.getSchema()可以返回当前页面使用的协议,http 或是 https;

request.getServerName()可以返回当前页面所在的服务器的名字;

request.getServerPort()可以返回当前页面所在的服务器使用的端口,就是80;

request.getContextPath()可以返回当前页面所在的应用的名字;

所以第二次href="findAll"实际上被追加在了basePath后了也就是
http://localhost:8080/OnlineC/findAll
所以出错了,正确的http://localhost:8080/OnlineC/r/findAll


结论:当要多用相对路径的时候,如果要根据当前的路径来判断相对于哪个路径,就去掉前面那个声明,比如上面提到的都是相对于/r/路径;
如果路径多复杂,就声明好了初始路径,后面的都是相对于这个路径,比如basePath


另:这里强烈提倡用第二中,首先是jsp创建的时候就会自己声明好,毕竟那些架构师当年架构的时候想的比我们多,肯定有好处,
其次是,当后台各种转发后,我们知道 地址栏路径不会改变,这个时候你要记住转发前的url地址,如果是第一种,你就要考虑该怎么追加path,
如果:转发前http://localhost:8080/OnlineC/r/findU
要到http://localhost:8080/OnlineC/r/findAll这个请求,那么jsp追加href=“findAll”

如果:转发前http://localhost:8080/OnlineC/findU
要到http://localhost:8080/OnlineC/r/findAll这个请求,那么jsp追加href=“r/findAll”,
这里看出来就是要根据之前的url考虑怎么去追加url,但是如果是第二种方式,那么我们不需要去考虑之前的url,
比如basePath声明好=http://localhost:8080/OnlineC/
那么我们后面相对路径都是相对这个的:转发前是http://localhost:8080/OnlineC/r/findU
或者是http://localhost:8080/OnlineC/findU到达http://localhost:8080/OnlineC/r/findAll
那么相对路径都是href=“r/findAll”,

当然还有一处

[img]http://dl.iteye.com/upload/attachment/0078/7946/51a5e925-308a-3e6a-91c9-a6e666163204.jpg[/img]

这里页面时bill.jsp地址栏是http://localhost:8080/OnlineC/r/findAll
如果不声明basepath 那么应该是这个路径
<h3><a href="findFiles">查看文件</a></h3>
<h3><a href="findAll">查看人员列表</a></h3>
然后action="/OnlineC/r/s/search" 这个完成后路径就是
http://localhost:8080/OnlineC/r/s/search?**然后又转发到bill.jsp
那么我们假设要点击 查看人员列表 按钮,相对路径追加后应该是
http://localhost:8080/OnlineC/r/s/findAll,
这明显错了,正确是http://localhost:8080/OnlineC/r/findAll,所以这个jsp中我声明了初始相对路径

说了这么多希望对别人有个帮助,码字还真是累啊 。。。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值