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

Tomcat部署Servlet访问报HTTP 405 Method Not Allowed错误

问题根因
  • 浏览器地址栏直接输入URL发起的是HTTP GET请求,但你的ResponseServlet仅实现了doPost方法,没有编写处理GET请求的对应逻辑。
  • HttpServlet父类自带的默认doGet/doPost方法实现,会在收到未重写对应处理方法的请求时,直接返回HTTP 405 Method Not Allowed状态码,和你看到的报错完全吻合。
修复方案

根据你的接口设计需求二选一即可:

方案1:接口需要支持GET访问

在Servlet类中新增doGet方法,直接复用已有的doPost逻辑即可,修改后的完整代码如下:

import java.io.*;
import jakarta.servlet.*;
import jakarta.servlet.http.*;
import java.util.Random;

public class ResponseServlet extends HttpServlet{
    // 新增doGet方法处理GET请求
    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }

    @Override
    public void doPost(HttpServletRequest request, HttpServletResponse response){
        try{
            String name = request.getParameter("name");
            PrintWriter out = response.getWriter();

            if(name == null){
                out.println("No name has been given.");
                return;
            }

            out.println(getGreeting() + name);
        }
        catch(IOException e){
            response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
        }               
    }

    String getGreeting(){
        switch((new Random()).nextInt(5)){
        case 0: return "Hello, ";
        case 1: return "Nice to meet you, ";
        case 2: return "Hi, ";
        case 3: return "Yo, ";
        case 4: return "Hey, ";
        }
        return "Hello, ";
    }
}

修改后重新编译Java文件,将新生成的ResponseServlet.class替换到ajaxgreetings/WEB-INF/classes目录,重启Tomcat即可正常通过浏览器地址栏访问。

方案2:接口仅允许POST请求

该场景下405报错属于符合预期的行为,不要通过浏览器地址栏直接访问该路径,改用POST方式发起请求即可,常见调用方式包括:

  • 编写method属性为post的HTML表单提交
  • 使用接口调试工具选择POST方法调用
  • 前端通过AJAX指定请求方法为POST发起调用

简单的表单示例:

<form action="/ajaxgreetings/response" method="post">
    姓名:<input type="text" name="name">
    <button type="submit">提交</button>
</form>

补充提示:当前Servlet类放在默认包下,仅适合简单测试场景,正式开发建议给类添加明确的包声明,同时将web.xml中servlet-class配置改为类的全限定名(包名+类名),避免出现类加载失败的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 00:24:24