上次写了一篇jdbc工具类实现登录功能,但是只能在控制台实现输入用户名密码。这次使用了servlet来实现登录功能,可以通过在页面上输入账号密码,然后提交表单,查询数据库,从而实现登录功能。

1、配置文件,导入jar包

2、创建数据库环境

use student;
create table user(
 id int primary key auto_increment,
    username varchar(32),
    password varchar(32)
);

insert into user values(null,'zhangsan','123');
insert into user values(null,'lisi','234');

3、在web目录下创建html页面

<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>登录页面</title>
</head>
<body>
    <form action="/day14_request/loginservlet" method="post">
        用户名:<input type="text" name="username"><br>
        密码:<input type="password" name="password"><br>
        <input type="submit" value="登录">
    </form>
</body>
</html>

4、在src下编写druid.properties文件

driverclassname=com.mysql.jdbc.driver
url=jdbc:mysql://localhost:3306/student
username=root
password=root
maxactive=10
maxwait=1000

5、创建包cn.itcast.domain,创建类user

package cn.itcast.domain;

/*
    用户的实体类
 */
public class user {
    private int id;
    private string username;
    private string password;

    public int getid() {
        return id;
    }

    public void setid(int id) {
        this.id = id;
    }

    public string getusername() {
        return username;
    }

    public void setusername(string username) {
        this.username = username;
    }

    public string getpassword() {
        return password;
    }

    public void setpassword(string password) {
        this.password = password;
    }

    @override
    public string tostring() {
        return "user{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

6、创建包cn.itcast.util,编写工具类jdbcutils

package cn.itcast.util;

import com.alibaba.druid.pool.druiddatasourcefactory;

import javax.sql.datasource;
import java.io.ioexception;
import java.io.inputstream;
import java.sql.connection;
import java.sql.sqlexception;
import java.util.properties;

/*
    jdbc工具类,使用durid连接池
 */
public class jdbcutils {
    private static datasource datasource;

    static {
        try {
            //1、加载配置文件
            properties properties = new properties();
            inputstream resourceasstream = jdbcutils.class.getclassloader().getresourceasstream("druid.properties");
            properties.load(resourceasstream);

            //2、初始化连接池对象
            datasource = druiddatasourcefactory.createdatasource(properties);

        } catch (ioexception e) {
            e.printstacktrace();
        } catch (exception e) {
            e.printstacktrace();
        }


    }

    /**
     * 获取连接池对象
     */
    public static datasource getdatasource() {
        return datasource;
    }

    /**
     * 获取连接connection对象
     */
    public static connection getconnection() throws sqlexception {
        return datasource.getconnection();
    }
}

7、创建包cn.itcast.dao,创建类userdao,提供login方法

package cn.itcast.dao;

import cn.itcast.domain.user;
import cn.itcast.util.jdbcutils;
import org.springframework.dao.dataaccessexception;
import org.springframework.jdbc.core.beanpropertyrowmapper;
import org.springframework.jdbc.core.jdbctemplate;

/**
 * 操作数据库中user表的类
 */
public class userdao {
    //声明jdbctemplate对象共用
    private jdbctemplate jdbctemplate = new jdbctemplate(jdbcutils.getdatasource());

    /**
     * 登录方法
     * @param loginuser 只有用户和密码
     * @return user 包含用户全部信息,没有查询到,返回null
     */
    public user login(user loginuser) {

        try {
            //1、编写sql
            string sql = "select * from user where username = ? and password = ?";

            //2、调用query方法
            user user = jdbctemplate.queryforobject(sql,
                    new beanpropertyrowmapper<user>(user.class),
                    loginuser.getusername(),loginuser.getpassword());
            return user;
        } catch (dataaccessexception e) {
            e.printstacktrace();//记录日志
            return null;
        }
    }

}

8、编写cn.itcast.web.servlet.loginservlet类

package cn.itcast.web.servlet;

import cn.itcast.dao.userdao;
import cn.itcast.domain.user;
import org.apache.commons.beanutils.beanutils;

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 java.io.ioexception;
import java.lang.reflect.invocationtargetexception;
import java.util.map;

@webservlet("/loginservlet")
public class loginservlet extends httpservlet {
    protected void dopost(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception {
        //1、设置编码
        request.setcharacterencoding("utf-8");

        /*//2、获取请求参数
        string username = request.getparameter("username");
        string password = request.getparameter("password");
        //3、封装对象
        user loginuser = new user();
        loginuser.setusername(username);
        loginuser.setpassword(password);*/

        //2、获取所有请求参数(这里使用beanutils来简化操作)
        map<string, string[]> parametermap = request.getparametermap();
        //3.1 创建user对象
        user loginuser = new user();
        //3.2 使用beanutils对象
        try {
            beanutils.populate(loginuser,parametermap);
        } catch (illegalaccessexception e) {
            e.printstacktrace();
        } catch (invocationtargetexception e) {
            e.printstacktrace();
        }


        //4、调用userdao的login方法
        userdao userdao = new userdao();
        user user = userdao.login(loginuser);

        //5、判断user
        if (user == null) {
            //登录失败
            request.getrequestdispatcher("/failservlet").forward(request,response);
        } else {
            //登录成功
            //存储数据
            request.setattribute("user",user);
            //转发
            request.getrequestdispatcher("/successservlet").forward(request,response);
        }
    }

    protected void doget(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception {
        this.dopost(request,response);
    }
}

运行结果:

1、目录结构

2、运行界面

3、输入用户名密码均正确

4、跳转到成功登录界面

5、输入用户名或密码错误时

6、跳转登录失败界面

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持www.887551.com。