회원 정보 추가 기능 구현
커맨드 패턴이란 한마디로 브라우저가 URL 패턴을 이용해 컨트롤러에게 수행 작업을 요청하는 방법입니다. 컨트롤러는 HttpServletRequest의 getPathInfo() 메서드를 이용해 URL 패턴에서 요청명을 받아와 작업을 수행합니다.
URL을 이용해 컨트롤러에 요청하는 형식은 다음과 같습니다. 보통 두 단계로 요청이 이루어집니다.
http://localhost:8090/pro17/member/listMembers.do
① /member : 첫 번째 단계의 요청은 회원 기능을 의미합니다.
② /listMembers.do : 두 번째 단계의 요청은 회원 기능 중 회원 조회 기능을 의미합니다.
1. sec02.ex01 패키지를 만들고 MemberDAO의 MemberVO 클래스는 sec01.ex01 패키지의 것을 복사해 붙여 넣습니다. 그리고 test01 폴더의 listMembers.jsp로 복사해 test02 폴더로 붙여 넣습니다.

2. 컨트롤러 역할을 하는 memberController 클래스를 다음과 같이 작성합니다. 이 컨트롤러에서는 getPathInfo() 메서드를 이용해 두 단계로 이루어진 요청을 가져옵니다. action 값에 따라 if문을 분기해서 요청한 작업을 수행하는데 action 값이 null이거나 /listMembers.do인 경우에 회원 조회 기능을 수행합니다. 만약 action 값이 /memberForm.do면 회원가입 창을 나타내고 aciton 값이 /addMember.do면 전송된 회원 정보들을 테이블에 추가합니다.
package sec02.ex01;
import java.io.IOException;
import java.util.List;
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 MemberController
*/
@WebServlet("/member/*")
public class MemberController extends HttpServlet {
private static final long serialVersionUID = 1L;
MemberDAO memberDAO;
public void init() throws ServletException {
memberDAO = new MemberDAO();
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doHandle(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doHandle(request, response);
}
private void doHandle(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String nextPage = null;
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
String action = request.getPathInfo();
System.out.println("action:" + action);
if (action == null || action.equals("/listMembers.do")) {
List<MemberVO> membersList = memberDAO.listMembers();
request.setAttribute("membersList", membersList);
nextPage = "/test02/listMembers.jsp";
} else if (action.equals("/addMember.do")) {
String id = request.getParameter("id");
String pwd = request.getParameter("pwd");
String name = request.getParameter("name");
String email = request.getParameter("email");
MemberVO memberVO = new MemberVO(id, pwd, name, email);
memberDAO.addMember(memberVO);
nextPage = "/member/listMembers.do";
} else if (action.equals("/memberForm.do")) {
nextPage = "/test02/memberForm.jsp";
} else {
List<MemberVO> membersList = memberDAO.listMembers();
request.setAttribute("membersList", membersList);
nextPage = "/test02/listMembers.jsp";
}
RequestDispatcher dispatch = request.getRequestDispatcher(nextPage);
dispatch.forward(request, response);
}
}
3. 다음과 같이 listMember.jsp에 회원 가입창으로 이동하는 <a> 태그를 추가합니다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
import=" java.util.*,sec01.ex01.*"
pageEncoding="UTF-8"
isELIgnored="false"
%>
<c:set var="contextPath" value="${pageContext.request.contextPath}" />
<%
request.setCharacterEncoding("UTF-8");
%>
<html>
<head>
<meta charset="UTF-8">
<title>회원 정보 출력창</title>
<style>
.cls1 {
font-size:40px;
text-align:center;
}
.cls2 {
font-size:20px;
text-align:center;
}
</style>
</head>
<body>
<p class="cls1">회원정보</p>
<table align="center" border="1" >
<tr align="center" bgcolor="lightgreen">
<td width="7%" ><b>아이디</b></td>
<td width="7%" ><b>비밀번호</b></td>
<td width="7%" ><b>이름</b></td>
<td width="7%"><b>이메일</b></td>
<td width="7%" ><b>가입일</b></td>
</tr>
<c:choose>
<c:when test="${ empty membersList}" >
<tr>
<td colspan="5" align="center">
<b>등록된 회원이 없습니다.</b>
</td>
</tr>
</c:when>
<c:when test="${!empty membersList}" >
<c:forEach var="mem" items="${membersList }" >
<tr align="center">
<td>${mem.id }</td>
<td>${mem.pwd }</td>
<td>${mem.name}</td>
<td>${mem.email }</td>
<td>${mem.joinDate}</td>
</tr>
</c:forEach>
</c:when>
</c:choose>
</table>
<a href="${contextPath}/member/memberForm.do"><p class="cls2">회원 가입하기</p></a>
</body>
</html>
4. 회원가입창에서 회원 정보를 입력하고 action 속성에서 /member/addMember.do로 요청하도록 memberForm.jsp를 작성합니다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
isELIgnored="false" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="contextPath" value="${pageContext.request.contextPath}" />
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원 가입창</title>
<body>
<form method="post" action="${contextPath}/member/addMember.do">
<h1 style="text-align:center">회원 가입창</h1>
<table align="center">
<tr>
<td width="200"><p align="right">아이디</td>
<td width="400"><input type="text" name="id"></td>
</tr>
<tr>
<td width="200"><p align="right">비밀번호</td>
<td width="400"><input type="password" name="pwd"></td>
</tr>
<tr>
<td width="200"><p align="right">이름</td>
<td width="400"><p><input type="text" name="name"></td>
</tr>
<tr>
<td width="200"><p align="right">이메일</td>
<td width="400"><p><input type="text" name="email"></td>
</tr>
<tr>
<td width="200"><p> </p></td>
<td width="400">
<input type="submit" value="가입하기">
<input type="reset" value="다시입력">
</td>
</tr>
</table>
</form>
</body>
</html>
5. http://localhost:8080/pro17/member/listMembers.do로 요청하여 회원 목록 창이 나타나면 하단에 있는 회원 가입하기를 클릭합니다.
6. 회원 가입창이 나타나면 정보를 입력하고 가입하기를 클릭합니다.
7. 6번 과정에서 등록한 새 회원이 추가된 회원 목록창이 다시 나타납니다.
'프로그래밍 언어 > 자바 웹' 카테고리의 다른 글
| 모델2로 답변형 게시판 구현하기 (0) | 2026.06.14 |
|---|---|
| 회원 정보 수정 및 삭제 기능 구현 (0) | 2026.06.11 |
| 회원 정보 조회 기능 구현 (0) | 2026.06.05 |
| Ajax 이용해 서버와 JSON 데이터 주고받기 (0) | 2026.06.02 |
| JSON의 자료형 사용 실습 (0) | 2026.05.30 |