使用JDBC实现登录功能

前言:
有任何疑问可以私信我哦!

Eclipse中建立用户实体类

//用户实体类,字段与数据库中对应,生成getter/setter方法
public class User {
    private int id;
    private String name;
    private String password;
    private int age;
    private int usertype;
    public User(){}
    public User(int id, String name, String password, int age, int usertype) {
        super();
        this.id = id;
        this.name = name;
        this.password = password;
        this.age = age;
        this.usertype = usertype;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public int getUsertype() {
        return usertype;
    }
    public void setUsertype(int usertype) {
        this.usertype = usertype;
    }
}

编写Dao层,实现由数据库中获取username 和password

//Dao接口 通过用户名获取用户相关信息
public interface UserDao {
    /**
     * 根据用户名获取用户
     * @param name
     * @return 对应的User对象;如果用户不存在,返回null
     */
    User getByName(String name);
}
//Dao接口实现类
public class UserDaoImpl implements UserDao {
    public UserDaoImpl() {
    }
    String url="jdbc:mysql://localhost:3306/bookmanager?useUnicode=true&characterEncoding=UTF-8";
    String user="root";
    String password="";
    Connection conn=null;
    PreparedStatement ps=null;
    ResultSet rs=null;
    @Override
    public User getByName(String name) {
        User u=null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn= DriverManager.getConnection(url,user,password);
            String sql="SELECT id,name,password,age,usertype FROM bm_user WHERE name=?";
            ps= conn.prepareStatement(sql);
            ps.setString(1, name);
            rs=ps.executeQuery();
            while(rs.next()){
                u=new User();
                u.setId(rs.getInt("id"));
                u.setName(rs.getString("name"));
                u.setPassword(rs.getString("password"));
                u.setAge(rs.getInt("age"));
                u.setUsertype(rs.getInt("usertype"));
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
            try {
                if(rs!=null){
                    rs.close();
                }
                if(ps!=null){
                    ps.close();
                }
                if(conn!=null){
                    conn.close();
                }   

            } catch (SQLException e) {
                e.printStackTrace();
            }       
        }
        return u;
    }
}

编写Service层,引入Dao 进行业务处理

//service层接口 接收页面输入的信息,进行业务处理
public interface UserService {
    /**
     * @param name
     * @param password
     * @return 传入的值与数据库是否一致的判断
     */
    boolean isLogain(String name,String password);
}
//service层实现类
public class UserServiceImpl implements UserService {
    UserDao uDao=new UserDaoImpl();
    @Override
    public boolean isLogain(String name, String password) {
        User u =uDao.getByName(name);
        if(u!=null&&password.equals(u.getPassword())){
            return true;
        }
        return false;
    }
}

页面书写form表单 并将用户输入的信息提交到servlet中

<form action="<%=request.getContextPath()%>/Login" method="post">
            ${mess }<br>
            <input type="text" name="name" placeholder="请输入用户名"><br/>
            <input type="password" name="password" placeholder="请输入密码"><br>
            <button type="submit">登录</button>
        </form>

编写servlet,接收用户输入信息,并将其与数据库中比较!进行页面跳转

<!-- 因为form表单中,method是post方式!所以在servlet中的doPost方法 -->
@WebServlet("/Login")
public class LoginServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;  
    /**
     * @see HttpServlet#HttpServlet()
     */
    public LoginServlet() {
        super();
        // TODO Auto-generated constructor stub
    }
    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
    }
    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //接收输入的用户名和密码
        String name = request.getParameter("name");
        String password = request.getParameter("password");
        //调用业务方法判断用户是否登录成功
        UserService us = new UserServiceImpl();
        boolean flag = us.isLogain(name, password);
        //如果登陆成功跳转到首页
        if(flag){       request.getRequestDispatcher("/index.jsp").forward(request, response);
        }
        else{
            String mess = "用户名或者密码错误";
            request.setAttribute("mess", mess); request.getRequestDispatcher("/login.jsp").forward(request, response);
        }
    }
}

总结

  • 为什么dao层的方法和service层中的方法不一致
    • 侧重点不同!dao层进入数据库中查询必须要通过用户名或者密码查询,而service层 则是将页面进行业务处理的,需要接收页面输入的参数!
  • 为什么登录页面中有一个EL表达式
    • 当用户输入信息错误时,如果仅仅返回到登录页面,用户会不知道发生了什么,所以需要在页面中返回一句话,告知用户“用户名或者密码错误”,而使用EL表达式,只有登录失败,进行跳转之后session中才会有数据,页面才会显示,而正常访问是不显示的!
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值