核心對應關係
| Servlet 版本 | web.xml 版本 | 對應 Tomcat | Java EE / Jakarta EE | 發布年份 |
| 6.0 | 6.0 | 10.1+ | Jakarta EE 9+ | 2020 |
| 5.0 | 5.0 | 10.0 | Jakarta EE 8 | 2019 |
| 4.0 | 4.0 | 9.0 | Java EE 8 | 2017 |
| 3.1 | 3.1 | 8.0 | Java EE 7 | 2013 |
| 3.0 | 3.0 | 7.0 | Java EE 6 | 2009 |
| 2.5 | 2.5 | 6.0 | Java EE 5 | 2005 |
| 2.4 | 2.4 | 5.5 | J2EE 1.4 | 2003 |
web.xml 版本宣告範例
Servlet 3.0 (web-app_3_0.xsd)
<?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">
<!-- 支援 @WebServlet 註解,可無 web.xml -->
</web-app>
Servlet 2.5 (web-app_2_5.xsd)
<?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_2_5.xsd"
version="2.5">
<!-- 需在 web.xml 註冊 Servlet -->
</web-app>
關鍵差異
| 特性 | Servlet 2.5 | Servlet 3.0+ |
| 註解支援 | ❌ | ✅ (@WebServlet, @WebFilter, @WebListener) |
| web.xml 必需 | 是 | 否 (metadata-complete="true" 可禁用掃描) |
| 異步處理 | ❌ | ✅ (AsyncContext) |
| 動態註冊 | ❌ | ✅ (ServletContext.addServlet) |
| multipart 解析 | 需第三方 | ✅ (@MultipartConfig) |
實戰建議
- Tomcat 7/8/9 專案:使用 3.0 或 3.1,啟用註解開發
- 維護舊專案:保持 2.5 兼容,但建議升級
- MyEclipse 新建專案時:手動修改 web.xml 版本為 3.0+
- 避免混用:同一專案中 web.xml 版本與 Tomcat 支援的 Servlet 版本應一致
驗證方法
// JSP 中輸出當前 Servlet 版本
${application.getMajorVersion()}.${application.getMinorVersion()}
// 或 Servlet 中
getServletContext().getMajorVersion() + "." + getServletContext().getMinorVersion()
理解版本對應關係,能避免「註解不生效」、「啟動報錯」等經典坑。