登录功能的开发(带验证码)

原创 2016年08月28日 19:53:59

1.因为要和数据库进行连接,先获取数据源,创建连接对象。这些操作在工具类中完成。

public class DbUtil {
    private static DataSource ds=null;
    //创建连接池
    static{
        Properties p = new Properties();
        try {
            p.load(DbUtil.class.getClassLoader().getResourceAsStream("jdbc.properties"));
           ds = BasicDataSourceFactory.createDataSource(p);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
    //获取与数据库连接的对象
    public static Connection get_Connection(){
        Connection conn=null;
        try {
             conn = ds.getConnection();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return conn;
    }

    //关闭连接
    public static void close_Connection(Connection conn){
        try {
            if(conn!=null&&!conn.isClosed()){
                conn.close();
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

jdbc.properties文件:

driverClassName=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@localhost:1521/orcl
username=student
password=ok
initialSize=5
maxActive=10
maxWait=6000

2.开发dao层的代码:判断在前台输入的用户与数据库中的是否对应。

public boolean isExit(String username,String password){
        //获取连接
        Connection conn = DbUtil.get_Connection();
        try {
            //创建运载sql语句的对象
            PreparedStatement ps = conn.prepareStatement("select * from student where stu_name=? and password=?");
            ps.setString(1, username);
            ps.setString(2, password);
            ResultSet rs = ps.executeQuery();
            //如果在数据库中查到相应的记录,返回true
            while(rs.next()) return true;

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return false;
    }

3.最后开发请求到来时处理请求的servlet。

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        request.setCharacterEncoding("utf-8");
        //获取前台传过来的参数
        String username = request.getParameter("username");
        System.out.println(username);
        String password = request.getParameter("password");
        //验证用户是否存在
        LoginDao dao = new LoginDao();
        //如果存在,页面跳转到success.html
        if(dao.isExit(username, password)){
            response.sendRedirect("success.html");
        }
        else//否则跳转到fail.html
            response.sendRedirect("fail.html");

    }

4.验证码的生成。
首先,向服务器发送一个获取验证码的请求

<img id="check" alt="" src="checkcode">

新建一个Servlet处理这个请求,生成验证码,并返回给浏览器。

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Random r=new Random();
        //1.创建一个bufferedimage对象
        BufferedImage image=new BufferedImage(60, 20, BufferedImage.TYPE_INT_RGB);
        //2.绘制长方形
        Graphics g = image.getGraphics();
        g.setColor(new Color(233, 222, 220));
        g.fillRect(0, 0, 60, 20);
        //画干扰线 ganrao
        for(int i=0;i<100;i++){
            g.setColor(new Color(160+r.nextInt(30), 160+r.nextInt(30), 160+r.nextInt(30)));
            int x=r.nextInt(60);
            int y=r.nextInt(20);
            g.drawLine(x, y, x+r.nextInt(15), y+r.nextInt(15));
        }
        //写上四位随机数字
        g.setColor(new Color(22, 30, 44));
        int checkCode=r.nextInt(9000)+1000;
        g.drawString(checkCode+"", 10, 15);
        //构建输出流,将图片返回到浏览器
        OutputStream out = response.getOutputStream();
        ImageIO.write(image, "jpg", out);
    }

附加功能:看不清图片上的验证码,想要重新生成一个,用jQuery实现,重新发送一个请求。

$(function(){
        $("#change").click(function(){

            $("#check").attr("src",'checkcode?hhh='+Math.random());
        });
    })

相关文章推荐

【爱上Linux】第一课 Linux概述

学习应该是快乐的事情。快乐的东西应该要分享开来,人人都快乐! 【爱上Linux】第一课 Linux概述 在本课中,和朋友们一起来思考这些问题。 问题一:谈Linux学习? 从四个方面来...

PHP登录验证码功能

  • 2012年08月08日 11:46
  • 31KB
  • 下载

APP中注册时常用的发送验证码的Button,带倒计时重发功能

注册时我们经常会碰到,给手机发送验证码的功能,点击发送验证码,然后就是显示剩余多少秒之后重新发送验证码,效果图如下: 为了实现这样的效果,Android中内置的普通的Button是达不到要...

Servlet实现带验证码登陆功能Demo

“纸上得来终觉浅”,动手比看书印象更深,学到的更多。下面用Servlet实现简单的带验证码的登陆功能,来巩固对Servlet的学习。...
  • dutsoft
  • dutsoft
  • 2014年11月25日 17:54
  • 2707

基于mob平台,手机短信验证码实现登录功能

最新项目中要用到手机短信验证码验证登录,在网上找了一个mob平台,以下是基于mob平台实现的验证码登录。 原创文章,转载请注明地址:http://blog.csdn.net/lcm0811 谢谢配合...
  • lcm0811
  • lcm0811
  • 2015年06月15日 14:14
  • 2522

Laravel5.1登录界面启用验证码功能

首先, composer.json中如下加入配置: "require": { ... "gregwar/captcha": "1.*" }, 然后,已成习惯...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:登录功能的开发(带验证码)
举报原因:
原因补充:

(最多只允许输入30个字)