본문 바로가기
카테고리 없음

JAVA 69일차 (2023-08-30) 자바 프로그래밍_66. Front Controller 디자인 패턴 도입하기_개인프로젝트 - 마트 관리 시스템

by prometedor 2023. 8. 31.
- 서블릿 프로그래밍
  - 프론트 컨트롤러 도입: GoF의 Facade 패턴 적용
  - 프론트 컨트롤러와 페이지 컨트롤러의 관계 이해
  - 페이지 컨트롤러를 POJO 로 전환하기
  - Spring IoC 컨테이너 도입
- 프로젝트 실습
  ## 66. Front Controller 디자인 패턴 도입하기
    - Front Controller 디자인 패턴의 효과 및 적용 방법
    - 프론트 컨트롤러와 페이지 컨트롤러의 역할 이해

 

 

ㄴ HomeController.java 파일 복사

=>

ㄴ 같은 위치에 DispatcherServlet 이라는 이름으로 붙여넣기

=>

ㄴ bitcamp/report 위치에 servlet 이라는 이름의 패키지 생성

=>

ㄴ report/controller 패키지에 있는 DispatcherServlet.java 파일을 report/servlet 패키지로 이동 시켜주기
=>

DispatcherServlet.java

ㄴ @WebServlet 애노테이션에 "*.do" 로 설정해주기

=>

DispatcherServlet.java

=>

DispatcherServlet.java

ㄴ servletPath, pathInfo 출력해보기

=>

DispatcherServlet.java

ㄴ 해당 코드 주석 처리

=>

=>

=>

=>

ㄴ 출력 확인

=>

DispatcherServlet.java

ㄴ "/app/*" 로 @WebServlet 경로 변경해주기

=>

ㄴ App 재시작

=>

=>

=>
DispatcherServlet.java

ㄴ request.getPathInfo() 를 pageControllerPath 라는 변수에 담기

=>

DispatcherServlet.java

ㄴ 해당 위치에 저장한 값 넣어주기

=>

ㄴ 자동 리로드 됨

=>

=>

ㄴ /auth/login 값이 넘어감

=>

WEB-INF/jsp/auth/form.jsp

ㄴ /auth/login -> login 으로 변경해주기

=>

ㄴ 로그인 정보 입력 후 [로그인] 선택

=>

ㄴ 경로이동이 정상적으로 이루어짐을 확인

=>
WEB-INF/jsp/header.jsp

ㄴ /auth/login -> /app/auth/login 으로 변경

=>

WEB-INF/jsp/header.jsp

ㄴ /auth/logout -> /app/auth/logout 으로 변경

=>
WEB-INF/jsp/header.jsp

ㄴ /member/list -> /app/member/list 으로 변경

ㄴ /board/list?category=1 -> /app/board/list?category=1으로 변경

ㄴ /board/list?category=2 -> /app/member/list?category=2 으로 변경

=>

ㄴ App 재실행

=>

=>

=>

=>

LoginController.java

=>

DispatcherServlet.java

ㄴ viewUrl 변수를 가져오기

=>

DispatcherServlet.java

ㄴ 만약 viewUrl이 "redirect:"로 시작한다면, 리다이렉션을 수행하도록 함(다른 URL로 이동)
ㄴ 그렇지 않다면, viewUrl을 사용하여 현재 서블릿에서 지정된 뷰로 포워딩

=>

ㄴ App 재실행

=>

ㄴ 로그인 선택

=>

=>

LoginController.java

=>
App 재시작

=>

=>

=>

ㄴ 정상적으로 로그인됨을 확인

=>

ㄴ 암호를 잘못 입력했을 경우

=>

ㄴ 리다이렉션 오류

=>

LoginController.java

 ㄴ /auth/login -> /app/auth/login 으로 변경

=>

LoginController.java

ㄴ 오류 처리 변경

=>

App 재실행

=>

ㄴ 존재하지 않는 회원정보 입력 후 [로그인] 선택

=>

=>

ㄴ 로그인 페이지로 이동됨을 확인

 

MemberListController.java

ㄴ 해당 코드 제거

=>

MemberListController.java

ㄴ request.getRequestDispatcher 대신 request.setAttribute 를 이용하여 값 설정하기

ㄴ viewUrl이라는 이름의 속성에 /WEB-INF/jsp/member/list.jsp라는 값을 설정하기

 

 

member/list.jsp

ㄴ /member/add -> add 로 변경

=>

ㄴ /member/detail -> detail 로 변경

=>

=>

=>

ㄴ 오타 수정 필요

=>

ㄴ viewUrl 변수가 null인 상태에서 String.startsWith(String) 메서드를 호출하려고 하여 에러 발생

=>

MemberDetailController.java

ㄴ 해당 코드 제거

=>

