[์คํ๋ง MVC] - 6. MVC ํจํด - ์ ์ฉ , ํ๊ณ
MVC ํจํด - ์ ์ฉ
์๋ธ๋ฆฟ์ ์ปจํธ๋กค๋ฌ๋ก ์ฌ์ฉํ๊ณ , JSP๋ฅผ ๋ทฐ๋ก ์ฌ์ฉํด์ MVC ํจํด์ ์ ์ฉํด๋ณด์.
Model์ HttpServletRequest ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ค. request๋ ๋ด๋ถ์ ๋ฐ์ดํฐ ์ ์ฅ์๋ฅผ ๊ฐ์ง๊ณ ์๋๋ฐ,
request.setAttribute() , request.getAttribute() ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ดํ๊ณ , ์กฐํํ ์ ์๋ค.
ํ์ ๋ฑ๋ก ํผ - ์ปจํธ๋กค๋ฌ
@WebServlet(name = "mvcMemberFormServlet", urlPatterns = "/servlet-mvc/members/new-form")
public class MvcMemberFormServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String viewPath = "/WEB-INF/views/new-form.jsp";
RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath);
dispatcher.forward(request,response);
}
dispatcher.forward() : ๋ค๋ฅธ ์๋ธ๋ฆฟ์ด๋ JSP๋ก ์ด๋ํ ์ ์๋ ๊ธฐ๋ฅ์ด๋ค. ์๋ฒ ๋ด๋ถ์์ ๋ค์ ํธ์ถ์ด ๋ฐ์ํ๋ค.
/WEB-INF
> ์ด ๊ฒฝ๋ก์์ JSP๊ฐ ์์ผ๋ฉด ์ธ๋ถ์์ ์ง์ JSP๋ฅผ ํธ์ถํ ์ ์๋ค.
์ฐ๋ฆฌ๊ฐ ๊ธฐ๋ํ๋ ๊ฒ์ ํญ์ ์ปจํธ๋กค๋ฌ๋ฅผ ํตํด์ JSP๋ฅผ ํธ์ถํ๋ ๊ฒ์ด๋ค.
redirect vs forward
> ๋ฆฌ๋ค์ด๋ ํธ๋ ์ค์ ํด๋ผ์ด์ธํธ(์น ๋ธ๋ผ์ฐ์ )์ ์๋ต์ด ๋๊ฐ๋ค๊ฐ, ํด๋ผ์ด์ธํธ๊ฐ redirect ๊ฒฝ๋ก๋ก ๋ค์ ์์ฒญํ๋ค.
๋ฐ๋ผ์ ํด๋ผ์ด์ธํธ๊ฐ ์ธ์งํ ์ ์๊ณ , URL ๊ฒฝ๋ก๋ ์ค์ ๋ก ๋ณ๊ฒฝ๋๋ค.
๋ฐ๋ฉด์ ํฌ์๋๋ ์๋ฒ ๋ด๋ถ์์ ์ผ์ด๋๋ ํธ์ถ์ด๊ธฐ ๋๋ฌธ์ ํด๋ผ์ด์ธํธ๊ฐ ์ ํ ์ธ์งํ์ง ๋ชปํ๋ค.
ํ์ ๋ฑ๋ก ํผ - ๋ทฐ
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<!-- ์๋๊ฒฝ๋ก ์ฌ์ฉ, [ํ์ฌ URL์ด ์ํ ๊ณ์ธต ๊ฒฝ๋ก + /save] -->
<form action="save" method="post">
username: <input type="text" name="username" />
age: <input type="text" name="age" />
<button type="submit">์ ์ก</button>
</form>
</body>
</html>
์ฌ๊ธฐ์ form์ action์ ๋ณด๋ฉด ์ ๋ ๊ฒฝ๋ก( / ๋ก ์์)๊ฐ ์๋๋ผ ์๋๊ฒฝ๋ก( / ๋ก ์์X)์ธ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์ด๋ ๊ฒ ์๋๊ฒฝ๋ก๋ฅผ ์ฌ์ฉํ๋ฉด ํผ ์ ์ก์ ํ์ฌ URL์ด ์ํ ๊ณ์ธต ๊ฒฝ๋ก + save๊ฐ ํธ์ถ๋๋ค.
ํ์ฌ ๊ณ์ธต ๊ฒฝ๋ก: /servlet-mvc/members/
๊ฒฐ๊ณผ: /servlet-mvc/members/save
ํ์ ์ ์ฅ - ์ปจํธ๋กค๋ฌ
//Model์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ดํ๋ค.
request.setAttribute("member", member);
HttpServletRequest๋ฅผ Model๋ก ์ฌ์ฉํ๋ค.
request๊ฐ ์ ๊ณตํ๋ setAttribute() ๋ฅผ ์ฌ์ฉํ๋ฉด request ๊ฐ์ฒด์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ดํด์ ๋ทฐ์ ์ ๋ฌํ ์ ์๋ค.
๋ทฐ๋ request.getAttribute() ๋ฅผ ์ฌ์ฉํด์ ๋ฐ์ดํฐ๋ฅผ ๊บผ๋ด๋ฉด ๋๋ค.
ํ์ ์ ์ฅ - ๋ทฐ
<ul>
<li>id=${member.id}</li>
<li>username=${member.username}</li>
<li>age=${member.age}</li>
</ul>
<%= request.getAttribute("member")%> ๋ก ๋ชจ๋ธ์ ์ ์ฅํ member ๊ฐ์ฒด๋ฅผ ๊บผ๋ผ ์ ์์ง๋ง, ๋๋ฌด ๋ณต์กํด์ง๋ค.
JSP๋ ${} ๋ฌธ๋ฒ์ ์ ๊ณตํ๋๋ฐ, ์ด ๋ฌธ๋ฒ์ ์ฌ์ฉํ๋ฉด request์ attribute์ ๋ด๊ธด ๋ฐ์ดํฐ๋ฅผ ํธ๋ฆฌํ๊ฒ ์กฐํํ ์ ์๋ค.
MVC ๋๋ถ์ ์ปจํธ๋กค๋ฌ ๋ก์ง๊ณผ ๋ทฐ ๋ก์ง์ ํ์คํ๊ฒ ๋ถ๋ฆฌํ ๊ฒ์ ํ์ธํ ์ ์๋ค.
MVC ํจํด - ํ๊ณ
MVC ํจํด์ ์ ์ฉํ ๋๋ถ์ ์ปจํธ๋กค๋ฌ์ ์ญํ ๊ณผ ๋ทฐ๋ฅผ ๋ ๋๋ง ํ๋ ์ญํ ์ ๋ช ํํ๊ฒ ๊ตฌ๋ถํ ์ ์๋ค.
ํนํ ๋ทฐ๋ ํ๋ฉด์ ๊ทธ๋ฆฌ๋ ์ญํ ์ ์ถฉ์คํ ๋๋ถ์, ์ฝ๋๊ฐ ๊น๋ํ๊ณ ์ง๊ด์ ์ด๋ค.
๋จ์ํ๊ฒ ๋ชจ๋ธ์์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๊บผ๋ด๊ณ , ํ๋ฉด์ ๋ง๋ค๋ฉด ๋๋ค.
๊ทธ๋ฐ๋ฐ ์ปจํธ๋กค๋ฌ๋ ๋ฑ ๋ด๋ ์ค๋ณต์ด ๋ง๊ณ , ํ์ํ์ง ์๋ ์ฝ๋๋ค๋ ๋ง์ด ๋ณด์ธ๋ค.
MVC ์ปจํธ๋กค๋ฌ์ ๋จ์
RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath);
dispatcher.forward(request,response);
ํฌ์๋ ์ค๋ณต
View๋ก ์ด๋ํ๋ ์ฝ๋๊ฐ ํญ์ ์ค๋ณต ํธ์ถ๋์ด์ผ ํ๋ค.
๋ฌผ๋ก ์ด ๋ถ๋ถ์ ๋ฉ์๋๋ก ๊ณตํตํํด๋ ๋์ง๋ง, ํด๋น ๋ฉ์๋๋ ํญ์ ์ง์ ํธ์ถํด์ผ ํ๋ค.
๊ณตํต ์ฒ๋ฆฌ๊ฐ ์ด๋ ต๋ค.
๊ธฐ๋ฅ์ด ๋ณต์กํด์ง ์ ๋ก ์ปจํธ๋กค๋ฌ์์ ๊ณตํต์ผ๋ก ์ฒ๋ฆฌํด์ผ ํ๋ ๋ถ๋ถ์ด ์ ์ ๋ ๋ง์ด ์ฆ๊ฐํ ๊ฒ์ด๋ค.
๋จ์ํ ๊ณตํต ๊ธฐ๋ฅ์ ๋ฉ์๋๋ก ๋ฝ์ผ๋ฉด ๋ ๊ฒ ๊ฐ์ง๋ง,
๊ฒฐ๊ณผ์ ์ผ๋ก ํด๋น ๋ฉ์๋๋ฅผ ํญ์ ํธ์ถํด์ผ ํ๊ณ , ์ค์๋ก ํธ์ถํ์ง ์์ผ๋ฉด ๋ฌธ์ ๊ฐ ๋ ๊ฒ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ํธ์ถํ๋ ๊ฒ ์์ฒด๋ ์ค๋ณต์ด๋ค.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด ์ปจํธ๋กค๋ฌ ํธ์ถ ์ ์ ๋จผ์ ๊ณตํต ๊ธฐ๋ฅ์ ์ฒ๋ฆฌํด์ผ ํ๋ค.
์์ ์๋ฌธ์ฅ ์ญํ ์ ํ๋ ๊ธฐ๋ฅ์ด ํ์ํ๋ค.
ํ๋ก ํธ ์ปจํธ๋กค๋ฌ(Front Controller) ํจํด์ ๋์ ํ๋ฉด ์ด๋ฐ ๋ฌธ์ ๋ฅผ ๊น๋ํ๊ฒ ํด๊ฒฐํ ์ ์๋ค. (์ ๊ตฌ๋ฅผ ํ๋๋ก!)
์คํ๋ง MVC์ ํต์ฌ๋ ๋ฐ๋ก ์ด ํ๋ก ํธ ์ปจํธ๋กค๋ฌ์ ์๋ค.
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1/dashboard
์คํ๋ง MVC 1ํธ - ๋ฐฑ์๋ ์น ๊ฐ๋ฐ ํต์ฌ ๊ธฐ์ - ์ธํ๋ฐ | ๊ฐ์
์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ๋ ํ์ํ ๋ชจ๋ ์น ๊ธฐ์ ์ ๊ธฐ์ด๋ถํฐ ์ดํดํ๊ณ , ์์ฑํ ์ ์์ต๋๋ค. ์คํ๋ง MVC์ ํต์ฌ ์๋ฆฌ์ ๊ตฌ์กฐ๋ฅผ ์ดํดํ๊ณ , ๋ ๊น์ด์๋ ๋ฐฑ์๋ ๊ฐ๋ฐ์๋ก ์ฑ์ฅํ ์ ์์ต๋๋ค., -
www.inflearn.com