首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

15.4  开 发 过 程

15.4.1  数据表结构

本实例应用的是MySQL数据库,该实例所应用到的数据库名称为db_database15。数据库db_database15中包含两张数据表:tb_title数据表用来保存投票主题信息;tb_votetitle数据表用来保存投票选项信息。下面将给出数据表的表结构。

保存投票主题信息如表15.1所示。

表15.1                                                                       tb_title表

字 段 名 称

数 据 类 型

字 段 大 小

是 否 主 键

说    明

name

varchar

50

主题名称

createTime

varchar

50

创建主题时间

保存投票选项信息如表15.2所示。

表15.2                                                                      tb_votetitle表

字 段 名 称

数 据 类 型

字 段 大 小

是 否 主 键

说    明

id

int

11

自动增量

title

varchar

50

主题名称

voteName

varchar

50

主题选项名称

number

int

11

主题选项票数

15.4.2  安装与配置Lomboz插件

在Eclipse中使用Lomboz插件可以帮助Java Web应用的开发。借助于该插件,开发人员可以获得以下帮助。

  ● HTML标记和JSP关键字的高亮显示。

  ● 屏幕提示。

  ● 基本的语法检查。

  ● 支持J2EE项目中EJB应用的开发。

具体的安装过程,读者可参考第10章的相关内容。

15.4.3  创建项目

安装Lomboz插件成功后,启动Eclipse开发工具。创建工程的步骤如下:

(1)在菜单栏中选择“文件”/“新建”/“项目”命令,弹出创建项目的第一步对话框。在该对话框中依次选择“Web”/“Dynamic Web Project”选项,如图15.5所示。

图15.5  创建项目的第一步

(2)单击“下一步”按钮,弹出创建项目的第二步对话框。在该对话框中的“Project name”文本框中输入工程名称,本实例的工程名称为“wy_vote”;在“Target Runtime”下拉列表中选择“Apache Tomcat v5.5”,如图15.6所示。

图15.6  创建项目的第二步

(3)单击“下一步”按钮,弹出创建项目的第三步对话框。在该对话框中将“Dynamic Web Module”与“Java”复选框进行勾选,如图15.7所示。

 

图15.7  创建项目的第三步

(4)单击“下一步”按钮,弹出创建项目的第四步对话框。在该对话框中的“Context Root”文本框中输入发布在服务器上的项目名称,这里输入“wy_vote”;在“Content Directory”文本框中输入存放Web项目的文件夹名称,这里输入“WebRoot”;在“Java Source Directory”文本框中输入存放类文件的文件夹名称,这里输入“src”,如图15.8所示。

图15.8  创建项目的第四步

(5)单击“完成”按钮,完成创建项目的工作。

15.4.4  创建类文件

在右侧的“包资源管理器”视图中依次展开“wy_vote”工程后创建类文件。步骤如下:

(1)在“wy_vote”项目文件夹中单击鼠标右键,在弹出的快捷菜单中选择“新建”/“类”命令,如图15.9所示。

图15.9  新建类文件的第一步

(2)选择“类”命令后,弹出“新建Java类”对话框。在该对话框中的“包”文本框中输入存放类包的具体路径,这里输入的内容为“com.tool”,在“名称”文本框中输入要创建的类名称,这里输入的内容为“JDBConnection”,其他文本框和选项采用默认值即可,如图15.10所示。

图15.10  新建类文件的第二步

(3)单击“完成”按钮,完成类的创建。

注意:通过上述步骤,将类文件与编译后的类文件存放在同一个文件夹中。

15.4.5  工具类的编写

本实例主要应用到3个类:取得当前系统时间的ShowTime类;处理中文字符的Chinese类;对数据库操作的JDBConnection类。通过15.4.4节中的步骤可以创建这3个类文件。下面将介绍这3个类的具体编写过程。

1.取得当前系统时间的ShowTime类

管理员在后台维护中添加投票主题时,需要将当前的系统时间与投票主题同时添加到数据表中,以便日后的维护工作。取得当前系统时间的ShowTime类的具体代码如例程15-1所示。

例程15-1:mr\15\wy_vote\src\com\tool\ShowTime.java

package com.tool;

import java.util.Date;

import java.text.DateFormat;

import java.util.GregorianCalendar;

public class ShowTime {

    private Date date=new Date();

