客户端请求的绝对路径与相对路径问题

本文详细介绍了HTML和JSP中的绝对路径和相对路径的区别及使用。在页面中,不带协议的地址是相对地址,需要结合当前页面地址来定位资源。相对路径在不同上下文下可能导致不同的访问结果,例如在 `/SpringMVC/index.jsp` 页面发起 `user/some.do` 请求,可能会变成 `/SpringMVC/user/some.do`。为解决路径问题,可以使用 `${pageContext.request.contextPath}` 或 `<base>` 标签来确保路径的正确性。对于JSP,还可以利用EL表达式灵活处理路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在jsp,html中使用的地址,都是在前端页面中的地址,都是相对地址

地址分类:
  1.绝对地址,带有协议名称的是绝对地址例如http://www.baidu.com
  2.相对地址,没有协议开头的,例如 user/some.do,
  相对地址不能独立使用,必须有一个参考地址。通过参考地址+相对地址本身才能指定资源。
  3.参考地址
  1)在你的页面中的,访问地址不加"/"
  访问的是http://localhost:8080/SpringMVC/index.jsp
  当前页面的地址:http://localhost:8080/SpringMVC/
  资源:index.jsp

  在index.jsp中发起user/some.do请求,访问地址变为http://localhost:8080/SpringMVC/user/some.do,当你点击链接时,访问地址就是当前页面的地址加上链接的地址
http://localhost:8080/SpringMVC/ + user/some.do


  如果访问的是http://localhost:8080/SpringMVC/user/some.do
  路径:http://localhost:8080/SpringMVC/user/
  资源:some.do
  此时再在该页面里发起user/some.do请求,访问地址就会变为http://localhost:8080/SpringMVC/user/user/some.do

  解决方案:
    1.加入${pageContext.request.contextPath}使用绝对路径
    2.加入一个base标签,是html语言中的标签。表示当前页面中访问地址的基地址。你的页面中所有没有“/”开头的地址,都是以base标签中的地址作为参考地址的

<head>
    <title>Title</title>
    <base href="http://localhost:8080/SpringMVC/">
</head>

如果担心服务器、端口这些改变了会导致base中的路径需要重新设置,那么可以这样写,当然,仅限于jsp

<%
    String basePath=request.getScheme()+"://"+
        request.getServerName()+":"+request.getServerPort()+
        request.getContextPath()+"/";
%>
<html>
<head>
    <title>Title</title>
    <base href="<%=basePath%>">
</head>

  2)在你的页面中,访问地址加"/"
  访问的是http://localhost:8080/SpringMVC/index.jsp
  路径:http://localhost:8080/SpringMVC/
  资源:index.jsp

  在idnex.jsp中发起/user/some.do请求,访问地址变为http://localhost:8080/user/some.do,参考地址是你的服务器地址http://localhost:8080

  此时无法访问,那么我们可以在访问时将路径定义为/SpringMVC/user/some.do,不过这样也不够灵活,当后端的项目映射名改变时,需要修改所有的前端访问路径,如果是jsp,此时可以使用el表达式
  <a href="${pageContext.request.contextPath}/user/some.do"></a>发起user/some.do的get请求

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值