【后端】Servlet与BeanUtils用户登录小练习

Servlet与BeanUtils用户登录小练习

需求:设计一个登录界面,可以输入用户名和密码,然后获得数据后与数据库匹配,如果用户名与密码匹配正确则跳转到成功页面,并输出“登录成功,欢迎XXX回来!””,如果匹配失败,则跳转到失败页面,并且输出“登录失败,用户名或密码错误!”
流程:
1,:确定在web/WEB-INF/lib目录下导入各类JAR包如下
在这里插入图片描述
2:新建用户类,用来封装用户。

/**
 * 用户的实体类 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 + '\'' +
                '}';
    }
}

3:新建工具类获取数据源DATASouce

import com.alibaba.druid.pool.DruidDataSourceFactory;
import org.junit.Test;

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工具类 使用DRUID
 */
public class utils {

      private static DataSource ds;
      //获取连接池对象
      //字节流
    static{
        try {
          Properties p = new Properties();
          InputStream resourceAsStream = utils.class.getClassLoader().getResourceAsStream("druid.properties");
          //加载

              p.load(resourceAsStream);
              //初始化连接池对象
              DataSource dataSource = DruidDataSourceFactory.createDataSource(p);
              ds = dataSource;
            System.out.println(ds);
          } catch (IOException e) {
              e.printStackTrace();
          } catch (Exception e) {
              e.printStackTrace();
          }
      }
      public static DataSource getDataSouce(){
           return ds;
      }
      public static Connection getConnection() throws SQLException {
        return ds.getConnection();
      }


}

4:新建DAO层,利用数据源操作数据库

import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;

/*
操作数据库的类
 */
public class userdao {
    /**
     * 登录的只有用户名和密码
     * 返回的user值有id
     * @param loginuser
     * @return
     */

      //声明JDBCTemplate对象共用
    private  JdbcTemplate template = new JdbcTemplate(utils.getDataSouce());


    public user login(user loginuser){

        try {
            String sql = "select * from user where username = ? and password = ?";
            //调用query方法得到user对象
            user user1 = template.queryForObject(sql, new BeanPropertyRowMapper<user>(user.class), loginuser.getUsername(), loginuser.getPassword());


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


    }
}

5:新建login.html登录页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
  <form action="/loganberries" method="post">
      用户名<input placeholder="请输入用户名" name="username">
      <br>
      密码<input placeholder="请输入密码" name="password" >
      <br>
      <input type="submit" value="提交">


  </form>
</body>
</html>

6:新建login登录的WebServlet,登录页面的跳转对象

import org.apache.commons.beanutils.BeanUtils;
import org.junit.Test;

import javax.servlet.RequestDispatcher;
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;
import java.lang.reflect.InvocationTargetException;
import java.util.Map;

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

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("a");
        //设置编码
        req.setCharacterEncoding("utf-8");
        //获得参数
//       String username = req.getParameter("username");
//        System.out.println(username);
//       String password = req.getParameter("password");
//        System.out.println(password);
//
////        //封装user对象
//        user loginuser = new user();
//        loginuser.setUsername(username);
//        loginuser.setPassword(password);
        //使用BeanUtils获取所有参数并创建user对象
        Map<String, String[]> parameterMap = req.getParameterMap();
        user user = new user();

        try {
            BeanUtils.populate(user, parameterMap);
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }


        userdao userdao = new userdao();
        user login = userdao.login(user);
        System.out.println(login);

//
        if (login == null) {
            req.getRequestDispatcher("/facelet").forward(req, resp);
        } else {
            req.setAttribute("user", login);
            req.getRequestDispatcher("/successive").forward(req, resp);
        }


    }

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

7:新建匹配成功后自动转发的页面:

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("/successive")
public class successive extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        user underlain = (user) request.getAttribute("user");//强制类型转换
        if (underlain != null) {


            response.setContentType("text/html;charset=utf-8");
            response.getWriter().write("登录成功,欢迎" + underlain.getUsername() + "回来!");
        }


    }

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

8:新建匹配失败后自动跳转的页面

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("/facelet")
public class facelet 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);
    }
}

发布了30 篇原创文章 · 获赞 0 · 访问量 473

猜你喜欢

转载自blog.csdn.net/zhujile521/article/details/105317004
今日推荐