model : 모델
모델링 : 설계를 구현하는 과정
DB에 있는 데이터를 자바세상으로 가져오는 것도 모델링
=> 모델이라 부름 (우리가 아는 req,res를 담는 Model model과 다름)
컨트롤러 : 메서드 요청
컨트롤러는 서비스에 의존적 (서비스의 레퍼런스 주소만 알면 됨)
request -> Controller는 View를 request함 -> 이 때 request에 있는 데이터가 사라짐 -> requestDispatcher로 데이터를 복사? 덮어씌우기 함
즉 우리가 하는 것은 request의 데이터를 view request에 덧씌우는 느낌
연습용이기 때문에 DAO는 생략하고 table, Controller만 만들었다.
package site.metacoding.yellow.domain;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@AllArgsConstructor
@NoArgsConstructor
//All만들거면 No도 만드는게 좋음
@Setter
@Getter
public class Board {
private Integer id;
private String title;
private String content;
}
→ 아래의 목차에서 하나씩 작성해볼 것
@Controller
public class BoardController {
@GetMapping("/board")
//데이터 전체보기이기 때문에 파라미터로 받을 변수가 없으므로 데이터를 담을 Model만 필요함
public String getBoard(Model model) {
//DB에 연결을 하지 않았으므로 더미 데이터를 만듦
List<Board> boardList = new ArrayList<>();
boardList.add(new Board(1,"스프링1강","컨트롤러 배우기"));
boardList.add(new Board(2,"스프링2강","템플릿 엔진 배우기"));
boardList.add(new Board(3,"스프링3강","디비 연결 하기"));
model.addAttribute("boardList", boardList);
return "board/list";
}
}
return할 View 경로가 board/list이므로 view에 board폴더를 만들고 list jsp파일을 만든다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>List page</h1>
<hr/>
<table border="1">
<tr>
<th>번호</th>
<th>제목</th>
<th>내용</th>
</tr>
<c:forEach var="board" items="${boardList}">
<tr>
<th>${board.id}</th>
<th>${board.title}</th>
<th>${board.content}</th>
</tr>
</c:forEach>
</table>
</body>
</html>
jstl 문법을 쓰기 위해서는 태그 라이브러리 별 표준 선언문이 필요하다.
표준 선언문 중 core가 기본 라이브러리이며 우리가 배워볼 여러 함수를 가지고 있다.
👉 jsp파일 선언 태그(맨 위 태그) 밑에
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
를 달아주어야 함수를 사용 가능하다.<c:함수>
또한 html은 엔터나 스페이스바도<div>
,<br>
로 인식하기 때문에
함수태그 안의 내용이 html태그로 인식되지 않고 java 문법으로(java의 일반 띄워쓰기로) 인식되도록 태그 앞에c:
를 붙인다.
<c:forEach var="변수명" items="목록 데이터" begin="시작 인덱스" end="종료 인덱스">콘텐츠</c:forEach>
begin과 end는 생략 가능
<c:forEach var="board" items="${boardList}">
<tr>
<th>${board.id}</th>
<th>${board.title}</th>
<th>${board.content}</th>
</tr>
</c:forEach>
Model의 변수명인 boardList를 받아 board라는 변수명으로 Model
board.id
id변수가 호출되는게 아니라 getter가 호출되는것
4.하이퍼링크
test에 조건을 넣으면 된다
(근데 이름을 왜 이렇게 지었담...)
View에는 데이터의 최종 값만 나오게 하는게 좋음
Controller에서 if문을 Model값에 담아 (다른 변수명으로) 그 ${변수명}으로 띄우면된다.
choose when
템플릿화(함수화) (네비게이션/푸터)