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

Tomcat 啟動報錯:Servlet 映射衝突 (web.xml 與 @WebServlet 重複)

     編輯:程式設計綜合問答

錯誤堆疊關鍵行

Caused by: java.lang.IllegalArgumentException: 
The servlets named [manageServlet] and [Servlet.manageServlet] 
are both mapped to the url-pattern [/manageServlet] which is not permitted

原因

同一個 URL 模式 /manageServlet 被映射了兩次:

  1. 註解掃描: 類別上標註 @WebServlet("/manageServlet") (或 @WebServlet(name="manageServlet", urlPatterns="/manageServlet"))。
  2. web.xml 宣告: 又在 web.xml 中寫了 <servlet> + <servlet-mapping> 指向相同 URL。

Servlet 3.0+ 容器 (Tomcat 7+) 會同時處理註解與 web.xml,導致衝突。

解決方案 (二選一)

方案 A:棄用 web.xml,全面採用註解 (推薦,現代化)

@WebServlet(name = "ManageServlet", urlPatterns = {"/manageServlet"})
public class ManageServlet extends HttpServlet { ... }

刪除 web.xml 中對應的 <servlet> 和 <servlet-mapping> 區塊。

方案 B:棄用註解,統一在 web.xml 配置 (傳統、集中管理)

<!-- web.xml -->
<servlet>
    <servlet-name>manageServlet</servlet-name>
    <servlet-class>com.example.ManageServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>manageServlet</servlet-name>
    <url-pattern>/manageServlet</url-pattern>
</servlet-mapping>

在 Java 類別上**移除** @WebServlet 註解。

檢查技巧

  • IDE (IntelliJ/Eclipse) 專案結構視圖中搜尋 manageServlet,確認只出現一次映射。
  • 啟動日誌中觀察 Initializing Servlet 'manageServlet' 是否出現兩次。

原則:註解與 web.xml 二擇一,切勿混用同一 Servlet 的映射配置。

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