实现doPost仍返回405:Java HTTP Servlet问题求助
问题原因与解决方案
核心问题
你的doPost方法中调用了super.doPost(req, resp);,而HttpServlet类的默认doPost实现会直接向客户端返回405 Method Not Allowed错误——这是导致你无论使用POST还是GET请求都报错的根本原因(因为doGet里调用了doPost,同样会触发父类的错误逻辑)。
解决步骤
移除父类doPost方法调用
删除doPost方法中的super.doPost(req, resp);语句,这行代码会直接返回错误响应,覆盖你后续的业务逻辑。优化响应内容类型(可选)
在获取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
相关产品推荐
相关产品推荐

