导航结构图:html
关键问题的解决方法描述:java
1. 建立新主题的时候,能够输入多个投票选项,选项的个数是不定的,因此须要要动态的获取用户输入的选项。解决的方法是利用页面的局部刷新为用户动态生成投票选项输入框。为用户提供一个选项添加按钮,当用户须要添加输入投票选项的时候就能够按按钮生成一个选项输入框。sql
2. 投票的选项的数量是不肯定,这些数据都须要保存进数据库,如何为数据库建表,建表的字段又该怎么创建。解决这个问题的方法是将每个投票主题的全部选项都用同一个字段保存。将每个选项的内容所有放在一块儿,用本身定义的分隔符分开,而后保存在同一个字段里,这样就解决了投票选项个数不肯定,但依旧能够保存进数据库的问题。数据库
3. 用户设置的投票方式:单选或多选。解决这个问题的方法是只容许单选的投票用单选框提供给用户投票,容许多选的投票提供复选框给用户投票。当要获取用户投票的数据时,遍历全部的选项,对有全部被选中的单选框或是复选框进行记录。app
4. 开启和关闭一个投票。解决这个问题的方法是在数据库中为每个主题建立一个字段用于记录该主题是否容许投票。该字段只有2个值:0和1。当取值为0时,不容许投票,只容许查看,当取值为1时容许投票。jsp
核心代码:测试
客户端页面局部刷新JavaScript:
url
function createRequest(url,theme,q){ var index="div_vote0"+q; //alert(index); http_request = false; if(window.XMLHttpRequest){ http_request = new XMLHttpRequest(); }else if(window.ActiveXObject){ try{http_request = new ActiveXObject("Msxml2.XMLHTTP");}catch(e){try{ http_request = new ActiveXObject("Microsoft.XMLHTTP");} catch(e){ } } } if(!http_request){ alert("cannt"); return false; } http_request.onreadystatechange=function(){getResult(index);}//getResult; http_request.open('POST',url,true); http_request.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); http_request.send("theme="+theme); } //查看 function getResult(index){ var t1=index+"1"; var t2=index+"2"; if(http_request.readyState==4){ if(http_request.status==200){ document.getElementById(index).innerHTML=http_request.responseText; document.getElementById(t1).innerHTML = "<input type=\"button\" class=\"three\" value=\"收起\" onclick=\"abc(\'"+index+"\')\">"; document.getElementById(t2).innerHTML = ""; }else{ document.getElementById("div_vote0").innerHTML="操做失败!"; document.getElementById(t1).innerHTML = "<input type=\"button\" class=\"three\" value=\"收起\" onclick=\"abc(\'"+index+"\')\">"; document.getElementById(t2).innerHTML = ""; } } } function abc(index){ var t1=index+"1"; var t2=index+"2"; document.getElementById(index).innerHTML = ""; document.getElementById(t1).innerHTML = ""; document.getElementById(t2).innerHTML = ""; }
在Servlet里向数据库中添加数据:spa
protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException{ String data = new String(request.getParameter("mydata").getBytes("iso-8859-1"),"utf-8"); String radio = request.getParameter("theme_radio"); int theme_radio = Integer.parseInt(radio); String[] str = data.split("="); String[] temps =str[1].split(","); String temp=""; for(int i=0;i<temps.length;i++){ temp+="0,"; out.println("============temps="+temps[i]); } String sql = "insert into data(theme,temp,able,mult) values(?,?,?,?)"; try { PreparedStatement ps = conn.prepareStatement(sql); ps.setString(1, str[0]); ps.setString(2, str[1]); ps.setInt(3, 1); ps.setInt(4,theme_radio); int row = ps.executeUpdate(); //out.println("=====================row="+row); ps.close(); sql = "insert into votes(theme,temp) values(?,?)"; ps = conn.prepareStatement(sql); ps.setString(1, str[0]); ps.setString(2, temp); row = ps.executeUpdate(); //out.println("=====================temp row="+row); ps.close(); } catch (SQLException ex) { Logger.getLogger(AddthemeServlet.class.getName()).log(Level.SEVERE, null, ex); } response.setCharacterEncoding("UTF-8"); response.setContentType("text/html"); PrintWriter wout = response.getWriter(); wout.print("<h4 ><font color=red>主题为\""+str[0]+"\"的投票添加成功!</font></h4>"); wout.flush(); wout.close(); }
在Servlet里验证用户登陆:
code
protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException{ String code = (String)request.getSession().getAttribute("validate_code"); String sql = "select * from data"; String user = request.getParameter("name").toString(); String pwd = request.getParameter("pwd").toString(); String mycode = request.getParameter("code"); String dbuser=""; String dbpwd = ""; boolean flag1=false; if(code.equals(mycode)) flag1=true; try { stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(sql); while(rs.next()){ int i = rs.getInt("able"); if(i==3){ dbuser = rs.getString("theme"); dbpwd = rs.getString("temp"); break ; } } rs.close(); stmt.close(); } catch (SQLException ex) { Logger.getLogger(IndexServlet.class.getName()).log(Level.SEVERE, null, ex); } if(!flag1){ String message = "<h4 ><font color=red>验证码不正确!</font></h4>"; request.setAttribute("message", message); request.getRequestDispatcher("login.jsp").forward(request, response); } if(user.equals(dbuser)&&pwd.equals(dbpwd)){ request.getRequestDispatcher("job.jsp").forward(request, response); } else { String message = "<h4 ><font color=red>用户名或密码不正确!</font></h4>"; request.setAttribute("message", message); request.getRequestDispatcher("login.jsp").forward(request, response); } }
在Servlet里处理投票:
protected void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException{ String theme = new String(request.getParameter("theme").getBytes("iso-8859-1"),"utf-8"); String votes = new String(request.getParameter("votes").getBytes("iso-8859-1"),"utf-8"); String sql = "select * from votes"; String temp=""; String IPAddr = getIpAddr(request); //得到IP int sum = 0; boolean ipFlag = false; if(votes==null||votes.equals("")) { return ; } int newtime = getDate(); //得到当前时间 PreparedStatement ps; try { stmt = conn.createStatement(); //===================================== ResultSet rs = stmt.executeQuery(sql); sql = "select * from ipaddr"; rs = stmt.executeQuery(sql); String themes=""; while(rs.next()){ String ipAddr = rs.getString("ip"); if(ipAddr.equals(IPAddr)){ themes = rs.getString("themes"); int oldtime = rs.getInt("time"); sum = newtime - oldtime; ipFlag = true; break; } } rs.close(); if(!ipFlag){ //若是ip不存在 sql = "insert into ipaddr(ip,time,themes) values(?,?,?)"; ps = conn.prepareStatement(sql); ps = conn.prepareStatement(sql); ps.setString(1, IPAddr); ps.setInt(2, newtime); ps.setString(3, theme+","); int row = ps.executeUpdate(); ps.close(); }else if(!findTheme(themes,theme)) { if(themes==null) themes=""; ipFlag=false; sql = "update ipaddr set themes=? where ip=?"; ps = conn.prepareStatement(sql); String mythemes = themes+theme+","; ps.setString(1, mythemes); ps.setString(2, IPAddr); ps.executeUpdate(); ps.close(); }else { ipFlag = true; } sql = "select * from votes"; rs = stmt.executeQuery(sql); while(rs.next()){ String theme1 = rs.getString("theme"); if(theme1.equals(theme)){ temp = rs.getString("temp"); break; } } temp = deal(temp,votes); //获取数据 sql = "update votes set temp=? where theme=?"; ps = conn.prepareStatement(sql); ps.setString(1, temp); ps.setString(2, theme); ps.executeUpdate(); ps.close(); } catch (SQLException ex) { Logger.getLogger(IndexServlet.class.getName()).log(Level.SEVERE, null, ex); } response.setCharacterEncoding("UTF-8"); response.setContentType("text/html"); PrintWriter wout = response.getWriter(); if(!ipFlag) wout.print("<h4 ><font color=blue>谢谢您的投票!<hr></font></h4>"); wout.flush(); wout.close(); }
系统测试截图
1 系统开始时的界面:
用户刚进入系统时的开始界面。用户能够查看系统已有的投票,也能够为其中的某个主题进行投票。
2 对其中的某个主题进行投票:
有些投票只容许单选,有些投票能够多选。
3 管理员登录界面:
4 管理员权限界面:
只有管理员登录后才能够执行的操做。
5 发起一个新的投票:
按添加项按钮能够动态添加须要的项目。
6 管理开启关闭投票:
7 用户名和密码修改: