Servlet实现用户登录

1.用户登录案例需求

	**1.编写login.jsp登录界面**
	**2.使用Druid数据库连接池技术,操作mysql数据库中的user表**
	**3.使用jdbcTemplate技术封装JDBC**
	**4.登录成功跳转到SuccessServlet显示:登录成功!用户名,欢迎您**
	**5.登录失败跳转到FailServlet显示:登录失败,用户名或者密码错误!**

2.开发步骤

1.创建web项目,编辑登录界面,配置文件,jar包
(1)web项目
在这里插入图片描述
(2)登录界面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登录界面</title>
</head>
<body>
<div>
    <%-- contextPath表示虚拟路径 --%>
    <form method="post" action="${pageContext.request.contextPath}/loginServlet">
        <input name="userName" type="text" placeholder="请输入用户名">
        <input name="password" type="password" placeholder="请输入密码">
        <input name="submit" type="submit" value="登录">
    </form>
</div>
</body>
</html>

(3)配置文件
在这里插入图片描述
(4)导入需要的jar包
在这里插入图片描述
jar包下载地址

链接:https://pan.baidu.com/s/1XLDDXy1o7JU5_V_zkpV66Q 提取码:pwfu

2.创建数据库信息
在这里插入图片描述3.创建实体类

package com.li.beans;

public class User {
    private String userName;    //用户名称
    private String passWord;    //用户密码

    /**
     * 构造器
     * */
    public User() {
    }

    public User(String userName, String passWord) {
        this.userName = userName;
        this.passWord = passWord;
    }

    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{" +
                "userName='" + userName + '\'' +
                ", passWord='" + passWord + '\'' +
                '}';
    }
}

4.创建JDBC工具类

public class JDBCUtils {
    private static DataSource ds;
    static {
        try {
            //1、加载配置文件
            Properties pro = new Properties();
            //使用ClassLoader加载配置文件。获取字节流对象
            InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("/com/li/utils/druid.properties");
            //System.out.println("有拿到吗?"+is);
            pro.load(is);
            //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();
    }
}

5.创建包cn.yh.dao,创建类UserDao,提供login方法

/**
 * 数据库中User表的类
 * 功能:使用连接池,查询数据库用户信息的
 * */
public class UserDao {
    //声明JDBCTemplate对象共用
    private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());

    /**
     * 登录方法
     * */
    public User login(User loginUser){
        try {
            //1、编写SQL语句
            String sql="select * from user where userName = ? and password = ?";

            //2、调用query方法
            User user=template.queryForObject(sql,new BeanPropertyRowMapper<User>(User.class), loginUser.getUserName(),loginUser.getPassWord());
            return user;
        } catch (DataAccessException e) {
            e.printStackTrace();
        }
        return null;
    }
}

6.编写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对象
        User loginUser = new User();
        loginUser.setUserName(username);
        loginUser.setPassWord(password);

        //4.调用UserDao的login方法,进行数据库查询
        UserDao dao = new UserDao();
        User user = dao.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);
    }
}

7.SuccessServlet,登录成功执行的类

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

    /**
     * 方法重写了HttpServlet中的doPost方法
     * */
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取request域中共享的user对象
        User user = (User) req.getAttribute("user");

        if(user != null){
            //给页面写一句话

            //设置编码
            resp.setContentType("text/html;charset=utf-8");
            //输出
            resp.getWriter().write("登录成功!"+user.getUserName()+",欢迎您");
        }
    }
}

8.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().write("登录失败,用户名或密码错误");
    }
    
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req,resp);
    }
}

9.数据库配置文件

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql:///user_sm
username=root
password=123456
initialSize=5
maxActive=10
maxWait=3000

10.项目结构
在这里插入图片描述

展现目录结构知识为了让读者更清晰的知道,没描述到类就是不存在类,以描述的类为准,不要以目录为准

运行结果:
在这里插入图片描述在这里插入图片描述在这里插入图片描述

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值