應用程式伺服器初始化 Servlet 實例後,在服務客戶端請求前會呼叫 init() 方法,且該方法在 Servlet 生命週期中僅執行一次。在此快取靜態資料或完成一次性耗時操作,可大幅提升系統效能。
若使用 JDBC 2.0 的 DataSource 介面取得資料庫連線,通常需透過 JNDI 查詢資料源。若每次 SQL 請求都執行 JNDI 查詢,系統效能將急劇下降。解決方案是於 init() 中快取 DataSource:
public class ControllerServlet extends HttpServlet {
private javax.sql.DataSource testDS = null;
public void init(ServletConfig config) throws ServletException {
super.init(config);
Context ctx = null;
try {
ctx = new InitialContext();
testDS = (javax.sql.DataSource) ctx.lookup("jdbc/testDS");
} catch (NamingException ne) {
ne.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
public javax.sql.DataSource getTestDS() {
return testDS;
}
// ...
}
自動重載功能方便開發階段修改程式碼後無需重啟伺服器,但在正式環境中會給類別載入器帶來極大負擔,嚴重消耗系統資源。關閉自動重載可顯著提升執行效能。
(原文內容較少,此處補充說明:生產環境應在伺服器配置中關閉 auto-reloading 或 development 模式。)