์น์ 4๋ ์์ฃผ ๊ฐ๋จํ ํ์๊ด๋ฆฌ ์น์ ๋ง๋ค์๋ค. ์ฒ์์๋ ์๋ธ๋ฆฟ์ผ๋ก ํด๋ณด๊ณ JSP, SpringMVC๋ฅผ ์ฐจ๋ก๋ก ์ดํด๋ดค๋ค. ์๋ธ๋ฆฟ๊ณผ JSP๋ก ๋ง๋ ์ฝ๋์๋ ์ด๋ค ๋ถํธํ ์ ์ด ์๋์ง, SpringMVC๋ ์ด๋ป๊ฒ ๋์ํ๋์ง ์ดํด๋ณด๋ฉฐ ์๋ธ๋ฆฟ๊ณผ JSP์ ๋ฌธ์ ์ ์ ์ด๋ป๊ฒ ๋ณด์ํ๋์ง ์ดํด๋ดค๋ค.
โ๏ธ
์๋ชป๋ ์ ๋ณด๊ฐ ์์ ์ ์์ต๋๋ค
โ๏ธ MVC ํจํด - ํ์์ ๋ณด ์ ์ฅ๊ณผ ์ถ๋ ฅ
- ์๋ธ๋ฆฟ์ ์ปจํธ๋กค๋ฌ๋ก ์ฌ์ฉํ๊ณ , JSP๋ฅผ ๋ทฐ๋ก ์ฌ์ฉํ๋ค.
โบ MvcMemeberFormServlet.class
- ํ์ ๋ฑ๋ก ํผ ํด๋์ค
- ์ปจํธ๋กค๋ฌ ์ญํ ์ ๋ด๋นํ๋ค.
RequestDispatcher
: ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์ต์ด๋ก ๋ค์ด์จ ์์ฒญ์ ์ํ๋ ์์์ผ๋ก ์์ฒญ์ ๋๊ธฐ๋ ์ญํ ์ ์ํํ๊ฑฐ๋, ํน์ ์์์ ์ฒ๋ฆฌ๋ฅผ ์์ฒญํ๊ณ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์ป์ด์ค๋ ๊ธฐ๋ฅ์ ์ํํ๋ ํด๋์ค๋ค.
getRequestDispatcher
: ๊ฒฝ๋ก๋ฅผ ์ ๋ ๋ฉ์๋๋ก servletRequest ๊ฐ์ฒด์์ ํธ์ถํ ๋๋ ์ ๋๊ฒฝ๋ก, ์๋๊ฒฝ๋ก ๋ชจ๋ ๊ฐ๋ฅํ์ง๋ง ServletContext์ ๊ฒฝ์ฐ ์ ๋ ๊ฒฝ๋ก๋ง ๊ฐ๋ฅํ๋ค.
forward
: ํด๋ผ์ด์ธํธ์ ์์ฒญ์ผ๋ก ์์ฑ๋๋ request, response ๊ฐ์ฒด๋ฅผ ๋ค๋ฅธ ์์์ ์ ๋ฌํ๊ณ , ์ํ ์ ์ด๋ฅผ ์์ ํ ๋๊ฒจ์ ๋ค๋ฅธ ์์์ ์ํ๊ฒฐ๊ณผ๋ฅผ ํด๋ผ์ด์ธํธ๋ก ์๋ตํ๋ค.
@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);
}
}
viewPath์ ๊ฒฝ๋ก๋ฅผ ์ ์๋ค. ์ฌ๊ธฐ์ /WEB-INF๋ ์ธ๋ถ์์ ์ง์ JSP๋ฅผ ํธ์ถํ ์ ์๋๋ก ์ค์ ํ๋ ๊ฒ์ด๋ค. /views/new-form.jsp๋ฅผ URL์ ์ ์ด๋ ๋ธ๋ผ์ฐ์ ์ ๋ฐ์ํ์ง ์๊ณ , ์ปจํธ๋กค๋ฌ๋ฅผ ํตํด์ ์ ๊ทผํ ์ ์๊ฒ ์ค์ ํ๋ค.
๊ฒฝ๋ก๋ฅผ getRequestDispatcher์ ๋ฃ์ผ๋ฉด ํด๋น ๊ฒฝ๋ก๋ก ์ด๋ํ๋ผ๋ ๋ง์ด๋ค. ๊ทธ๋ผ ๊ฒฝ๋ก๋ก ์ด๋ํ ๋ request์ response๋ฅผ ๋ค๊ณ ๊ฐ๊ณ ์ํ ๊ฒฐ๊ณผ๋ฅผ ์๋ตํ๋ค. ์๋ต์ ๋ธ๋ผ์ฐ์ ์ ๋ฐ์ํ ๋ forward ๋ฉ์๋๋ url์ /views/new-form.jsp๋ก ๊ฒฝ๋ก๋ฅผ ๋ณด์ฌ์ฃผ์ง ์๋๋ค. ๋ธ๋ผ์ฐ์ ์ฃผ์๋ ๊ทธ๋๋ก /servlet-mvc/members/new-form์ด๋ค.
โบ new-form.jsp
- ํ์ ๋ฑ๋ก ํผ jsp
- ๋ทฐ ์ญํ ์ ๋ด๋นํ๋ค.
<form action="save" method="post">
username: <input type="text" name="username" />
age: <input type="text" name="age" />
<button type="submit">์ ์ก</button>
</form>
action์ / ์์ด ๊ฒฝ๋ก๋ฅผ ์ ์ด ์๋๊ฒฝ๋ก๋ก ๋ง๋ ๋ค. ์ด๋ ๊ฒ ์ ์ผ๋ฉด ํผ ์ ์ก์ ํ์ฌ URL์ด ์ํ ๊ณ์ธต ๊ฒฝ๋ก์ save๊ฐ ์ถ๊ฐ๋์ด /servlet-mvc/members/save๊ฐ ๋๋ค.
โบ MvcMemberSaveServlet.class
- ํ์ ์ ์ฅ ํด๋์ค
- ์ปจํธ๋กค๋ฌ ์ญํ ์ ๋ด๋นํ๋ค.
setAttribute
: request ๊ฐ์ฒด์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ดํด์ ๋ทฐ์ ์ ๋ฌํ ์ ์๋ค.
request.setAttribute("member", member);
member์ ํ์์ username๊ณผ age๋ฅผ ๋ด์ memberRepository์ save ๋ฉ์๋๋ก ๋ณด๋ธ๋ค. save ๋ฉ์๋๋ store์ ์ ์ฅํ๊ณ id๋ฅผ ๋ถ์ฌํ์ฌ ๋ฐํํ๋ค. id๊น์ง ๋ฐํ๋ member๋ ์์ฒญ ๊ฐ์ฒด์ ์ ๋ณด๋ฅผ ๋ด์ save-result.jsp๋ก ๋ณด๋ธ๋ค.
โบ save-result.jsp
- ํ์ ์ ์ฅ jsp
- ๋ทฐ ์ญํ ์ ๋ด๋นํ๋ค.
<li>id=${member.id}</li>
<li>username=${member.username}</li>
<li>age=${member.age}</li>
jsp์์ ${ } ํํ์์ ํตํด request๋ก ์ ๋ฌ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ํธ๋ฆฌํ๊ฒ ์กฐํํ ์ ์๋ค.
โ๏ธ MVC ํจํด - ํ์์ ๋ณด๋ชฉ๋ก ์ ์ฅ๊ณผ ์ถ๋ ฅ
โบ MvcMemeberListServlet.class
- ํ์ ๋ชฉ๋ก ์กฐํ ํด๋์ค
- ์ปจํธ๋กค๋ฌ ์ญํ ์ ๋ด๋นํ๋ค.
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);
memberRepository์ ์๋ findAll ๋ฉ์๋๋ store์ ์ ์ฅ๋ values๋ฅผ ๋ฆฌ์คํธ ํ์ ์ผ๋ก ๋ฐํํ๋ค. ๊ฐ์ ธ์จ ๋ชจ๋ ๋ฆฌ์คํธ๋ฅผ request ๊ฐ์ฒด๋ฅผ ํตํด jsp์ ๋ณด๋ด ์ถ๋ ฅ๋๋๋ก ํ๋ค.
โบ members.jsp
- ํ์ ๋ชฉ๋ก ์กฐํ ํด๋์ค
- ์ปจํธ๋กค๋ฌ ์ญํ ์ ๋ด๋นํ๋ค.
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:forEach var="item" items="${members}">
<tr>
<td>${item.id}</td>
<td>${item.username}</td>
<td>${item.age}</td>
</tr>
</c:forEach>
${members}๋ก members์ ๋ด๊ธด ๋ฆฌ์คํธ ๋ชฉ๋ก์ foreach ๊ตฌ๋ฌธ์ผ๋ก ํ๋ํ๋ ๋ฐ์ id์ username, age๋ฅผ ์ถ๋ ฅํ๋ค. foreach๊ตฌ๋ฌธ์ jsp์์ ์ ๊ณตํ๋ ํ๊ทธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(taglib)๋ค.
์๋์ ์ถ์ฒ๋ฅผ ๋จ๊ฒจ๋๊ฒ ์ต๋๋ค.
๋ธ๋ก๊ทธ์ ์ ๊ฐ ์ต๋ํ ์ดํดํ ๋ด์ฉ๊น์ง๋ง ์ ๋๊ฑฐ๋ผ
์ถ์ฒ์ ๋ค์ด๊ฐ์๋ฉด ๋ ๋ง์ ๋ด์ฉ์ด ์์ด ๊ณต๋ถํ์๋๋ฐ ๋์๋์ค๊ฒ๋๋ค.
๐ชฝ
ํ๋ฆฐ ๋ด์ฉ์ด ์๋ค๋ฉด ๋๊ธ๋ก ์๋ ค์ฃผ์ธ์
[Java]setAttribute()์ getAttribute()
jsp์ suvlet์ผ๋ก emaillist ์ guestbook์ ๋ง๋ค์์ต๋๋ค. ์ฒ์์ model 1 ๋ฐฉ์์ผ๋ก ๋ง๋ค์๊ณ ๋๋์ด model 2๋ฅผ ์์ํ์ต๋๋ค. ์ฒ์์ผ๋ก controller๋ฅผ ๋ง๋ฌ๋๋ฐ ์์ง์ ์ปจํธ๋กค๋ฌ๊ฐ ์๋ 1 ๋ฐฉ์์ ์ต์ํด์ ์ ์
dynamoj.tistory.com
[Servlet, JSP] RequestDispatcher์ ์์ฒญ ์ฌ์ง์
RequestDispatcher " data-ke-type="html"> HTML ์ฝ์ ๋ฏธ๋ฆฌ๋ณด๊ธฐํ ์ ์๋ ์์ค RequestDispatcher ๊ฐ์ฒด์์ ์ ๊ณตํ๋ ๋ฉ์๋๋ฅผ ์ด์ฉํ์ฌ ์์ฒญ ์ฌ์ง์ ์ ํ ๋๋ ์ฌ์ง์ ํ๋ ์์์ด ๋ฐ๋์ ํ์ฌ ์์๊ณผ ๋์ผํ ์น
blogshine.tistory.com
[JSP] JSTL ์ฌ์ฉ ๋ฐฉ๋ฒ - ์ฃผ์ ํ๊ทธ ๋ฌธ๋ฒ ์ ๋ฆฌ
JSTL์ ์ฌ์ฉํ๋ ค๋ฉด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ํ์ํ๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ค์ด๋ก๋ ๋ฐ ํ๋ก์ ํธ ์ธํ ์ ์ด ํฌ์คํธ๋ฅผ ์ฐธ๊ณ ํ๋ค. ํ๊ทธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ์ธ ์๋ฐ์์ import๋ฌธ์ ์ ์ธํ๋ฏ JSP์์๋ JSTL ํ์ฅ ํ๊ทธ๋ฅผ ์ฌ์ฉ
atoz-develop.tistory.com