본문 바로가기
네이버클라우드/JAVA 웹 프로그래밍

JAVA 68일차 (2023-08-29) 자바 프로그래밍_65. 서블릿을 결합하여 MVC 모델2 구조로 변경하기_개인프로젝트 - 마트 관리 시스템

by prometedor 2023. 8. 29.
- 서블릿 프로그래밍
  - MVC 모델2 구조와 구동 원리 이해
- 프로젝트 실습
  - 65. 서블릿을 결합하여 MVC 모델2 구조로 변경하기

 

ㄴ handler 패키지 대신 controller 패키지 생성

=>

ㄴ /Users/사용자명/git/bitcamp-study/report/app-63-server/src/main/java/bitcamp/report/handler 에 있는 모든 파일 복사

=>

ㄴ 생성한 controller 패키지에 복사한 파일 모두 붙여넣기

=>

ㄴ 해당 파일 삭제

=>

ㄴ 해당 파일 삭제

 

 

LoginFormServlet.java

ㄴ 해당 코드 필요 없으므로 제거

=>

LoginFormServlet.java

ㄴ 해당 코드 필요 없으므로 제거

=>

LoginFormServlet.java

ㄴ 해당 코드 필요 없으므로 제거

=>

LoginFormServlet.java

ㄴ 해당 코드 필요 없으므로 제거

=>

LoginFormServlet.java

package bitcamp.controller;

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 java.io.IOException;

@WebServlet("/auth/form")
public class LoginFormServlet extends HttpServlet {

  private static final long serialVersionUID = 1L;

  @Override
  protected void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {

    // 인클루딩 하는 경우,
    // 여기서 콘텐트 타입을 미리 설정해야 한다.
    response.setContentType("text/html;charset=UTF-8");

    // View 컴포넌트를 인클루딩 한다.
    request.getRequestDispatcher("/auth/form.jsp").include(request, response);
  }

}

=>

LoginFormController.java

=>

ㄴ LoginFormServlet -> LoginFormController 로 이름 변경

 

 

header.jsp

ㄴ /auth/form.jsp -> /auth/form 로 변경하기

=>

ㄴ App 실행

=>

=>

=>

ㄴ LoginServlet -> LoginController 로 이름 변경

=>

ㄴ login.jsp 파일 삭제

=>

auth/form.jsp

ㄴ /auth/login.jsp -> /auth/login 로 변경하기

=>

=>

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

=>

=>

ㄴ LogoutServlet -> LogoutContorller 로 이름 변경

=>

ㄴ logout.jsp 파일 삭제

=>

header.jsp

ㄴ /auth/logout.jsp ->  /auth/logout 로 변경

=>

App 재시작

=>

ㄴ 로그인 상태에서 로그아웃 선택

=>

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

 

 

LoginFormController.java

ㄴ 해당 코드 복사

=>
LoginController.java

ㄴ 해당 위치에 복사한 코드 붙여넣기

=>

header.jsp

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

=>

ㄴ LoginFormController.java 파일 삭제

=>
App 재실행

=>

=>

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

=>

ㄴ 로그인 정상적으로 실행됨

=>

ㄴ 로그아웃 정상적으로 실행됨

 

 

 

=>

ㄴ MemberListServlet -> MemberListController 로 이름 변경

=>

MemberListController.java

ㄴ 해당 코드 필요 없으므로 제거

=>

MemberListController.java

ㄴ 해당 코드 필요 없으므로 제거

=>

MemberListController.java

ㄴ 해당 코드 추가

=>

MemberListController.java

ㄴ 해당 코드 추가

 

 

member/list.jsp

ㄴ 해당 코드 제거

=>

member/list.jsp

<%@ page
    language="java"
    pageEncoding="UTF-8"
    contentType="text/html;charset=UTF-8"%> <%-- directive element --%>

<%@ page import="java.util.List"%>
<%@ page import="bitcamp.report.vo.Member"%>


<!DOCTYPE html>
<html>
<head>
<meta charset='UTF-8'>
<title>회원</title>
</head>
<body>

<jsp:include page="../header.jsp"/>

<h1>회원 목록</h1>
<div style='margin:5px;'>
<a href='/member/form.jsp'>새 회원</a>
</div>
<table border='1'>
  <tr><th>번호</th> <th>이름</th> <th>전화번호</th></tr>
</thead>
<tbody>
<c:forEach items="list" value="member">
    <tr>
        <td>${member.no}</td>
        <td>
            <img src='http://urnfabxxeceu19010753.cdn.ntruss.com/member/${member.photo}?type=f&w=30&h=40&faceopt=true&ttype=jpg'>
            <a href='/member/detail.jsp?no=${member.no}'>${member.name}</a></td>
        <td>${member.phone}</td>
    </tr>
