使用IDEA实现简单的用户登录的功能

  • 用户登录案例需求:
    • 1.编写login.html登陆页面
      • username & password 两个输入框
    • 2.使用Druid数据库连接池技术,操作mysql,day14数据库中user表
    • 3.使用JdbcTemplate技术封装到JDBC
    • 4.登录成功跳转到SuccessServlet展示:登陆成功! 用户名,欢迎您
    • 5.登陆失败跳转到FailServlet展示:登陆失败,用户名或密码错误
  • 分析:
    • 开发步骤:
      • 1.创建项目,导入html页面,配置文件,导入jar包 (注意:导入jar包的lib目录要添加到Library中)



      • 2.创建数据库环境:在mysql上新建查询,创建数据库和数据表
      CREATE DATABASE Login;
      
      USE Login;
      
      CREATE TABLE USER(
      		id INT PRIMARY KEY AUTO_INCREMENT,
      		username VARCHAR(32) UNIQUE NOT NULL,
      		password VARCHAR(32) NOT NULL
      );
      
      • 3.在src目录下创建包cn.itcast.domain,创建类User
      package cn.itcast.domain;
      
      /**
       * 用户的实体类(javaBean)
       */
      
      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 + '\'' +
                      '}';
          }
      }
      
      • 4.在src目录下创建包cn.itcast.util,创建JDBCUtils类,JDBC工具类,使用Durid连接池
      package cn.itcast.utli;
      
      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;
      
      /**
       * JDBC工具类,使用Durid连接池
       */
      public class JDBCUtils {
          private static DataSource ds;
      
          static {
              try {
                  //1.加载配置文件
                  Properties pro = new Properties();
                  //使用ClassLoader加载配置文件,获取字节输入流
                  InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");
                  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.在src目录下创建包cn.itcast.dao,创建UserDao类,提供login方法
      package cn.itcast.dao;
      
      import cn.itcast.domain.User;
      import cn.itcast.utli.JDBCUtils;
      import org.springframework.dao.DataAccessException;
      import org.springframework.jdbc.core.BeanPropertyRowMapper;
      import org.springframework.jdbc.core.JdbcTemplate;
      
      /**
       * 操作数据库中User表的类
       */
      
      public class UserDao {
      
          //声明JDBCTemplate对象共用
          private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
      
          /**
           * 登陆方法
           * @param loginUser 只有用户名和密码
           * @return user包含用户的全部数据,若没有查询到,返回null
           */
      
          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.在src目录下创建包cn.itcast.test,创建UserDaoTest类,测试代码
      package cn.itcast.test;
      
      import cn.itcast.dao.UserDao;
      import cn.itcast.domain.User;
      import org.junit.jupiter.api.Test;
      
      public class UserDaoTest {
          @Test
          public void testLogin(){
              User loginuser = new User();
              loginuser.setUsername("superman");
              loginuser.setPassword("123");
      
              UserDao dao = new UserDao();
              User user = dao.login(loginuser);
      
              System.out.println(user);
          }
      }
      
      
      • 7.运行 UserDaoTest类,输出如下:
      • 8.编写cn.itcast.web.servlet,创LoginServlet类
      package cn.itcast.web.servlet;
      
      import cn.itcast.dao.UserDao;
      import cn.itcast.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 {
              //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);
                      }
                  }
              
          @Override
          protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
                  this.doGet(req, resp);
          }
      }
      
      
      • 9.在cn.itcast.web.servlet下分别创建FailServlet类和SuccessServlet类,分别表示登录成功和登录失败时在页面上打印的结果。
        • FileServlet类:
        package cn.itcast.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 {
            protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                //给页面写一句话
        
                //设置编码
                response.setContentType("text/html;charset=utf-8");
                //输出
                response.getWriter().write("登陆失败,用户名或密码错误!");
            }
        
            protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                this.doPost(request,response);
            }
        }
        
        
        • SuccessServlet类:
        package cn.itcast.web.servlet;
        
        import cn.itcast.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 {
            protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                //获取request域中共享的user对象
                User user = (User) request.getAttribute("user");
        
                if(user != null){
                    //给页面写一句话
        
                    //设置编码
                    response.setContentType("text/html;charset=utf-8");
                    //输出
                    response.getWriter().write("登陆成功!"+user.getUsername()+",欢迎你");
                }
            }
        
            protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                this.doPost(request,response);
            }
        }
        
        
      • 10.启动服务器,在浏览器地址栏输入:http://localhost:8080/day14_test/login.html,跳转到登录页面,在form表单中输入正确的用户名和密码,会跳转到如下页面,输出如图:


        若输入错误:

        且服务器后台会抛出异常:

        抛出该异常的原因是输入的用户名或密码不正确,在数据库中找不到与之对应的用户名和密码,故抛出异常。一般来说,这样的异常不会打印到控制台,都用log日志保存到文件上。
      • 11.login.html中form表单的action路径的写法
        • 虚拟目录+Servlet的资源路径

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论

打赏作者

Tamako_kaneki

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值