OTA 允許用戶透過手機瀏覽器直接下載安裝 MIDlet,無需資料線/藍牙/紅外。核心流程:WAP 瀏覽器訪問 WML 頁面 → 點擊 JAD 鏈接 → 手機下載 JAD → 解析 JAD 中的 JAR URL → 下載 JAR → 安裝驗證。
若伺服器未正確配置 MIME,手機將無法識別 JAD/JAR,導致下載失敗或顯示亂碼。
| 副檔名 | MIME Type | Apache 配置 | Nginx 配置 |
|---|---|---|---|
| .jad | text/vnd.sun.j2me.app-descriptor | AddType text/vnd.sun.j2me.app-descriptor .jad | types { text/vnd.sun.j2me.app-descriptor jad; } |
| .jar | application/java-archive | AddType application/java-archive .jar | types { application/java-archive jar; } |
MyGame v1.2
大小: 128KB | 支援: MIDP 2.0/CLDC 1.1
立即下載
index.wml 或 download.wml,置於網站根目錄或專屬目錄。Content-Type: text/vnd.wap.wml。JAD 必須包含 MIDlet-Jar-URL 指向 JAR 絕對路徑,否則手機無法定位 JAR。
MIDlet-Name: MyGame
MIDlet-Version: 1.2
MIDlet-Vendor: MyStudio
MIDlet-Jar-URL: https://cdn.example.com/games/mygame.jar
MIDlet-Jar-Size: 131072
MIDlet-1: MyGame, /res/icon.png, com.mygame.MainMidlet
MicroEdition-Profile: MIDP-2.0
MicroEdition-Configuration: CLDC-1.1
@WebServlet("/game.jad")
public class JadServlet extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String jarUrl = "https://" + req.getServerName()
+ ":" + req.getServerPort()
+ req.getContextPath() + "/game.jar";
long jarSize = new File(getServletContext().getRealPath("/game.jar")).length();
String jad = "MIDlet-Name: MyGame\n" +
"MIDlet-Version: 1.2\n" +
"MIDlet-Vendor: MyStudio\n" +
"MIDlet-Jar-URL: " + jarUrl + "\n" +
"MIDlet-Jar-Size: " + jarSize + "\n" +
"MIDlet-1: MyGame, /res/icon.png, com.mygame.MainMidlet\n" +
"MicroEdition-Profile: MIDP-2.0\n" +
"MicroEdition-Configuration: CLDC-1.1\n";
resp.setContentType("text/vnd.sun.j2me.app-descriptor; charset=UTF-8");
resp.getWriter().write(jad);
}
}
MIDlet-Jar-Size 與實際 JAR 檔案大小**完全一致** (位元組級)。| 現象 | 可能原因 | 解決 |
|---|---|---|
| 點擊鏈接無反應/顯示文字 | MIME 未配置或錯誤 | 檢查伺服器 MIME 映射,重啟生效 |
| 下載 JAD 後提示 "Invalid JAD" | JAD 格式錯誤/編碼非 UTF-8/屬性缺失 | 用工具驗證 JAD,確保 UTF-8 無 BOM |
| 下載 JAR 失敗/中斷 | Jar-Size 不符/連線超時/防盜鏈 | 修正大小,檢查伺服器日誌,關閉防盜鏈 |
| 安裝後圖示不顯示 | JAD 中圖示路徑錯誤/圖片格式不支援 | 用 12x12/32x32 PNG,路徑為 JAR 內相對路徑 |
| 提示 "Certificate expired" | 簽名憑證過期 | 重新簽名或用自簽測試憑證 |
部分平台支援 Push Registry (JSR 120/205) 實現伺服器主動喚醒 MIDlet,或 OTA Provisioning (JSR 211) 實現企業級靜默分發,需手機/運營商支援,屬進階主題。