摘 要: 利用网格、JSP技术设计实现了一个禁止重复投票的电子投票系统。在网格环境中,针对该系统重点讨论了JDBC连接MySql数据库技术、Servlet技术和Cookie技术等,解决了基于MVC模式开发应用系统的一些难题。同时,利用CA认证技术解决了基于网格的电子投票系统的安全性问题。
关键词: 网格;MVC;CA
网格是利用互联网把地理上广泛分布的各种资源(计算资源、存储资源、软件资源、数据资源、信息资源等)连成一个逻辑整体,就像一台超级计算机一样,为用户提供一体化信息和应用服务,虚拟组织最终实现在这个虚拟环境下的资源共享和协同工作,彻底消除资源“孤岛”,最充分地实现信息共享。
本文借助成熟的JSP、网格和CA等技术,实现了网格环境中的学生电子投票系统。该系统通过学生对教师授课效果的投票来评价教师的教学质量,以及教师受学生欢迎的程度。系统在设计中遇到了如何实现禁止重复投票、怎样处理投票结果、如何解决安全性等问题。通过解决这些问题,总结出使用Cookies可以解决禁止重复投票,在同一个服务器中的JSP文件要共享一个Application对象等经验,这对网格环境中JSP开发有较高的参考价值。该系统将用户在线填写的投票数据存储在后台MySql投票库中,通过实时地读取数据,以可视化的结果实时展示给用户。它与传统投票方式相比,具有高效率和低成本的优点,能够快速准确地统计出投票结果。但是大部分网上投票系统一直都没有解决投票的有效性和安全性问题。因此,本文给出了网格中该系统的安全性解决方案。
1 网格技术
网格技术[1]利用互联网,把分散在不同地理位置的计算机组织成一个虚拟的超级计算机,其中每一台参与计算的计算机就是一个节点,而整个计算是由成千上万个节点组成的一张网格,从而实现即插即用的效果。简单地讲,它是把整个网络整合成一台巨大的超级计算机,实现各种资源的全面共享。网格具有如下特点[2]:
(1)异构性。网格环境由分布在广域网上不同管理域的各种不同类型的计算资源组成,并且每类资源有各自不同的属性。
(2)分布与共享。分布是网格硬件在物理上的特征,而共享是在网格软件支持下实现的逻辑特征。
(3)自相似性。网格的局部和整体之间存在着一定的相似性。局部在许多方面具有全局的某些特征,而全局的特征在局部中也有一定的体现。
(4)动态多样性。不仅网格环境下的一些资源本身具有动态性,而在整个网格环境下,随着计算资源、数据资源不断加入和撤销、故障等原因,网格系统下的局部环境也在动态地改变着。在网格的设计与实现时,必须考虑到新资源能够很自然地加入到网格中,与原来的资源融合在一起,共同发挥作用。
(5)自治性与管理的多重性。网格环境下的局部资源既属于个人或机构,由个人对资源作相应的管理和维护,又要在网格系统作整体部署时,由网格管理员根据系统任务情况统一调度网格环境下的资源。
2 数据库连接技术JDBC
Java中连接数据库的技术之一是JDBC,它是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC为工具/数据库开发人员提供了一个标准的API,据此可以构建更高级的工具和接口,使数据库开发人员能够用纯Java API编写数据库应用程序。
通常在使用基于数据库的Web应用时,JDBC工作步骤为:(1)与数据库建立连接;(2)进行SQL语句操作,取出数据;(3)断开数据库连接。
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模式的在线投票系统
随着互联网的发展,网上投票系统逐渐成为人们生活中的必不可少的一部分,如2008年奥运投票系统、网上流行的娱乐投票系统等。各种各样的投票系统日益发展,充分调动了人们参与活动的积极性。
3.1 MVC(Model-View-Controller)模式
使用MVC模式(如图1)设计Web应用程序非常有效。其结合了JSP和Servlet两种技术,Servlet可充当Controller的角色,JSP可以充当View层的角色,即采用JSP显示页面内容,但它并不处理任何的业务逻辑,而采用Servlet进行数据处理以生成动态内容[3]。
MVC模式具有更清晰的页面表现、清楚的开发者角色划分,可以充分利用开发小组中的界面设计人员。同时,增加了代码的重用率,使软件的可维护性、可扩展性、灵活性和封装性大大提高。
3.2 系统流程图
基于网格的电子投票系统,设计非常直观,用户很容易看出投票的情况,并且只有合法用户才能进行有效投票。该系统分为多个功能模块,主要有以下功能:用户登录、校验、增加新投票项目、修改投票项目、删除投票项目、投票、查看投票结果、退出系统。本投票系统还具有防止重复投票的功能。系统流程图如图2。
3.3 系统实现特色
(1)JDBC连接数据库技术
在网格中实现该系统,如何操作数据库是不可避免要遇到的问题,目前有多种数据库连接技术,如CGI技术、WebAPI技术、RAD技术和JDBC技术等。通过分析,JDBC为所有数据库管理系统提供一种标准接口,可以为多种关系数据库提供统一访问,简单容易掌握,速度快。所以,选择了通过JDBC连接数据库和访问数据库,执行查询和提取数据等操作,部分代码如下:
public JDBCConnect ( ) {
try {Class.forName(url); //加载数据库驱动程序
conn=DriverManager.getConnection(url);} //建立连接
catch (Exception e) {
System.out.println (“JDBCConnect():”+e.getMessage());}}
(2)禁止重复投票
系统主要应用JSP的内置对象Application,与Session对象相比,Application对象的含义更加广泛。在使用Session对象时,各个客户端共享一个Session对象;而使用Application对象时,在同一个服务器中的JSP文件共享一个Application对象,除此之外,可以使用Application对象的getServerInfo()方法来获取JSP的版本信息和名称。
应用Cookie技术实现一个IP地址每周只能投一次票的功能。通过request.getRemoteHost()方法取得客户端的IP地址后,将其存放在Cookie对象中,并且通过cookie.setMaxAge(60*60*24*7)的方法设置存储时间。通过Cookie[4]技术,可以防止在某一段时间内某个投票者重复使用同一IP地址重复投票。这种投票技术的特点是对重复投票得到了有效控制,而且可以记录投票者的IP地址,并可间接确定用户身份,因此该技术在网上被广泛使用。
注意,此系统禁止重复投票,一个IP地址每周只能投一次票,投票时,系统自动记录该主机IP地址,当学生代表在本周第二次投票时,系统给出相关提示信息。
实现投票的关键代码如下:
(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实现一个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;i<cookies.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(′一个IP地址每周只能投一次票′);
window.location.href=′index.jsp′;</script>”);}%>
3.4 安全性解决方案
一个安全实用的电子投票系统应该满足如下标准[5]:
(1)民主性。只有合法的投票者才能投票,且只能在规定的时间段内投票。
(2)准确性。投票不能被中间机构或他人篡改、复制或删除时不被发现;无效的选票可以被及时发现从而不会被计入最终的统计结果。
(3)秘密性。选票的投出是匿名的,任何机构或个人不能确定投票者的投票内容,也不能确定选票的投票者。
(4)可证实性。投票者可以确定其投票被正确计算在最终结果中。任何参与者或其他观察监督者都可以核实最终结果的正确性。
(5)公平性。最终统计结果公布前,任何参与者都无法得知中间的选票统计信息,因为中间的选票统计信息可能会影响投票者的投票意向。
(6)简单性。投票者无需特别的设备和技术就可简单快速地完成投票;投票者无需到特别的地点进行投票;投票活动的组织进行应该简单且效率高。
本系统采用CA认证技术有效解决了投票过程的安全性问题。CA(Certificate Authority)[6]认证中心是指用于证明某一主体的身份以及合法性的权威认证机构,由社会公认的具有法律效力的权威机构组成,或由某单位的权威部门组成。由CA中心给用户签发认证证书,证书中包含用户身份名称和验证密码等信息。投票中心存放投票数据,记录投票结果。
如果双方主体都有证书,而且都信任彼此的认证中心CA,则双方可相互明确彼此的身份,其采用的认证协议是SSL协议。在相互认证可以进行之前,双方首先要相信彼此的认证中心。实现过程中,要求双方都有彼此认证中心自身的证书,认证中心自身的证书中包含认证中心的公钥。这样才能确保双方由认证中心签署的证书具有合法性。
本文在网格环境中,设计开发出了安全有效的电子投票系统,给出了系统流程图,实现了实时性的跨Web服务器动态网页的创建。以JSP实现页面显示,JavaBean编写数据库连接,Servlet控制整个系统的流程,从而实现用户界面和数据库之间良好的交互,有效提高了系统的效率和性能。基于CA认证技术较好地解决了安全性问题,保证了投票者的合法性、公正性、真实性和有效性。
参考文献
[1] 都志辉,陈渝,刘鹏.网格计算[M].北京:清华大学出版社,2002.
[2] 桂小林.网格技术导论[M].北京:北京邮电大学出版社,2005.
[3] 谢长勇,刘知贵,郑晓红,等.基于模式2的JSP管理信息系统的设计与实现[J].计算机应用研究,2006(7).
[4] 明日科技,王国辉.JSP程序开发范例宝典[M].北京:人民邮电出版社,2007.
[5] 阮鸥,陈卓.一种安全实用的电子投票协议[J].计算机安全,2007,31(3).
[6] 戴怡,杨庚.网格环境下多域间的认证机制研究[J].计算机工程与应用,2007,43(5).