MemberDetailController.java

ㄴ request.getRequestDispatcher 대신 request.setAttribute 를 이용하여 값 설정하기

ㄴ viewUrl이라는 이름의 속성에 /WEB-INF/jsp/member/list.jsp라는 값을 설정하기



member/detail.jsp

ㄴ /member/update -> update 로 변경하기

=>

member/detail.jsp

ㄴ /member/delete -> delete 로 변경하기

ㄴ /member/list -> list 로 변경하기

=>

App 재실행

=>

=>

=>

ㄴ 회원 상세보기 정상적으로 출력됨을 확인

 

 

MemberAddController.java

ㄴ 해당 코드 제거

=>
MemberAddController.java

ㄴ request.getRequestDispatcher 대신 request.setAttribute 를 이용하여 값 설정하기

ㄴ viewUrl이라는 이름의 속성에 /WEB-INF/jsp/member/list.jsp라는 값을 설정하기

ㄴ /member/form.jsp -> /WEB-INF/jsp/member/form.jsp 로 변경해주기

=>
MemberAddController.java

ㄴ response.sendRedirect("list"); -> request.setAttribute("viewUrl", "redirect:list"); 로 변경해주기

=>

MemberAddController.java

ㄴ 에러 처리 방식 변경

 

 

member/form.jsp

ㄴ /member/add -> add 로 변경

=>

App 재실행

=>

=>

ㄴ 새 회원 선택

=>

ㄴ 회원 정보 입력 후 [등록] 선택

=>

=>

=>

MemberAddController.java

ㄴ MemberAddController.java 파일에서 설정한 MultipartConfig 설정 복사

=>

DispatcherServlet.java

ㄴ 복사한 코드 DispatcherServlet 에 붙여넣기

=>

=>

=>

ㄴ 회원 정상적으로 등록됨을 확인

 

 

MemberUpdateController.java

ㄴ response.sendRedirect("list"); -> request.setAttribute("viewUrl", "redirect:list"); 로 변경하기

=>

MemberUpdateController.java

ㄴ 에러 처리 방식 변경

=>

App 재실행

=>

ㄴ 정보 수정 후 [변경] 선택

=>

=>

ㄴ 변경한 회원 정보가 정상적으로 변경됨을 확인

=>

ㄴ 사진 변경 시도

=>

=>

ㄴ 사진 변경이 정상적으로 이루어짐

 

 

MemberDeleteController.java

ㄴ response.sendRedirect("/member/list"); -> request.setAttribute("viewUrl", "redirect:list"); 로 변경

=>

MemberDeleteController.java

ㄴ 에러 처리 방식 변경

=>
App 재실행

=>

ㄴ 회원 [삭제] 선택

=>

ㄴ 회원이 정상적으로 삭제됨을 확인

 

 

BoardListController.java

ㄴ 해당 코드 제거

=>

BoardListController.java

ㄴ request.getRequestDispatcher("/WEB-INF/jsp/board/list.jsp").include(request, response); 대신 request.setAttribute("viewUrl", "/WEB-INF/jsp/board/list.jsp"); 이용하기

=>

BoardListController.java

ㄴ 에러 처리 방식 변경

ㄴ throw new ServletException(e); 대신 request.setAttribute("exception", e); 이용하기

 

 

board/list.jsp

ㄴ /board/add -> add 로 변경

=>

board/list.jsp

ㄴ /board/detail -> detail 로 변경

=>

App 재실행

=>

=>

ㄴ [로그인] 선택

=>

ㄴ 게시글 목록 정상적으로 출력됨을 확인

 

 

BoardAddController.java

ㄴ request.getRequestDispatcher("/WEB-INF/jsp/board/form.jsp").include(request, response); 대신 request.setAttribute("viewUrl", "/WEB-INF/jsp/board/form.jsp"); 이용하기

=>

BoardAddController.java

ㄴ response.sendRedirect("/auth/login"); 대신 request.setAttribute("viewUrl", "redirect:../auth/login"); 이용하기

=>

BoardAddController.java

ㄴ response.sendRedirect("list?category=" + request.getParameter("category")); 대신 request.setAttribute("viewUrl", "list?category=" + request.getParameter("category")); 이용하기

=>
BoardAddController.java

ㄴ 에러 처리 방식 변경

ㄴ throw new ServletException(e); 대신 request.setAttribute("exception", e); 이용하기

 

 

board/form.jsp

ㄴ /board/add -> add 로 변경

=>

App 재실행

=>

ㄴ 새 글 선택

=>

ㄴ 내용 입력 후 [등록] 선택

=>

ㄴ 로그인이 되어있지 않으므로 로그인 창으로 이동됨을 확인

ㄴ 로그인 정보 입력 후 [로그인] 선택

=>

=>

