在 contextInitialized 階段無 HttpServletRequest,無法直接取得端口。需透過容器特定 API 獲取。
public void contextInitialized(ServletContextEvent sce) {
WebAppContext ctx = (WebAppContext) sce.getServletContext();
System.out.println("Context Path: " + ctx.getContextPath());
// 取得第一個 Connector 的端口
int port = ctx.getServer().getConnectors()[0].getPort();
System.out.println("Server Port: " + port);
}
Tomcat 無標準 API 直接取得端口,常見做法:
server.xml 讀取配置(解析 XML)。-Dserver.port=8080,再用 System.getProperty("server.port") 讀取。request.getServerPort() 取得並快取。上述 Jetty 代碼耦合容器實現,遷移時需修改。跨容器通用建議:配置檔或系統屬性顯式指定端口。