6. 회원 등록 페이지 컨트롤러에 Controller 규칙 적용하기
MemberListController 클래스 처럼 MemberAddServlet 클래스에 대해서도 적용한다.
spms.controls 패키지에 MemberAddController 클래스를 생성한다.
package spms.controls;
import java.util.Map;
import spms.dao.MemberDao;
import spms.vo.Member;
public class MemberAddController implements Controller {
@Override
public String execute(Map<String, Object> model) throws Exception {
if(model.get("member") == null) {//입력폼을 요청할 때 - GET
return "/member/MemberForm.jsp";
}else {//회원 등록을 요청할 때 - POST
MemberDao memberDao = (MemberDao)model.get("memberDao");
Member member = (Member)model.get("member");
memberDao.insert(member);
return "redirect:list.do";
}
}
}
MemberAddServlet 클래스는 서블릿이기 때문에 GET 요청과 POST 요청을 구분하여 처리할 수 있었다. 그러나 MemberAddController 클래스는 일반 클래스이기 때문에 클라이언트 요청에 대해 GET과 POST를 구분할 수 없다. 그래서 Map 객체에 VO 객체 "member"가 들어 있으면 POST 요청으로 간주하고, 그렇지 않으면 GET 요청으로 간주하였다.
Map 객체에 "member" 인스턴스가 없으면, 입력폼을 위한 JSP URL을 반환한다.
if(model.get("member") == null) {//입력폼을 요청할 때 - GET
return "/member/MemberForm.jsp";
}
Map 객체에 "member" 인스턴스가 있으면, MemberDao를 통해 데이터베이스에 저장한다.
else {//회원 등록을 요청할 때 - POST
MemberDao memberDao = (MemberDao)model.get("memberDao");
Member member = (Member)model.get("member");
memberDao.insert(member);
return "redirect:list.do";
}
데이터를 저장한 후에는 회원 목록 페이지로 리다이렉트 할 수 있도록 반환 URL 앞에 "redirect:"를 붙인다.
7. 회원 등록 요청을 처리하기 위해 DispatcherServlet 변경
MemberListController 클래스 때와 마찬가지로 MemberAddController 클래스를 사용하도록 DispatcherServlet 클래스를 변경해야 한다.
spms.servlets.DispatcherServlet 클래스의 service() 메서드에서 회원 등록을 처리하는 조건문을 수정한다.
else if("/member/add.do".equals(servletPath)) {
pageController = new MemberAddController();
if(request.getParameter("email") != null) {
//Map 객체에 VO 객체 준비
model.put("member", new Member().setEmail(request.getParameter("email"))
.setPassword(request.getParameter("password"))
.setName(request.getParameter("name")));
}
}
MemberAddController 클래스의 인스턴스를 생성한다. 이전에는 사용자가 입력한 데이터에 대해 Member 객체를 만든 후 ServletRequest 보관소에 담았지만, 이제는 Map 객체에 담는다.
8. 회원 등록 페이지의 실행 테스트
톰캣을 재시작하고, 웹 브라우저에서 http://localhost:9999/web06/member/list.do 를 요청한다. 회원 목록 페이지에서 '신규 회원' 링크를 클릭한다. 회원 정보를 입력하고 나서 '추가' 버튼을 클릭한다(그림 1).

회원 목록 페이지로 리다이렉트 될 것이다. 회원 목록을 보면 새로 등록한 회원 정보를 확인할 수 있다(그림 2).

새로운 기능을 추가하거나 기능을 변경할 때는 한꺼번에 모든 것을 작성하지 말고, 이렇게 조금씩 추가하고 테스트하는 방식으로 프로그래밍 하는 것이 좋다. 디버깅하기도 쉽고 마음의 부담도 줄일 수 있다.
회원정보 상세조회, 변경, 삭제, 로그인, 로그아웃에 대해서도 Controller 인터페이스를 적용한다. 특히 DispatcherServlet 클래스에서 세션 객체를 Map 객체에 담아 로그인 및 로그아웃 페이지 컨트롤러에서 세션 객체를 사용할 수 있도록 구현했다.
참고도서 : https://freelec.co.kr/book/1674/
[열혈강의] 자바 웹 개발 워크북
[열혈강의] 자바 웹 개발 워크북
freelec.co.kr
'교재 실습 > 자바 웹 개발 워크북' 카테고리의 다른 글
83. DI를 이용한 빈 의존성 관리 (2) (2) | 2022.08.01 |
---|---|
82. DI를 이용한 빈 의존성 관리 (1) (0) | 2022.07.31 |
80. 페이지 컨트롤러의 진화 (2) (0) | 2022.07.28 |
79. 페이지 컨트롤러의 진화 (1) (0) | 2022.07.27 |
78. 프런트 컨트롤러의 도입 (4) (0) | 2022.07.26 |
댓글