    private DateFormat dateFormat=DateFormat.getDateInstance(DateFormat.FULL);

    public String currentlyTime(){

    return dateFormat.format(date);

    }

}

在上述代码中,DateFormat类的作用是格式化系统时间,格式化的类型为FULL。在JSP页中调用该类中的currentlyTime()方法,并且在页面中进行显示,显示的格式为“年-月-日 星期几”。如:“2006年1月16日 星期二”。

2.处理中文字符的Chinese类

JSP页中不支持在页与页之间传递中文信息,因此,需要通过类中的方法进行转码。实现中文字符转码的Chinese类的具体代码如例程15-2所示。

例程15-2:mr\15\wy_vote\src\com\tool\Chinese.java

package com.tool;

public class Chinese {

    public static String toChinese(String strvalue) {

           try {

               if (strvalue == null) {

                   return "";

               } else {

                   strvalue = new String(strvalue.getBytes("ISO8859_1"), "gb2312");

                   return strvalue;

               }

           } catch (Exception e) {

               return "";

           }

    }

}

在上述代码中,通过“ISO8859_1”编码规则将中文字符统一为“GB2312”的格式。

3.对数据库操作的JDBConnection类

使用的数据表:tb_title。

主要技术:取得对数据库的操作。

JDBConnection类中的代码是本实例的关键部分,用户和管理员的任何操作都需要通过该类的方法对数据库进行操作。JDBConnection类中具体代码实现的步骤如例程15-3所示。

例程15-3:mr\15\wy_vote\src\com\tool\JDBConnection.java

package com.tool;

import java.sql.*;

public class JDBConnection {

(1)设置数据库驱动,包括URL地址、登录数据库的用户名、登录数据库的密码以及Connection类对象。各个属性的代码如下:

    private final static String dbDriver = "com.mysql.jdbc.Driver"; //连接MySQL数据库的驱动

    private final static String url = "jdbc:mysql://127.0.0.1:3306/db_database15";

    private final static String userName = "root";

    private final static String password = "111";

    private Connection con = null;

注意:本实例应用的MySQL数据库驱动为mysql-connector-java-3.0.16-ga-bin.jar,用户可以构建该类库文件。

(2)通过构造方法自动加载数据库驱动的关键代码如下。

    public JDBConnection() {

        try {

            Class.forName(dbDriver).newInstance(); //加载数据库驱动

        } catch (Exception ex) {

        }

    }

(3)创建数据库连接的关键代码如下。

    public boolean creatConnection() {

        try {

            con = DriverManager.getConnection(url, userName, password);

            con.setAutoCommit(true);

        } catch (SQLException e) {

        }

        return true;

    }

(4)对数据库的增加、修改和删除操作的关键代码如下。

    public boolean executeUpdate(String sql) {

        if (con == null) {

            creatConnection();

        }

        try {

            Statement stmt = con.createStatement();

            int iCount = stmt.executeUpdate(sql);

            return true;

        } catch (SQLException e) {

            return false;

        }

    }

(5)对数据库的查询操作的关键代码如下。

    public ResultSet executeQuery(String sql) {

        ResultSet rs;

        try {

            if (con == null) {

                creatConnection();

            }

            Statement stmt = con.createStatement();

            try {

                rs = stmt.executeQuery(sql);

            } catch (SQLException e) {

                return null;

            }

        } catch (SQLException e) {

            return null;

        }

        return rs;

    }

(6)关闭数据库操作的关键代码如下。

    public void closeConnection() {

        if (con != null) {

            try {

                con.close();

            } catch (SQLException e) {

                e.printStackTrace();

            } finally {

                con = null;

            } 

        }  

    }

}

15.4.6  创建JSP页文件

创建JSP页文件的具体步骤如下。

在包资源管理器中的“wy_vote”项目文件中单击鼠标右键,选择“新建”/“JSP” 命令,弹出创建JSP页文件的第一步对话框,如图15.11所示。

图15.11  创建JSP页文件的第一步

在“文件名”文本框中输入JSP文件的名称,这里输入的是“index”。单击“完成”按钮,完成创建JSP页的工作。本实例所有的JSP文件都是通过上述方法创建的,因此,在以后的JSP创建操作中将不再赘述了。

15.4.7  后台管理员登录模块

