[Servlet] - 서블릿 활용한 회원가입 구현하기
○ 서블릿 활용한 회원가입 구현하기 |
1. 회원가입 폼 구성(index.jsp) // index.jsp(폼은 부트스트랩 이용 모든 코드를 첨부하기가 힘들어서 대충 흐름만) // 아이디, 비밀번호, 이름, 나이, 성별, 이메일에 대한 폼이다 // 폼은 원하는대로 만드시면 된다 <body> <div class="container"> <form method="post" action="UserRegister"> <table class="table table-bordered table-hover" style="text-align: center; border: 1px solid #dddddd"> <thead> <tr> <th colspan="3"><h4>회원가입 양식</h4></th> </tr> </thead> <tbody> <tr> <td style="width: 120px;"><h5>아이디</h5></td> <td><input class="form-control" type="text" id="userID" name="userID" maxlength="20"></td> <td style="width: 120px;"><button class="btn btn-primary" onclick="registerCheckFunction();" type="button">중복체크</button></td> </tr> <tr> <td style="width: 120px;"><h5>비밀번호</h5></td> <td><input class="form-control" type="password" id="userPassword1" name="userPassword1" maxlength="20"></td> </tr> <tr> <td style="width: 120px;"><h5>비밀번호 확인</h5></td> <td><input class="form-control" type="password" id="userPassword2" name="userPassword2" maxlength="20"></td> </tr> <tr> <td style="width: 120px;"><h5>이름</h5></td> <td><input class="form-control" type="text" id="userName" name="userName" maxlength="20"></td> </tr> <tr> <td style="width: 120px;"><h5>나이</h5></td> <td><input class="form-control" type="text" id="userAge" name="userAge" maxlength="20"></td> </tr> <tr> <td style="width: 120px;"><h5>성별</h5></td> <td colspan="2"> <div class="form-group" style="text-align: center; margin: 0 auto;"> <div class="btn-group" data-toggle="buttons"> <label class="btn btn-primary active"> <input type="radio" name="userGender" autocomplete="off" values="남자" checked>남자 </label> <label class="btn btn-primary"> <input type="radio" name="userGender" autocomplete="off" values="여자">여자 </label> </div> </div> </div> </td> </tr> <tr> <td style="width: 120px;"><h5>이메일</h5></td> <td><input class="form-control" type="email" id="userEmail" name="userEmail" maxlength="50"></td> </tr> <tr> <td style="text-align: right" colspan="3"><input class="btn btn-primary pull-right" type="submit" value="회원가입"></td> </tr> </tbody> </table> </form> </div> <!-- 이전 서블릿에서 보낸 세션들을 가지고 Modal 창에 연동하는 부분 --> <% // 서블릿에 정의한 경고 및 성공 메시지를 모달창에 띄우기 위해서 메시지들 가져오는것 String messageContent = null; if(session.getAttribute("messageContent") != null){ messageContent = (String)session.getAttribute("messageContent"); } String messageType = null; if(session.getAttribute("messageType") != null){ messageType = (String)session.getAttribute("messageType"); } // 만일 무슨 메시지를 받았다면(위에서 이미 가져왔고) 그걸 모달로 연동!!! if(messageContent != null ){ %> <div class="modal fade" id="messageModal" tabindex="-1" role="dialog" aria-hidden="true"> <div class="vertical-alignment-helper"> <div class="modal-dialog vertical-align-center"> <!-- 패널 출력 성공 메시지냐 오류 메시지에 따라 --> <div class="modal-content"> <div class="modal-header panel-heading"> <button type="button" class="close" data-dismiss="modal"> <span aria-hidden="true">×</span> <span class="sr-only">Close</span> </button> <h4 class="modal-title"> <%= messageType %> </h4> <div class="modal-body"> <%= messageContent %> </div> <div class="modal-footer"> <button type="button" class="btn btn-primary" data-dismiss="modal">확인</button> </div> </div> </div> </div> </div> </div> <!-- 스크립트문을 넣어서 우리가 만들었던 메시지모달(id)를 실행할 수 있도록--> <script> $('#messageModal').modal("show"); </script> <% // 한번 했던거는 다시 세션을 지워서 다시 안뜨게 하기 session.removeAttribute("messageContent"); session.removeAttribute("messageType"); } %> </body> 2. Mysql에서 데이터베이스 및 테이블 생성 // Mysql 데이터베이스, 테이블 생성 3. DTO 생성 // UserDTO.java (전체코드 생략) public class UserDTO { String userID; String userPassword; String userName; int userAge; String userEmail; String userGender; // 오른쪽마우스 - source - getter/setter 해준다 } 4. DAO 생성(실제 데이터베이스와 연동되어 각각의 SQL문을 처리) public class UserDAO {
private Connection conn;
public UserDAO() { // 생성자를 통한 db 연결 try { String dbURL = "jdbc:mysql://localhost:3306/register"; String dbID = "root"; String dbPW = "wlgns930"; Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection(dbURL, dbID, dbPW);
} catch(Exception e) { e.printStackTrace(); } } // 입력받은 유저 아이디 디비에서 있는지를 체크해서 값 반환 public int registerCheck(String userID) { PreparedStatement pstmt = null; ResultSet rs = null; String SQL = "select * from user where userID = ?"; try { pstmt = conn.prepareStatement(SQL); pstmt.setString(1, userID); rs = pstmt.executeQuery(); if(rs.next()) { // 결과가 있다면 return 0; // 이미 존재하는 아이디 } else { return 1; // 가입 가능한 아이디 } }catch(Exception e) { e.printStackTrace(); } finally { try { if(rs != null) rs.close(); if(pstmt !=null) pstmt.close(); } catch(Exception e) { e.printStackTrace(); } } return -1; // 데이터베이스 오류 }
// 회원등록을 하기 위한 함수 public int register(String userID, String userPassword1, String userName, String userAge, String userGender, String userEmail) { PreparedStatement pstmt = null; ResultSet rs = null; String SQL = "insert into user values(?, ?, ?, ?, ?, ?)"; try { pstmt = conn.prepareStatement(SQL); pstmt.setString(1, userID); pstmt.setString(2, userPassword1); pstmt.setString(3, userName); pstmt.setInt(4, Integer.parseInt(userAge)); // 형변환 pstmt.setString(5, userGender); pstmt.setString(6, userEmail);
return pstmt.executeUpdate(); // 성공적이면 1값 반환되겠지 안되면 0이하 }catch(Exception e) { e.printStackTrace(); } finally { try { if(rs != null) rs.close(); if(pstmt !=null) pstmt.close(); } catch(Exception e) { e.printStackTrace(); } } return -1; // 데이터베이스 오류 } } 5. UserRegisterServlet.java(회원가입 처리위한 서블릿 - 어노테이션으로 맵핑) // 어노테이션으로 맵핑(web.xml이 아닌) @WebServlet({ "/UserRegisterServlet", "/UserRegister" }) // 두가지로 맵핑 public class UserRegisterServlet extends HttpServlet { private static final long serialVersionUID = 1L;
public UserRegisterServlet() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 한글처리 위한 request.setCharacterEncoding("UTF-8"); response.setContentType("text/html; charset=UTF-8"); // index.jsp에서 입력한것들 가져옴 String userID = request.getParameter("userID"); String userPassword1 = request.getParameter("userPassword1"); String userPassword2 = request.getParameter("userPassword2"); String userName = request.getParameter("userName"); String userAge = request.getParameter("userAge"); String userGender = request.getParameter("userGender"); String userEmail = request.getParameter("userEmail");
// 데이터 입력이 하나라도 없으면 if( userID ==null || userID.equals("") || userPassword1 ==null || userPassword1.equals("") || userPassword2 == null || userPassword2.equals("") || userName == null || userName.equals("") || userAge == null || userAge.equals("") || userGender == null || userGender.equals("") || userEmail == null || userEmail.equals("") ) { // 오류 메시지 발생하고 리다이렉션으로 보낸다 request.getSession().setAttribute("messageType", "오류 메시지"); request.getSession().setAttribute("messageContent", "모든 내용을 입력하세요."); response.sendRedirect("index.jsp"); return; }
// 비밀번호1과 2가 일치하지 않을 시 오류 메시지 if( !userPassword1.equals(userPassword2) ) { request.getSession().setAttribute("messageType", "오류 메시지"); request.getSession().setAttribute("messageContent", "비밀번호가 서로 일치하지 않습니다"); response.sendRedirect("index.jsp"); return; }
// 여기 둘다 안거치면 성공적으로 된거기때문에 실제 디비에 넣어주자(DAO 접근) int result = new UserDAO().register(userID, userPassword1, userName, userAge, userGender, userEmail); if(result == 1) { request.getSession().setAttribute("messageType", "성공 메시지"); request.getSession().setAttribute("messageContent", "회원가입에 성공하였습니다"); response.sendRedirect("index.jsp"); return; } else { request.getSession().setAttribute("messageType", "오류 메시지"); // request.getSession().setAttribute("messageContent", "이미 존재하는 회원입니다"); response.sendRedirect("index.jsp"); return; } } } 이 코드는 동빈나님의 강의를 보고 따라해보고 주석을 단 코드입니다, 아래는 war파일! |
'Servlet' 카테고리의 다른 글
[Ajax] - Ajax와 Servlet 이용 아이디 중복 체크하기 (2) | 2018.06.29 |
---|---|
[Javascript] - javascript 이용하여 패스워드 불일치 체크하기 (0) | 2018.06.29 |
[Servlet] - *.do 서블릿과 FrontController 패턴 (0) | 2018.06.27 |
[Servlet] - MVC2 Servlet Model 구성도 (0) | 2018.06.26 |
[Servlet] - 서블릿 특정 데이터 전체 공유 ServletContext (0) | 2018.06.26 |