弊端
例:前端使用不加/的相对路径,参照路径是访问路径的资源路径
本例项目:http://localhost:8080/springmvc_war_exploded/
index.jsp
<a href="test/some.do">发起请求</a><br/>
后端控制代码
@RequestMapping(value ={"/test/some.do","/other.do"},method = RequestMethod.GET)
public ModelAndView doSome(){
System.out.println("Jinlai");
ModelAndView mv=new ModelAndView();
mv.setViewName("/index.jsp");
return mv;
}
此时前台请求能调用这个方法返回index.jsp
此时url变成了http://localhost:8080/springmvc_war/test/some.do
如果我们在点击发起请求,就会报错,因此我们用的相对路径,此时路径就会变成
http://localhost:8080/springmvc_war/test/test/some.do
因为此时的参照路径是是http://localhost:8080/springmvc_war/test/
解决方法1:使用加/的相对路径
加/的相对路径的参照路径是wb服务器的根路径
index.jsp
<a href="/springmvc_war/test/some.do">发起请求</a><br/>
如果项目名称改变了,就需要手动改变,因此可以使用
解决方法2:不加/使用 ${pageContext.request.contexPath}获取项目路径
<a href="${pageContext.request.contexPath}/test/some.do">发起请求</a><br/>
使用${pageContext.request.contexPath}就获取了项目名
解决方式3:不加/,前端使用base包
使用base包后,参照路径就变成了其中指定的地址
<head>
<title>Title</title>
<base href="http://localhost:8080/springmvc_war/" />
</head>
base真正的使用方式
如果项目名一旦发生变化,就需要改变,太过于麻烦,因此改成自动获取路径最好
<%
String basePath=request.getScheme()+"://"+
request.getServerName()+":"+request.getServerPort()+
request.getContextPaht()+"/";
%>
<html>
<head>
<title>Title</title>
//<base href="http://localhost:8080/springmvc_war/" />
<base href=base />
</head>
……
</html>
其中request.getScheme()获取的是协议部分:http
request.getServerName()获取的是ip:localhost
request.getServerPort()获取的是端口号:8080
request.getContextPaht()获取的访问路径:springmvc_war