程序发布后,在首页面中下侧寻找 “转入后台登录”超链接,如图15.12所示。

图15.12  “转入后台登录”超链接

单击“转入后台登录”超链接,进入后台管理登录页面,如图15.13所示。

图15.13  后台管理员登录页面

1.后台管理员登录操作

主要技术:通过脚本语言实现管理员登录的功能。

通过form表单编写管理员登录页面的关键代码如例程15-4所示。

例程15-4:mr\15\wy_vote\WebRoot\login.jsp

<script src="js/validate.JS" type="text/javascript" language="javascript"></script>

<table width="180" border="0" align="center" cellpadding="0" cellspacing="0">

    <form name="form" method="post" action="forwardBack.jsp" onSubmit="return adminLogin()">

      <tr>

        <td width="47" height="30">账号:</td>

        <td width="117"><input name="account" type="text" size="18"></td>

      </tr>

      <tr>

        <td height="30">密码:</td>

        <td><input name="password" type="password" size="18"></td>

      </tr>

      <tr align="center">

        <td height="30" colspan="2"><input type="submit" name="Submit" value="登录">&nbsp;

          <input type="reset" name="Submit2" value="重置">&nbsp;

          <input type="button" name="Submit3" value="退出" onClick="javascript:window. location.href= 'index.jsp';"></td>

        </tr> </form>

    </table>

在上述代码中,onSubmit触发的是adminLogin()脚本语言方法,该方法在JS文件夹中validate.js文件中,通过adminLogin()脚本语言方法实现用户登录的关键代码如例程15-5所示。

例程15-5:mr\15\wy_vote\WebRoot\JS\validate.js

function adminLogin(){

if(document.form.account.value==""){

window.alert("请输入管理员账号");

return false;

}

if(document.form.account.value!="mr"){

window.alert("您输入的账号有误");

return false;

}

if(document.form.password.value==""){

window.alert("请输入管理员密码");

return false;

}

if(document.form.password.value!="mrsoft"){

window.alert("您输入的密码有误");

return false;

}

return true;

}

在上述代码中,管理员的账号、密码分别为mr和mrsoft,当账号或密码输入错误时,系统会弹出提示信息。

当管理员输入正确的账号和密码时,单击“登录”按钮,进入forwardBack.jsp页,该页的主要功能是通过session保存客户端管理员账号的操作。forwardBack.jsp页的关键代码如例程15-6所示。

例程15-6:mr\15\wy_vote\WebRoot\forwardBack.jsp

<body>

<%

String account=request.getParameter("account");

if(account==null){

response.sendRedirect("login.jsp");

}

session.setAttribute("account",account);  //将管理员账号保存在session对象中

response.sendRedirect("main_back.jsp");

                        //通过response对象调用sendRedirect()方法实现页面的重定向操作

%>

</body>

2.防止非法用户登录系统

从网站安全的角度考虑,仅仅上面介绍的系统登录页面并不能有效地保证系统的安全,一旦系统主界面的地址被他人获得,就可以通过在地址栏中输入系统的主界面地址而直接进入到系统中。由于后台底页面文件bottom_back.jsp几乎包含于整个系统的每个后台页面,所以本例将验证用户是否登录的代码放置在该页中。验证用户是否登录的关键代码如例程15-7所示。

例程15-7:mr\15\wy_vote\WebRoot\bottom_back.jsp

<%

String account=(String)session.getAttribute("account");

if(account==null){

%>

<script language="javascript">

alert("您已经与服务器断开了,请您重新登录!!!");

window.location.href='login.jsp';

</script>

<%}%>

15.4.8  维护投票主题模块

当管理员输入正确的账号和密码时,单击“登录”按钮,进入后台首页面,如图15.14所示。

图15.14  后台首页面

1.查询主题操作

使用的数据表:tb_title。

主要技术:通过JavaBean技术实现投票主题查询功能。

通过JavaBean技术访问JDBConnection类中executeQuery()方法的关键代码如例程15-8所示。

例程15-8:mr\15\wy_vote\WebRoot\main_back.jsp

<jsp:useBean id="connection" scope="request" class="com.tool.JDBConnection"/>