</c:forEach>
</tbody>
</table>
<a href='/'>메인</a>

<jsp:include page="../footer.jsp"/>

</body>
</html>

 

 

 

=>

ㄴ MemberDetailServlet -> MemberDetailController 로 이름 변경

=>

MemberDetailController.java

ㄴ 해당 코드 제거

=>

MemberDetailController.java

ㄴ 해당 코드 제거

=>

MemberDetailController.java

ㄴ 해당 코드 제거

=>
MemberDetailController.java

ㄴ 해당 코드 추가

 

 

=>

ㄴ MemberFormServlet -> MemberFormController 로 이름 변경

=>

MemberFormController.java

ㄴ 해당 코드 제거

=>

MemberFormController.java

ㄴ 해당 코드 제거

=>

MemberFormController.java

ㄴ 해당 코드 제거

=>

member/list.jsp

ㄴ /member/form.jsp -> /member/form 로 변경

=>

MemberAddServlet.java

ㄴ 해당 위치에 MemberFormController 에 있는 doGet 메서드를 복사하여 붙여넣기

=>

ㄴ MemberFormController.java 파일 삭제

 

 

 

ㄴ member/update.jsp 파일 삭제

 

 

 

MemberDeleteServlet.java

ㄴ .jsp 추가하기

 

 

MemberListController.java

ㄴ .jsp 추가하기

 

 

=>

ㄴ MemberAddServlet -> MemberAddController 로 이름 변경

 

 

=>

ㄴ MemberDeleteServlet -> MemberDeleteController 로 이름 변경

 

 

=>

ㄴ MemberUpdateServlet -> MemberUpdateController 로 이름 변경

 

 

ㄴ 해당 파일들 삭제

 

 

member/detail.jsp

ㄴ /member/list.jsp -> /member/list 로 변경

=>

member/detail.jsp

ㄴ /member/delete.jsp -> /member/delete 로 변경

=>

member/detail.jsp

ㄴ /member/update.jsp -> /member/update 로 변경

 

 

member/form.jsp

ㄴ /member/add.jsp -> /member/add 로 변경

=>

member/list.jsp

ㄴ /member/form -> /member/add 로 변경

=>

member/list.jsp

ㄴ /member/detail.jsp -> /member/detail 로 변경

 

 

header.jsp

ㄴ /member/list.jsp -> /member/list 로 변경

 

 

=>

ㄴ BoardListServlet -> BoardListController 로 이름 변경

=>

BoardListController.java

ㄴ 밑에 있던 해당 코드 위쪽으로 올려줌

=>

BoardListController.java

ㄴ 해당 코드 제거

=>

BoardListController.java

ㄴ 해당 코드 제거

=>

BoardListController.java

ㄴ 해당 코드 제거

=>

BoardListController.java

ㄴ category 변수를 제거하고 직접 넣기

=>

BoardListController.java

ㄴ list 변수를 제거하고 직접 넣기

=>

BoardListController.java

ㄴ request.getRequestDispatcher("/board/list.jsp").include(request, response)를 사용하여 "/board/list.jsp"라는 JSP 페이지를 포함하고, 이 때 request와 response 객체를 전달하여 JSP 페이지에서 사용할 수 있도록 함

ㄴ include 메서드를 사용하면 JSP 페이지의 결과가 현재 응답에 추가되므로 다른 서블릿이나 JSP 페이지의 출력과 함께 렌더링됨
ㄴ 예외가 발생하는 경우 catch 블록에서 오류 메시지를 설정하고, /error.jsp 페이지로 포워딩하도록 함

    ㄴ 포워딩은 서버 측에서 다른 페이지로 제어를 넘기는 것을 의미(이 경우, 오류 페이지로 제어가 이동하며, 웹 브라우저에는 오류 페이지가 표시됨)
=>

BoardListController.java

ㄴ exception 이라는 이름으로 에러를 저장하여 전달

 

 

board/list.jsp

ㄴ 해당 코드 제거

=>

board/list.jsp

ㄴ 해당 코드 제거

=>

board/list.jsp

ㄴ /board/detail.jsp -> /board/detail 로 변경해주기

=>

board/list.jsp

ㄴ /board/form.jsp -> /board/add 로 변경해주기

=>

board/list.jsp

ㄴ 해당 코드 제거

=>

board/list.jsp

ㄴ /board/list.jsp -> /board/list 로 변경하기

=>

ㄴ App 재실행

=>

=>

=>

