使用 @WebServlet("/AskShopInfo") 註解標註 Servlet 類,配置 web.xml(版本 2.5),部署後訪問對應 URL 無法調用 Servlet 方法,無任何報錯。
Servlet 版本不匹配:
@WebServlet 是 Servlet 3.0(Java EE 6)引入的註解特性;web.xml 聲明 version="2.5" 且 metadata-complete="true",強制容器按 2.5 規範處理,**忽略所有註解**;web.xml 版本為 2.5 且 metadata-complete="true",容器不會掃描註解。<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://java.sun.com/xml/ns/javaee"
xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://java.sun.com/xml/ns/javaee
https://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0"
metadata-complete="false"> <!-- 關鍵:false 允許註解補全 -->
<!-- 保留原有 listener, filter 等配置 -->
</web-app>
metadata-complete="false" 告訴容器:請掃描註解(@WebServlet, @WebFilter, @WebListener 等)作為部署描述符的補充。
<servlet>
<servlet-name>AskShopInfo</servlet-name>
<servlet-class>com.example.AskShopInfo</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>AskShopInfo</servlet-name>
<url-pattern>/AskShopInfo</url-pattern>
</servlet-mapping>
適合不想升級 Servlet 版本的老項目維護。
web.xml 版本與 metadata-complete;Maven > Update Project / Project > Clean;Initializing Spring DispatcherServlet 或 Servlet 註冊信息;https://localhost:8080/項目名/AskShopInfo 測試。Servlet 註解生效的三要素:容器支持(Tomcat 7+)、web.xml 版本 ≥ 3.0、metadata-complete="false"。缺一不可。