登录与JDBC

来源:互联网 发布:查看mysql启动状态 编辑:程序博客网 时间:2024/06/11 12:33

思路

我决定自顶向下讲一下,这样比较生动,也比较容易记住;

登录

  1. 登录第一是要有个form,从网页哪里可以将数据提交到后台来;然后Servlet就来处理;
@WebServlet(name = "LoginControl",urlPatterns = "/LoginControl")public class LoginControl extends HttpServlet {    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        doGet(request,response);    }    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        //step1: 获取用户提交的用户名和口令        String username = request.getParameter("loginName");        String password = request.getParameter("loginPassWord");        User user = new User(username, password);        //step2:数据库验证用户        UserService userService = new UserService();        if (userService.validateUser(user)) {            request.getRequestDispatcher("show.jsp").forward(request, response);        }else {            response.sendRedirect("mylogintest.html");        }    }}

不管怎么样,都获取从网页哪里通关表单获取了用户名和密码;接下来要做的就是验证一下数据库里是不是有这个用户;然后我们就发现了userService.validateUser(user),这就是分层了,UserService,用户服务类,就是管理用户的呗;

用户管理该怎么办呢?就继续向下,找个和数据库有关系的,能说得上话的;

public class UserService {    public boolean validateUser(User user) {        UserDAO userdao = (UserDAO) DAOFactory.newInstance("UserDAO");        return userdao.findUser(user);    }}

于是就是JDBC的相关内容了;传送门上次讲到过;大概类似于这样;
这里写图片描述

这次还有一点就是DBCP 的使用,超级简单;
首先看看配置文件:

driverClassName=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/restaurantusername=rootpassword=86271325#<!-- 初始化连接 -->initialSize=5#最大连接数量maxActive=5#<!-- 最大空闲连接 -->maxIdle=5#<!-- 最小空闲连接 -->minIdle=2#<!-- 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒 -->maxWait=60000#JDBC驱动建立连接时附带的连接属性属性的格式必须为这样:[属性名=property;] #注意:"user" 与 "password" 两个属性会被明确地传递,因此这里不需要包含他们。connectionProperties=useUnicode=true;characterEncoding=utf-8#指定由连接池所创建的连接的自动提交(auto-commit)状态。defaultAutoCommit=true#driver default 指定由连接池所创建的连接的只读(read-only)状态。#如果没有设置该值,则“setReadOnly”方法将不被调用。(某些驱动并不支持只读模式,如:Informix)defaultReadOnly=#driver default 指定由连接池所创建的连接的事务级别(TransactionIsolation)。#可用值为下列之一:(详情可见javadoc。)NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLEdefaultTransactionIsolation=READ_UNCOMMITTED

然后我们看看DBCP的相关代码:

package restaurant.utils;import org.apache.commons.dbcp.BasicDataSourceFactory;import javax.sql.DataSource;import java.io.InputStream;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.Properties;public class JDBCUtils {    private static String drivername;    private static String url;    private static String username;    private static String password;    private static DataSource myds = null;    private JDBCUtils(){    }    static{        InputStream in = JDBCUtils.class.getClassLoader().                getResourceAsStream("dbcpconfig.properties");        Properties prop = new Properties();        try {            prop.load(in);            myds = BasicDataSourceFactory.createDataSource(prop);        }catch(Exception ee){            ee.printStackTrace();        }    }    /**     * 建立数据库连接     *      * @return     */    public static Connection getConnection() {        Connection conn = null;        try {            conn = myds.getConnection();        } catch (SQLException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        return conn;    }    public static void main(String[] args) {        int i = 10;        while (i > 0) {            Connection connection = getConnection();            System.out.println(connection.hashCode());            i--;        }    }    /**     * 释放资源     *      * @param rs     * @param ps     * @param conn     */    public static void free(ResultSet rs, PreparedStatement ps, Connection conn) {        try {            if (rs != null) {                rs.close();            }            if (ps != null) {                ps.close();            }            if (conn != null) {                conn.close();            }        } catch (SQLException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}

使用DBCP配置的数据源是不是超级简单呢?

原创粉丝点击