2022-04-18(월)
MVC 모델 1의 한계
Client 측 장비가 다양화 됨 -> 요구하는 응답 데이터의 포맷이 다양해졌다.
PC, Android, iOS 등
장비 다양화 -> 응답 데이터 포맷 다양화
PC -> HTML, CSS, JS
모바일 -> XML, JSON
기타 -> Excel, PDF, JPEG
Web Browser → list.jsp → BoardService → BoardDao → MyBatis → JDBC Driver → DBMS
Androd/iOS → list_xml.jsp → BoardService → BoardDao → MyBatis → JDBC Driver → DBMS
기타 → list_json.jsp → BoardService → BoardDao → MyBatis → JDBC Driver → DBMS
• 서비스 객체를 사용하기 전에 입력 데이터를 가공하는 코드
• 출력할 데이터를 준비하는 코드
• 서비스 객체를 호출하는 코드
가 중복된다
⇒ 중복 코드 제거 필요!
모델1 구조를 개선
모델1에서 모델2로 진화
MVC 모델 2 등장
모델1의 한계 극복
"입∙출력 데이터 가공, 서비스 객체 호출 코드"가 중복되는 문제
BoardListController → BoardService → BoardDao → MyBatis → JDBC Driver → DBMS
웹 페이지를 요구하면 list.jsp를 실행
xml을 요구하면 list_xml.jsp를 실행
JSON 데이터를 요구하면 list_json.jsp를 실행
PDF를 요구하면 list_pdf.jsp를 실행
중간에서 어떤 jsp를 실행할지
어떤 뷰를 실행할지 통제한다
🔹 Controller 역할
• 입력 데이터 가공
• 서비스 객체 실행
• 출력 데이터 준비
• 뷰
🔹 View 역할
온전히 출력할 데이터를 가공하는 일에만 집중한다
MVC 모델 2 예 - 게시글 목록 조회
BoardListController : 출력 데이터 준비
forward
list.jsp : 목록 페이지 생성 및 출력
jsp는 서비스 객체와 연결고리가 없다
Controller만 그 일을 한다
http://localhost:8080/board/list?pageNo=1&pageSize=5
둘 다 같은 url을 가리키면 안 됨
getAttribute 리턴타입이 Object 이므로 형변환 해줘야 됨
Board board = (Board) request.getAttribute("board");
http://localhost:8080/board/list
컨트롤러에게 요청해야지 jsp에게 요청하면 안 됨
MVC 모델2에서 모든 요청은 Controller가 받아야 한다
jsp가 받지 않도록 한다
일관성이 중요
같은 방식을 써야 유지보수가 편해진다
http://localhost:8080/board/detail?no=62xxx
<jsp:useBean id="pageNo" type="java.lang.Integer" scope="request"></jsp:useBean>
<jsp:useBean id="pageSize" type="java.lang.Integer" scope="request"></jsp:useBean>
<jsp:useBean id="totalPageSize" type="java.lang.Integer" scope="request"></jsp:useBean>
<jsp:useBean id="list" type="java.util.List<Board>" scope="request"></jsp:useBean>
태그가 소속된 패키지 이름이 namespace
jsp 액션 태그
<jsp:태그명 속성명="값" ...></jsp:태그명> → 자바 코드 생성 (.java)
namespace: 태그가 소속된 그룹. 자바의 패키지와 유사한 개념.
예1)
<jsp:include page="url"/>
→ 자바 코드 생성 →
request.getRequestDispatcher("url").include()
예2)
type에는 반드시 전체 이름을 적어줘야 한다. 위에 import가 안 된다.
<jsp:useBean id="객체명" type="클래스" class="클래스" scope="보관소"/>
→ 자바 코드 생성 →
java.util.List<Board> list = (java.util.List<Board>) request.getAttribute("list");
if (list == null) {
list = (List<Board>) new ArrayList();
request.setAttribute("list", list);
}
jsp 엔진이
특정 자바 코드 생성
<jsp:useBean id="board" type="com.eomcs.mylist.domain.Board" class="com.eomcs.mylist.domain.Board" scope="request"></jsp:useBean>
type이랑 class가 같으면 class만 입력해도 된다
느낌표가 뜨면 안 된다
https://search.maven.org/artifact/javax.servlet/jstl/1.2/jar
implementation 'javax.servlet:jstl:1.2'
"jstl 사용법" 검색
전
for (Board board : boards) {
%>
<tr>
<td><%=board.getNo()%></td>
<td><a href='detail?no=<%=board.getNo()%>'><%=board.getTitle()%></a></td>
<td><%=board.getWriter().getName()%></td>
<td><%=board.getViewCount()%></td>
<td><%=board.getCreatedDate()%></td>
</tr>
<%
}
후
<c:forEach var="board" items="${requestScope.list}">
<tr>
<td>${board.getNo()}</td>
<td><a href='detail?no=${board.getNo()}'>${board.getTitle()}</a></td>
<td>${board.getWriter().getName()}</td>
<td>${board.getViewCount()}</td>
<td>${board.getCreatedDate()}</td>
</tr>
</c:forEach>
EL (Expression Language)
OGNL 표기법 사용해서 객체의 getter 호출
EL과 보관소
/Users/nana/git/eomcs-java/eomcs-servlet/app
eomcs-java/eomcs-servlet/app
Author And Source
이 문제에 관하여(2022-04-18(월)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@banana/2022-04-18월저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)