JavaWeb投票系统
目的
帮她完成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 {@Overridepublic 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.jsprequest.setAttribute("message", "登录失败:用户名或密码错误!");// 登录失败,请求转发到登录页面显示错误信息messagerequest.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;@Overridepublic 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;// 票数加1try {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;// 票数加1try {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>
<linkhref="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>
<scriptsrc="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;@Overridepublic 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);}@Overridepublic void destroy() {// TODO Auto-generated method stub}@Overridepublic 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
JavaWeb投票系统相关推荐
- javaweb 投票系统
最近做了一个简单的投票系统,来分享一下 1 先来看一下目录 2 效果图是这样的 首页,对一次演讲进行简单的评分 如果选项不完整,或者是没有选项,就会提示选项不完整,并且点击按钮进入选项页面 如果选项完 ...
- javaweb简单小项目-投票系统
这次给大家带来一个课堂基础作业,简单的javaweb投票系统. 当然也设计了添加投票人的接口,只是list页面没有直接导航过去. 如页面显示,可以增加和减少相应的票数.同时id是利用数据库该字段作为主 ...
- 基于JavaWeb的简易投票系统
基于JavaWeb的简易投票系统 项目文件 数据库文件 1.工具 IDEA JDK1.8 Tomcat8.5 MySQL 2.MySQL数据库 subjects表 /*Navicat Premium ...
- 简单实用的JavaWeb微投票系统
简单实用的JavaWeb微投票系统 目的 帮她完成JavaWeb课程设计,也做为练手的小项目: 功能 1.可以实现在个人登陆,在线投票,票数统计的功能: 2.规定每个投票者每天只能投一票,并要求登录成 ...
- java 在线投票_基于javaweb的在线投票系统
[实例简介] 基于javaweb的在线投票系统,使用SSH框架.用户注册登录后,可以发起投票,管理投票,参与投票,查看投票比例和结果等. [实例截图] [核心代码] Vote └── Vote ├── ...
- SSM框架基于JavaWeb在线投票系统的设计与实现源码
博主介绍:✌在职Java研发工程师.专注于程序设计.源码分享.技术交流.专注于Java技术领域和毕业设计✌ 项目名称 SSM框架基于JavaWeb在线投票系统的设计与实现源码 视频效果 SSM框架基 ...
- 投票器JAVA的具体框架是_java毕业设计_springboot框架的投票系统
今天介绍一个java毕设题目, 题目内容为springboot框架的投票系统, 是一个采用b/s结构的javaweb项目, 采用java语言编写开发工具eclipse, 项目框架jsp+springb ...
- java-net-php-python-67ssm在线投票系统计算机毕业设计程序
java-net-php-python-67ssm在线投票系统计算机毕业设计程序 java-net-php-python-67ssm在线投票系统计算机毕业设计程序 本源码技术栈: 项目架构:B/S架构 ...
- Django快速开发之投票系统
参考官网文档,创建投票系统. ================ Windows 7/10 Python 2.7.10 Django 1.8.2 ================ 1.创建项目(mys ...
最新文章
- 最新数据:一图看清全球393家独角兽公司
- Python入门100题 | 第074题
- MaxCompute 多租户数据安全体系
- pycharm vim 插件IdeaVIM
- 以管理员权限运行程序需注意
- matlab 文件列表,如何從Matlab寫入多個列表到同一個excel文件?
- (转)Android调试运行时错误之Process XXX terminated by signal (11)
- 化学能推进永远无法实现外星旅行
- 课程设计C语言歌手,【图片】发几个C语言课程设计源代码(恭喜自己当上技术小吧主)【东华理工大学吧】_百度贴吧...
- Java程序员开发软件(工具)清单
- Programer or Coder?
- web请求报出 “超过了最大请求长度”
- 《图解TCP/IP》——第一章 网络基础知识
- mqtt简介及在web端的应用(接入阿里iot)
- 小新吃上黑苹果13.1
- elementui级联选择器
- 微信小程序各错误码及原因自用表
- 关于.Net MAUI
- Arduino 超级省电之休眠模式用1节18650电池工作17年
- 剑三游戏总是显示服务器繁忙,剑网三缘起:终究低估了老玩家的热情,服务器被挤爆...