Search

νšŒμ› κ°€μž…

νšŒμ› κ°€μž…

νšŒμ› κ°€μž… κΈ°λŠ₯을 κ΅¬ν˜„ν•©λ‹ˆλ‹€.

ν™”λ©΄

μž‘μ—… μˆœμ„œ

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
볡사