天天看点

JAVA基础WEB阶段第 十 一 天——tomcat+servlet | 运用【servlet+tomcat+jdbc+mysql】实现用户的登录校验案例

JAVA需求:运用servlet实现用户的登录校验案例

JAVA基础WEB阶段第 十 一 天——tomcat+servlet | 运用【servlet+tomcat+jdbc+mysql】实现用户的登录校验案例

项目结构如下:

JAVA基础WEB阶段第 十 一 天——tomcat+servlet | 运用【servlet+tomcat+jdbc+mysql】实现用户的登录校验案例
一.准备工作
    jar包  :  mysql.jar   c3p0.jar  (web,jar复制的时候放到WEB-INF/lib)
    配置文件:  c3p0-config.xml (src下)   web.xml
    包结构  :  com.itheima.web    com.itheima.service   com.itheima.dao   com.itheima.utils
    工具类  :  C3P0Utils
           
二.编写Dao
    1.创建UserDao接口 ,提供一个抽象方法 loginDao(String username, String password);
    2.编写UserDaoImpl 实现类,重写loginDao的方法
        具体步骤:
        1)获取连接对象
        2)创建语句执行对象,预编译sql
        3)给sql传递参数
        4)执行sql , executeQuery()  ==>得到结果集 ResultSet
        5)定义count=0;
        6)循环遍历ResultSet , 累加count
        7)返回count
           

 UserDao接口代码:

package com.it.dao;

import java.sql.SQLException;

public interface UserDao  {
    public int loginDao(String name,String password) throws SQLException;
}
           

UserDaoImpl实现类代码: 

package com.it.dao;


import com.it.utils.C3P0Utils;
import org.junit.Test;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class UserDaoImpl implements UserDao {

    @Override
    public int loginDao(String username, String password) throws SQLException {
        Connection connection = C3P0Utils.getConnection();
        PreparedStatement pst = connection.prepareStatement("select * from USER WHERE  username = ? AND password = ?");
        pst.setString(1,username);
        pst.setString(2,password);

        ResultSet rs = pst.executeQuery();
        int count = 0;
        while (rs.next()){
            count++;
        }
        return count;
    }

    /*
    @Test
    public void test() throws SQLException {
        int count = loginDao("zhangsan","123");
        System.out.println(count);
    }
    */
}
           
三.编写Service
     1.创建UserService接口 ,提供一个抽象方法 boolean loginService(String username, String password);
     2.编写UserServiceImpl 实现类,重写loginDao的方法
        具体步骤:
        1)创建UserDaoImpl实现类对象
        2)调用UserDaoImpl中的loginDao ==> 返回 int count
        3)判断count 如果大于0 ,return true ,如果 <=0 返回false
           

 UserService接口代码:

package com.it.service;

import java.sql.SQLException;

public interface UserService {
    public boolean loginService(String username,String password) throws SQLException;

}
           

UserServiceImpl实现类代码: 

package com.it.service;

import com.it.dao.UserDao;
import com.it.dao.UserDaoImpl;

import java.sql.SQLException;

public class UserServiceImpl implements UserService {
    @Override
    public boolean loginService(String username, String password) throws SQLException {
       UserDao dao = new UserDaoImpl();
        int count = dao.loginDao(username, password);
        return count > 0;
    }
}
           
四.编写Web
     1.LoginServlet extends HttpServlet ; 重写doGet (调用doPost)  和 doPost
     2.内容都写在doPost方法中
        具体步骤:
        1)获取参数username
        2)获取参数password
        3)创建UserServiceImpl对象
        4)调用serviceLogin(username,password);  ===> boolean
        5)判断boolean 如果是true, 给浏览器打印登录成功,如果boolean是false,给浏览器打印 登录失败.
        6)配置web.xml
           

LoginServlet 类代码: 

package com.it.web;

import com.it.service.UserService;
import com.it.service.UserServiceImpl;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.SQLException;

public class LoginServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        try {
            req.setCharacterEncoding("UTF-8");
            resp.setContentType("text/html; Charset=utf-8");
            String username = req.getParameter("username");
            String password = req.getParameter("password");
            UserService userService = new UserServiceImpl();
            boolean flag = userService.loginService(username, password);
            if(flag){
                resp.getWriter().print("登录成功!");
            }else{
                resp.getWriter().print("登录失败!");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
           

web.xml配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
    
    
    <servlet>
        <servlet-name>LoginServlet</servlet-name>
        <servlet-class>com.it.web.LoginServlet</servlet-class>
        
    </servlet>
    <servlet-mapping>
        <servlet-name>LoginServlet</servlet-name>
        <url-pattern>/LoginServlet</url-pattern>
    </servlet-mapping>
    
</web-app>
           

C3P0Utils类代码: 

package com.it.utils;

import com.mchange.v2.c3p0.ComboPooledDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * 1.定义一个成员对象,作为静态连接池对象
 * 2.提供一个静态的方法获取连接池对象
 * 3.提供一个静态的方法获取Connection连接对象
 * 4.提供一个静态的方法关闭资源
 */
public class C3P0Utils {
    private static final DataSource dataSourse = new ComboPooledDataSource();

    public static DataSource getDataSourse(){
        return dataSourse;
    }

    public static Connection getConnection(){
        try {
            return dataSourse.getConnection();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static void closeResource(Connection connection, Statement statement,ResultSet resultSet){
        if(resultSet != null){
            try {
                resultSet.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(statement != null){
            try {
                statement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(connection != null){
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

}
           

c3p0-config.xml配置文件 :

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>

  <default-config>
    <property name="driverClass">com.mysql.jdbc.Driver</property>
    <property name="jdbcUrl">jdbc:mysql://localhost:3306/servlet_login_demo</property>
    <property name="user">root</property>
    <property name="password">root</property>
  </default-config>
</c3p0-config>
           

页面:Login.html

<!DOCTYPE html>
<html >
<head>
    <meta charset="UTF-8">
    <title>Login</title>
</head>
<body>
    <form action="" method="post">
       用户名: <input type="text" name="username"/><br/>
        密&nbsp;&nbsp;&nbsp;码:&nbsp;&nbsp;<input type="password" name="password"/><br/>
        <input type="submit" value="登录"/>

    </form>
</body>
</html>
           

数据库:

CREATE DATABASE servlet_login_demo DEFAULT CHARSET ='utf8'
USE servlet_login_demo;
CREATE TABLE `user`(
    `uid` INT PRIMARY KEY AUTO_INCREMENT,
    `username` VARCHAR(32),
    `password` VARCHAR(32)
)
INSERT INTO USER VALUES (1,'zhangsan','123');
SELECT * FROM USER
           
JAVA基础WEB阶段第 十 一 天——tomcat+servlet | 运用【servlet+tomcat+jdbc+mysql】实现用户的登录校验案例

页面访问:

账号输入:zhangsan

密码输入:123

JAVA基础WEB阶段第 十 一 天——tomcat+servlet | 运用【servlet+tomcat+jdbc+mysql】实现用户的登录校验案例
JAVA基础WEB阶段第 十 一 天——tomcat+servlet | 运用【servlet+tomcat+jdbc+mysql】实现用户的登录校验案例

继续阅读