JSP와 MySQL 연동 로그인 기능 구현 방법

앞서 데이터베이스 테이블 생성 시 name, year, form과 같은 키워드를 컬럼명으로 사용하지 않도록 주의해야 합니다. 이번에는 JSP와 MySQL을 연동하여 학생 정보 관리 시스템의 로그인 기능을 구현하는 방법을 살펴보겠습니다.

1. 관리자 테이블 생성

CREATE TABLE manager (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_name VARCHAR(50) NOT NULL,
    pwd VARCHAR(50) NOT NULL,
    num INT NOT NULL
);

2. 관리자 도메인 클래스

public class Manager {
    private int id;
    private String userName;
    private String password;
    private int accessLevel;

    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; }

    public int getAccessLevel() { return accessLevel; }
    public void setAccessLevel(int accessLevel) { this.accessLevel = accessLevel; }
}

3. 로그인 검증 메서드

public class ManagerDAO {
    public boolean validateLogin(String userName, String password) {
        boolean isValid = false;
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;

        try {
            conn = DatabaseUtil.getConnection();
            String sql = "SELECT * FROM manager WHERE user_name = ? AND pwd = ? AND num = 1";
            pstmt = conn.prepareStatement(sql);
            pstmt.setString(1, userName);
            pstmt.setString(2, password);
            rs = pstmt.executeQuery();

            if (rs.next()) {
                isValid = true;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            DatabaseUtil.closeResources(rs, pstmt, conn);
        }
        return isValid;
    }
}

4. 로그인 JSP 페이지

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>학생 관리 시스템 로그인</title>
</head>
<body>
    <div style="text-align:center;">
        <h1>학생 관리 시스템</h1>
        <hr/>
        <form action="login" method="post">
            <table style="margin:0 auto;">
                <tr>
                    <td>아이디 : </td>
                    <td><input type="text" name="userId" /></td>
                </tr>
                <tr>
                    <td>비밀번호 : </td>
                    <td><input type="password" name="userPwd" /></td>
                </tr>
                <tr>
                    <td colspan="2" style="text-align:center;">
                        <input type="submit" value="로그인"/>
                    </td>
                </tr>
            </table>
        </form>
    </div>
</body>
</html>

5. 로그인 처리 서블릿

@WebServlet("/login")
public class LoginServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html; charset=UTF-8");

        String userId = request.getParameter("userId");
        String userPwd = request.getParameter("userPwd");

        ManagerDAO dao = new ManagerDAO();
        boolean loginSuccess = dao.validateLogin(userId, userPwd);

        if (loginSuccess) {
            StudentDAO studentDAO = new StudentDAO();
            List<Student> studentList = studentDAO.getAllStudents();
            request.setAttribute("studentList", studentList);
            request.getRequestDispatcher("/studentList.jsp").forward(request, response);
        } else {
            response.sendRedirect("/login.jsp");
        }
    }
}

6. 메인 페이지 (학생 목록)

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="com.example.model.Student, java.util.List" %>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>학생 정보 목록</title>
</head>
<body>
    <%
        List<Student> studentList = (List<Student>) request.getAttribute("studentList");
    %>
    <div style="text-align:center;">
        <h1>학생 정보 관리</h1>
        <hr/>
        <form action="search" method="post">
            <table style="width:80%; margin:0 auto;">
                <tr>
                    <td><a href="addStudent.jsp">추가</a></td>
                    <td>정확 검색 : <input type="text" name="exactSearch"/></td>
                    <td>부분 검색 : <input type="text" name="partialSearch"/></td>
                </tr>
            </table>
        </form>
        <table border="1" style="width:80%; margin:0 auto;">
            <tr>
                <th>ID</th>
                <th>이름</th>
                <th>성별</th>
                <th>나이</th>
                <th>출신지</th>
                <th>학교</th>
                <th colspan="2">관리</th>
            </tr>
            <%
                if (studentList != null && !studentList.isEmpty()) {
                    for (Student student : studentList) {
            %>
            <tr>
                <td><%= student.getId() %></td>
                <td><%= student.getName() %></td>
                <td><%= student.getGender() == 1 ? "남" : "여" %></td>
                <td><%= student.getAge() %></td>
                <td><%= student.getHometown() %></td>
                <td><%= student.getSchool() %></td>
                <td><a href="editStudent?id=<%= student.getId() %>">수정</a></td>
                <td><a href="deleteStudent?id=<%= student.getId() %>">삭제</a></td>
            </tr>
            <%
                    }
                }
            %>
        </table>
    </div>
</body>
</html>

JSP에서 데이터베이스와의 상호작용은 서블릿(Controller)을 통해 이루어집니다. JSP 페이지 내에서는 <% %> 스크립트릿을 사용하여 Java 코드를 직접 작성할 수 있으며, 이를 통해 컨트롤러에서 전달받은 데이터를 출력하거나 화면 로직을 처리합니다.

태그: JSP MySQL 서블릿 로그인 PreparedStatement

7월 8일 02:29에 게시됨