<body>

  <table width="600" border="1" cellpadding="0" cellspacing="0" bordercolor="#FFFFFF" bordercolordark= "#DEDFDE" bordercolorlight="#FFFFFF">

         

  <tr align="center" bgcolor="#FFFFFF">

    <td width="66" height="24">主题序号</td>

    <td width="177">主题名称</td>

    <td width="152">创建时间</td>

    <td width="147">操作</td>

  </tr>

  <%

  int number=0;

  String sql="select * from tb_title";

  ResultSet rs=connection.executeQuery(sql);

 try{

  while(rs.next()){

  number++;

  %>

  <tr align="center" bgcolor="#FFFFFF">

    <td height="27"><%=number%></td>

    <td><a href="vote_back.jsp?title=<%=rs.getString(1)%>"><%=rs.getString(1)%></a></td>

    <td><%=rs.getString(2)%></td>

    <td><a href="updateTitle_back.jsp?name=<%=rs.getString(1)%>">修改</a>&nbsp;&nbsp;&nbsp;<a href="javascript:deleteInformation('<%=rs.getString(1)%>')">删除</a></td>

    </tr>

   <%}}catch(Exception e){}%>

   </table>

<table width="600" border="0" cellpadding="0" cellspacing="0">

 <tr>

 <td width="556" height="26" align="right" bgcolor="#FFFFFF"><a href="addTitle_back.jsp">添加主题</a></td>

     <td width="44" align="right" bgcolor="#FFFFFF">&nbsp;</td>

            </tr>

          </table></td>

        </tr>

      </table>

2.添加主题操作

使用的数据表:tb_title。

主要技术:通过JavaBean技术实现投票主题添加功能。

在图15.14中单击“添加主题”超级链接,进入添加主题信息页面,如图15.15所示。

图15.15  添加主题信息页面

通过form表单编写添加主题的关键代码如例程15-9所示。

例程15-9:mr\15\wy_vote\WebRoot\addTitle_back.jsp

<jsp:useBean id="showTime" scope="request" class="com.tool.ShowTime"/>

<jsp:useBean id="chinese" scope="request" class="com.tool.Chinese"/>

  <b><font size="+1">添加主题</font></b>

<form name="form" method="post" action="dealWith.jsp?method=2">

<table width="527" border="1" cellpadding="0" cellspacing="0" bordercolor="#FFFFFF" bordercolordark= "#DEDFDE" bordercolorlight="#FFFFFF">

<tr align="center" bgcolor="#FFFFFF">

<td width="130" height="40" bgcolor="#FFFFFF">主题名称:</td>

<td width="391" bgcolor="#FFFFFF"><input name="name" type="text" size="50"></td>

</tr>

<tr align="center" bgcolor="#FFFFFF">

<td height="40" bgcolor="#FFFFFF">创建时间:</td>

<td bgcolor="#FFFFFF">&nbsp;<%=showTime.currentlyTime()%><input name="time" type="hidden" value="<%=showTime.currentlyTime()%>"></td>

</tr>

</table><br>

<input type="submit" name="Submit" value="添加">

<input type="reset" name="Submit2" value="重置">

<input type="button" name="Submit3" value="返回" onClick="javascript:window.location.href= 'main_back.jsp';">

</form></td>

</tr>

</table><br>

<%if(request.getParameter("information")!=null){out.print(chinese.toChinese(request.getParameter("infor- mation")));} %>

在图15.15中输入主题信息后,单击“添加”按钮,触发的“dealWith.jsp?method=2”,当method=2时,在dealWith.jsp页中实现的主题信息添加功能,实现主题信息添加功能的关键代码如例程15-10所示。

例程15-10:mr\15\wy_vote\WebRoot\dealWith.jsp

<jsp:useBean id="chinese" class="com.tool.Chinese" scope="request"/>

<jsp:useBean id="connection" class="com.tool.JDBConnection" scope="request"/>

<%

int method=Integer.parseInt(request.getParameter("method"));

String sql_title="";

String sql_vote="";

String information="";

switch(method){

case 2:                                                               //添加主题信息操作

    String addName=chinese.toChinese(request.getParameter("name")).trim();     

    String addTime=chinese.toChinese(request.getParameter("time")).trim();

    sql_title="insert into tb_title values ('"+addName+"','"+addTime+"')";

    information="由于您添加主题的名称重复,添加数据失败!!!";

    if(connection.executeUpdate(sql_title)){

     information="添加主题成功,请继续添加!!!";

    }

    connection.closeConnection();

%>

<script language="javascript">window.location.href='addTitle_back.jsp?information= <%=information%>'; </script>

<%

    break;

}

