Login case (black horse) - simple login case using druid database connection pool, JdbcTemplate technology and Servlet

Keywords: Database JDBC Java SQL

catalog

User login case requirements

1. Preparation login.html Login page (two input boxes of username & password);
2. Use Druid database connection pool technology to operate mysql;
3. Using JdbcTemplate technology to encapsulate JDBC;
4. Log in successfully and jump to the SuccessServlet display: log in successfully! User name, welcome;
5. Login failure jump to FailServlet display: login failure, user name or password error.

Analysis block diagram

Development steps:

1. Create project, configuration file and import jar package.

2. Write logged in login.html Page.

Note: the path in action is / virtual directory / servlet resource path

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
	<!-- action Specifies where form data is sent when the form is submitted./Virtual directory/servlet Resource path
	method regulations HTTP Request method. -->
    <form action=""/logincase/lognServlet"" method="post">
        user name:<input type="text" name="username"> <br>
        password:  <input type="password" name="password"><br>
		<!-- submit Define the submit button. The submit button sends the form data to the server. -->
        <input type="submit" value="Sign in">
    </form>
</body>
</html>

3. Create the database userlogin and the table user.

CREATE DATABASE userlogin;
USE userlogin;
CREATE TABLE USER(
	id INT PRIMARY KEY AUTO_INCREMENT,
	username VARCHAR(32) UNIQUE NOT NULL,
	PASSWORD VARCHAR(32) NOT NULL
);

4. Create a package com.qgl.domain , create an entity class user. The entity class user corresponds to the user table, and the object corresponds to the records in the table.

package com.qgl.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 + '\'' +
                '}';
    }
}

5. Create a package com.qgl.util , create the database connection pool object and the tool class JDBC utils of the connection object.

Note: database path in the durid configuration file: URL= jdbc:mysql / / localhost:3306/userlogin Or url=jdbc:mysql:///userlogin.

package com.qgl.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;

public class JDBCUtils {
    private static DataSource ds;

    static{
        try {
            // 1. Load profile
            Properties pro = new Properties();
            InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");
            pro.load(is);
            // Create database connection pool object
            ds = DruidDataSourceFactory.createDataSource(pro);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * Get connection pool object
     */
    public static DataSource getDataSource(){
        return ds;
    }

    /**
     * Get connection object
     */
    public static Connection getConnection() throws SQLException {
        return ds.getConnection();
    }
}

6. Create a package com.qgl.dao , create the UserDao interface of the operation database and the UserDaoImpl implementation class under the subpackage impl.

package com.qgl.dao;
import com.qgl.domain.User;
public interface UserDao {
    /**
     * How to operate database
     * @param loginUser
     * @return
     */
    public User login(User loginUser);
}
package com.qgl.dao.impl;

import com.qgl.dao.UserDao;
import com.qgl.domain.User;
import com.qgl.util.JDBCUtils;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;

public class UserDaoImpl implements UserDao {
    // Declare that the JDBC template object is public
    private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
    /**
     * The parameter is the User input data encapsulated as User,
     * Find the User object in the return database, otherwise return null.
     * @param loginUser
     * @return
     */
    @Override
    public User login(User loginUser) {
        try {
            String sql = "select * from user where username = ? and password = ?";
            User user = template.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class),
                    loginUser.getUsername(), loginUser.getPassword());
            return user;
        } catch (DataAccessException e) {
            return null;
        }
    }
}

7. Create a package com.qgl.web.servlet, create the loginServelt class to process the login data, the successServlet class to jump after the login succeeds, and the failServlet class to jump after the login fails.

package com.qgl.web.servlet;

import com.qgl.dao.UserDao;
import com.qgl.dao.impl.UserDaoImpl;
import com.qgl.domain.User;
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;

@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // Set encoding
        req.setCharacterEncoding("utf-8");
        // Get request parameters
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        //3. Encapsulate the login user input information as user object
        User loginUser = new User();
        loginUser.setUsername(username);
        loginUser.setPassword(password);

        //4. Call the login method of UserDao to return the corresponding user object found in the database
        UserDao dao = new UserDaoImpl();
        User user = dao.login(loginUser);

        //5. Judge user
        if(user == null){
            //Login failed
            req.getRequestDispatcher("/failServlet").forward(req,resp);
        }else{
            //Login successful
            //Store data
            req.setAttribute("user",user);
            //forward
            req.getRequestDispatcher("/successServlet").forward(req,resp);
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req, resp);
    }
}
package com.qgl.web.servlet;

import com.qgl.domain.User;
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;

@WebServlet("/successServlet")
public class SuccessServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //Get the user object shared in the request domain
        User user = (User) req.getAttribute("user");
        if(user != null){
            //Set encoding
            resp.setContentType("text/html;charset=utf-8");
            //output
            resp.getWriter().write("Login succeeded!"+ user.getUsername() +",Welcome");
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
package com.qgl.web.servlet;

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;

@WebServlet("/failServlet")
public class FailServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //Set encoding
        resp.setContentType("text/html;charset=utf-8");
        //output
        resp.getWriter().write("Login failed, wrong user name or password");
    }

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

Posted by irish21 on Sun, 28 Jun 2020 17:55:56 -0700