Sun 於 2006 年向 JCP 提交 JSR 315 (Servlet 3.0),目標納入 Java EE 6 (預計 2008 Q4 發布)。核心主題:**易於開發、異步/Comet 支持、可插拔 Web 框架、安全增強、規範整合**。
web.xml 或 Servlet 註冊接入,耦合度高ServletContainerInitializer自動註冊@WebServlet、@WebFilter、@WebListener、@MultipartConfig 替代 XMLServletRequest<T> 等引入泛型,減少強轉| 特性 | 描述 | 場景 |
|---|---|---|
| 非阻塞輸入 | 客戶端緩慢發送數據時不阻塞容器線程 | 大文件上傳、慢速客戶端 |
| 非阻塞輸出 | 發送數據到緩慢客戶端/網絡不阻塞線程 | 長連接推流、大響應體 |
| 請求掛起/恢復 | request.startAsync() 掛起,異步處理完畢 asyncContext.complete() | Comet 長輪詢、等待後端資源、限流 |
| 異步事件監聽 | AsyncListener 監聽完成/超時/錯誤 | 資源清理、日志、監控 |
| Channel 概念 | 訂閱/發布頻道,內建安全限制 | 聊天室、實時通知、協作編輯 |
爭議點:Jetty 作者 Greg Wilkins 建議非阻塞 IO 下沉到容器層,掛起/恢復語義優於「延遲請求處理」。最終規範採納了 AsyncContext 模型。
request.login(username, password) / request.logout():程序化登入登出request.authenticate(response):觸發容器認證流程ServletContextListener 排序、容器級 init-param@MultipartConfig + Part API,支持進度監聽、臨時文件存儲ServletRequest/Response 非線程安全,ServletContext 線程安全ServletContainerInitializer + @HandlesTypes 讓框架零配置啟動DeferredResult、Callable、Spring WebFlux、Vert.x、Node.java 等均源於此模型web-app 根元素 version="3.0"、metadata-complete="true" (掃描註解)/false (不掃描)web.xml 繼續兼容,漸進式遷移Servlet 3.0 不只是增量升級,而是Java Web 開發模式的範式轉移:從「容器管理一切」轉向「應用程序化管理容器行為」。異步處理、註解配置、可插拔架構三大支柱,直接催生了 Spring Boot、MicroProfile、Reactive Streams 等現代雲原生技術棧的基因。理解 JSR 315,就是理解過去十年 Java 服務端演進的邏輯主線。