简单的JavaWeb投票系统
来源:互联网 发布:springmvc 项目源码 编辑:程序博客网 时间:2024/04/30 15:39
目的
帮她完成JavaWeb课程设计,也做为练手的小项目;
功能
1、可以实现在个人登陆,在线投票,票数统计的功能;
2、规定每个投票者每天只能投一票,并要求登录成功后才可以投票;
分块
1、Login类:实现登录
2、Vote类:实现投票
3、Vote_Filter类:过滤器类,控制登录和刷票
4、UserService类:Service类用来调用UserDao操作数据库
5、UserDao类:操作数据库类
6、Voter类:投票者模型类
7、User类: 被投者模型类
8、DBUtils类:Jdbc连接MySQL工具类
数据库(表)
投票者信息表 字段 数据类型 说明 id int 序号,主键 username varchar 用户名 password varchar 密码 record varchar 最后一天投票时间 被投者信息表 字段 数据类型 说明 id int 序号,主键 name varchar 用户名count int 票数
Login类
package cn.sy.servlet;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import cn.sy.domain.Voter;import cn.sy.service.UserService;@WebServlet(name = "LoginServlet", urlPatterns = { "/login" })public class Login extends HttpServlet { @Override public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 1、得到登录名和密码 String username = request.getParameter("username");// 得到用户输入的登录名 String password = request.getParameter("password");// 得到用户输入的密码 // 2、将信息封装 Voter voter = new Voter(); voter.setUsername(username); voter.setPassword(password); UserService service = new UserService(); try { Voter existVoter = service.login(voter);// 3、调用service中登录方法 if (existVoter == null) {// 代表用户名或密码错误,存储错误信息在request域中,请求转发到login.jsp request.setAttribute("message", "登录失败:用户名或密码错误!"); // 登录失败,请求转发到登录页面显示错误信息message request.getRequestDispatcher("/login.jsp").forward(request, response); return; } else {// 登录成功 // 存到session里 request.getSession().setAttribute("user", existVoter.getUsername()); // 重定向到成功页面 response.sendRedirect(request.getContextPath() + "/success.jsp"); return; } } catch (Exception e) { e.printStackTrace(); } }}
login.jsp登录页面
<%@ page language="java" import="java.util.*" %><%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! --> <meta name="description" content=""> <meta name="author" content=""> <title>登录</title> <link href="http://apps.bdimg.com/libs/bootstrap/3.3.4/css/bootstrap.css" rel="stylesheet"> <script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script> <script src="http://apps.bdimg.com/libs/bootstrap/3.3.4/js/bootstrap.min.js"></script> <link rel="stylesheet" type="text/css" href="login.css"> </head> <body> <div class="container"> <div class="blog-post form-signin"> ${message}<br> <form action ="${pageContext.request.contextPath}/login" method="post"> <h2 class="form-signin-heading">请登录</h2> <label for="username" class="sr-only">user</label> <input type="input" id="inputEmail" class="form-control" name="username" placeholder="用户名" required autofocus> <label for="password" class="sr-only">密码</label> <input type="password" id="inputPassword" class="form-control" name="password" placeholder="密码" required> <div class="checkbox"> <label> <input type="checkbox" value="remember-me"> 记住密码? </label> </div> <button class="btn btn-lg btn-primary btn-block" type="submit">登 录</button> </form> </div> </div> <footer class="blog-footer"> <p>sy的投票系统 </p> </footer> </body></html>
success.jsp登录成功页面
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <title>登录成功!</title> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! --> <meta name="description" content=""> <meta name="author" content=""> <link href="http://apps.bdimg.com/libs/bootstrap/3.3.4/css/bootstrap.css" rel="stylesheet"> <script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script> <script src="http://apps.bdimg.com/libs/bootstrap/3.3.4/js/bootstrap.min.js"></script> <link rel="stylesheet" type="text/css" href="success.css"> </head> <body> <div class="site-wrapper"> <div class="site-wrapper-inner"> <div class="cover-container"> <div class="masthead clearfix"> <div class="inner"> <h3 class="masthead-brand">${user}</h3> <nav> <ul class="nav masthead-nav"> <li class="active"><a href="#">首页</a></li> <li><a href="#">关于</a></li> <li><a href="/Voting_System/login.jsp">退出</a></li> </ul> </nav> </div> </div> <div class="inner cover"> <!--用EL语句调用出存到session里的usename --> <h1 class="cover-heading">欢迎${user}来投票</h1> <p class="lead"></p> <p class="lead"> <a href="vote.jsp" class="btn btn-lg btn-default">点击投票</a> </p> </div> <div class="mastfoot"> <div class="inner"> <p>sy的投票系统 </p> </div> </div> </div> </div> </div> </body></html>
Vote类
package cn.sy.servlet;import java.io.IOException;import java.sql.SQLException;import java.text.SimpleDateFormat;import java.util.Date;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import cn.sy.domain.User;import cn.sy.service.UserService;@WebServlet(name = "VoteServlet", urlPatterns = { "/vote" })public class Vote extends HttpServlet { Date currentTime; SimpleDateFormat formatter; String dateString = null; @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { User exsitUser = new User(); String name = request.getParameter("username"); // System.out.println(name); User user = new User(); user.setName(name); UserService service = new UserService(); currentTime = new Date(); formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 格式化当前时间 dateString = formatter.format(currentTime);// 转成字符串 //从session域中得到当前投票者 String username = (String) request.getSession().getAttribute("user"); //System.out.println(username); try { //调用修改记录方法,修改数据库最后投票时间 service.changeRecord(username,dateString); } catch (SQLException e2) { e2.printStackTrace(); } // 调用Service中的查询方法 try { //查询当前票数 exsitUser = service.findCount(user); // System.out.println(exsitUser.getCount()); } catch (SQLException e) { e.printStackTrace(); } if (exsitUser != null && name.equals("zhaoliu")) { int count = exsitUser.getCount();// 得到被投人当前票数 count += 1;// 票数加1 try { service.addCount(name, count); } catch (SQLException e) { e.printStackTrace(); } request.setAttribute("count", "投票成功:" + name + "当前票数为" + count); //投票成功请求转发到投票页面显示投票成功信息 request.getRequestDispatcher("/vote.jsp") .forward(request, response); return; } else if (exsitUser != null && name.equals("wangwu")) { int count = exsitUser.getCount();// 得到被投人当前票数 count += 1;// 票数加1 try { service.addCount(name, count); } catch (SQLException e) { e.printStackTrace(); } request.setAttribute("count", "投票成功:" + name + "当前票数为" + count); request.getRequestDispatcher("/vote.jsp") .forward(request, response); return; } else { request.setAttribute("message", "请选中你要投的人!"); request.getRequestDispatcher("/vote.jsp") .forward(request, response); return; } }}
vote.jsp投票页面
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="content-type" content="text/html; charset=UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1"><!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! --><meta name="description" content=""><meta name="author" content=""><title>投票</title><link href="http://apps.bdimg.com/libs/bootstrap/3.3.4/css/bootstrap.css" rel="stylesheet"><script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script><script src="http://apps.bdimg.com/libs/bootstrap/3.3.4/js/bootstrap.min.js"></script><link rel="stylesheet" type="text/css" href="login.css"></head><body> <!-- 主体 --> <div class="container"> <div class="blog-post form-signin"> ${message}<br> <form action="${pageContext.request.contextPath}/vote" method="get"> <h2 class="form-signin-heading">欢迎来投票</h2> ${count} <label for="username" class="sr-only">user</label> <div class="radio"> <label> <input type="radio" name="username" id="optionsRadios1" value="wangwu" checked> 王五 </label> </div> <div class="radio"> <label> <input type="radio" name="username" id="optionsRadios2" value="zhaoliu"> 赵六 </label> </div> <p> <input type="submit" value="投ta一票" class="btn btn-success"> </p> <label for="password" class="sr-only">密码</label> </form> </div> </div> <!-- 页脚 --> <footer class="blog-footer"> <p>sy的投票系统</p> </footer></body></html>
Vote_Filter类
package cn.sy.filter;import java.io.IOException;import java.sql.SQLException;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.annotation.WebFilter;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import cn.sy.service.UserService;import cn.sy.domain.Voter;@WebFilter(filterName = "VoteFilter", urlPatterns = { "/*" })public class Vote_Filter implements Filter { Date currentTime; SimpleDateFormat formatter; String dateString = null; @Override public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { // 1.强制转换 HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) resp; // 2.操作 // 判断当前资源是否需要权限控制. String uri = request.getRequestURI(); String contextPath = request.getContextPath(); String path = uri.substring(contextPath.length()); if (path.equals("/vote") || path.equals("/success")) { String recordTime = null; // 判断用户是否登录了. String voter = (String) request.getSession().getAttribute("user"); UserService service = new UserService(); if (voter == null) { request.setAttribute("message", "对不起,你还没用登录,请先登录!"); request.getRequestDispatcher("/login.jsp").forward(request, response); } try { // 调用查看当前数据库记录的投票者最后一次投票时间 Voter voter2 = service.findRecord(voter); recordTime = voter2.getRecord();// 得到时间 currentTime = new Date(); formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 格式化当前时间 dateString = formatter.format(currentTime);// 将服务器当前时间转成字符串 try { Date one = formatter.parse(dateString); Date two = formatter.parse(recordTime); long time1 = one.getTime(); long time2 = two.getTime(); long c = time1 - time2; if(c<24*60*60){ request.setAttribute("message", "对不起,您已经投过票了,明天再来吧!"); request.getRequestDispatcher("/vote.jsp").forward(request, response); } //System.out.println(c); } catch (ParseException e1) { //e1.printStackTrace(); System.out.println(voter+"想重复投票!"); } // System.out.println("最后一次投票时间为:"+recordTime); } catch (SQLException e) { e.printStackTrace(); } } // 3.放行 chain.doFilter(request, response); } @Override public void destroy() { // TODO Auto-generated method stub } @Override public void init(FilterConfig arg0) throws ServletException { // TODO Auto-generated method stub }}
UserService类
package cn.sy.service;import java.sql.SQLException;import cn.sy.dao.UserDao;import cn.sy.domain.User;import cn.sy.domain.Voter;public class UserService { public Voter login(Voter voter) throws SQLException { return new UserDao().login(voter); } public User findCount(User user) throws SQLException { return new UserDao().findCount(user); } public void addCount(String name,int count) throws SQLException { new UserDao().addCount(name,count); } public void changeRecord(String username, String dateString) throws SQLException { new UserDao().changeRecord(username, dateString); } public Voter findRecord(String voter) throws SQLException { return new UserDao().findRecord(voter); }}
UserDao类
package cn.sy.dao;import java.sql.SQLException;import org.apache.commons.dbutils.QueryRunner;import org.apache.commons.dbutils.handlers.BeanHandler;import cn.sy.domain.User;import cn.sy.domain.Voter;import cn.sy.utils.DBUtils;public class UserDao { // 登录 public Voter login(Voter voter) throws SQLException { String sql = "select * from voter_info where username=? and password=?"; // 使用c3p0数据库连接池,使用封装好的DBUtils获取数据库连接 QueryRunner runner = new QueryRunner(DBUtils.getDataSource()); // BeanHandler<User>(User.class)将结果集中的第一行数据封装到一个对应的JavaBean实例中 // 执行上面写好的sql语句 return runner.query(sql, new BeanHandler<Voter>(Voter.class), voter.getUsername(), voter.getPassword()); } public User findCount(User user) throws SQLException { String sql = "select count from person_info where name=?"; // 使用c3p0数据库连接池,使用封装好的DBUtils获取数据库连接 QueryRunner runner = new QueryRunner(DBUtils.getDataSource()); // BeanHandler<User>(User.class)将结果集中的第一行数据封装到一个对应的JavaBean实例中 // 执行上面写好的sql语句 return runner.query(sql, new BeanHandler<User>(User.class), user.getName()); } public void addCount(String name, int count) throws SQLException { String sql = "update person_info set count=" + count + " where name=?"; // 使用c3p0数据库连接池,使用封装好的DBUtils获取数据库连接 QueryRunner runner = new QueryRunner(DBUtils.getDataSource()); // BeanHandler<User>(User.class)将结果集中的第一行数据封装到一个对应的JavaBean实例中 // 执行上面写好的sql语句 runner.update(sql, name); } public void changeRecord(String username, String dateString) throws SQLException { String sql = "update voter_info set record=? where username=?"; // 使用c3p0数据库连接池,使用封装好的DBUtils获取数据库连接 QueryRunner runner = new QueryRunner(DBUtils.getDataSource()); // BeanHandler<User>(User.class)将结果集中的第一行数据封装到一个对应的JavaBean实例中 // 执行上面写好的sql语句 runner.update(sql, dateString,username); } public Voter findRecord(String voter) throws SQLException { String sql = "select * from voter_info where username=?"; QueryRunner runner = new QueryRunner(DBUtils.getDataSource()); return runner.query(sql, new BeanHandler<Voter>(Voter.class), voter); }}
效果图
注意
欢迎加入Information Technology QQ群:567346857
2 0
- 简单的JavaWeb投票系统
- PHP做的一个简单投票系统
- jquery制作简单的投票系统
- php--简单投票系统
- 简单的投票软件
- 一个简单的投票
- JSP+MySql实现的一个简单投票系统
- JSP+MySql实现的一个简单投票系统
- 一个简单的投票系统——PHP
- 一个简单JAVAWEB的台管理系统
- 一个简单的投票机器人
- 一个简单的投票机器人
- 一个简单的投票程序
- jQuery写的简单投票
- 一个简单的投票程序
- 简单的投票计数软件
- 简单 的 js 投票页面
- PHP+MySql简单投票系统代码
- 配置描述符web.xml
- 兼容IE跨平台解决方案
- 【双拼】双拼输入法入门指南
- 时间紧、任务重的时候怎么办,怎么解决还未完成的代码?
- 448. Find All Numbers Disappeared in an Array
- 简单的JavaWeb投票系统
- 给SwipeRefreshLayout添加上拉加载更多功能
- 高性能MySQL读书笔记:3、服务器性能剖析
- Message中自己new Message()和Message.obtain()的区别?
- 占小狼-Java进阶之路-浅谈StringBuffer
- 【c++】多态总结
- Android中把矩形图片切成圆形图片
- 学习C 的第七天
- Doge学HTML - 1