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

AJAX返回HTML源码而非字符串问题求助:Servlet未执行doPost

问题分析与解决方案

你遇到的问题核心在于重写了service方法却未正确处理请求分发,导致AJAX发起的POST请求没有被doPost方法处理,反而触发了service里初始化formList.jsp的逻辑,所以返回的是JSP的HTML源码。

HttpServlet的默认service方法会根据请求的方法(GET/POST等)自动分发到对应的doGet/doPost方法。如果你重写了service但没实现这个分发逻辑,原本的doPost就不会被调用,而是直接执行你自定义的service代码(比如转发到JSP)。

解决步骤

1. 修正service方法(若必须保留)

如果你确实需要自定义service方法,一定要在方法中添加请求分发逻辑,确保POST请求能走到doPost:

@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // 先执行你的初始化逻辑(如果有的话)
    // ...

    // 调用父类的service方法,让它自动分发请求到doGet/doPost
    super.service(request, response);
}

2. 或直接删除自定义的service方法

如果初始化逻辑可以放在doGet中(用于处理页面首次加载的GET请求),建议删掉重写的service,让HttpServlet默认的分发机制生效:

  • 页面首次加载的GET请求交给doGet处理,负责初始化JSP:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // 这里写初始化formList.jsp的逻辑,比如设置属性、转发到JSP
    request.getRequestDispatcher("/formList.jsp").forward(request, response);
}
  • AJAX的POST请求依然用你原来的doPost处理:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/plain");
    String value = request.getParameter("value");
    response.getWriter().print(value);
}

3. 前端代码补充错误排查(可选)

你的前端AJAX代码逻辑没问题,可以加个错误回调方便排查问题:

$(document).ready(function(){ 
    $('#submit').click(function() { 
        var value = $('#val').val(); 
        $.ajax({ 
            type:'POST', 
            data:{value:value}, 
            url:'FormList', 
            success:function(result){ 
                $('#res').text(result); 
            },
            error:function(xhr, status, error){
                console.log("请求错误:" + status + " - " + error);
                console.log("返回内容:" + xhr.responseText);
            }
        }); 
    }); 
});

4. 确认web.xml配置正确性

你的web.xml配置是正确的,注意如果FormList不在默认包下,要在<servlet-class>中填写完整包名(比如com.example.FormList)。

总结

核心是让请求正确分发到对应的doPost方法:要么修正自定义service方法调用父类逻辑,要么删掉service用doGet处理页面加载、doPost处理AJAX请求。这样AJAX就能收到正确的字符串返回,而不是JSP的HTML源码了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:59:10