WAP 環境下的問卷系統需顧及手機螢幕小、須使用 WML (Wireless Markup Language) 開發。核心流程:顯示題目與選項 → 使用者提交 → 伺服器記錄 (日誌檔/資料庫) → 顯示統計結果。本文採用 Java Servlet + 日誌檔儲存,展示 Java 結構化與可重用設計思想。
WapVoteServlet.class 放入 Servlet 容器目錄| Action | URL 範例 | 功能 |
|---|---|---|
| vote | /servlet/WapVoteServlet?config=config.txt&act=vote | 提交投票選項 |
| log | /servlet/WapVoteServlet?config=config.txt&act=log | 顯示投票結果 (棒狀圖) |
| view | /servlet/WapVoteServlet?config=config.txt&act=view | 自動生成問卷頁面 (無需懂 WML) |
# 必填參數
log=c:\catalina\logs\votelog.txt # 日誌檔路徑 (必填)
options=搜狐,新浪,網易 # 選項,逗號分隔 (必填)
# 選填參數 (含預設值)
after=https://host/page.htm # 投票後導向頁面,預設顯示結果
cookies=0 # 1=啟用 Cookie 防重複投票,預設 0
bgcolor=#FFFFFF # 背景色
fgcolor=#000000 # 前景色
size=2 # 字體大小
face=Verdana,Arial # 字體
votecolor=#FF0000 # 棒狀圖顏色
title=您喜歡哪一個門戶網站 # 問卷標題
column=1 # 1=直向排列,0=橫向排列
純文字,每行一筆:客戶IP, 日期時間, 選項值,逗號分隔。
init():初始化 Hashtable cfgs 快取配置檔,forLock 管理日誌檔寫入鎖getConfig():檢查檔案修改時間,未變更直接回傳快取,否則重新解析readConfig():逐行解析 key=value,忽略 # 註解行,補充預設值doGet()config 與 act 參數act 分派:vote→takeVote()、log→showLog()、view→showVote()showVote():偵測 Accept: wap.wml 標頭,輸出 WML 1.1 DOCTYPE,生成 <select> 選單與 <do type="accept"> 提交鈕takeVote():讀取 wpv 參數寫入日誌 (synchronized 保證併發安全),導向 after 或 logshowLog():讀取日誌統計各選項票數,計算百分比,輸出 WML 結果頁synchronized(forLock.get(logFilePath)) {
// 寫入日誌、更新計數器 fct (限制最大 20 筆/配置)
}
以日誌檔路徑為鎖鍵,細粒度鎖定避免全域效能瓶頸。