学习资源:动力节点的2020最新SpringMVC教程【IDEA版】-springmvc从入门到精通
1、相对地址
1.1、不使用 /
页面的请求地址中不加 / ,相对地址的参考地址是:当前页面的地址
<a href="user/register">发起注册请求</a>
点击上面的超链接后,新的页面的地址会变为:http://ip:端口号:工程名/user(register 被作为资源名)。这时如果在这个页面发起不带 / 的请求:
<a href="user/second">发起第二个请求</a>
会出现 http://ip:端口号/工程名/user/user/second The requested resource is not available 的问题。
解决方式:
- 使用以 "/" 开头的地址
- 使用html 的 base 标签,它表示当前页面的基地址,页面中所有没有以 "/" 开头的地址,都是以 base 标签中的地址为参考地址,使用 base 地址 + user/second 组成完整的访问地址
<head>
<base href="http://ip:端口号/工程名/" />
</head>
<body>
<a href="user/second">发起第二个请求</a>
</body>
项目中的使用方式:
<%
String basePath = request.getScheme() + "://" +
request.getServerName() + ":" + request.getServerPort() +
request.getContextPath() + "/";
%>
<html>
<head>
<base href="<%=basePath%>">
</head>
</html>
1.2、使用 /
页面的请求地址中加 / ,参考地址是:http:ip:端口号/。直接访问是会略过工程地址的,会造成 HTTP ERROR 404
<a href="/user/register">发起注册请求</a>
为了解决这个问题,可以在页面的请求地址中,附上 "/工程名" 的前缀
<a href="/工程名/user/register">发起注册请求</a>
但是这样的话,又会导致两个问题:
- 请求地址显得冗余不够清晰
- 工程名一旦修改的话,势必要修改每一个页面的请求前缀
解决方式:使用 ${pageContext.request.contextPath} 作为工程名:
<a href="${pageContext.request.contextPath}/user/register">发起注册请求</a>
2、绝对地址
<a href="http://ip:端口号/工程名/自定义请求地址">发起注册请求</a>