最近项目中,遇到相对路径和绝对路径的问题,参考了一些博文,根据自己的理解整理了一下,今后如果有更深刻的理解,可另行修改。
前端
-JSP跳转
1.相对跳转
和当前uri有关,比如当前地址为:
localhost:8080/test/
点击前端链接以后 <a href="test.jsp"/>
地址变为:
localhost:8080/test/test.jsp
相当于将地址栏中地址最后一个"/"后面的内容,换成href的内容,组合成新的地址。
注:href以"/"开头,是从服务器的根目录开始的路径,这将不包括项目名
如:<a href="/test.jsp"/>
地址变为:
localhost:8080/test.jsp
2.绝对跳转
<a href="<%=basePath%>test.jsp"/>
地址变为:
<a href="/test.jsp"/>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort() + path + "/";
%>
注:依次获取协议名、服务器名、端口号和项目名
此外,绝对地址不能直接访问WEB-INF下的jsp页面
如果jsp页面放在WebContent下,可直接<%=basePath%>+xxx.jsp访问
如果jsp页面放在WEB-INF下,则需要通过springmvc、struts2等进行转发,比如:
<a href="<%=basePath%>test.jsp"/>
@RequestMapping("/test")
public String getTest() {
return "test/test";
}
-action跳转
1.相对跳转
与jsp跳转类似,比如ajax请求中:
../../xxx/xxx.action
2.绝对跳转
与jsp跳转类似
后端
-jsp跳转
1.相对跳转
@RequestMapping("/")
public String getIndex() {
return "WEB-INF/views/index.jsp";
}
不以"/"开头,是相对路径,根据当前目录进行跳转
2.绝对跳转
@RequestMapping("/")
public String getIndex() {
return "/WEB-INF/views/index.jsp";
}
以"/"开头,是绝对路径,从
项目根目录
开始的路径
-action跳转
1.相对跳转
与jsp跳转类似
2.绝对跳转
与jsp跳转类似
总结:
相对跳转:修改最后一个"/"后面的内容,需要考虑namespace,容易出错。
绝对跳转:使用已经配置好的basePath(前端)或“/”(后端),从项目根目录下开始写路径,建议使用。