利用dbutils实现登录实例

利用dbutils实现登录实例

  • 思路:html网页—-登录(用户名,密码)—–servlet中getparamer方法得到用户输入的用户名和密码——-用户名和密码在dbutils中验证是否正确,

  • 添加三个包:c3p0-0.9.1.2.jar(c3p0的包) commons-dbutils-1.4.jar(dbutils包)
    mysql-connector-java-5.0.8-bin.jar(MySQL驱动的包),不需要添加配置。

  • web.xml中配置servlet,后面讲。

  • 代码

    1. html的代码:若只要登录效果,,界面越简单越好,注意粗体加黑的地方

      • form class=”form-horizontal” action=”http://localhost:8081/03.1Login/servletLogin* method=”post”*

      • input type=”text” class=”form-control” id=”username” placeholder=”请输入用户名” name=”username”

      • input type=”password” class=”form-control” id=”inputPassword3” placeholder=”请输入密码” name=”password”

      • action表示要提交的地方,这里是web.xml配置的servlet的地方,因为网站输入网址的访问有两种方式,1.localhost:8081/03.1Login/webcontent目录下的html文件 2.localhost:8081/03.1Login/web.xml中配置的servlet名称

    2.servlet代码:建立servlet包–Servlet类

package servlet;

``import java.io.IOException;
``import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import domain.Users;
import Service.Service;

public class Servlet extends HttpServlet {
    //设置编码
    //得到用户名和密码
    //调用userservice中的login()方法,返回user对象
    //判断user是否为空。
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        String username=req.getParameter("username");//从html文件中获取输入的用户名
        String password=req.getParameter("password");
        resp.setContentType("text/html;charset=utf-8");//设置读取的格式
        Service sv=new Service();
        Users user = null;
        try {
            user = sv.login(username, password);//在service类中的login方法判断用户名或者密码是否正确
        } catch (SQLException e) {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
            System.out.println("网络异常!");
        }
        if(user==null){
            //3.1若为空 写"用户名和密码不匹配"
            resp.getWriter().print("用户名和密码不匹配,3秒之后跳转");
            //案例2-定时跳转
            resp.setHeader("refresh","3;url=/03.1Login/login.htm");
        }else{
            //3.2若不为空 写"xxx:欢迎回来"
            resp.getWriter().print(user.getUsername()+":欢迎回来");
        }
    }

}
  1. 导入dbutils文件和c3p0.properties

    public class JavaUtils {
    public static ComboPooledDataSource ds=new ComboPooledDataSource();
    
    //连接池
    public static DataSource getPool(){
        return ds;
    }
    //获取连接
    public static Connection name() throws SQLException {
        return ds.getConnection();
    }
    
    //释放资源
    public static void closeResource(Connection conn, Statement st, ResultSet rs) {
        closeResultSet(rs);
        closeStatement(st);
        closeConn(conn);
    }
    
    /**
     * 释放连接
     * 
     * @param conn
     *连接
     */
    public static void closeConn(Connection conn) {
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            conn = null;
        }
    
    }
    
    /**
     * 释放语句执行者
     * 
     * @param st
     *语句执行者
     */
    public static void closeStatement(Statement st) {
        if (st != null) {
            try {
                st.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            st = null;
        }
    
    }
    
    /**
     * 释放结果集
     * 
     * @param rs
     *结果集
     */
    public static void closeResultSet(ResultSet rs) {
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            rs = null;
        }
    
    }
    

4.domain包—–User类, 建立username和password的javabean;

package domain;

public class Users {
  private String username;
  private String password;
  public String getUsername() {
      System.out.println("user"+username);
      return username;
  }
  public void setUsername(String username) {
      this.username = username;
  }
  public String getPassword() {
      return password;
  }
  public void setPassword(String password) {
      this.password = password;
  }

}

5.services实现验证

 package Service;
import java.sql.SQLException;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import utils.JavaUtils;
import domain.Users;

public class Service {
    public Users login(String username,String password) throws SQLException {
        QueryRunner qr=new QueryRunner(JavaUtils.getPool());//获取连接

        //String sql="select * from user WHERE username=? and password=?";
        //编写sql
        String sql="select * from user where username = ? and password = ?";
        //执行sql
        //将username和password传入到User.java中
        Users user = (Users) qr.query(sql, new BeanHandler<>(Users.class),username,password);
        System.out.println("1"+user);
        System.out.println("2"+user.getPassword());
        return user;
    }
}

源码下载:http://download.csdn.net/detail/u012510757/9762390

1 对于数据表的读操作 他可以把结果转换成List Array Set等java集合 便于程序员操作; 2 对于数据表的写操作 也变得很简单(只需写sql语句) 3 可以使用数据源 使用JNDI 数据库连接池等技术来优化性能 重用已经构建好的数据库连接对象 而不像php asp那样 费时费力的不断重复的构建和析构这样的对象 DBUtils包括3个包: org apache commons dbutils org apache commons dbutils handlers org apache commons dbutils wrappers DBUtils封装了对JDBC的操作 简化了JDBC操作 可以少写代码 org apache commons dbutils DbUtils 关闭链接等操作 QueryRunner 进行查询的操作 org apache commons dbutils handlers ArrayHandler :将ResultSet中第一行的数据转化成对象数组 ArrayListHandler将ResultSet中所有的数据转化成List List中存放的是Object[] BeanHandler :将ResultSet中第一行的数据转化成类对象 BeanListHandler :将ResultSet中所有的数据转化成List List中存放的是类对象 ColumnListHandler :将ResultSet中某一列的数据存成List List中存放的是Object对象 KeyedHandler :将ResultSet中存成映射 key为某一列对应为Map Map中存放的是数据 MapHandler :将ResultSet中第一行的数据存成Map映射 MapListHandler :将ResultSet中所有的数据存成List List中存放的是Map ScalarHandler :将ResultSet中一条记录的其中某一列的数据存成Object org apache commons dbutils wrappers SqlNullCheckedResultSet :对ResultSet进行操作 改版里面的值 StringTrimmedResultSet :去除ResultSet中中字段的左右空格 Trim ">1 对于数据表的读操作 他可以把结果转换成List Array Set等java集合 便于程序员操作; 2 对于数据表的写操作 也变得很简单(只需写sql语句) 3 可以使用数据源 使用JNDI 数据库连接池等技术来优化性能 重用已经构建好的 [更多]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值