AJAX调用返回404(Spring Boot):JSP路径配置问题求助
解决AJAX调用JSP时的404路径问题
我来帮你搞定这个AJAX调用JSP的404问题,这类路径歧义在Java Web项目里太常见了,咱们一步步来排查和解决:
先搞懂路径的核心规则
你的JS文件放在src/main/resources/static下,这是Spring Boot等Java Web框架默认的静态资源目录,前端访问时会直接映射到项目的根路径(/)。但JSP文件的位置决定了它的可访问路径——如果JSP放在WEB-INF目录下,是无法直接通过前端AJAX访问的(WEB-INF是受保护目录,只能通过后端转发);如果放在src/main/webapp根目录下,才能直接通过路径访问。
针对你的场景的修复方案
方案1:用绝对路径(最稳妥,避免相对路径歧义)
直接从项目根路径指定JSP的位置,修改你的AJAX调用代码:
CGSHelper.ajaxHandler("/aSystemResults.jsp", getStdRequestText() + "&action=getRouterType");
方案2:检查项目上下文路径(如果你的项目带部署前缀)
如果你的项目部署时带有上下文路径(比如访问地址是http://localhost:8080/your-project/),那需要把上下文路径加上,你可以用JS动态获取,避免硬编码:
// 动态获取项目上下文路径 const contextPath = window.location.pathname.split('/')[1]; // 拼接路径发起请求 CGSHelper.ajaxHandler(`/${contextPath}/aSystemResults.jsp`, getStdRequestText() + "&action=getRouterType");
方案3:如果JSP在WEB-INF目录下(必须后端转发)
如果你的aSystemResults.jsp是放在WEB-INF文件夹里,那直接AJAX访问肯定会404,因为WEB-INF的资源无法被前端直接访问。这时候你需要写一个后端Controller来转发请求:
@Controller public class RouterTypeController { @RequestMapping("/getRouterType") public String handleRouterTypeRequest(HttpServletRequest request) { // 可以在这里处理参数逻辑,再转发到JSP request.setAttribute("action", request.getParameter("action")); // 假设JSP在WEB-INF/jsp/aSystemResults.jsp,视图解析器配置了前缀/WEB-INF/jsp/、后缀.jsp return "aSystemResults"; } }
然后修改AJAX调用的路径为这个Controller的接口:
CGSHelper.ajaxHandler("/getRouterType", getStdRequestText());
最后排查几个容易忽略的坑
- 文件名大小写!:Java Web服务器(比如Tomcat)对文件名是大小写敏感的,确认你的AJAX里写的
aSystemResults.jsp和实际文件名完全一致,别出现ASystemResults.jsp这种拼写差异 - 部署后的文件位置:检查项目打包部署后,JSP文件是否被正确放到了webapp目录下,有些构建工具可能会漏掉JSP的打包配置
- 框架配置:如果是Spring Boot项目,要确保你已经正确配置了JSP的视图解析器,不然即使路径对了,服务器也找不到JSP
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