%>

3.修改主题操作

使用的数据表:tb_title。

主要技术:通过JavaBean技术实现修改投票主题的功能。

如图15.14所示,选择一组要修改的信息,单击相应的“修改”超链接,进入修改主题信息页面,如图15.16所示。

图15.16  修改主题信息页面

通过form表单编写修改主题的关键代码如例程15-11所示。

例程15-11:mr\15\wy_vote\WebRoot\updateTitle_back.jsp

<jsp:useBean id="showTime" scope="request" class="com.tool.ShowTime"/>

<jsp:useBean id="chinese" scope="request" class="com.tool.Chinese"/>

<form name="form" method="post" action="dealWith.jsp?method=3&oldName=<%= chinese.toChinese (request.getParameter("name"))%>">

<table width="527" border="1" cellpadding="0" cellspacing="0">

  <tr align="center" bgcolor="#FFFFFF">

     <td width="130" height="40" bgcolor="#FFFFFF">修改主题名称:</td>

     <td width="391" bgcolor="#FFFFFF"><input name="name" type="text" size="50" value="<%= chinese.toChinese(request.getParameter("name"))%>"></td>      //事先修改主题信息内容

  </tr>

  <tr align="center" bgcolor="#FFFFFF">

     <td height="40" bgcolor="#FFFFFF">修改创建时间:</td>

     <td bgcolor="#FFFFFF">&nbsp;<%=showTime.currentlyTime()%><input name="time" type= "hidden" value="<%=showTime.currentlyTime()%>"></td>

  </tr>

</table><br>

  <input type="submit" name="Submit" value="修改">&nbsp;&nbsp;&nbsp;

  <input type="reset" name="Submit2" value="重置">&nbsp;&nbsp;&nbsp;

  <input type="button" name="Submit3" value="返回" onClick="javascript:window. location.href= 'main_back.jsp';">

</form></td>

通过上述代码修改主题信息后,单击“修改”按钮,触发“dealWith.jsp?method=3”,当method=3时,在dealWith.jsp页中实现主题信息的修改功能。实现主题信息修改功能的关键代码如例程15-12所示。

例程15-12:mr\15\wy_vote\WebRoot\dealWith.jsp

<jsp:useBean id="chinese" class="com.tool.Chinese" scope="request"/>

<jsp:useBean id="connection" class="com.tool.JDBConnection" scope="request"/>

<%

int method=Integer.parseInt(request.getParameter("method"));

String sql_title="";

String sql_vote="";

String information="";

switch(method){

case 3:                      //修改主题信息操作

    String oldName=chinese.toChinese(request.getParameter("oldName")).trim();

    String updateName=chinese.toChinese(request.getParameter("name")).trim();

    String updateTime=chinese.toChinese(request.getParameter("time")).trim();

    sql_title="update tb_title set name='"+updateName+"',createTime='"+updateTime+"' where name= '"+oldName+"'";

    information="由于您修改主题的名称重复,修改数据失败!!!";

    if(connection.executeUpdate(sql_title)){

    sql_vote="update tb_votetitle set title='"+updateName+"' where title='"+oldName+"'";

    connection.executeUpdate(sql_vote);

    information="修改主题成功!!!";

    }

    connection.closeConnection();

%>

<script language="javascript">window.location.href='addTitle_back.jsp?information= <%=information%>'; </script>

<%

    break;

}

%>

4.删除主题操作

使用的数据表:tb_title。

主要技术:通过JavaBean技术实现删除投票主题的功能。

如图15.14所示,选择一组要删除的信息,单击相应的“删除”超链接,触发的是要删除该信息的脚本语言,该脚本语言在validate.js文件中,具体代码如例程15-13所示。

例程15-13:mr\15\wy_vote\WebRoot\js\validate.js

function deleteInformation(title){

if(confirm("您真的要删除吗?")){

window.location.href="dealWith.jsp?method=4&title="+title;

}

}

文本框:  
图15.17  删除
主题的提示信息

单击“删除”超级链接,触发上面的代码,弹出如图15.17所示的提示信息。

单击“确定”按钮,触发的是“dealWith.jsp?method=4”。当method=4时,在dealWith.jsp页中实现删除主题信息的功能。实现删除主题信息的关键代码如例程15-14所示。

