关于前端页面请求路径的一些写法问题

在我们写前端页面发起请求时,一般写法有三种

  1. 以斜杠开头的 例如href=‘/应用上下文/login.jsp’
  2. 不以斜杠开头的href=‘login.jsp’
  3. 有前缀请求方式的href=‘http://www.baidu.com’
    其中第三种方式大家都了解,就是直接跳转到百度的页面,地址栏直接填充www.baidu.com,这个就不多说了,那么前两种方式都有什么区别呢
    曾经这是个令我头疼的问题,必须记录下来

第一种方式

第一种以斜杠开头的链接,其中它的斜杠表示根目录,这个根目录是相对于浏览器的,对应的就是
协议://服务名:端口号/,最常见的就是http://localhost:8080/这种,所以我们一般使用这种方式时都需要加上应用上下文的名字,不然光凭借http://localhost:8080/+访问的资源是会出现404的,因为中间少了应用上下文
解决方案:一般都不会直接使用斜杠作为开头,因为如果你这样做了,那么你还需要手动在斜杠后面填写应用上下文然后才可以写路径,非常的麻烦。
所以一般都是使用EL表达式${pageContext.request.contextPath}来做为链接的开头
例如<a href="${pageContext.request.contextPath}/image/car.jpg">点击访问图片</a>,这种方式在浏览器解析的时候就会把${pageContext.request.contextPath}解析成/你的应用上下文给填入到此链接中,所以就变为<a href="/你的应用上下文/image/car.jpg">点击访问图片</a>,你看,这样的链接前面就自动填充了斜杠,就可以正常访问静态资源和请求了

第二种方式

第二种是不以斜杠开头的链接,这种方式请求资源是以浏览器自动帮你把前面的内容填充上的,举个最简单的例子,比如我新建一个web工程,应用上下文叫ABC
我前端默认的index.jsp写一个A标签,链接填入一个请求Test/doSome,后端有对应的处理方法,后端接收到此请求会内部转发到index.jsp。就是这么一个脱裤子放屁的操作,会出问题
启动tomcat,访问index.jsp
在这里插入图片描述
点击刷新本页面之后的地址栏
确实发送了test/doSome请求,由于是内部转发,所以地址栏不会变为index.jsp而是保持发送请求的样子
在这里插入图片描述
再次点击刷新本页面,报错404
此时URL已经变为http://localhost:8080/ABC/test/test/doSome
在这里插入图片描述
这是为什么呢?因为浏览器是区分资源名称和资源路径的,
举个最简单的例子,当我第一次访问index.jsp时,对于浏览器来说
资源路径=http://localhost:8080/ABC/
资源名称=index.jsp
合起来就是完整的路径http://localhost:8080/ABC/index.jsp
由于我a标签中的链接前面没有用斜杠开头,浏览器会自动帮我补上这部分空白的路径,而这部分空白的路径参考的就是我上面写的资源路径=http://localhost:8080/ABC/,所以第一次请求没问题,地址栏被正常填充为http://localhost:8080/ABC/test/doSome,但是当我第二次点击a标签发请求的时候,这个时候,对于浏览器来说,当前的资源名称和路径分别为
资源路径=http://localhost:8080/ABC/test/
资源名称=doSome
那么这次发的请求就被填充为了http://localhost:8080/ABC/test/+test/doSome,对于服务器来说无法处理,所以就会报404
解决方案:使用HTML中的base标签将浏览器自动填充的路径替换为给定的一个固定值
在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值