ㄴ 내용 입력 후 [등록] 선택

=>

ㄴ 게시글이 정상적으로 등록됨을 확인

=>

로그아웃 선택

=>

=>

LogoutController.java

ㄴ response.sendRedirect("/"); 대신 request.setAttribute("viewUrl", "redirect:/"); 이용하기

=>
App 재실행

=>

ㄴ 로그인 실행

=>

ㄴ 로그아웃 선택

=>

ㄴ 로그아웃이 정상적으로 실행됨을 확인

=>

ㄴ 다시 로그인

=>

ㄴ 내용 입력 후 [등록] 선택

=>

ㄴ 게시글이 정상적으로 등록됨을 확인

 

 

BoardDetailController.java

ㄴ 해당 코드 제거

=>
BoardDetailController.java

ㄴ request.getRequestDispatcher("/WEB-INF/jsp/board/detail.jsp").include(request, response); 대신 request.setAttribute("viewUrl", "/WEB-INF/jsp/board/detail.jsp"); 이용하기

=>

BoardDetailController.java

ㄴ 에러 처리 방식 변경

 

 

board/detail.jsp

ㄴ /board/update -> update 로 변경

=>

board/detail.jsp

ㄴ /board/fileDelete -> fileDelete 로 변경

=>

board/detail.jsp

ㄴ /board/delete -> delete 로 변경

ㄴ /board/list -> list 로 변경

=>

App 재실행

=>

ㄴ 로그인 하기

=>

ㄴ 내용 수정 및 첨부파일 추가 등록 후 [변경] 선택

=>

=>

BoardUpdateController.java

ㄴ response.sendRedirect("/auth/login"); 대신 request.setAttribute("viewUrl", "redirect:../auth/login"); 이용하도록 함

=>

BoardUpdateController.java

ㄴ response.sendRedirect("list?category=" + request.getParameter("category")); 대신 request.setAttribute("viewUrl", "redirect:list?category=" + request.getParameter("category"));

=>
BoardUpdateController.java

ㄴ 에러 처리 방식 변경

=>

ㄴ 내용 수정 및 첨부파일 추가 등록 후 [변경] 선택

=>

=>

BoardUpdateController.java

ㄴ BoardUpdateController.java 파일에서 NcpObjectStorageService 를 사용하지 않고 있었음(실수)

=>

App 재시작

=>

ㄴ 내용 변경 및 첨부파일 여러 개 등록 후 [변경] 선택

=>

ㄴ 정상적으로 변경됨을 확인

=>

ㄴ 첨부파일도 정상적으로 추가됨을 확인

 

 

BoardFileDeleteController.java

ㄴ response.sendRedirect("/auth/login"); 대신 request.setAttribute("viewUrl", "redirect:../auth/login"); 사용하기

=>

BoardFileDeleteController.java

ㄴ response.sendRedirect("/board/detail?category=" + category + "&no=" + board.getNo()); 대신 request.setAttribute("viewUrl", "redirect:detail?category=" + category + "&no=" + board.getNo()); 이용하기

=>

BoardFileDeleteController.java

ㄴ 에러 처리 방식 변경

=>

BoardFileDeleteController.java

ㄴ /board/detail -> detail 로 변경

=>

ㄴ 첨부파일 [삭제] 선택

=>

ㄴ 첨부파일 정상적으로 삭제됨을 확인

=>

ㄴ 첨부파일 추가등록 후 [변경] 선택

=>

ㄴ 첨부파일 정상적으로 추가됨을 확인

=>

BoardDeleteController.java

ㄴ response.sendRedirect("/auth/login"); 대신 request.setAttribute("viewUrl", "redirect:../auth/login"); 대신 request.setAttribute("viewUrl", "redirect:../auth/login"); 이용하기

=>

BoardDeleteController.java

ㄴ response.sendRedirect("list?category=" + request.getParameter("category")); 대신 request.setAttribute("viewUrl", "redirect:list?category=" + request.getParameter("category")); 이용하도록 함

=>

BoardDeleteController.java

ㄴ 에러 처리 방식 변경

=>

App 재실행

=>

=>

ㄴ 게시글 [삭제] 선택

=>

ㄴ 33번 게시글이 정상적으로 삭제됨을 확인

=>

ㄴ 다른 사람의 게시글의 삭제하려고 할 경우 

=>

ㄴ DispatcherServlet.java 에 코드 추가해줘야 함

=>

ㄴ 게시글 목록으로 이동됨을 확인

 

 

BoardAddController.java

ㄴ 해당 코드 추가

 

 

BoardUpdateController.java

ㄴ 해당 코드 추가

 

 

DispatcherServlet.java

ㄴ 해당 코드 추가

ㄴ viewUrl 이 null 인 오류 해결됨을 확인

=>