例程15-14:mr\15\wy_vote\WebRoot\dealWith.jsp

<jsp:useBean id="chinese" class="com.tool.Chinese" scope="request"/>

<jsp:useBean id="connection" class="com.tool.JDBConnection" scope="request"/>

<%

int method=Integer.parseInt(request.getParameter("method"));

String sql_title="";

String sql_vote="";

String information="";

switch(method){

case 4:                      //删除主题信息操作

    String deleteName=chinese.toChinese(request.getParameter("title")).trim();

    sql_title="delete from tb_title where name='"+deleteName+"'";

    sql_vote="delete from tb_votetitle where title='"+deleteName+"'";

    connection.executeUpdate(sql_title);    

    connection.executeUpdate(sql_vote);

    information="删除主题成功!!!";

    connection.closeConnection();

%>

<script language="javascript">window.location.href='addTitle_back.jsp?information= <%=information%>'; </script>

<%

    break;}%>

5.安全退出模块

当管理员对后台信息维护完毕后,单击网页上侧的“安全退出”超链接,该超链接触发的是脚本语言的quit()方法。该脚本语言在validate.js文件中代码如例程15-15所示。

例程15-15:mr\15\wy_vote\WebRoot\js\validate.js

function quit(){

if(confirm("您真的要退出吗?")){

window.location.href="dealWith.jsp?method=1";

}

}

文本框:  
图15.18  退出
后台的提示信息

单击“安全退出”超级链接,触发上面的代码,弹出如图15.18所示的提示信息。

单击“确定”按钮,触发的是“dealWith.jsp?method=1”。当method=1时,在dealWith.jsp页面中实现退出后台功能。实现退出后台功能的关键代码如例程15-16所示。

例程15-16:mr\15\wy_vote\WebRoot\dealWith.jsp

switch(method){

case 1:                       //管理员安全退出操作

    session.invalidate();

    response.sendRedirect("index.jsp");                  //页面重定向为网站的首页面

    break;

}

注意:如图15.14所示,选中一组投票主题信息,单击相应的主题名称的超链接,进入维护该主题选项的模块,该模块与维护投票主题模块实现的功能基本相同,读者可以参考光盘中的源程序,这里就不再赘述了。

15.4.9  用户投票模块

使用的数据表:tb_title、tb_titlevote。

主要技术:通过JavaBean技术实现用户投票的功能。

在网站的首页面中单击“进入投票页面”超级链接,触发的是vote_front.jsp页面,该页面的运行结果如图15.19所示。

图15.19  用户进行投票选项

由于后台数据库中只存在两个主题信息,因此,页面中只显示两个投票选项,该页面的关键代码如例程15-17所示。

例程15-17:mr\15\wy_vote\WebRoot\vote_front.jsp

<jsp:useBean id="connection" scope="request" class="com.tool.JDBConnection"/>

<form name="form" method="post" action="dealWith.jsp?method=8">

<%

  int i=0;

  try{  

  String title="";

  String sql_title="select * from tb_title";

  ResultSet rs_title=connection.executeQuery(sql_title);

  while(rs_title.next()){                                            //循环tb _title表中的内容

    title=rs_title.getString("name");

    i++;

%>

   <table width="594"  height="32" border="0" cellpadding="0" cellspacing="0" >

      <tr align="center">

        <td width="645"><br><strong><%=i%>.<%=title%></strong><br><br>

          <table width="229"  height="32" border="1" cellpadding="0" cellspacing="0">

 <%

    String sql_vote="select * from tb_votetitle where title='"+title+"'";  

    ResultSet rs_vote=connection.executeQuery(sql_vote);          

    int j=0;

   while(rs_vote.next()){                                         //循环tb_votetitle表中的内容

int number=Integer.parseInt(rs_vote.getString("number"));

j++;

%>

<tr align="center">

<td width="163"><%=rs_vote.getString("voteName")%></td>

<td width="60"><input type="checkbox" name="id_<%=j%>" value="<%=rs_vote.getString("id")%>" ></td>

</tr>

<%}%>

</table>

        </tr>

    </table>  

   <hr>    <%}%>

    <div align="right">   

      <%}catch (Exception e){}%>

  <input type="image" name="Submit"  src="image/sure.jpg">

    </div></td>

    <td width="50">&nbsp;</td>

  </tr>  </form>

