- 서블릿 프로그래밍
- 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} 값을 넣어주도록 함