- [JSP] JSP로 CRUD 게시판 만들기 (3) - JSP 파일 및 로그인 기능 만들기2024년 07월 15일
- Song hyun
- 작성자
- 2024.07.15.:46
728x90반응형[JSP] JSP로 CRUD 게시판 만들기 (3) - JSP 파일 및 로그인 기능 만들기
1. index.jsp 파일 생성
-각각의 페이지로 넘어가는 버튼 만들기 (<a> 태그 사용)
ㄴex: 회원가입, 로그인, 로그아웃, 게시판 목록...
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>JSP MVC 게시판</title> <style type="text/css"> body{ font-family: arial, sans-serif; background-color: #f4f4f4; color: #333; margin: 0; padding: 0; } .nav-list{ list-style-type:none; padding:0; } .nav-list li{ margin:10px; display: inline-block; } .nav-list li a{ text-decoration:none; padding: 10px 20px; color:white; } .btn-primary{ background-color: #007dff; } .btn-secondary{ background-color: #6c757d; } </style> </head> <body> <div class="container"> <h2>JSP MVC 게시판 테스트 페이지</h2> <ul class="nav-list"> <li class="btn btn-primary"><a href="/t-board/user/signup">회원가입</a></li> <li class="btn btn-primary"><a href="/t-board/user/signup">로그인</a></li> <li class="btn btn-secondary"><a href="/t-board/user/signup">로그아웃</a></li> <li class="btn btn-secondary"><a href="/t-board/user/signup">게시판 목록</a></li> </ul> </div> </body> </html>
2. 회원가입 및 로그인 기능 만들기 (1) : DTO 인터페이스, DTO-DAO 클래스 생성하기
(1) User.java : user(사용자) 정보 인스턴스화.
package com.tenco.tboard.model; import java.sql.Timestamp; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; @Data @NoArgsConstructor @AllArgsConstructor @Builder public class User { private int id; private String username; private String password; private String email; private Timestamp createdAt; }
(2) UserRepasitory(인터페이스)
package com.tenco.tboard.repasitory.interfaces; import java.util.List; import com.tenco.tboard.model.User; public interface UserRepasitory { void addUser(User user); void deleteUser(int id); User getUserByUsername(String username); User getUserByUsernameAndPassword(String username,String password); List<User> getAllUsers(); }
(3) UserRepasitoryImpl((2)의 구현 메서드)
package com.tenco.tboard.repasitory; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; import java.util.List; import com.tenco.tboard.model.User; import com.tenco.tboard.repasitory.interfaces.UserRepasitory; import com.tenco.tboard.util.DBUtil; public class UserRepasitoryImpl implements UserRepasitory { // CRUD 쿼리문 선언 // 유저 추가 쿼리 private static final String INSERT_USER_SQL=" INSERT INTO users(username,password,email) values (? , ? , ?)"; // 유저 삭제 쿼리 private static final String DELETE_USER_SQL=" DELETE FROM users where id = ? "; // 이름으로 유저 검색 쿼리 private static final String SELECT_USER_BY_USERNAME=" SELECT * from users where username = ? "; // 이름, 비밀번호로 유저 검색 쿼리 private static final String SELECT_USER_BY_USERNAME_AND_PASSWORD=" SELECT * FROM users where username= ? AND password = ? "; // 전체 유저 확인 private static String SELECT_ALL_USERS= " SELECT * FROM users "; @Override public void addUser(User user) { try (Connection conn=DBUtil.getConnection()){ // 트랜잭션 시작 conn.setAutoCommit(false); // Service 객체 : // username 중복 확인 필요 // email 중복 확인 필요 try (PreparedStatement pstmt=conn.prepareStatement(INSERT_USER_SQL)){ pstmt.setString(1, user.getUsername()); pstmt.setString(2, user.getPassword()); pstmt.setString(3, user.getEmail()); pstmt.executeUpdate(); conn.commit(); } catch (Exception e) { conn.rollback(); e.printStackTrace(); } } catch (Exception e) { e.printStackTrace(); } } @Override public void deleteUser(int id) { try (Connection conn=DBUtil.getConnection()){ // 트랜잭션 시작 conn.setAutoCommit(false); // 실제로 사용자가 존재하는지 여부 확인 필요 // 하지만 delete 는 오류가 거의 없기 때문에, 넣지 않아도 ㅇ // int rowCount를 사용해 확인할 수 있다. try (PreparedStatement pstmt=conn.prepareStatement(DELETE_USER_SQL)){ pstmt.setInt(1,id); pstmt.executeUpdate(); conn.commit(); } catch (Exception e) { conn.rollback(); e.printStackTrace(); } } catch (Exception e) { e.printStackTrace(); } } @Override public User getUserByUsername(String username) { User user=null; try (Connection conn=DBUtil.getConnection()){ // SELECT-트랜잭션 처리 x PreparedStatement pstmt=conn.prepareStatement(SELECT_USER_BY_USERNAME); pstmt.setString(1, username); pstmt.executeQuery(); ResultSet rs=pstmt.executeQuery(); if(rs.next()) { user=User.builder().id(rs.getInt("id")) .username(rs.getString("username")) .password(rs.getString("password")) .email(rs.getString("email")) .createdAt(rs.getTimestamp("created_at")) .build(); } } catch (Exception e) { e.printStackTrace(); } return user; } @Override public User getUserByUsernameAndPassword(String username, String password) { User user=null; try (Connection conn=DBUtil.getConnection()){ // SELECT-트랜잭션 처리 x PreparedStatement pstmt=conn.prepareStatement(SELECT_USER_BY_USERNAME_AND_PASSWORD); pstmt.setString(1, username); pstmt.setString(2, password); pstmt.executeQuery(); ResultSet rs=pstmt.executeQuery(); if(rs.next()) { user=User.builder().id(rs.getInt("id")) .username(rs.getString("username")) .password(rs.getString("password")) .email(rs.getString("email")) .createdAt(rs.getTimestamp("created_at")) .build(); } } catch (Exception e) { e.printStackTrace(); } return user; } @Override public List<User> getAllUsers() { List<User> users=new ArrayList<>(); try (Connection conn=DBUtil.getConnection()){ // SELECT-트랜잭션 처리 x PreparedStatement pstmt=conn.prepareStatement(SELECT_ALL_USERS); pstmt.executeQuery(); ResultSet rs=pstmt.executeQuery(); while(rs.next()) { User user=User.builder().id(rs.getInt("id")) .username(rs.getString("username")) .password(rs.getString("password")) .email(rs.getString("email")) .createdAt(rs.getTimestamp("created_at")) .build(); users.add(user); } } catch (Exception e) { e.printStackTrace(); } return users; } }
3. 회원가입 및 로그인 기능 만들기 (2) : JSP 페이지 생성하기
(1) WEB_INF 폴더란?
(2) pageContext란?
(3) page Scope
(4)
728x90반응형'JSP > CRUD 게시판 만들기' 카테고리의 다른 글
[JSP] JSP로 CRUD 게시판 만들기 (5) - 댓글창 만들기 (0) 2024.07.17 [JSP] JSP로 CRUD 게시판 만들기 (4) - 게시판 만들기 (0) 2024.07.16 [JSP] JSP로 CRUD 게시판 만들기 (2) - DB 접근 기술 (0) 2024.07.15 [JSP] JSP로 CRUD 게시판 만들기 (1) - 패키지 및 DB 생성 (0) 2024.07.15 다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)