JSP
[JSP] JSP로 CRUD 게시판 만들기 (3) - JSP 파일 및 로그인 기능 만들기
Song hyun
2024. 7. 15. 10: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
반응형