Riucc's Storage
RSS
태그
관리
쓰기
카테고리
  • IT (593)
    • 정리 (0)
    • C# (42)
    • ASP.NET MVC (16)
    • JQuery&Javascript (12)
    • CSS (11)
    • 데이터베이스 (32)
    • Windows Server (6)
    • Active Directory (3)
    • Exchange (9)
    • JAVA (2)
    • JSP (39)
    • JSP 게시판 만들기 (21)
    • JSP 개발 참고 (15)
    • JSP 안드로이드 (4)
    • Servlet (17)
    • Spring (42)
    • HTML (14)
    • NodeJS (46)
    • MongoDB (11)
    • 리눅스 (18)
    • 자료구조 (16)
    • 아이폰 (24)
    • 안드로이드 (68)
    • API 활용하기 (10)
    • 소켓네트워크 (28)
    • 라즈베리파이 (11)
    • AWS클라우드 (10)
    • 빅데이터Hadoop (22)
    • 커널모듈프로그래밍 (8)
    • 기타 (10)
    • 자격증 (26)
Riucc's Storage

[Servlet] - 서블릿 활용한 회원가입 구현하기

Servlet|2018. 6. 29. 16:59
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

○ 서블릿 활용한 회원가입 구현하기

 

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">&times;</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파일!

TestReg.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

댓글()
카테고리
  • IT (593)
    • 정리 (0)
    • C# (42)
    • ASP.NET MVC (16)
    • JQuery&Javascript (12)
    • CSS (11)
    • 데이터베이스 (32)
    • Windows Server (6)
    • Active Directory (3)
    • Exchange (9)
    • JAVA (2)
    • JSP (39)
    • JSP 게시판 만들기 (21)
    • JSP 개발 참고 (15)
    • JSP 안드로이드 (4)
    • Servlet (17)
    • Spring (42)
    • HTML (14)
    • NodeJS (46)
    • MongoDB (11)
    • 리눅스 (18)
    • 자료구조 (16)
    • 아이폰 (24)
    • 안드로이드 (68)
    • API 활용하기 (10)
    • 소켓네트워크 (28)
    • 라즈베리파이 (11)
    • AWS클라우드 (10)
    • 빅데이터Hadoop (22)
    • 커널모듈프로그래밍 (8)
    • 기타 (10)
    • 자격증 (26)
최근 등록 현황
최근 글
최근 월별 글
최근 댓글
최근 글
최근 월별 글
최근 댓글
최근 글
최근 월별 글
최근 댓글
달력
지난달
2025.11
다음달
일월화수목금토
1
2345678
9101112131415
16171819202122
23242526272829
30
태그 구름
  • 정보처리산업기사 총정리
  • 정보처리산업기사 16년 필기
  • 소켓
  • 정규화
  • 정보처리기사 실기 정리
  • 리눅스
  • 정보처리산업기사 요약
  • nodejs MySQL 연동하기(Connection Pool)
  • 정규형
  • 카카오 로그인
  • 정보처리산업기사 16년
  • 자료구조
  • 커널 모듈 프로그래밍
  • 카카오 로그인 연동
  • 이클립스 mysql 연동
  • 정보처리산업기사 15년 필기
  • HTML
  • jsp
  • 안드로이드 intent
  • 안드로이드
  • 정보처리산업기사 필기 정리
  • 소켓 프로그래밍
  • 정보처리산업기사 15년
  • 안드로이드 카카오 로그인
  • 데이터베이스
  • 정보처리산업기사 필기
  • 안드로이드 카카오 로그인 연동
  • nodejs express
  • 이클립스 디비 연동
  • 정보처리산업기사 정리
카운터
전체 방문자
오늘
어제
Skin by M1REACT. Designed by M1STORY.TISTORY.COM. Valid XHTML 1.0 and CSS 3. Copyright ⓒ Riucc's Storage. All rights reserved.

티스토리툴바