首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java Servlet HTTP 405 錯誤:「HTTP method GET is not supported」根因與修正

     編輯:程式設計疑難解答

錯誤現象

HTTP method GET is not supported by this URL

瀏覽器訪問 Servlet 映射路徑時拋出 405 錯誤。

根本原因

Servlet 類繼承 HttpServlet 但**未重寫 doGet() 或 doPost()** 方法。父類 HttpServlet 默認實現直接返回 405 狀態碼,表示不支持該 HTTP 方法。

錯誤代碼 vs 正確代碼

// ❌ 錯誤:只寫了 service() 或沒寫任何 doXxx()
public class MyServlet extends HttpServlet {
    // 缺少 doGet/doPost
}

// ✅ 正確:根據需求重寫對應方法
public class MyServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        // 處理 GET 請求
        resp.getWriter().write("GET OK");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        // 處理 POST 請求
        doGet(req, resp); // 簡單場景轉發給 doGet
    }
}

兩種常見誤區

  1. 重寫了 service() 而非 doGet/doPost:service() 是分發入口,若重寫它需手動分發請求方法,易出錯。建議只重寫 doGet/doPost。
  2. 父類方法覆蓋了子類方法:不可能,Java 多態保證調用子類重寫方法。錯誤多為「以為重寫了但方法簽名不匹配」(如拋出異常類型不同、參數類型寫錯)。

web.xml 映射檢查

<servlet>
    <servlet-name>MyServlet</servlet-name>
    <servlet-class>com.example.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>MyServlet</servlet-name>
    <url-pattern>/myservlet</url-pattern>
</servlet-mapping>

確保 url-pattern 與瀏覽器訪問路徑一致(含大小寫)。

調試技巧

  • 在 doGet 首行打印日誌:log("doGet called"); 確認方法被調用。
  • 使用 Postman/curl 分別發送 GET/POST 驗證。
  • 檢查 Tomcat localhost_access_log 確認請求到達。

錯誤截圖1 錯誤截圖2 代碼截圖1 代碼截圖2

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved