基于網(wǎng)格的電子投票系統的應用設計
網(wǎng)格是利用互聯(lián)網(wǎng)把地理上廣泛分布的各種資源(計算資源、存儲資源、軟件資源、數據資源、信息資源等)連成一個(gè)邏輯整體,就像一臺超級計算機一樣,為用戶(hù)提供一體化信息和應用服務(wù),虛擬組織最終實(shí)現在這個(gè)虛擬環(huán)境下的資源共享和協(xié)同工作,徹底消除資源“孤島”,最充分地實(shí)現信息共享。
本文借助成熟的JSP、網(wǎng)格和CA等技術(shù),實(shí)現了網(wǎng)格環(huán)境中的學(xué)生電子投票系統。該系統通過(guò)學(xué)生對教師授課效果的投票來(lái)評價(jià)教師的教學(xué)質(zhì)量,以及教師受學(xué)生歡迎的程度。系統在設計中遇到了如何實(shí)現禁止重復投票、怎樣處理投票結果、如何解決安全性等問(wèn)題。通過(guò)解決這些問(wèn)題,總結出使用Cookies可以解決禁止重復投票,在同一個(gè)服務(wù)器中的JSP文件要共享一個(gè)Application對象等經(jīng)驗,這對網(wǎng)格環(huán)境中JSP開(kāi)發(fā)有較高的參考價(jià)值。該系統將用戶(hù)在線(xiàn)填寫(xiě)的投票數據存儲在后臺MySql投票庫中,通過(guò)實(shí)時(shí)地讀取數據,以可視化的結果實(shí)時(shí)展示給用戶(hù)。它與傳統投票方式相比,具有高效率和低成本的優(yōu)點(diǎn),能夠快速準確地統計出投票結果。但是大部分網(wǎng)上投票系統一直都沒(méi)有解決投票的有效性和安全性問(wèn)題。因此,本文給出了網(wǎng)格中該系統的安全性解決方案。
1 網(wǎng)格技術(shù)
網(wǎng)格技術(shù)[1]利用互聯(lián)網(wǎng),把分散在不同地理位置的計算機組織成一個(gè)虛擬的超級計算機,其中每一臺參與計算的計算機就是一個(gè)節點(diǎn),而整個(gè)計算是由成千上萬(wàn)個(gè)節點(diǎn)組成的一張網(wǎng)格,從而實(shí)現即插即用的效果。簡(jiǎn)單地講,它是把整個(gè)網(wǎng)絡(luò )整合成一臺巨大的超級計算機,實(shí)現各種資源的全面共享。網(wǎng)格具有如下特點(diǎn)[2]:
(1)異構性。網(wǎng)格環(huán)境由分布在廣域網(wǎng)上不同管理域的各種不同類(lèi)型的計算資源組成,并且每類(lèi)資源有各自不同的屬性。
(2)分布與共享。分布是網(wǎng)格硬件在物理上的特征,而共享是在網(wǎng)格軟件支持下實(shí)現的邏輯特征。
(3)自相似性。網(wǎng)格的局部和整體之間存在著(zhù)一定的相似性。局部在許多方面具有全局的某些特征,而全局的特征在局部中也有一定的體現。
(4)動(dòng)態(tài)多樣性。不僅網(wǎng)格環(huán)境下的一些資源本身具有動(dòng)態(tài)性,而在整個(gè)網(wǎng)格環(huán)境下,隨著(zhù)計算資源、數據資源不斷加入和撤銷(xiāo)、故障等原因,網(wǎng)格系統下的局部環(huán)境也在動(dòng)態(tài)地改變著(zhù)。在網(wǎng)格的設計與實(shí)現時(shí),必須考慮到新資源能夠很自然地加入到網(wǎng)格中,與原來(lái)的資源融合在一起,共同發(fā)揮作用。
(5)自治性與管理的多重性。網(wǎng)格環(huán)境下的局部資源既屬于個(gè)人或機構,由個(gè)人對資源作相應的管理和維護,又要在網(wǎng)格系統作整體部署時(shí),由網(wǎng)格管理員根據系統任務(wù)情況統一調度網(wǎng)格環(huán)境下的資源。
2 數據庫連接技術(shù)JDBC
Java中連接數據庫的技術(shù)之一是JDBC,它是一種用于執行SQL語(yǔ)句的Java API,可以為多種關(guān)系數據庫提供統一訪(fǎng)問(wèn),它由一組用Java語(yǔ)言編寫(xiě)的類(lèi)和接口組成。JDBC為工具/數據庫開(kāi)發(fā)人員提供了一個(gè)標準的API,據此可以構建更高級的工具和接口,使數據庫開(kāi)發(fā)人員能夠用純Java API編寫(xiě)數據庫應用程序。
通常在使用基于數據庫的Web應用時(shí),JDBC工作步驟為:(1)與數據庫建立連接;(2)進(jìn)行SQL語(yǔ)句操作,取出數據;(3)斷開(kāi)數據庫連接。
Connection con=DriverManager.getConnection(“url”);
Statement stmt=con.createStatement();
ResultSet rs=stmt.executeQuery(“SELECT a,b,c FROM Table1”);
while (rs.next()) {
int x=rs.getInt(“a”);
String s=rs.getString(“b”);
float f=rs.getFloat(“c”);}
3 基于MVC模式的在線(xiàn)投票系統
隨著(zhù)互聯(lián)網(wǎng)的發(fā)展,網(wǎng)上投票系統逐漸成為人們生活中的必不可少的一部分,如2008年奧運投票系統、網(wǎng)上流行的娛樂(lè )投票系統等。各種各樣的投票系統日益發(fā)展,充分調動(dòng)了人們參與活動(dòng)的積極性。
3.1 MVC(Model-View-Controller)模式
使用MVC模式(如圖1)設計Web應用程序非常有效。其結合了JSP和Servlet兩種技術(shù),Servlet可充當Controller的角色,JSP可以充當View層的角色,即采用JSP顯示頁(yè)面內容,但它并不處理任何的業(yè)務(wù)邏輯,而采用Servlet進(jìn)行數據處理以生成動(dòng)態(tài)內容[3]。
MVC模式具有更清晰的頁(yè)面表現、清楚的開(kāi)發(fā)者角色劃分,可以充分利用開(kāi)發(fā)小組中的界面設計人員。同時(shí),增加了代碼的重用率,使軟件的可維護性、可擴展性、靈活性和封裝性大大提高。
3.2 系統流程圖
基于網(wǎng)格的電子投票系統,設計非常直觀(guān),用戶(hù)很容易看出投票的情況,并且只有合法用戶(hù)才能進(jìn)行有效投票。該系統分為多個(gè)功能模塊,主要有以下功能:用戶(hù)登錄、校驗、增加新投票項目、修改投票項目、刪除投票項目、投票、查看投票結果、退出系統。本投票系統還具有防止重復投票的功能。系統流程圖如圖2。
3.3 系統實(shí)現特色
(1)JDBC連接數據庫技術(shù)
在網(wǎng)格中實(shí)現該系統,如何操作數據庫是不可避免要遇到的問(wèn)題,目前有多種數據庫連接技術(shù),如CGI技術(shù)、WebAPI技術(shù)、RAD技術(shù)和JDBC技術(shù)等。通過(guò)分析,JDBC為所有數據庫管理系統提供一種標準接口,可以為多種關(guān)系數據庫提供統一訪(fǎng)問(wèn),簡(jiǎn)單容易掌握,速度快。所以,選擇了通過(guò)JDBC連接數據庫和訪(fǎng)問(wèn)數據庫,執行查詢(xún)和提取數據等操作,部分代碼如下:
public JDBCConnect ( ) {
try {Class.forName(url); //加載數據庫驅動(dòng)程序
conn=DriverManager.getConnection(url);} //建立連接
catch (Exception e) {
System.out.println (“JDBCConnect():”+e.getMessage());}}
(2)禁止重復投票
系統主要應用JSP的內置對象Application,與Session對象相比,Application對象的含義更加廣泛。在使用Session對象時(shí),各個(gè)客戶(hù)端共享一個(gè)Session對象;而使用Application對象時(shí),在同一個(gè)服務(wù)器中的JSP文件共享一個(gè)Application對象,除此之外,可以使用Application對象的getServerInfo()方法來(lái)獲取JSP的版本信息和名稱(chēng)。
應用Cookie技術(shù)實(shí)現一個(gè)IP地址每周只能投一次票的功能。通過(guò)request.getRemoteHost()方法取得客戶(hù)端的IP地址后,將其存放在Cookie對象中,并且通過(guò)cookie.setMaxAge(60*60*24*7)的方法設置存儲時(shí)間。通過(guò)Cookie[4]技術(shù),可以防止在某一段時(shí)間內某個(gè)投票者重復使用同一IP地址重復投票。這種投票技術(shù)的特點(diǎn)是對重復投票得到了有效控制,而且可以記錄投票者的IP地址,并可間接確定用戶(hù)身份,因此該技術(shù)在網(wǎng)上被廣泛使用。
注意,此系統禁止重復投票,一個(gè)IP地址每周只能投一次票,投票時(shí),系統自動(dòng)記錄該主機IP地址,當學(xué)生代表在本周第二次投票時(shí),系統給出相關(guān)提示信息。
實(shí)現投票的關(guān)鍵代碼如下:
(1)使用JSP的內置對象Application
% String id=request.getParameter(“id”);
if (id==null) {response.sendRedirect(“index.jsp”);}else {
String sql=“update tb_voteOneTime set number=number+
1 where id=′”+id+“′”;
connection.executeUpdate(sql);
connection.closeConnection();
application.setAttribute(“id”,id);
response.sendRedirect(“show.jsp”);}%>
(2)應用Cookie實(shí)現一個(gè)IP地址每周只能投一次票的功能
jsp:useBean id=“connection” scope=“request” class=
“com.dao.JDBConnection”/>
%@page import=“java.util.Date”%>
%String IP=request.getRemoteHost();
Cookie [] cookies=request.getCookies();
boolean flag=true;
for (int i=0;icookies.length;i++) {
if (IP.equals(cookies[i].getValue())) {flag=false;}}
if (flag){String id=request.getParameter(“id”);
String sqlVote=“update tb_VoteIP set number=number
+1 where id=′”+id+“′”;
connection.executeUpdate(sqlVote);
connection.closeConnection();
Cookie cookie=new Cookie(“IP”,IP);
cookie.setMaxAge(60*60*24*7);
response.addCookie(cookie);
response.sendRedirect(“show.jsp”);
} else{out.print(“script language=′JavaScript′>
alert(′一個(gè)IP地址每周只能投一次票′);
window.location.href=′index.jsp′;/script>”);}%>
3.4 安全性解決方案
一個(gè)安全實(shí)用的電子投票系統應該滿(mǎn)足如下標準[5]:
(1)民主性。只有合法的投票者才能投票,且只能在規定的時(shí)間段內投票。
(2)準確性。投票不能被中間機構或他人篡改、復制或刪除時(shí)不被發(fā)現;無(wú)效的選票可以被及時(shí)發(fā)現從而不會(huì )被計入最終的統計結果。
(3)秘密性。選票的投出是匿名的,任何機構或個(gè)人不能確定投票者的投票內容,也不能確定選票的投票者。
(4)可證實(shí)性。投票者可以確定其投票被正確計算在最終結果中。任何參與者或其他觀(guān)察監督者都可以核實(shí)最終結果的正確性。
(5)公平性。最終統計結果公布前,任何參與者都無(wú)法得知中間的選票統計信息,因為中間的選票統計信息可能會(huì )影響投票者的投票意向。
(6)簡(jiǎn)單性。投票者無(wú)需特別的設備和技術(shù)就可簡(jiǎn)單快速地完成投票;投票者無(wú)需到特別的地點(diǎn)進(jìn)行投票;投票活動(dòng)的組織進(jìn)行應該簡(jiǎn)單且效率高。
本系統采用CA認證技術(shù)有效解決了投票過(guò)程的安全性問(wèn)題。CA(Certificate Authority)[6]認證中心是指用于證明某一主體的身份以及合法性的權威認證機構,由社會(huì )公認的具有法律效力的權威機構組成,或由某單位的權威部門(mén)組成。由CA中心給用戶(hù)簽發(fā)認證證書(shū),證書(shū)中包含用戶(hù)身份名稱(chēng)和驗證密碼等信息。投票中心存放投票數據,記錄投票結果。
如果雙方主體都有證書(shū),而且都信任彼此的認證中心CA,則雙方可相互明確彼此的身份,其采用的認證協(xié)議是SSL協(xié)議。在相互認證可以進(jìn)行之前,雙方首先要相信彼此的認證中心。實(shí)現過(guò)程中,要求雙方都有彼此認證中心自身的證書(shū),認證中心自身的證書(shū)中包含認證中心的公鑰。這樣才能確保雙方由認證中心簽署的證書(shū)具有合法性。
本文在網(wǎng)格環(huán)境中,設計開(kāi)發(fā)出了安全有效的電子投票系統,給出了系統流程圖,實(shí)現了實(shí)時(shí)性的跨Web服務(wù)器動(dòng)態(tài)網(wǎng)頁(yè)的創(chuàng )建。以JSP實(shí)現頁(yè)面顯示,JavaBean編寫(xiě)數據庫連接,Servlet控制整個(gè)系統的流程,從而實(shí)現用戶(hù)界面和數據庫之間良好的交互,有效提高了系統的效率和性能?;贑A認證技術(shù)較好地解決了安全性問(wèn)題,保證了投票者的合法性、公正性、真實(shí)性和有效性。
評論