前端使用相对路径的弊端及解决方案

弊端

例:前端使用不加/的相对路径,参照路径是访问路径的资源路径
本例项目: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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值