首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

WAP 手機問卷投票系統建構:Servlet + WML 動態生成實戰

     編輯:Java 相關知識

系統設計思路

WAP 環境下的問卷系統需顧及手機螢幕小、須使用 WML (Wireless Markup Language) 開發。核心流程:顯示題目與選項 → 使用者提交 → 伺服器記錄 (日誌檔/資料庫) → 顯示統計結果。本文採用 Java Servlet + 日誌檔儲存,展示 Java 結構化與可重用設計思想。

部署與呼叫方式

  1. 編譯 WapVoteServlet.class 放入 Servlet 容器目錄
  2. 三種操作模式 (action 參數):
ActionURL 範例功能
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()

  1. 解析 config 與 act 參數
  2. 驗證必要參數 (log, options)
  3. Cookie 防重複投票檢查 (啟用時)
  4. 依 act 分派:vote→takeVote()、log→showLog()、view→showVote()

WML 動態生成關鍵方法

  • showVote():偵測 Accept: wap.wml 標頭,輸出 WML 1.1 DOCTYPE,生成 <select> 選單與 <do type="accept"> 提交鈕
  • takeVote():讀取 wpv 參數寫入日誌 (synchronized 保證併發安全),導向 after 或 log
  • showLog():讀取日誌統計各選項票數,計算百分比,輸出 WML 結果頁

併發控制亮點

synchronized(forLock.get(logFilePath)) {
    // 寫入日誌、更新計數器 fct (限制最大 20 筆/配置)
}

以日誌檔路徑為鎖鍵,細粒度鎖定避免全域效能瓶頸。

擴充建議

  • 將日誌儲存改為資料庫 (JDBC/JPA)
  • 支援多題目問卷 (巢狀配置結構)
  • 加入驗證碼、IP 限流等防刷機制
  • 整合圖表庫 (JFreeChart) 生成圖片結果
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved