文档章节

EL+servlet+jsp实现简单的投票程序版本二

开源中国段子手
 开源中国段子手
发布于 2016/01/28 10:53
字数 1290
阅读 152
收藏 3

在该项目版本一中,主要涉及最基本的java web基础知识。本篇博文仍然是基本知识,不过在版本一中,所有投票不计名不限定ip,bug很多。在版本二中有所改善,主要在投票之前加上了登录这一块,如果该用户名已经投票则自动跳转投票结果页面。

如果您对EL表达式不熟悉,请阅读我前面相关EL的基础博文

EL表达式(一):http://my.oschina.net/passer007/blog/608675

EL表达式(二):http://my.oschina.net/passer007/blog/610221

EL表达式中的隐含对象: http://my.oschina.net/passer007/blog/610380

如果你在翻阅版本二之前还没有阅读版本一请移步版本一,因为版本一中出现的版本二中不需要修改的页面我将不会在此博文中粘贴出来:

EL+servlet+jsp实现简单的投票程序版本一:http://my.oschina.net/passer007/blog/610513

写在前面的tips:由于是简单的投票程序,我在验证用户是否投票这一过程中直接采用用户名验证,不需要取数据库再验证用户密码,需要验证密码的同学可以自己完善程序。

在版本二中由于验证用户名,必须需要建立数据库连接,一下是连接数据库的基础代码:

package com.zhong.el;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DataBaseUtil {
	public static Connection getConnection(){
		System.out.println("正在尝试为您连接数据库,请稍等。。。");
		Connection conn = null;
		try {
			Class.forName("com.mysql.jdbc.Driver");
			String url = "jdbc:mysql://localhost:3306/Book";
			String user = "root";
			String password = "123456";
			conn = DriverManager.getConnection(url, user, password);
			System.out.println("数据库连接已成功,请确定您当前连接的数据库:Book");
		} catch (ClassNotFoundException | SQLException e) {
			// TODO Auto-generated catch block
			System.out.println("数据库连接失败,请检查用户名密码!");
			e.printStackTrace();
		}
		return conn;
	}
	
	public static void closeConnection(Connection conn){
		if(conn!=null){
			try {
				System.out.println("数据库正在关闭,请稍等。。。");
				conn.close();
				System.out.println("数据库关闭成功!");
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				System.out.println("数据库关闭失败,请检查后重试!");
				e.printStackTrace();
			}
		}else{
			System.out.println("请检查您的连接是否为空!");
		}
	}
	
}
由于知识简单的验证用户名,因此,用户DAO显得相对简单,只需要进数据表查取用户名即可
package com.zhong.el;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class UserDao {
	public boolean isExistUsername(String username){
		Connection conn = DataBaseUtil.getConnection();
		String sql = "select * from tab_user where username = ?";
		try {
			PreparedStatement ps = conn.prepareStatement(sql);
			ps.setString(1, username);
			ResultSet rs = ps.executeQuery();
			if(!rs.next()){
				return true;
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return false;
	}
}
下面是jsp文件,就是投票的人输入用户名进行验证这一面:
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action = "<%=request.getContextPath() %>/LoginInServlet" method = "post">
		输入用户名:<input type = "text" name = "username">
		<input type = "submit" value = "登录">
	</form>
</body>
</html>
最后是对用户登录界面传来的用户名进行验证并产生相对应的处理的servlet
package com.zhong.el;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class LoginInServlet
 */
@WebServlet("/LoginInServlet")
public class LoginInServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public LoginInServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		response.getWriter().append("Served at: ").append(request.getContextPath());
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		String username = request.getParameter("username");
		UserDao userdao = new UserDao();
		PrintWriter pw = response.getWriter();
		if(userdao.isExistUsername(username)){
			pw.println("<script>alert('用户可以投票!');window.location.href = 'EL/index.jsp';</script>");
		}else{
			pw.println("<script>alert('该用户已经投票!');window.location.href = 'showResult.jsp'</script>");
		}
	}

}
好了,版本二中新添的功能在此结束,请注意投票的主代码在版本一中,请阅读开头的版本一进去相应连接。

