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

实现doPost仍返回405:Java HTTP Servlet问题求助

问题原因与解决方案

核心问题

你的doPost方法中调用了super.doPost(req, resp);,而HttpServlet类的默认doPost实现会直接向客户端返回405 Method Not Allowed错误——这是导致你无论使用POST还是GET请求都报错的根本原因(因为doGet里调用了doPost,同样会触发父类的错误逻辑)。

解决步骤

  1. 移除父类doPost方法调用
    删除doPost方法中的super.doPost(req, resp);语句,这行代码会直接返回错误响应,覆盖你后续的业务逻辑。

  2. 优化响应内容类型(可选)
    在获取PrintWriter前添加响应类型设置,避免潜在的编码问题:

    resp.setContentType("text/html;charset=UTF-8");
    

修改后的完整Java代码

package com.package1;

import java.io.IOException;
import java.io.PrintWriter;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

@WebServlet("/AddNum")
public class Addserv extends HttpServlet{
    
    private static final long serialVersionUID = 1L;

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        int no1=Integer.parseInt(req.getParameter("num1"));
        int no2=Integer.parseInt(req.getParameter("num2"));
        int sum=no1+no2;
        
        resp.setContentType("text/html;charset=UTF-8");
        PrintWriter out = resp.getWriter();
        
        out.println("<h1>Sum: " + sum + "</h1>");
    }
    
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req,resp);
    }

}

额外验证点

  • 确认Tomcat部署的Web应用上下文路径:如果你的应用不是部署在根路径(即访问路径不是http://localhost:8080/AddNum),需要将表单的action修改为/${上下文路径}/AddNum,比如应用名为Calculator,则action="/Calculator/AddNum"。
  • 确保Eclipse中项目已正确部署到Tomcat,且Servlet类已被编译并发布到WEB-INF/classes目录下。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 02:50:21