본문 바로가기

Study

[JSP] 게시판 만들기 - 회원가입

 

 


 

회원가입 폼 만들기

WebContent/views/member/memberEnrollForm.jsp 생성

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style>
    .outer {
        background-color: #C7A9CC;
        color: white;
        width: 1000px;
        margin: auto;
        margin-top: 50px;
    }
    #enroll-form table {margin: auto;}
    #enroll-form input {margin: 5px;}
</style>
</head>

    <body>
        <%@ include file="../common/menubar.jsp" %>

            <div class="outer">
                <br>
                <h2 align="center">회원가입</h2>

                <form id="enroll-form" action="<%= contextPath %>/insert.me" method="post">

                    <table>
                        <tr>
                            <td>* 아이디</td>
                            <td><input type="text" name="userId" maxlength="12" required></td>
                            <td><button type="button">중복확인</button></td>
                        </tr>
                        <tr>
                            <td>* 비밀번호</td>
                            <td><input type="password" name="userPwd" maxlength="15" required></td>
                            <td></td>
                        </tr>
                        <tr>
                            <td>* 비밀번호 확인</td>
                            <td><input type="password" maxlength="15" required></td>
                            <td></td>
                        </tr>
                        <tr>
                            <td>* 이름</td>
                            <td><input type="text" name="userName" maxlength="6" required></td>
                            <td></td>
                        </tr>
                        <tr>
                            <td>&nbsp;&nbsp;전화번호</td>
                            <td><input type="text" name="phone" placeholder="- 포함해서 입력"></td>
                            <td></td>
                        </tr>
                        <tr>
                            <td>&nbsp;&nbsp;이메일</td>
                            <td><input type="email" name="email"></td>
                            <td></td>
                        </tr>
                        <tr>
                            <td>&nbsp;&nbsp;주소</td>
                            <td><input type="text" name="address"></td>
                            <td></td>
                        </tr>
                        <tr>
                            <td>&nbsp;&nbsp;관심분야</td>
                            <td colspan="2">
                                <input type="checkbox" name="interest" id="sports" value="운동">
                                <label for="sports">운동</label>

                                <input type="checkbox" name="interest" id="hiking" value="등산">
                                <label for="hiking">등산</label>

                                <input type="checkbox" name="interest" id="fishing" value="낚시">
                                <label for="fishing">낚시</label>
                                <br>
                                <input type="checkbox" name="interest" id="cooking" value="요리">
                                <label for="cooking">요리</label>

                                <input type="checkbox" name="interest" id="game" value="게임">
                                <label for="game">게임</label>

                                <input type="checkbox" name="interest" id="movie" value="영화">
                                <label for="movie">영화</label>
                            </td>
                        </tr>
                    </table>

                    <br><br>

                    <div align="center">
                        <button type="submit">회원가입</button>
                        <button type="reset">초기화</button>
                    </div>
                    <br>
                </form>
            </div>
    </body>
    </html>

 

MemberEnrollFormController

src/com/yh/member/controller/MemberEnrollFormController.java 생성

package com.yh.member.controller;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class MemberEnrollFormController
 */
@WebServlet("/enrollForm.me")
public class MemberEnrollFormController extends HttpServlet {
	private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public MemberEnrollFormController() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 응답페이지 (회원가입 페이지) 
		// 포워딩 방식

