首先讲一下我遇到的问题:
在application.property中我们会配置项目名称(如下)
server.servlet.context-path=http://www.likecs.com/interfacemanager
我们会在js代码里通过$.contextPath()引用我们设置的项目名称;
所以每次我们请求后台的时候链接都是这样的
$.contextPath()+/resource/querySomeThing;
即:
/interfacemanager /resource/querySomeThing
如果我们没有设置server.servlet.context-path的值,那么:
$.contextPath() 就是空$.contextPath()+/resource/querySomeThing就会变成
/resource/querySomeThing;
还有!我们发现请求里面是没有主机名和端口号的;这是因为ajax会在请求的时候自动为我们加上主机名和端口号,而他们处理的机制如下(没有设置项目名的情况):
url = “resource/querySomeThing”;//没有斜杠
url = “/resource/querySomeThing”;//一个斜杠
url = “/ /querySomeThing”;//两个斜杠
没有斜杠的情况:以当前网页(js可能与网页不在一个目录,但被加载在网页中,就以当前网页为准)所在的目录为根节点去+url;
一个斜杠:请求服务器根目录下的资源,ajax会自动为我们补全协议+ip+port类似 :8080+url;
两个斜杠:当出现”//”的时候,ajax就会只关心协议,而不去关心ip+port,所以我们的请求可能会变成这样 querySomeThing;
当我们设置了项目名称的时候不管有几个斜杠都是追加在项目名称之后的,那么”//”其实在目录中是不允许存在的。只是ajax把它当成一个“/“处理了。
如:
:8080/interfacemanger//query;
会处理成
:8080/interfacemanger/query;
我们来看一下 $.contextPath()的处理机制
其实pathName的值会随着请求链接的url部分而变化,所以在我们每次使用 $.contextPath()的时候都会截取第二个”/”前的部分,当然这个截取是根据实际需求自己去改的。这里只是生命一下 $.contextPath() 的值是会动态改变的