关于相对路径,绝对路径,前台路径,后台路径的分类,以及浏览器和服务器对路径的解析规则,可以参考下面这篇博客:
转自:https://blog.youkuaiyun.com/qq_41933149/article/details/101847293
下面以一个曾经遇到的路径问题进行一下总结:
我有一个登录页面,地址为:
localhost:8080/bwcar/login.html
输入用户名和密码,点击登录后会触发一个ajax请求:
注意:url以 / 开头
login: function(event){
$.ajax({
type: 'POST',
data: JSON.stringify(this.user),
url: '/sys/login',
dataType: 'json',
contentType: 'application/json',
cache: false,
success: function(result){
if (result.code == 200){
window.location.href="index.html";
}else{
vm.error = true;
vm.errorMsg = result.msg;
vm.refreshCode();
}
}
});
}
后端代码是这样的:
@ResponseBody
@RequestMapping("/sys/login")
public R login(@RequestBody UserDTO userDTO){
String customKaptcha = userDTO.getCaptcha();
String serverKaptcha = ShiroUtils.getKaptcha();
if (!customKaptcha.equalsIgnoreCase(serverKaptcha)) {
return R.error("验证码错误");
}
// 省略其他代码
问题出现
把项目部署进tomcat后,地址栏输入:localhost:8080/bwcar/login.html,访问到上面的登录界面。输入用户名和密码,点击登录后发现没有任何响应,f12打开控制台发现如下的报错信息:
分析问题
我的ajax请求的路径是这样的:
url: '/sys/login'
根据参考的那篇博客,以 / 开头的前台路径,浏览器在解析的时候,参考的路径是当前web服务器的根,也就是:
localhost:8080
于是拼接成完整的请求路径就是:
localhost:8080/sys/login
这是不对的,就像访问我的登录页面一样,需要加上我的项目名称,也就是这样才能访问到:
localhost:8080/bwcar/sys/login
解决问题
解决办法是将ajax请求的url写出这样:
url: 'sys/login'
同样的,根据参考的博客,不以 / 开头的前台路径,浏览器在解析时,参考的路径是资源路径:
登录页面的url为:
localhost:8080/bwca/login.html
所以资源路径为:
localhost:8080/bwcar
于是拼接成完整的请求路径就是:
localhost:8080/bwcar/sys/login
这样才能访问到controller层,进行登录验证。