ㄴ 게시글 선택

=>

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

=>

board/list.jsp

ㄴ 해당 코드를 주석처리 할 경우 한글을 출력하지 못함

=>

=>

board/list.jsp

ㄴ 해당 코드는 꼭 추가해 주어야 함

=>

 

 

=>

ㄴ BoardDetailServlet -> BoardDetailController 로 이름 변경

=>

BoardDetailController.java

ㄴ 해당 코드 복사

=>

BoardDetailController.java

ㄴ 복사한 코드 해당 위치에 붙여넣기

=>
BoardDetailController.java

ㄴ try~catch 문을 바깥쪽으로 빼주기

=>

BoardDetailController.java

ㄴ 해당 코드 추가

=>

BoardDetailController.java

ㄴ 해당 코드 추가하여 에러처리 하도록 함

=>

BoardDetailController.java

ㄴ 한글 깨지지 않도록 해당 코드 추가해줌

=>

BoardDetailController.java

ㄴ 해당 코드 제거

=>

BoardDetailController.java

ㄴ 해당 코드 추가

=>

board/detail.jsp

ㄴ 해당 코드 제거

=>

BoardDetailController.java

ㄴ 해당 코드 추가

=>

BoardDetailController.java

ㄴ 해당 코드를 try 문 바깥은 빼주기

 

 

board/detail.jsp

ㄴ /board/delete.jsp -> /board/delete 로 변경해주기

=>
board/detail.jsp

ㄴ /board/list.jsp -> /board/list 로 변경해주기

=>

board/detail.jsp

ㄴ /board/update.jsp -> /board/update 로 변경해주기

=>

ㄴ App 재실행

=>

=>

board/detail.jsp

ㄴ 해당 코드 제거 (controller 에서 할 일)

=>

App 재실행

=>

=>

ㄴ 게시글 상세보기가 정상적으로 출력됨을 확인

=>

ㄴ 없는 게시글을 출력 시도

=>

 

 

ㄴ no 에 숫자가 아닌 문자열을 입력

=>

ㄴ 해당 에러가 발생함

=>

BoardDetailController.java

ㄴ 다시 해당 코드를 try 문 안으로 넣어주기

=>

ㄴ no 값에 문자열을 입력하기

=>

=>

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

=>

error.jsp

ㄴ 해당 코드 제거

=>

error.jsp

ㄴ 해당 코드 제거

=>

error.jsp

ㄴ 해당 코드 제거

=>
error.jsp

ㄴ jstl 태그 설정 추가

=>

error.jsp

ㄴ 해당 jstl 코드 추가

=>

error_jsp.java

=>

error_jsp.java

=>

JspRuntimeLibrary.java

ㄴ 해당 파일 확인

=>

error.jsp

=>

BoardDetailController.java

ㄴ  Java Servlet API에서 제공하는 변수를 이용하도록 함

=>

web.xml

ㄴ <error-page> 설정해주기

=>

BoardDetailController.java

ㄴ 해당 코드 제거

=>

BoardDetailController.java

ㄴ web.xml 에 설정해줬으므로 해당 코드를 통해 에러를 처리하면 됨

=>

ㄴ App 재실행

=>

BoardListController.java

ㄴ 해당 코드 제거

=>

BoardListController.java

ㄴ web.xml 에 설정해줬으므로 해당 코드를 통해 에러를 처리하면 됨
=>

ㄴ 없는 게시글을 조회하려고 할 경우

=>

ㄴ 위와 같이 에러 화면이 출력됨

 

 

BoardAddServlet.java

=>

BoardAddServlet.java

ㄴ doGet 메서드 추가

=>

BoardAddServlet.java

ㄴ 한글 깨짐 방지 설정을 먼저 해줘야 함

 

 

board/form.jsp

ㄴ 해당 코드 제거

=>

board/form.jsp

ㄴ /board/add.jsp -> /board/add 로 변경



 

=>

ㄴ BoardAddServlet -> BoardAddController 로 변경

=>

ㄴ BoardFormServlet.java 파일 삭제

=>

BoardAddController.java

ㄴ 해당 코드 제거

=>

BoardAddController.java

ㄴ 에러처리 방식 변경

=>

App 재실행

=>

ㄴ 로그인 하기

=>

ㄴ 게시글 선택

=>

ㄴ [새 글] 선택

=>

=>

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

=>

ㄴ 게시글이 정상적으로 추가됨을 확인

=>

 

 

board/detail.jsp

ㄴ /board/fileDelete.jsp -> /board/fileDelete 로 변경

 

 

ㄴ add.jsp 파일 삭제

 

 

=>

