You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

实现输入提示文本框时AJAX请求无法到达Servlet(404错误)求助

解决AJAX请求Servlet返回404错误的方案

首先,404错误本质是请求的资源找不到,也就是你的AJAX请求地址和Servlet的实际映射路径不匹配,或者Servlet没有正确部署。下面是一步步的排查和解决方法:

1. 检查Servlet的映射配置

Servlet的映射有两种方式,你要确保其中一种配置正确:

  • 注解方式:在FetchServ.java类上添加@WebServlet注解,指定正确的访问路径,比如:
    @WebServlet("/FetchServ") // 这里的路径就是AJAX要请求的地址后缀
    public class FetchServ extends HttpServlet {
        // 你的doGet方法代码
    }
    
    注意注解里的路径不要写错,比如不要多写或少写斜杠。
  • web.xml配置方式:如果用传统的web.xml,要确保<servlet>和<servlet-mapping>标签配置正确:
    <servlet>
        <servlet-name>FetchServ</servlet-name>
        <servlet-class>你的完整包名.FetchServ</servlet-class> <!-- 比如com.example.FetchServ -->
    </servlet>
    <servlet-mapping>
        <servlet-name>FetchServ</servlet-name>
        <url-pattern>/FetchServ</url-pattern>
    </servlet-mapping>
    

2. 确认AJAX请求的URL正确性

AJAX的请求URL必须和Servlet的映射路径完全匹配,还要考虑项目的上下文路径(也就是你部署项目时的访问前缀,比如项目部署后访问地址是http://localhost:8080/MyProject/,那MyProject就是上下文路径)。

举个正确的AJAX示例:

// 假设你的项目上下文路径是MyProject,Servlet映射路径是/FetchServ
$.ajax({
    url: "/MyProject/FetchServ", // 绝对路径写法
    type: "GET",
    data: { q: 用户输入的内容 },
    dataType: "json",
    success: function(response) {
        // 处理返回的JSON数据
    },
    error: function(xhr) {
        console.log("错误状态码:" + xhr.status);
    }
});

如果不想硬编码上下文路径,可以动态获取:

// 在JSP页面中可以用EL表达式获取上下文路径
var contextPath = "${pageContext.request.contextPath}";
$.ajax({
    url: contextPath + "/FetchServ",
    // 其他参数...
});

3. 检查Servlet的部署状态

确保你的FetchServ.class文件已经正确编译到项目的WEB-INF/classes目录下,包名和代码里的一致。如果是用IDE(比如Eclipse、IDEA)部署,要确认项目已经正确发布到服务器,没有编译错误。

4. 修正Servlet代码里的JSON格式问题

虽然这不是404的原因,但你的Servlet代码最后有一行:

response.getWriter().append("Served at: ").append(request.getContextPath());

这行代码会在返回的JSON后面追加额外的字符串,导致JSON格式损坏,前端无法解析。一定要删掉这行,因为你已经用Gson把List转成JSON写入响应了,不需要额外内容。

另外,建议在doGet方法上加上@Override注解,确保你正确重写了HttpServlet的doGet方法,避免因为方法签名错误导致Servlet无法处理GET请求:

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // 你的代码逻辑
}

5. 测试Servlet是否可直接访问

在浏览器地址栏直接输入Servlet的完整访问地址,比如http://localhost:8080/MyProject/FetchServ?q=test,如果能返回正确的JSON数据,说明Servlet配置没问题,问题出在AJAX的URL上;如果还是404,那就是Servlet的映射或部署有问题,回到前几步排查。

内容的提问来源于stack exchange,提问作者Abhinay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:45:14