前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【JavaWeb 篇】使用Servlet、JdbcTemplate和Durid连接池实现用户登录功能与测试

【JavaWeb 篇】使用Servlet、JdbcTemplate和Durid连接池实现用户登录功能与测试

作者头像
繁依Fanyi
发布2023-10-12 15:36:21
2900
发布2023-10-12 15:36:21
举报
文章被收录于专栏:繁依Fanyi 的专栏

在现代Web应用程序开发中,用户登录功能是基础中的基础。它为用户提供了安全访问系统的途径。本篇博客将引导您通过使用Servlet、Spring框架的JdbcTemplate以及Durid连接池,来构建一个完整的用户登录功能。我们将详细展示每个部分的代码,并解释其作用和功能。

数据库和数据模型

首先,我们需要创建一个数据库表来存储用户信息。我们创建了一个名为user的表,用于存储用户的登录信息,每个用户有一个唯一的ID、用户名和密码。为了与数据库中的用户数据建立映射,我们创建了一个Java类User,其中包含了idusernamepassword属性。

代码语言:javascript
复制
public class User {
    private int id;
    private String username;
    private String password;

    // 省略构造方法、getter和setter
}

数据库访问层

我们使用Spring框架的JdbcTemplate来处理与数据库的交互。在UserDao类中,我们封装了登录逻辑。它通过SQL语句检索用户名和密码,然后使用BeanPropertyRowMapper将数据库结果映射到User对象。

代码语言:javascript
复制
public class UserDao {
    private JdbcTemplate jdbcTemplate = new JdbcTemplate(JDBCUtils.getDataSource());

    public User login(User loginUser) {
        try {
            String sql = "SELECT * FROM user WHERE username=? AND password=?";
            User user = jdbcTemplate.queryForObject(sql,
                    new BeanPropertyRowMapper<>(User.class),
                    loginUser.getUsername(),
                    loginUser.getPassword());

            return user;
        } catch (DataAccessException e) {
            e.printStackTrace();
            return null;
        }
    }
}

使用Durid连接池

Durid是一个强大的数据库连接池,可以提升数据库连接的性能和管理。在JDBCUtils类中,我们初始化了Durid连接池。这样,我们可以通过getDataSource方法获取连接池对象,以及通过getConnections方法获取数据库连接。

代码语言:javascript
复制
public class JDBCUtils {
    private static DataSource dataSource;

    static {
        try {
            Properties properties = new Properties();
            InputStream inputStream = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");
            properties.load(inputStream);

            dataSource = DruidDataSourceFactory.createDataSource(properties);
        } catch (IOException | Exception e) {
            e.printStackTrace();
        }
    }
    // 省略其他方法
}

Servlet处理用户登录请求

Servlet是处理HTTP请求的核心组件。以下是一个处理用户登录请求的LoginServlet示例。在这里,我们从请求中获取用户名和密码,并调用UserDao中的login方法来验证用户身份。

代码语言:javascript
复制
@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");

        Map<String, String[]> map = request.getParameterMap();
        User loginUser = new User();

        try {
            BeanUtils.populate(loginUser, map);
        } catch (IllegalAccessException | InvocationTargetException e) {
            throw new RuntimeException(e);
        }

        UserDao dao = new UserDao();
        User user = dao.login(loginUser);

        if (user != null) {
            request.getSession().setAttribute("user", user);
            request.getRequestDispatcher("/successServlet").forward(request, response);
        } else {
            request.getRequestDispatcher("/failServlet").forward(request, response);
        }
    }
}

显示登录失败和成功信息

为了向用户提供友好的反馈,我们创建了FailServletSuccessServlet。在登录失败时,FailServlet将显示登录失败的消息。在登录成功时,SuccessServlet将显示欢迎消息,并向用户展示其用户名。

代码语言:javascript
复制
@WebServlet("/failServlet")
public class FailServlet extends HttpServlet {
    // ... (之前的代码)
}

@WebServlet("/successServlet")
public class SuccessServlet extends HttpServlet {
    // ... (之前的代码)
}

编写测试用例

为了确保代码的正确性,我们编写了测试用例。UserDaoTest类测试了UserDao中的登录功能。BeanUtilsTest类测试了BeanUtils库的功能。通过JUnit进行单元测试,我们可以验证代码的正确性和预期行为。

代码语言:javascript
复制
public class UserDaoTest {

    @Test
    public void testLogin() {
        User loginuser = new User();
        loginuser.setUsername("Brenda Butler");
        loginuser.setPassword("Z3CSAFZDp7");

        UserDao dao = new UserDao();
        User user = dao.login(loginuser);

        System.out.println(user);
    }
}

public class BeanUtilsTest {

    @Test
    public void test() {
        User user = new User();
        try {
            BeanUtils.setProperty(user, "username", "Ishida Rin");
        } catch (IllegalAccessException | InvocationTargetException e) {
            throw new RuntimeException(e);
        }

        System.out.println(user);
    }
}

创建用户登录页面

最后,我们创建了一个用户登录页面,让用户输入用户名和密码。通过表单提交数据,我们可以将用户的登录请求发送到LoginServlet来进行验证。

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>User Login</title>
</head>
<body>
    <h2>User Login</h2>
    <form action="loginServlet" method="post">
        用户名:<input type="text" name="username"> <br>
        密码:<input type="password" name="password"> <br>
        <input type="submit" value="登录">
    </form>
</body>
</html>

总结与展望

通过本篇博客,我们深入地探讨了使用Servlet、JdbcTemplate和Durid连接池来实现用户登录功能。我们从数据库建模、数据访问层、Servlet处理、前端页面创建、编写测试用例等多个方面详细介绍了实现过程。通过这个实例,您已经具备了构建更复杂Web应用的基础知识。

当然,实际项目中的登录功能可能需要考虑更多的安全性、验证、错误处理等。此外,我们还可以进一步优化代码、提高用户体验、加入验证码等功能。希望您能将这个示例作为一个起点,不断探索和学习,将知识应用到实际开发中。

通过这篇博客,您学会了如何使用Servlet、JdbcTemplate和Durid连接池来实现一个完整的用户登录功能,并通过测试用例验证代码的正确性。如果您还有疑问或需要进一步的帮助,欢迎随时提问。祝您在Web应用开发中取得成功!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-08-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 数据库和数据模型
  • 数据库访问层
  • 使用Durid连接池
  • Servlet处理用户登录请求
  • 显示登录失败和成功信息
  • 编写测试用例
  • 创建用户登录页面
  • 总结与展望
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档