基于Servlet的简单登录案例(附Java常用jar包)

需求分析

  1. 实现简单的登录功能
  2. 使用Druid连接池技术操作数据库
  3. 使用JdbcTemplate技术封装JDBC
  4. 登录成功跳转到SuccessServlet页面

实现步骤

1. 登录页面

login.html
编写一个登录页面用于提交数据

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>login</title>
</head>
<body>
<form action="" method="post">
    username:<input type="text" name="username" ><br>
    password:<input type="password" name="password"><br>
    <input type="submit" value="登录">
</form>
</body>
</html>

2. 数据库操作

1.建立数据库表

字段为id、username以及password

CREATE TABLE UserInfo ( 
	id INT PRIMARY KEY AUTO_INCREMENT, 
	username VARCHAR ( 32 ) UNIQUE NOT NULL, 
	password VARCHAR ( 32 ) NOT NULL 
);

2.新建实体类User

package com.java.web.domain;
public class User {
    private Integer id;
    private String username;
    private String password;
    public User(Integer id, String username, String password) {
        this.id = id;
        this.username = username;
        this.password = password;
    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer 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;
    }
    public User() {
    }
    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

3.创建JdbcUtils工具类

在此之前先创建druid.properties

public class JdbcUtils {
    private static DataSource ds;
    static {
        try {
            //1.加载配置文件
            Properties pro = new Properties();
            //使用ClassLoader加载配置文件,获取字节输入流
            InputStream rs = JdbcUtil.class.getClassLoader().getResourceAsStream("druid.properties");
            pro.load(rs);
            //2.初始化连接对象
            ds = DruidDataSourceFactory.createDataSource(pro);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /*
    获取连接池对象
     */
    public static DataSource getDataSource() {
        return ds;
    }

    /*
        获取连接Connection对象
         */
    public static Connection getConnection() throws SQLException {
        return ds.getConnection();
    }
}

4.新建UserDao

public class UserDao{
    //声明JDBCTemplate对象共用
    private JdbcTemplate jdbcTemplate = new JdbcTemplate(JdbcUtil.getDataSource());

    /**
     * 登陆方法
     * @param loginuser
     * @return
     */
    public User Login(User loginuser){
        try {
            String sql = "select * from UserInfo where username = ? and password = ? ";
            User users = jdbcTemplate.queryForObject(sql,
                    new BeanPropertyRowMapper<User>(User.class),
                    loginuser.getUsername(), loginuser.getPassword());
            return users;
        } catch (DataAccessException e) {
            e.printStackTrace();
            return null;
        }
    }
}

3. 请求转发

loginServlet

  1. 设置编码
  2. 获取username和password
  3. 将username和password封装为一个User对象
  4. 判断User是否为空
    • 是:登录失败——>FailServlet
    • 否:登录成功——>将用户信息存储起来,转发SuccessServlet

1.LoginServlet

@WebServlet( "/LoginServlet")
public class LoginServlet extends HttpServlet {
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1、设置编码字符集
        req.setCharacterEncoding("utf-8");
        //2、获取请求参数
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        //3、封装对象
        User loginUser = new User();
        loginUser.setUsername(username);
        loginUser.setPassword(password);
        //4、调用UserDao
        UserDao userDao = new UserDao();
        User user = userDao.Login(loginUser);
        //5、判断user是否为空
        if (user == null){
            //登录失败
            req.getRequestDispatcher("/failServlet").forward(req,resp);
        }else {
            //登录成功
            //存储数据
            req.setAttribute("user",user);
            //转发
            req.getRequestDispatcher("/successServlet").forward(req,resp);
        }

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

2.failServlet

@WebServlet("/failServlet")
public class failServlet extends HttpServlet {

    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       resp.setContentType("text/html;charset=utf-8");
       resp.getWriter().println("登录失败,用户名或密码错误");
    }

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

3.successServlet

@WebServlet("/successServlet")
public class successServlet extends HttpServlet {

    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取request域中的共享数据
        User user = (User)req.getAttribute("user");

        resp.setContentType("text/html;charset=utf-8");
        if (user != null) {
            resp.getWriter().println("登录成功" + user.getUsername() + "欢迎你!");
        }
    }

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

注意事项

这里因为不是Maven工程,所以所有的包都需要自己导入,否则就会出现异常

以下是需要用到的jar包
在这里插入图片描述

测试

在浏览器中输入
http://localhost:8080/JavaWeb_test/login.html

输入用户名和密码
在这里插入图片描述

输入错误的用户数据,登录失败
在这里插入图片描述
输入正确的用户数据,登录成功
在这里插入图片描述

附上Java常用jar包

链接:https://pan.baidu.com/s/1yMEZ8XdilOltl8H0zkQHbA 密码:nghi


版权声明:本文为weixin_41919801原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。