-
问题
今天在将自己代码提交之后,有人提醒报了404错误
我还傻傻的说我这里不报错啊,是不是你那里出问题了
浏览器报404,找到了这一个ajax请求
并且在控制层也能找到对应的响应器,检查了半天却没有发现错误,但是在同事那里就是报404的错误
-
错误原因及解决方案
后来发现在问题出新的原因是因为url我使用的是相对路径
在idea中打开tomcat configuration
在这里我发现我的Application context选择的是默认值,也就是部署在了服务器的webapp的root路径下,而同事那里在这里设置了值ContextName,那么他的项目就部署在了webapp的ContextName路径下面(有关application context的信息可以点击链接:)
因为同事那里给tomcat的添加了虚拟路径,而我这里没有设置
因此我就直接在服务器的根路径下就能访问到“count/subjectCount”,并且项目的访问路径如下图
但是我的同事给容器添加了虚拟路径,ContextName
这时我们就要在访问路径前面提添加"ContextName”,即新的url是“ContextName/count/subjectCount”,并且此时的项目访问路径如下图
这也就是问题出现的的原因,有的人对容器添加了虚拟路径,有的人没有给容器添加虚拟路径,直接放在toot里面了
结论
在这里说明一下,${pageContext.request.contextPath}是JSP取得绝对路径的方法,等价于<%=request.getContextPath()%> 。
也就是取出部署的应用程序名或者是当前的项目名称
因此,我们就应该设置访问路径的时候,使用绝对路径进行访问
- 使用jquery
var url='${pageContext.request.contextPath}'+'/count/subjectCount';
- 使用jsp的原始方法
<% String path = request.getContextPath(); String basePath = request.getScheme()+'://'+request.getServerName()+':'+request.getServerPort()+path+'/';%>***********var url=path+'/count/subjectCount';var url2=basePath+'/count/subjectCount';***********
在这里basePath获取了完整的路径和端口号还有项目的上下文环境。 ,可解决因为修改服务器端口号引起的找不到路径问题。