java之学习记录 4 - 1 - 例子:MVC实现登录功能

https://blog.csdn.net/dear_zx/article/details/111646814 最后的mvc示例:(学习记录)

代码结构:

user类(数据库自定义类)

package com.lagou.demo03.bean;

public class User {
    private int id;
    private String userName;
    private String password;

    public User() {
    }

    public User(String userName, String password) {
        this.userName = userName;
        this.password = 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{" +
                "userName='" + userName + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

UserDao接口:(用户接口)

import com.lagou.demo03.bean.User;

public interface UserDao {
    // 自定义抽象方法描述登录功能的实现
    public abstract User userLogin(User user);
}

UserDaoImp类(继承用户接口实现登录查询)

package com.lagou.demo03.dao;

import com.lagou.demo03.bean.User;
import com.lagou.demo03.util.DbUtil;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class UserDaoImp implements UserDao {
    @Override
    public User userLogin(User user) {
        Connection connection = null;
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;
        try {
            // 获取数据库连接
            connection = DbUtil.getConnection();
            // 准备sql语句
            String sql = "select * from t_user where userName = ? and password = ?";
            // 执行sql语句后获取结果并返回
            preparedStatement = connection.prepareStatement(sql);
            preparedStatement.setString(1,user.getUserName());
            preparedStatement.setString(2,user.getPassword());
            resultSet = preparedStatement.executeQuery();
            if (resultSet.next()){
                User tu = new User(resultSet.getString("userName"),resultSet.getString("password"));
                return tu;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            // 释放相关的资源
            try {
                DbUtil.closeResource(connection,preparedStatement);
                if (null != resultSet){
                    resultSet.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }

        }
        return null;
    }
}

UserDaoFactory工厂类(返回UserDaoImp类,利用多态实现)

package com.lagou.demo03.factory;

import com.lagou.demo03.dao.UserDao;
import com.lagou.demo03.dao.UserDaoImp;

public class UserDaoFactory {
    /**
     * 通过静态工程方法模式来实现UserDao实现类的创建并返回
     * @return
     */
    public static UserDao getUserDao(){
        return new UserDaoImp();
    }
}

UserService类(用户服务类,获取到用户信息后进行登录查询)

package com.lagou.demo03.service;

import com.lagou.demo03.bean.User;
import com.lagou.demo03.dao.UserDao;
import com.lagou.demo03.factory.UserDaoFactory;

public class UserService {
    private UserDao userDao;

    public UserService(){
        this.userDao = UserDaoFactory.getUserDao();
    }
    /**
     * 自定义成员方法实现根据参数指定的User对象来调用DAO层实现登录功能
     * @param user
     * @return
     */
    public User userLoginService(User user){
        return userDao.userLogin(user);
    }
}

LoginServlet类:(登录实现类)

package com.lagou.demo03.servlet;

import com.lagou.demo03.bean.User;
import com.lagou.demo03.service.UserService;

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;

@WebServlet(name = "LoginServlet",urlPatterns = "/login")
public class LoginServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 获取请求中的用户名和密码信息并打印出来
        String userName = request.getParameter("userName");
        System.out.println("获取到的用户名为:" + userName);
        String password = request.getParameter("password");
        System.out.println("获取到的密码为:" + password);
        // 创建UserService类型的对象去实现数据的校验功能
        UserService userService = new UserService();
        User user = userService.userLoginService(new User(userName, password));
        if (null == user){
            System.out.println("登录失败。用户名或密码错误!");
            request.setAttribute("error","登录失败,用户名或密码错误");
            // 实现服务器跳转 共享request和response对象
            RequestDispatcher requestDispatcher = request.getRequestDispatcher("login.jsp");
            requestDispatcher.forward(request,response);
        } else{
            System.out.println("登录成功,欢迎使用");
            // 将登录成功的用户信息放入session对象中实现多个请求共享
            request.getSession().setAttribute("user",user);
            // 实现客户端跳转
            response.sendRedirect("main.jsp");
        }

    }

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

Dbutil类:(连接数据库)

package com.lagou.demo03.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class DbUtil {
    private static String jdbcName; // 驱动信息
    private static String dbUrl;    // url信息
    private static String dbUserName;// 用户名信息
    private static String dbPassword;// 密码信息

    // 进行成员的初始化操作
    static {
        jdbcName = "com.mysql.jdbc.Driver";
        dbUrl = "jdbc:mysql://localhost:3306/db_web";
        dbUserName = "root";
        dbPassword = "123456";
        try {
            Class.forName(jdbcName);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    /**
     * 获取连接
     * @return
     * @throws SQLException
     */
     public static Connection getConnection() throws SQLException {
        Connection connection = DriverManager.getConnection(dbUrl,dbUserName,dbPassword);
        return connection;
    }

    /**
     * 关闭连接
     * @param con
     * @throws SQLException
     */
    public static void closeResource(Connection con, PreparedStatement preparedStatement) throws SQLException {
        if (null != con){
            con.close();
        }
        if(null != preparedStatement){
            preparedStatement.close();
        }
    }
}

login.jsp页面(登录页面)

<%@ page contentType="text/html; charset=utf-8" language="java" %>
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>实现简单的登录功能</title>
</head>
<body>
<form action="login" method="post">
  用户名:<input type="text" name="userName"><br>
  密码:<input type="text" name="password"><br>
  <span style="color: red"><%= request.getAttribute("error") == null?"":request.getAttribute("error")%></span>
  <input type="submit" value="登录">
</form>
</body>
</html>

main.jsp页面(登录成功后跳转的页面)

<%@ page import="com.lagou.demo03.bean.User" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>主页面</title>
</head>
<body>
<h1>登录成功,欢迎<%= ((User)session.getAttribute("user")).getUserName()%>使用!</h1>
</body>
</html>

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值