JavaWeb(2)——servlet+tomcat实现用户登陆

servlet实现用户登陆

本文实现从前端页面-》servlet-》业务逻辑-》数据库全流程打通,利用用户登陆,最简单的实现逻辑,了解,掌握servlet技术。


idea2.3创建web项目并配置本地tomcat地址:https://blog.csdn.net/CSU174712009/article/details/113816885

本文整体目录结构:

JavaWeb(2)——servlet+tomcat实现用户登陆_第1张图片

1.导入项目所需要的jar包

包括:javax,mysql,junit

JavaWeb(2)——servlet+tomcat实现用户登陆_第2张图片

2.数据库创建和测试数据

CREATE DATABASE `test` DEFAULT CHARSET=utf8mb4;

USE test;

CREATE TABLE `user`(
id 		INT(12)		NOT NULL,
`name`		VARCHAR(20)	NOT NULL,
pwd		VARCHAR(20)	NOT NULL,
PRIMARY KEY(id)
)ENGINE=INNODB DEFAULT CHARSET=utf8mb4;

INSERT INTO `user` VALUES
(1,'李四',123456);

3.pojo也就是过去的bean

package com.ycw.express.section2.pojo;

public class User {
    private int id;
    private String uname;
    private String password;

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

    public void setUname(String uname) {
        this.uname = uname;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getUname() {
        return uname;
    }

    public String getPassword() {
        return password;
    }
}

4.jdbc连接数据库

这里我们编写了一个数据库连接的工具代码JDBCUtil代码如下:

package com.ycw.express.section2.Util;

import java.sql.*;

public class JDBCUtil {
    String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8";
    String user = "root";
    String password = "qq783339536";

    static {
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    public Connection getConnection() throws SQLException {
        return DriverManager.getConnection(url,user,password);
    }

    /**
     * 关闭数据库连接资源
     * @param conn
     * @param pstate
     * @param rs
     */
    public static void close(Connection conn, PreparedStatement pstate, ResultSet rs){
        try {
            if (rs != null){
                rs.close();
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        try {
            if (pstate != null){
                pstate.close();
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        try {
            if (conn != null){
                conn.close();
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }
}

数据库连接成功后

5.编写jdbc需要的sql,也就是dao层

package com.ycw.express.section2.dao;

import com.ycw.express.section2.Util.JDBCUtil;
import com.ycw.express.section2.pojo.User;

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

public class UserLoginDao {

    JDBCUtil jdbcUtil = new JDBCUtil();
    User user = new User();
    //通过用户名+密码都正确则返回该user对象
    public User findByUAndP(String username, String password) throws SQLException {
        Connection conn = jdbcUtil.getConnection();
        String sql = "select * from users where uname = ? and upassword = ?";
        PreparedStatement pstate = conn.prepareStatement(sql);
        pstate.setString(1,username);
        pstate.setString(2,password);
        ResultSet rs = pstate.executeQuery();
        while (rs.next()){
            user.setId(rs.getInt("id"));
            user.setUname(rs.getString("uname"));
            user.setPassword(rs.getString("upassword"));
            return user;
        }
        jdbcUtil.close(conn,pstate,rs);
        return null;
    }
}

 测试是否成功。

通过测试会对象地址,不存在则会返回null。

package com.ycw.express.section2.dao;

import org.junit.Test;

import java.sql.SQLException;

public class UserLoginDaoTest {

    @Test
    public void findByUAndPTest() throws SQLException {
        UserLoginDao userLoginDao = new UserLoginDao();
        System.out.println(userLoginDao.findByUAndP("admin", "1"));
    }
}

6.创建servelt实现业务逻辑判断

package com.ycw.express.section2.servlet;

import com.ycw.express.section2.dao.UserLoginDao;
import com.ycw.express.section2.pojo.User;

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 UserLoginServlet 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 {
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");

        String username = req.getParameter("username");
        String password = req.getParameter("password");
        System.out.println("username = " + username + " password = " + password);
        UserLoginDao userLogin = new UserLoginDao();
        User user = new User();
        try {
            user = userLogin.findByUAndP(username,password);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        if (user != null){
//            req.getRequestDispatcher("/success.html").forward(req,resp);
            resp.sendRedirect("/success.html");
        }else {
//            req.getRequestDispatcher("/error.html").forward(req,resp);
            resp.sendRedirect("/error.html");
        }
    }
}

 至此后台的代码已经完成。

7.创建html页面

设计了3个页面,登陆login、登陆成功success、登陆失败error

login




    
    用户登录
    


用户登录

其中,表单登陆是提交到的路径是action="/login" ,提交方式为method="post" 。

成功和失败都是初始的html页面




    
    Title


  

登录成功

8.添加前后端映射关系

在我们创建的web项目中自动生成的web.xml文件中添加前后端的映射关系

其中前端我们是通过表单

提交到login中;

而我们后端servelt接收请求的doGet和doPost是在UserLoginServlet中。

所以在web.xml中添加




    
        bb
        
            com.ycw.express.section2.servlet.UserLoginServlet
        
    
    
        bb
        /login
    

其中表示配置了后端的UserLoginServlet,配置了前端的/login,bb表示前后端的一个映射联系,其中bb名字可以随意取,保证在web.xml中唯一即可。在前端发送登陆请求后,会通过该文件的映射关系找到对应的servlet进行处理。

至此整个登陆的业务逻辑代码已经实现。

你可能感兴趣的:(JavaWeb,javaweb,servlet)