最后是两个问题:版本二中最严重的问题是我并没有在投票界面获取用户,也就是说在不登录的情况下直接访问投票页面是可以无限制投票的。这一问题的解决方案是:

    其一:限制必须登录之后才可以访问该界面

    其二:在该界面进行用户名检测

    (以上问题已经修改,代码已经重新上传)

    第二个问题是:

        没有对已经投票的用户名进行入库(这一问题也相对简单,不会再更新,留给读者自己完成)

如果有第三版的话我会在第三版中进行修改,没有第三版的话就请各位自行修改了~(到此也不会再出第三版,除非以后哪天的生活中需要用到我一定会拿来好好更新的,以上全部都是简单的例子,供大家一起学习交流吧,欢迎各路大神指责。)

                                                                                                                                                                        系列博文如有转载请注明出处

© 著作权归作者所有

共有 人打赏支持
开源中国段子手
粉丝 43
博文 178
码字总数 95519
作品 0
南京
程序员
私信 提问
EL+servlet+jsp实现简单的投票程序版本一

如果你还没有EL基础的话请看我的前面几篇博客: EL表达式(一):http://my.oschina.net/passer007/blog/608675 EL表达式(二):http://my.oschina.net/passer007/blog/610221 EL表达式中的...

开源中国段子手
2016/01/27
330
0
DeDeCMS 5.7 发布,老牌开源CMS给力

期盼已久的DedeCMS v5.7程序在3月8日下午正式发布和各站长们见面了。作为织梦的忠实粉丝当然第一时间安装DedeCMS v5.7来进行测试。 一、安装界面及程序 在安装界面上V5.7相比V5.6并没有太大的...

老表
2011/03/09
1K
8
研磨设计模式 之 状态模式(State)1——跟着cc学设计系列

18.1 场景问题 18.1.1 实现在线投票 考虑一个在线投票的应用,要实现控制同一个用户只能投一票,如果一个用户反复投票,而且投票次数超过5次,则判定为恶意刷票,要取消该用户投票的资格,当...

白金小猪4号
2014/01/21
0
0
scala实现pageRank梳理+textRank生成文本摘要

一、数据集准备:空格后面网址为前面网页中链接到的url 二、思路梳理 一个网页链接了几个url,就相当于给几个url进行的投票,那么它给其他url投票的分数就为:自己的得分/自己链接的url个数-...

Sheav
08/03
0
0
状态模式

1 场景问题 1.1 实现在线投票 考虑一个在线投票的应用,要实现控制同一个用户只能投一票,如果一个用户反复投票,而且投票次数超过5次,则判定为恶意刷票,要取消该用户投票的资格,当然同时...

ciyo_yang
2017/07/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

deepin中配置robot framework环境

本文永久更新地址:https://my.oschina.net/bysu/blog/2989005 【若要到岸,请摇船:开源中国 不最醉不龟归】 1.在终端中输入pip,回车,如果提示没有该命令,则先安转pip sudo apt-get inst...

不最醉不龟归
24分钟前
2
0
OSChina 周日乱弹 —— 钱不还,我就当你人不在了

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子 :分享Bigleaf的单曲《小鹿》 《小鹿》- Bigleaf 手机党少年们想听歌,请使劲儿戳(这里) 周日在家做什么? 做手工呀, @poorfis...

小小编辑
今天
91
3
EOS docker开发环境

使用eos docker镜像是部署本地EOS开发环境的最轻松愉快的方法。使用官方提供的eos docker镜像,你可以快速建立一个eos开发环境,可以迅速启动开发节点和钱包服务器、创建账户、编写智能合约....

汇智网教程
今天
20
0
《唐史原来超有趣》的读后感优秀范文3700字

《唐史原来超有趣》的读后感优秀范文3700字: 作者:花若离。我今天分享的内容《唐史原来超有趣》这本书的读后感,我将这本书看了一遍之后就束之高阁了,不过里面的内容一直在在脑海中回放,...

原创小博客
今天
29
0
IC-CAD Methodology知识图谱

CAD (Computer Aided Design),计算机辅助设计,指利用计算机及其图形设备帮助设计人员进行设计工作,这个定义同样可以用来近似描述IC公司CAD工程师这个岗位的工作。 早期IC公司的CAD岗位最初...

李艳青1987
今天
38
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部