		RequestDispatcher view = request.getRequestDispatcher("views/member/memberEnrollForm.jsp");
		view.forward(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

 

MemberInsertController

src/com/kh/member/controller/MemberInsertController.java 생성

package com.yh.member.controller;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.yh.member.model.service.MemberService;
import com.yh.member.model.vo.Member;

/**
 * Servlet implementation class MemberInsertController
 */
@WebServlet("/insert.me")
public class MemberInsertController extends HttpServlet {
	private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public MemberInsertController() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 1) 인코딩 작업
		request.setCharacterEncoding("UTF-8");

		// 2) 요청시 전달값 뽑아서 변수 및 객체에 기록하기
		String userId = request.getParameter("userId"); // "user03"
		String userPwd = request.getParameter("userPwd"); // "pass03"
		String userName = request.getParameter("userName"); // "홍길동"
		String phone = request.getParameter("phone"); // "010-1111-2222" | ""
		String email = request.getParameter("email"); // "a@naver.com" | ""
		String address = request.getParameter("address"); // "서울시" | ""
		String[] interestArr = request.getParameterValues("interest"); // ["운동", "등산"] | null

		// String[]		 --> String
		// ["운동", "등산"] --> "운동, 등산"
		String interest = "";
		if (interestArr != null) {
			interest = String.join(", ", interestArr);
		}

		// 기본 생성자로 생성한 후 setter 메소드 이용해서 담기 => 담으려고 하는게 소량일 때
		// 매개변수 생성자를 이용해서 생성과 동시에 담기 => 담으려고 하는게 많을 때

		Member m = new Member(userId, userPwd, userName, phone, email, address, interest);

		// 3) 요청처리(db에 sql문 실행) => 서비스 메소드 호출 및 결과받기
		int result = new MemberService().insertMember(m);

		// 4) 처리결과를 가지고 사용자가 보게될 응답 뷰 지정 후 포워딩 or url 재요청
		if (result > 0) {
			// 세션활용
			HttpSession session = request.getSession();
			session.setAttribute("alertMsg", "성공적으로 회원가입이 되었습니다.");

			// 성공 => index 페이지 => /jsp url재요청 방식
			response.sendRedirect(request.getContextPath());
		} else {
			// 실패 => 에러 문구가 보여지는 에러 페이지
			request.setAttribute("errorMsg", "회원가입에 실패했습니다.");
			RequestDispatcher view = request.getRequestDispatcher("/views/common/errorPage.jsp");
			view.forward(request, response);
		}
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

 

Member Vo에 매개변수 생성자 추가하기

public Member(String userId, String userPwd, String userName, String phone, String email, String address,
			String interest) {
		super();
		this.userId = userId;
		this.userPwd = userPwd;
		this.userName = userName;
		this.phone = phone;
		this.email = email;
		this.address = address;
		this.interest = interest;
	}

 

Member mapper

<entry key="insertMember">
	INSERT
	  INTO MEMBER
	  (
	       USER_NO
	     , USER_ID
	     , USER_PWD
	     , USER_NAME
	     , PHONE
	     , EMAIL
	     , ADDRESS
	     , INTEREST
	  )
	VALUES
	  (
	       SEQ_UNO.NEXTVAL
	     , ?
	     , ?
	     , ?
	     , ?
	     , ?
	     , ?
	     , ?       
	  )
	</entry>

 

Member Dao

	public int insertMember(Connection conn, Member m) {
		// insert문 => 처리된 행수 => 트랜젝션 처리
		int result = 0;

		PreparedStatement pstmt = null;
		String sql = prop.getProperty("insertMember");

		try {
			pstmt = conn.prepareStatement(sql); // 미완성된 sql문

			pstmt.setString(1, m.getUserId());
			pstmt.setString(2, m.getUserPwd());
			pstmt.setString(3, m.getUserName());
			pstmt.setString(4, m.getPhone());
			pstmt.setString(5, m.getEmail());
			pstmt.setString(6, m.getAddress());
			pstmt.setString(7, m.getInterest());

			result = pstmt.executeUpdate(); // 0 | 1

		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			close(pstmt);
		}

		return result;
	}

 

Member Service

	public int insertMember(Member m) {
		Connection conn = getConnection();

		int result = new MemberDao().insertMember(conn, m);

		// 트랜젝션 처리
		if (result > 0) {
			// 성공
			commit(conn);
		} else {
			// 실패
			rollback(conn);
		}

		close(conn);

		return result;
	}

 

실행화면

회원가입 페이지

 

아이디 중복확인

 

 

회원가입 성공시

 

회원가입 실패시