MVC ํจํด
๐ MVC ํจํด ๋ฑ์ฅ
- ๋น์ฆ๋์ค ๋ก์ง์ ์๋ธ๋ฆฟ ์ฒ๋ผ ๋ค๋ฅธ๊ณณ์์ ์ฒ๋ฆฌํ๊ณ , JSP๋ ๋ชฉ์ ์ ๋ง๊ฒ HTML๋ก ํ๋ฉด(View)์ ๊ทธ๋ฆฌ๋ ์ผ์ ์ง์คํ์
๐ก Model View Controller
* ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณดํต MVC ํจํด์ ์ฌ์ฉํ๋ค
- ํ๋์ ์๋ธ๋ฆฟ์ด๋, JSP๋ก ์ฒ๋ฆฌํ๋ ๊ฒ์ ์ปจํธ๋กค๋ฌ(Controller)์ ๋ทฐ(View)๋ผ๋ ์์ญ์ผ๋ก ์๋ก ์ญํ ์ ๋๋ ๊ฒ์ ๋งํ๋ค
<MVC ํจํด1>
๐ ์ปจํธ๋กค๋ฌ Controller
- HTTP ์์ฒญ์ ๋ฐ์์ ํ๋ผ๋ฏธํฐ๋ฅผ ๊ฒ์ฆํ๊ณ , ๋น์ฆ๋์ค ๋ก์ง์ ์คํํ๋ค
- ๋ทฐ์ ์ ๋ฌํ ๊ฒฐ๊ณผ ๋ฐ์ดํฐ๋ฅผ ์กฐํํด์ ๋ชจ๋ธ์ ๋ด๋๋ค
๐ ๋ชจ๋ธ Model
- ๋ทฐ์ ์ถ๋ ฅํ ๋ฐ์ดํฐ๋ฅผ ๋ด์๋๋ค
- ๋ทฐ๊ฐ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ๋ชจ๋ธ์ ๋ด์ ์ ๋ฌํด์ฃผ๋ ๋๋ถ์ ๋ทฐ๋ ๋น์ฆ๋์ค ๋ก์ง์ด๋ ๋ฐ์ดํฐ ์ ๊ทผ์ ๋ชฐ๋ผ๋ ๋๊ณ ,
ํ๋ฉด์ ๋ ๋๋ง ํ๋ ์ผ์ ์ง์คํ ์ ์๋ค
๐ ๋ทฐ View
- ๋ชจ๋ธ์ ๋ด๊ฒจ์๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํด ํ๋ฉด์ ๊ทธ๋ฆฌ๋ ์ผ์ ์ง์คํ๋ค
- HTML์ ์์ฑํ๋ ๋ถ๋ถ์ ๋งํ๋ค
๐ MVC ํจํด2
- ๋น์ฆ๋์ค ๋ก์ง์ ์๋น์ค(Service)๋ผ๋ ๊ณ์ธต์ ๋ณ๋๋ก ๋ง๋ค์ด์ ์ฒ๋ฆฌํ๋ค
+ ์ปจํธ๋กค๋ฌ๋ ๋น์ฆ๋์ค ๋ก์ง์ด ์๋ ์๋น์ค๋ฅผ ํธ์ถํ๋ ์ญํ ์ ๋ด๋นํ๋ค
๐ก MVC ํจํด ์ ์ฉํ๊ธฐ
- ์๋ธ๋ฆฟ์ ์ปจํธ๋กค๋ฌ๋ก, JSP๋ฅผ ๋ทฐ๋ก ์ฌ์ฉํด๋ณด๊ธฐ
- Model์ HTTPServletRequest ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ค
: request ๊ฐ์ฒด๋ ๋ด๋ถ์ ๋ฐ์ดํฐ ์ ์ฅ์๋ฅผ ๊ฐ์ง๊ณ ์๋ค
: request.setAttribute(), request.getAttribute()๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ดํ๊ณ , ์กฐํํ ์ ์๋ค
=> ์ปจํธ๋กค๋ฌ์์๋ request.setAttribute(key, value)๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ดํ๊ณ
๋ทฐ์์๋ request.getAttribute(key)๋ก ๋ฐ์ดํฐ๋ฅผ ๊บผ๋ธ๋ค
๐ /WEB-INF
- ์ด ๊ฒฝ๋ก ์์ JSP๊ฐ ์์ผ๋ฉด ์ธ๋ถ์์ ์ง์ JSP๋ฅผ ํธ์ถํ ์ ์๋ค
- ํญ์ ์ปจํธ๋กค๋ฌ๋ฅผ ํตํด JSP๋ฅผ ํธ์ถํด์ผ ํ๋ค
๐ ํ์ ๋ชฉ๋ก ์กฐํ Controller
@WebServlet(name = "mvcMemberListServlet", urlPatterns = "/servlet-mvc/members")
public class MvcMemberListServlet extends HttpServlet {
private MemberRepository memberRepository = MemberRepository.getInstance();
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("MvcMemberListServlet.service");
List<Member> members = memberRepository.findAll();
request.setAttribute("members", members);
String viewPath = "/WEB-INF/views/members.jsp";
RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath);
dispatcher.forward(request, response);
}
}
- dispatcher.forward()
: ๋ค๋ฅธ ์๋ธ๋ฆฟ์ด๋ JSP๋ก ์ด๋ํ ์ ์๋ ๊ธฐ๋ฅ
: ์๋ฒ ๋ด๋ถ์์ ๋ค์ ํธ์ถ์ด ๋ฐ์ํ๋ค
๐ ํ์ ๋ชฉ๋ก ์กฐํ - ๋ทฐ
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<a href="/index.html">๋ฉ์ธ</a>
<table>
<thead>
<th>id</th>
<th>username</th>
<th>age</th>
</thead>
<tbody>
<c:forEach var="item" items="${members}">
<tr>
<td>${item.id}</td>
<td>${item.username}</td>
<td>${item.age}</td>
</tr>
</c:forEach>
</tbody>
</table>
</body>
</html>
- ๋ฐ์ดํฐ ๊บผ๋ด๊ธฐ
: <%= request.getAttribute("member")%>๋ก ๋ชจ๋ธ์ ์ ์ฅํ member ๊ฐ์ฒด๋ฅผ ๊บผ๋ผ ์ ์์ง๋ง ๋ณต์ก,,
: JSP์ ${ } ๋ฌธ๋ฒ์ ์ฌ์ฉํด request์ ๋ด๊ธด ๋ฐ์ดํฐ๋ฅผ ํธ๋ฆฌํ๊ฒ ์กฐํํ ์ ์๋ค
- <c:forEach> ๊ธฐ๋ฅ์ฌ์ฉํ๊ธฐ ์ํด ์ ์ธ
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
๐ redirect vs forward
- redirect
: ์๋ก์ด ์์ฒญ๊ณผ ์๋ต์ ๋ฐ๋ ๊ฒ
: ์ค์ ํด๋ผ์ด์ธํธ(์น ๋ธ๋ผ์ฐ์ )์ ์๋ต์ด ๋๊ฐ๋ค๊ฐ, ํด๋ผ์ด์ธํธ๊ฐ redirect๊ฒฝ๋ก๋ก ๋ค์ ์์ฒญํ๋ค
: ๋ก๊ทธ์ธ, ๊ธ์ฐ๊ธฐ ๋ฑ
: ํด๋ผ์ด์ธํธ๊ฐ ์ธ์งํ ์ ์๊ณ , URL ๊ฒฝ๋ก๋ ๋ณ๊ฒฝ๋๋ค
- forward
: ์์ฒญ๊ณผ ์๋ต์ ๋๋ฆฌ๋ ๊ฒ
: ๊ฒ์, ๋จ์ ์กฐํ
: ์๋ฒ ๋ด๋ถ์์ ์ผ์ด๋๋ ํธ์ถ์ด๊ธฐ ๋๋ฌธ์ ํด๋ผ์ด์ธํธ๊ฐ ์ ํ ์ธ์งํ์ง ๋ชปํ๋ค
request์ response์ ์ ๋ณด๊ฐ forward๋ ๊ทธ๋๋ก ๊ฐ๊ณ ์๋ ์ํ์์ ํด๋น url๋ก ์ด๋ํ๊ณ redirect๋ ์์ ์๋ก์ด ์์ฒญ๊ณผ ์๋ต์ ๊ฐ๋๋ค
โ๏ธ ๋จ์
- ํฌ์๋ ์ค๋ณต
: View๋ก ์ด๋ํ๋ ์ฝ๋๊ฐ ํญ์ ์ค๋ณต ํธ์ถ๋๋ค
RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath);
dispatcher.forward(request, response);
- viewPath ์ค๋ณต
String viewPath = "/WEB-INF/views/new-form.jsp";
- ์ฌ์ฉํ์ง ์๋ ์ฝ๋
- ๊ณตํต ์ฒ๋ฆฌ๊ฐ ์ด๋ ต๋ค
=> ํ๋ก ํธ ์ปจํธ๋กค๋ฌ(Front Controller) ํจํด ์ฌ์ฉ (์ ๊ตฌ๋ฅผ ํ๋๋ก!)