依 J2EE 規格,JSP 本質是包含 Java 片段的 HTML。容器在運行時將其翻譯為 Servlet、編譯為 .class、再執行。首次請求某 JSP 時,用戶需等待翻譯+編譯完成,造成明顯延遲。若頁面包含多個 JSP 片段,延遲疊加更嚴重。雖編譯通常僅在 JVM 生命週期內發生一次,但生產環境要求「零感知」部署,必須將編譯前置至構建/部署階段。
部署後手動或腳本(LoadRunner/SilkPerformer)遍歷所有 JSP URL 強制編譯。
在 WEB-INF/weblogic.xml 配置:
<weblogic-web-app>
<jsp-descriptor>
<jsp-param>
<param-name>precompile</param-name>
<param-value>true</param-value>
</jsp-param>
</jsp-descriptor>
</weblogic-web-app>
優點:配置簡單(「一鍵開啟」)。缺點:部署/重新部署時同步編譯所有 JSP,若有編譯錯誤導致部署失敗;大型應用部署時間達 10-15 分鐘甚至更久,風險極高。
使用 WebLogic 提供的命令行工具 weblogic.jspc(位於 weblogic.jar)。
PATH 包含 JDK 1.3+ bin 目錄(需 javac,非 JRE)。CLASSPATH 包含 weblogic.jar 及專案依賴的 JAR/類。java weblogic.version
# 輸出應包含 WebLogic 版本資訊
java weblogic.jspc \
-webapp mywebapp \
-compiler javac \
-compileFlags "-g" \
-classpath /u/apps/dist/src/lib.jar \
-d . \
-package com.slackwerks.mywebapp.jsp \
-commentary \
-keepgenerated \
-k \
mywebapp\index.jsp
參數說明:-webapp 指定 Web 應用根目錄;-d 指定輸出目錄;-package 設定生成 Servlet 的包名;-keepgenerated 保留生成的 .java 檔便於除錯;-k 遇錯誤繼續處理其他檔案。
雖宣告式預編譯配置最簡單,但生產環境下程序化預編譯 (weblogic.jspc) 是最靈活、可靠、風險最低的選擇。建議在 CI/CD 流程中整合預編譯步驟,將編譯風險左移至構建階段,確保生產部署極速、穩定。