ㄴ BoardFileDeleteServlet -> BoardFileDeleteController 로 이름 변경

 

 

 

BoardAddController.java

ㄴ /auth/form.html -> /auth/login 으로 변경

 

 

BoardFileDeleteController.java

ㄴ /auth/form.html -> /auth/login 으로 변경

=>

BoardFileDeleteController.java

ㄴ try 문 바깥쪽으로 빼줌

ㄴ BoardDao, SqlSessionFactory 객체는 try 문 밖에서 생성하도록 함

=>

BoardFileDeleteController.java

ㄴ ServletException -> Exception 으로 변경하기

=>

BoardFileDeleteController.java

ㄴ commit 은 /board/detail?category=... 로 이동하기 전에 해줘야 함

=>

BoardFileDeleteController.java

ㄴ RuntimeExceptioin 대신 ServletException 을 이용하도록 함

=>

BoardFileDeleteController.java

ㄴ 해당 코드 추가

=>

ㄴ board/fileDelete.jsp 파일 삭제

=>

ㄴ App 재실행

=>

ㄴ 회원 정보 입력 > [로그인] 선택

=>

=>

ㄴ 다른 사람이 작성한 글 선택

=>

ㄴ 첨부파일 [삭제] 선택

=>

ㄴ 해당 에러페이지 출력됨

=>

BoardFileDeleteController.java

ㄴ /board/file/delete -> /board/fileDelete 로 변경

=>

BoardFileDeleteController.java

ㄴ board 변수를 try 문 밖에서 선언

=>

BoardFileDeleteController.java

ㄴ request.getParameter("no") 대신 board.getNo() 를 적어줌

=>

ㄴ 해당 오류가 출력되고 2초 후 해당 게시글로 이동

=>

 

 

=>

ㄴ BoardUpdateServlet -> BoardUpdateController 로 이름 변경

=>

BoardUpdateController.java

ㄴ /auth/form.html -> /auth/login 로 변경

=>

BoardUpdateController.java

ㄴ 해당 코드 제거

=>

BoardUpdateController.java

ㄴ 해당 코드 추가

=>

ㄴ board/update.jsp 파일 삭제

=>

App 재실행

=>

=>

ㄴ 다른 사람이 작성한 게시글 변경 시도

=>

ㄴ 게시글 내용 변경 > [변경] 선택

=>

=>

ㄴ 변경되지 않고 해당 게시글로 다시 로딩됨

=>

ㄴ 로그인한 사용자가 작성한 글 수정해보기

=>

ㄴ 게시글 내용 변경 > [변경] 선택

=>

ㄴ 게시글이 정상적으로 변경됨을 확인

=>

 

 

=>

ㄴ BoardDeleteServlet -> BoardDeleteController 로 변경

=>

BoardDeleteController.java

ㄴ /auth/form.html -> /auth/login 으로 변경

=>

BoardDeleteController.java

=>

BoardDeleteController.java

ㄴ category 변수 제거하고 직접 넣어주기

=>

BoardDeleteController.java

ㄴ 해당 코드 제거

=>

BoardDeleteController.java

ㄴ 에러 처리 방식 변경

=>

ㄴ board/delete.jsp 파일 삭제

=>

App 재시작

=>

=>

=>

=>

ㄴ 게시글 [삭제] 선택

=>

=>

BoardDeleteController.java

=>
App 재시작

=>

ㄴ 게시글 [삭제] 선택

=>

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

 

 

 

LoginController.java

ㄴ 해당 코드 제거

=>

LoginController.java

ㄴ 에러처리 방식 변경

=>
App 재실행

=>

ㄴ 잘못된 암호 입력

=>

=>

ㄴ 로그인 페이지로 다시 돌아옴

=>

ㄴ 올바른 암호 입력

=>

ㄴ 로그인이 정상적으로 처리됨을 확인

 

 

 

MemberAddController.java

ㄴ try 문을 위쪽으로 이동시킴

=>

MemberAddController.java

ㄴ 해당 코드 제거

=>
MemberAddController.java

ㄴ 에러 처리 방식 변경

 

 

MemberDeleteController.java

ㄴ 해당 코드 제거

=>

MemberDeleteController.java

ㄴ 에러 처리 방식 변경

 

 

MemberUpdateController.java

ㄴ try 문을 위쪽으로 올려줌

=>

MemberUpdateController.java

ㄴ 해당 코드 제거

=>

MemberUpdateController.java

ㄴ 에러 처리 방식 변경

 

 

board/form.jsp

ㄴ 이제 value 값에 1 이 아닌 ${param.category} 값을 넣어주도록 함