Spring MVC๋ฅผ ์ฒ์ ๊ณต๋ถํ๋ฉด์ ๊ฐ์ฅ ํท๊ฐ๋ฆฌ๋ ๋ถ๋ถ ์ค ํ๋๋
"Controller์์ View(JSP)๋ฅผ ์ด๋ป๊ฒ ์ฐพ๋๊ฐ?" ์
๋๋ค.
์ด๋ฒ ํฌ์คํ
์์๋ ์ง์ ๋ง๋ ๊ฒ์ํ ์์ ๋ฅผ ํตํด ์ธํฐํ์ด์ค ๊ตฌ์กฐ์ ViewResolver์ ๋์ ๋ฐฉ์๊น์ง ๊น๋ํ๊ฒ ์ ๋ฆฌํด๋ณผ๊ฒ์.
๋ธ๋ผ์ฐ์ ์์ฒญ โ DispatcherServlet โ Controller โ Service โ (Repository) โ Model โ View(JSP)
package ruby.paper.controller;
import java.util.ArrayList;
import java.util.List;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import ruby.paper.domain.Board;
@Controller
public class BoardController {
@GetMapping("/getBoardList")
public String getBoardList(Model model) {
List<Board> boardList = new ArrayList<>();
for(long i = 1L; i <= 10L; i++) {
boardList.add(Board.builder()
.seq(i)
.title("๊ฒ์ํ ํ๋ก๊ทธ๋จ ํ
์คํธ")
.writer("๋์ฐ๋")
.content("๊ฒ์ํ ํ๋ก๊ทธ๋จ ํ
์คํธ์
๋๋ค.")
.build());
}
model.addAttribute("boardList", boardList);
return "getBoardList";
}
}
๐ ์ฌ๊ธฐ์ "getBoardList"๋ View ์ด๋ฆ์
๋๋ค.
Spring์ ์ด ๋ฌธ์์ด์ ๋ฐํ์ผ๋ก getBoardList.jsp ํ์ผ์ ์ฐพ์ ํ๋ฉด์ ๋ณด์ฌ์ค์.
Spring์ ์ค์ ํ์ผ (servlet-context.xml ๋ฑ)์๋ ๋ค์๊ณผ ๊ฐ์ ViewResolver ์ค์ ์ด ํฌํจ๋ผ ์์ต๋๋ค.
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
๐ ์ด ์ค์ ๋๋ถ์,
return "getBoardList";
๋ผ๊ณ ๋ง ์จ๋ Spring์ ๋ค์ ๊ฒฝ๋ก์ JSP ํ์ผ์ ์๋์ผ๋ก ์ฐพ์ต๋๋ค:
/WEB-INF/views/getBoardList.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<html>
<head>
<title>๊ธ๋ชฉ๋ก</title>
</head>
<body>
<h1>๊ฒ์๊ธ ๋ชฉ๋ก</h1>
<table>
<tr>
<th>๋ฒํธ</th><th>์ ๋ชฉ</th><th>์์ฑ์</th><th>๋ฑ๋ก์ผ</th><th>์กฐํ์</th>
</tr>
<c:forEach var="board" items="${boardList}">
<tr>
<td>${board.seq}</td>
<td><a href="getBoard?seq=${board.seq}">${board.title}</a></td>
<td>${board.writer}</td>
<td><fmt:formatDate value="${board.createDate}" pattern="yyyy-MM-dd" /></td>
<td>${board.cnt}</td>
</tr>
</c:forEach>
</table>
</body>
</html>
public interface BoardService {
List<Board> getBoardList();
// ...
}
@Service
public class BoardServiceImpl implements BoardService {
@Autowired
private BoardRepository BoardRepo;
@Override
public List<Board> getBoardList() {
return BoardRepo.findAll();
}
}
๐ ์ ์ธํฐํ์ด์ค๋ฅผ ์ฐ๋๋ฉด์...
์ฆ, BoardService๋ฅผ ์ฐ๋ฉด ์ค์ ๊ตฌํ์ฒด๊ฐ ์ด๋ค ํด๋์ค๋ ์ฝ๊ฒ ๊ต์ฒด ๊ฐ๋ฅํด์.
| ์์ | ์ญํ |
|---|---|
@Controller | ์ฌ์ฉ์์ ์์ฒญ์ ๋ฐ์ ์ฒ๋ฆฌ |
Model | View๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌ |
"getBoardList" | View ์ด๋ฆ (JSP ํ์ผ ์ด๋ฆ) |
ViewResolver | JSP ๊ฒฝ๋ก ๊ท์น์ ์ ์ (/WEB-INF/views/ + ์ด๋ฆ + .jsp) |
@Service + ์ธํฐํ์ด์ค | ์ ์ฐํ ๊ตฌ์กฐ, ์ถํ ํ์ฅ์ฑ ํ๋ณด |