文档章节

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

开源中国段子手
 开源中国段子手
发布于 2016/01/28 10:53
字数 1290
阅读 151
收藏 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
状态模式

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

ciyo_yang
2017/07/15
0
0
scala实现pageRank梳理+textRank生成文本摘要

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

Sheav
08/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Confluence 6 识别慢性能的宏

Page Profiling 给你了有关页面在载入的时候操作缓慢的邪教,你可以将下面的内容添加到调试(debug)级别: Version 3.1 及其后续版本 设置包名字为 com.atlassian.renderer.v2.components.M...

honeymose
13分钟前
0
0
day93-20180920-英语流利阅读-待学习

时尚之觞:外表光鲜靓丽,其实穷得要命 Lala 2018-09-20 1.今日导读 讲到时尚界,我们脑海里浮现的可能都是模特和设计师光鲜靓丽、从容潇洒的模样。可是,最近在法国出版的一本书却颠覆了我们...

飞鱼说编程
28分钟前
0
0
maven的pom.xml用解决版本问题

maven管理库依赖,有个好处就是连同库的依赖的全部jar文件一起下载,免去手工添加的麻烦,但同时也带来了同一个jar会被下载了不同版本的问题,好在pom的配置里面允许用<exclusion>来排除一些...

JAVA码猿
52分钟前
1
0
20180920 rzsz传输文件、用户和用户组相关配置文件与管理

利用rz、sz实现Linux与Windows互传文件 [root@centos01 ~]# yum install -y lrzsz # 安装工具sz test.txt # 弹出对话框,传递到选择的路径下rz # 回车后,会从对话框中选择对应的文件传递...

野雪球
今天
2
0
OSChina 周四乱弹 —— 毒蛇当辣条

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @ 达尔文:分享花澤香菜/前野智昭/小野大輔/井上喜久子的单曲《ミッション! 健?康?第?イチ》 《ミッション! 健?康?第?イチ》- 花澤香菜/前野智...

小小编辑
今天
42
11

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部