์๋ธ๋ฆฟ์์ ํ ํ๋ฆฟ ์์ง์ผ๋ก
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
PrintWriter w = response.getWriter();
w.write("<!DOCTYPE html>\n" +
"<html>\n" +
"<head>\n" +
"</head>\n" +
"<body>\n" +
"</body>\n" +
"</html>\n");
}
์๋ธ๋ฆฟ๊ณผ ์๋ฐ ์ฝ๋๋ง์ผ๋ก ์์ ์ฝ๋์ฒ๋ผ HTML์ ๋ง๋ค ์ ์๋ค. ํ์ง๋ง ์ด๊ฒ์ ๋งค์ฐ ๋ณต์กํ๊ณ ๋นํจ์จ์ ์ด๋ค. ์๋ฐ ์ฝ๋๋ก HTML์ ๋ง๋ค์ด ๋ด๋ ๊ฒ ๋ณด๋ค ์ฐจ๋ผ๋ฆฌ HTML ๋ฌธ์์ ๋์ ์ผ๋ก ๋ณ๊ฒฝํด์ผ ํ๋ ๋ถ๋ถ๋ง ์๋ฐ ์ฝ๋๋ฅผ ๋ฃ์ ์ ์๋ค๋ฉด ๋ ํธ๋ฆฌํ ๊ฒ์ด๋ค. ์ด๊ฒ์ด ๋ฐ๋ก ํ ํ๋ฆฟ ์์ง์ด ๋์จ ์ด์ ์ด๋ค. ํ ํ๋ฆฟ ์์ง์ ์ฌ์ฉํ๋ฉด HTML ๋ฌธ์์์ ํ์ํ ๊ณณ๋ง ์ฝ๋๋ฅผ ์ ์ฉํด์ ๋์ ์ผ๋ก ๋ณ๊ฒฝํ ์ ์๋ค. (JSP, Thymeleaf, Freemarker, Velocity)
ํ ํ๋ฆฟ ์์ง - JSP
<%@ page import="java.util.List" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
Repository repository = repository.getInstance();
List<User> users = repository.findAll();
%>
<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>
<%
for (User user : users) {
out.write(" <tr>");
out.write(" <td>" + user.getId() + "</td>");
out.write(" <td>" + user.getUsername() + "</td>");
out.write(" <td>" + user.getAge() + "</td>");
out.write(" </tr>");
}
%>
</tbody>
</table>
</body>
</html>
JSP๋ฅผ ์ฌ์ฉํ ๋๋ถ์ ๋ทฐ๋ฅผ ์์ฑํ๋ HTML ์์ ์ ๊น๋ํ๊ฒ ๊ฐ์ ธ๊ฐ๊ณ , ์ค๊ฐ์ค๊ฐ ๋์ ์ผ๋ก ๋ณ๊ฒฝ์ด ํ์ํ ๋ถ๋ถ์๋ง ์๋ฐ ์ฝ๋๋ฅผ ์ ์ฉํ๋ค. ๊ทธ๋ฐ๋ฐ ์ด๋ ๊ฒ ํด๋ ํด๊ฒฐ๋์ง ์๋ ๋ช๊ฐ์ง ๊ณ ๋ฏผ์ด ๋จ๋๋ค. ์ฝ๋๋ฅผ ์ ๋ณด๋ฉด, JAVA ์ฝ๋, ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ ๋ฆฌํฌ์งํ ๋ฆฌ ๋ฑ๋ฑ ๋ค์ํ ์ฝ๋๊ฐ ๋ชจ๋ JSP์ ๋ ธ์ถ๋์ด ์๋ค. JSP๊ฐ ๋๋ฌด ๋ง์ ์ญํ ์ ํ๋ค.
MVC ํจํด์ ํ์์ฑ
- ๋๋ฌด ๋ง์ ์ญํ
- ํ๋์ ์๋ธ๋ฆฟ์ด๋ JSP์์ ๋น์ฆ๋์ค ๋ก์ง๊ณผ ๋ทฐ ๋ ๋๋ง๊น์ง ๋ชจ๋ ์ฒ๋ฆฌํ๊ฒ ๋๋ฉด ๋๋ฌด ๋ง์ ์ญํ ์ ํ๊ฒ ๋๋ค.
- ๋ณ๊ฒฝ์ ๋ผ์ดํ ์ฌ์ดํด
- UI๋ฅผ ์ผ๋ถ ์์ ํ๋ ์ผ๊ณผ ๋น์ฆ๋์ค ๋ก์ง์ ์์ ํ๋ ์ผ์ ๊ฐ๊ฐ ๋ค๋ฅด๊ฒ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ๋๊ณ ๋๋ถ๋ถ ์๋ก์๊ฒ ์ํฅ์ ์ฃผ์ง ์๋ ์ผ์ด๋ค. ๋ณ๊ฒฝ์ ๋ผ์ดํ ์ฌ์ดํด์ด ๋ค๋ฅธ ๋ถ๋ถ์ ํ๋์ ์ฝ๋๋ก ๊ด๋ฆฌํ๋ ๊ฑด ์ ์ง๋ณด์ํ๊ธฐ ์ข์ง ์๋ค.
- ๊ธฐ๋ฅ ํนํ
- JSP ๊ฐ์ ๋ทฐ ํ ํ๋ฆฟ์ ํ๋ฉด ๋ ๋๋ง์ ์ต์ ํ ๋์ด ์๊ธฐ ๋๋ฌธ์ ํด๋น ์ ๋ฌด๋ง ๋ด๋นํ๋๊ฒ ํจ๊ณผ์ ์ด๋ค.
Model View Controller
controller
: HTTP ์์ฒญ์ ๋ฐ์์ ํ๋ผ๋ฏธํฐ๋ฅผ ๊ฒ์ฆํ๊ณ ๋น์ฆ๋์ค ๋ก์ง์ ์คํํ๋ค. ๋ทฐ์ ์ ๋ฌํ ๊ฒฐ๊ณผ๋ฅผ ์กฐํํด์ ๋ชจ๋ธ์ ๋ด๋๋คModel
: ๋ทฐ์ ์ถ๋ ฅํ ๋ฐ์ดํฐ๋ฅผ ๋ด์๋๋ค. ๋ทฐ๊ฐ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ธ์ ํตํด ์ ๋ฌํด์ฃผ๊ธฐ ๋๋ฌธ์ ๋ทฐ๋ ๋น์ฆ๋์ค ๋ก์ง์ด๋ ๋ฐ์ดํฐ ์ ๊ทผ์ ๋ชฐ๋ผ๋ ๋๊ณ ํ๋ฉด ๋ ๋๋ง์๋ง ์ง์คํ ์ ์๋คview
: ๋ชจ๋ธ์ ๋ด๊ฒจ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํด์ ํ๋ฉด์ ๊ทธ๋ฆฌ๋ ์ผ์๋ง ์ง์คํ๋ค.
์คํ๋ง ์์ด ๊ตฌํํ MVC ํจํด์ ํ๊ณ
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
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); // JSP ํ์ผ๋ก forward
}
- forward ์ค๋ณต : ๋งค๋ฒ ๋ชจ๋ controller๋ง๋ค JSP ํ์ผ๋ก forwardํ๋ ์ฝ๋๊ฐ ์ค๋ณต ํธ์ถ๋๋ค.
- viewpath ์ค๋ณต
prefix: /WEB-INF/views/
suffix: .jsp
- HttpServletRequest request, HttpServletResponse response ์ฌ์ฉ : ๋ค์ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ ๋๋ ์๊ณ , ํ์ง ์์ ๋๋ ์์ง๋ง servlet๋ฅผ ์ด์ฉํ๋ฉด ํญ์ ์ฌ์ฉํด์ผ ํ๋ค.
์ ๋ฆฌ
controller๋ง๋ค ์ค๋ณต๋๋ ์ฝ๋๊ฐ ๋ฐ์ํ๋ค. ๋๋ถ๋ถ์ ๋น์ทํ ํจํด์ผ๋ก ๊ฐ๋ฐํ๊ธฐ ๋๋ฌธ์ ๊ณตํต ์ฒ๋ฆฌ๋ฅผ ํตํด ๊ธฐ๋ฅ์ ๋ฌถ์ ์ ์์ ๊ฒ ๊ฐ๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด controller ํธ์ถ์ ์ ๊ณตํต ๊ธฐ๋ฅ์ ์ฒ๋ฆฌํด์ฃผ๋ FrontController ํจํด์ ๋์ ํด ์ ๋จ์์ ๊ณตํต์ฒ๋ฆฌ๋ฅผ ์ํํ๊ฒ ํ๋ฉด ๋๋ค. ์คํ๋ง MVC์ ํต์ฌ๋ ํ๋ก ํธ ์ปจํธ๋กค๋ฌ์ด๋ค.