νμ κ°μ
νμ κ°μ
κΈ°λ₯μ ꡬνν©λλ€.
νλ©΄
μμ μμ
1.
join.jsp
2.
users.sql
4.
UserDAO.java
5.
UserService.java
6.
UserServiceImpl.java
7.
UserServlet.java
μ½λ
join.jsp
<%@ include file="/layout/jstl.jsp" %>
<%@ include file="/layout/common.jsp" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>projectπ» - ALOHA CLASSπ΄</title>
<jsp:include page="/layout/meta.jsp" />
<jsp:include page="/layout/link.jsp" />
</head>
<body>
<jsp:include page="/layout/header.jsp" />
<%-- [Contents] ######################################################### --%>
<main>
<div class="px-4 py-5 mt-5 text-center">
<h1 class="display-5 fw-bold text-body-emphasis">νμ κ°μ
</h1>
</div>
<!-- νμ κ°μ
μμ -->
<div class="container shop p-1 p-md-2 p-lg-4 mb-5" >
<div class="row justify-content-center">
<div class="col-12 col-md-10 col-lg-6">
<form action="${ root }/users/join" name="joinForm" method="post">
<input type="hidden" name="duplicaed" id="duplicaed" value="false" />
<div class="input-group mx-0 mb-3 row">
<label for="username" class="input-group-text col-md-4" id="lb_username">μμ΄λ</label>
<input type="text" class="form-control col-md-6"
name="username" id="username" placeholder="μμ΄λ" required>
<button type="button" onclick="clickIdCheck()" class="btn btn-success col-md-2">μ€λ³΅νμΈ</button>
</div>
<div class="input-group mx-0 mb-3 row">
<label for="password" class="input-group-text col-md-4" id="lb_password">λΉλ°λ²νΈ</label>
<input type="password" class="form-control col-md-8"
name="password" id="password" placeholder="λΉλ°λ²νΈ" required>
</div>
<div class="input-group mx-0 mb-3 row">
<label for="password_confirm" class="input-group-text col-md-4" id="lb_password_confirm">λΉλ°λ²νΈ νμΈ</label>
<input type="password" class="form-control col-md-8"
name="password_confirm" id="password_confirm" placeholder="λΉλ°λ²νΈ νμΈ" required>
</div>
<div class="input-group mx-0 mb-3 row">
<label for="name" class="input-group-text col-md-4" id="lb_name">μ΄λ¦</label>
<input type="text" class="form-control col-md-8"
name="name" id="name" placeholder="μ΄λ¦" required>
</div>
<div class="input-group mx-0 mb-3 row">
<label for="email" class="input-group-text col-md-4" id="lb_email">μ΄λ©μΌ</label>
<input type="text" class="form-control col-md-8"
name="email" id="email" placeholder="μ΄λ©μΌ">
</div>
<div class="d-grid gap-2 mt-5 mb-5">
<input type="button" class="btn btn-lg btn-primary" value="κ°μ
" onclick="checkUser()" />
<a href="javascript: history.back()" class="btn btn-lg btn-secondary">μ·¨μ</a>
</div>
</form>
</div>
</div>
</div>
</main>
<%-- [Contents] ######################################################### --%>
<jsp:include page="/layout/footer.jsp" />
<jsp:include page="/layout/script.jsp" />
<script>
async function clickIdCheck() {
let check = await idCheck()
if( check ) {
alert('μ€λ³΅λ μμ΄λ μ
λλ€.')
} else {
alert('μ¬μ© κ°λ₯ν μμ΄λ μ
λλ€.')
}
}
</script>
</body>
</html>
HTML
볡μ¬
users.sql
DROP TABLE IF EXISTS board;
CREATE TABLE `aloha`.`users` (
`no` INT NOT NULL AUTO_INCREMENT,
`id` VARCHAR(64) NOT NULL,
`username` VARCHAR(100) NOT NULL,
`password` VARCHAR(100) NOT NULL,
`name` VARCHAR(100) NOT NULL,
`email` VARCHAR(100) NULL,
`created_at` TIMESTAMP NOT NULL DEFAULT now(),
`updated_at` TIMESTAMP NOT NULL DEFAULT now(),
PRIMARY KEY (`no`),
UNIQUE INDEX `id_UNIQUE` (`id` ASC) VISIBLE,
UNIQUE INDEX `username_UNIQUE` (`username` ASC) VISIBLE)
COMMENT = 'νμ';
SQL
볡μ¬
package board.DTO;
import java.util.Date;
import com.alohaclass.jdbc.annotation.Column;
import com.alohaclass.jdbc.annotation.Pk;
import com.alohaclass.jdbc.annotation.Table;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Table("users")
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Users {
@Pk
private int no;
private String id;
private String username;
private String password;
@Column(exist = false)
private String passwordConfirm;
private String name;
private String email;
private Date createdAt;
private Date updatedAt;
}
Java
볡μ¬
UserDAO.java
package board.DAO;
import com.alohaclass.jdbc.dao.BaseDAOImpl;
import board.DTO.Users;
public class UserDAO extends BaseDAOImpl<Users> {
}
Java
볡μ¬
UserService.java
package board.Service;
import board.DTO.Users;
public interface UserService {
// νμκ°μ
public int join(Users user);
// μμ΄λ μ€λ³΅ νμΈ
public boolean idCheck(String username);
}
Java
볡μ¬
UserServiceImpl.java
package board.Service;
import java.util.HashMap;
import java.util.Map;
import org.mindrot.jbcrypt.BCrypt;
import board.DAO.UserDAO;
import board.DTO.Users;
public class UserServiceImpl implements UserService {
private UserDAO userDAO = new UserDAO();
@Override
public int join(Users user) {
try {
// λΉλ°λ²νΈ μνΈν
String password = user.getPassword();
String encodedPassword = BCrypt.hashpw(password, BCrypt.gensalt());
user.setPassword(encodedPassword);
// νμ λ±λ‘
int result = userDAO.insert(user);
return result; // λ±λ‘ μ±κ³΅
} catch (Exception e) {
e.printStackTrace();
}
return 0; // λ±λ‘ μ€ν¨
}
@Override
public boolean idCheck(String username) {
Map<String, Object> map = new HashMap<>();
map.put("username", username);
Object user = null;
try {
user = userDAO.selectBy(map);
} catch (Exception e) {
e.printStackTrace();
}
// μμ΄λ μ€λ³΅X
if( user == null ) {
return false;
}
return true;
}
}
Java
볡μ¬
UserServlet.java
package board.servlet;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import java.io.IOException;
import java.util.UUID;
import board.DTO.Users;
import board.Service.UserService;
import board.Service.UserServiceImpl;
@WebServlet("/users/*")
public class UserServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private UserService userService = new UserServiceImpl();
/**
* [GET]
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// url : /users/idCheck
String root = request.getContextPath();
String path = request.getPathInfo(); // /idCheck
// /idCheck - μμ΄λ μ€λ³΅ νμΈ
if( path.equals("/idCheck") ) {
System.out.println("μμ΄λ μ€λ³΅ νμΈ...");
String username = request.getParameter("username");
boolean check = userService.idCheck(username);
response.getWriter().print(check);
}
}
/**
* [POST]
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String root = request.getContextPath(); // /Board
String path = request.getPathInfo(); // /idCheck
// /join - νμκ°μ
if( path.equals("/join") ) {
System.out.println("νμκ°μ
μμ² μ²λ¦¬...");
String username = request.getParameter("username");
String password = request.getParameter("password");
String name = request.getParameter("name");
String email = request.getParameter("email");
Users user = Users.builder()
.id( UUID.randomUUID().toString() )
.username(username)
.password(password)
.name(name)
.email(email)
.build();
int result = userService.join(user);
// νμκ°μ
μ±κ³΅
if( result > 0 ) {
response.sendRedirect(root + "/");
}
// νμκ°μ
μ€ν¨
else {
response.sendRedirect(root + "/join.jsp?error=true");
}
}
}
}
Java
볡μ¬