在上述代码中,用户对投票选项选择后,单击“投票”按钮,触发的是“dealWith.jsp? method=8”。当method=8时,在dealWith.jsp页面中实现投票功能。实现投票功能的关键代码如例程15-18所示。

例程15-18:mr\15\wy_vote\WebRoot\dealWith.jsp

<jsp:useBean id="chinese" class="com.tool.Chinese" scope="request"/>

<jsp:useBean id="connection" class="com.tool.JDBConnection" scope="request"/>

<%

int method=Integer.parseInt(request.getParameter("method"));

String sql_title="";

String sql_vote="";

String information="";

switch(method){

case 8:                            //进行投票

    int count=0;

    sql_vote="select *  from tb_votetitle";

    ResultSet rs=connection.executeQuery(sql_vote);

    try{

    while (rs.next()){

            count=count+1;

    }

    }catch(Exception e){}

    for(int i=0;i<count;i++){                       //以下代码实现的是循环更新的操作

            String strId=request.getParameter("id_"+String.valueOf(i+1));

     if(strId!=null){

     String sql="update tb_votetitle set number=number+1 where id='"+strId+"'";

     connection.executeUpdate(sql);         

     }   

     connection.closeConnection();  

    }

    session.setAttribute("vote","voted");                //将已经投票过的客户端机器保存session中

%>

<script language="javascript">window.location.href='addTitle_back.jsp?information=<%=information%>'; </script>

<%

    break;

}

%>

15.4.10  查询投票模块

使用的数据表:tb_title、tb_titlevote。

主要技术:通过JavaBean技术实现用户投票查询功能。

在网站的首页中单击“进入查看票数页面”超级链接,触发的是query_front.jsp页,该页的运行结果如图15.20所示。

实现查询投票统计的关键代码如例程15-19所示。

图15.20  查询投票统计

例程15-19: mr\15\wy_vote\WebRoot\query_front.jsp

<jsp:useBean id="connection" scope="request" class="com.tool.JDBConnection"/>

  <%

  //以下代码将tb_title表中投票主题进行循环

  int i=0;

   try{

   String title="";

   String sql_title="select * from tb_title";

   ResultSet rs_title=connection.executeQuery(sql_title);

   while(rs_title.next()){

   title=rs_title.getString("name");

   i++;

   %>

   <table width="645"  height="32" border="0" cellpadding="0" cellspacing="0" >

      <tr align="center">

        <td width="645"><br><strong><%=i%>.<%=title%></strong><br><br>

          <table  height="32" border="1" cellpadding="0" cellspacing="0">

  <%

  //以下代码将投票主题的所有票数进行累加

  int count=0;

  String sqlcount="select sum(number) as number from tb_votetitle where title='"+title+"'";

  ResultSet rscount=connection.executeQuery(sqlcount);

  while(rscount.next()){

      count=Integer.parseInt(rscount.getString("number"));

      if(count==0){

          count=1;

      }

  }   

//以下代码将投票主题所对应的选项进行循环显示

    String sql_vote="select * from tb_votetitle where title='"+title+"'";

     ResultSet rs_vote=connection.executeQuery(sql_vote);

       while(rs_vote.next()){

    int number=Integer.parseInt(rs_vote.getString("number"));

   %>

    <tr align="center">

      <td width="74">选项名称:</td>

      <td width="210"><%=rs_vote.getString("voteName")%></td>

      <td width="99">票数:</td>

      <td width="74"><%=number%></td>

      <td width="82">所占比例:</td>

      <td width="61"><%=number*100/count%>%</td>

    </tr>

    <%}%>

  </table><br></td>

        </tr>

    </table>  

   <hr>

    <%}%>

    <%}catch (Exception e){}%>    </td>

    <td width="50">&nbsp;</td>

  </tr>

</table>

15.4.11  用户一次性投票

在处理用户一次性投票时,本例将验证客户端用户是否进行投票的代码放在vote_front.jsp页面中。在该页面中验证用户是否进行投票的关键代码如例程15-20所示。

例程15-20:mr\15\wy_vote\WebRoot\vote_front.jsp

<%

String vote=(String)session.getAttribute("vote");

if(vote!=null){

    response.sendRedirect("index.jsp");

}

%>

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论