๐ ํ์ ๊ด๋ฆฌ ์น ์ ํ๋ฆฌ์ผ์ด์ ์๊ตฌ์ฌํญ
- ํ์ ์ ๋ณด : username(์ด๋ฆ), age(๋์ด)
- ๊ธฐ๋ฅ ์๊ตฌ์ฌํญ : ํ์ ์ ์ฅ, ํ์ ์กฐํ
๐ ์๋ธ๋ฆฟ์ผ๋ก ๊ตฌํํ๊ธฐ
โ ํ์ ๋ฑ๋ก ํผ - Servlet
@WebServlet(name = "memberFormServlet", urlPatterns = "/servlet/members/new-form")
public class MemberFormServlet extends HttpServlet {
private MemberRepository memberRepository = MemberRepository.getInstance();
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// ์๋ต์ผ๋ก html ๋ฐ๊ธฐ์ํด ์ค์
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
PrintWriter w = response.getWriter();
// form ์์ฑ์ form action ๊ฒฝ๋ก๋ก ์ด๋
w.write("<!DOCTYPE html>\n" +
"<html>\n" +
"<head>\n" +
" <meta charset=\"UTF-8\">\n" + " <title>Title</title>\n" +
"</head>\n" +
"<body>\n" +
"<form action=\"/servlet/members/save\" method=\"post\">\n" +
" username: <input type=\"text\" name=\"username\" />\n" +
" age: <input type=\"text\" name=\"age\" />\n" +
" <button type=\"submit\">์ ์ก</button>\n" +
"</form>\n" +
"</body>\n" +
"</html>\n");
}
}
- ๊ณ ๊ฐ์๊ฒ ๋ณด์ฌ์ค Form ํ๋ฉด์ ์น ๋ธ๋ผ์ฐ์ ์ ์ ๋ฌํ๋ค.
โ ํ์ ์ ์ฅ - Servlet
@WebServlet(name = "memberSaveServlet", urlPatterns = "/servlet/members/save")
public class MemberSaveServlet extends HttpServlet {
private MemberRepository memberRepository = MemberRepository.getInstance();
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("MemberSaveServlet.service");
// Form์ ํตํด ๋์ด์จ ์ ๋ณด๋ฅผ ๋ณ์์ ์
๋ ฅ
String username = request.getParameter("username");
int age = Integer.parseInt(request.getParameter("age"));
// ์ธ์คํด์ค ์์ฑํด์ ๋ฉค๋ฒ ์ ์ฅ์์ ์ ์ฅ
Member member = new Member(username, age);
memberRepository.save(member);
// ๊ฒฐ๊ณผ๋ฅผ HTML๋ก ๋ฐํ
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
PrintWriter w = response.getWriter();
// ๋์ HTML ์์ฑ
w.write("<html>\n" +
"<head>\n" +
" <meta charset=\"UTF-8\">\n" +
"</head>\n" +
"<body>\n" +
"์ฑ๊ณต\n" +
"<ul>\n" +
" <li>id="+member.getId()+"</li>\n" +
" <li>username="+member.getUsername()+"</li>\n" +
" <li>age="+member.getAge()+"</li>\n" +
"</ul>\n" +
"<a href=\"/index.html\">๋ฉ์ธ</a>\n" +
"</body>\n" +
"</html>");
}
}
- Form์ ํตํด ์ ๋ ฅ๋ ์ ๋ณด๋ฅผ request.getParameter() ๋ฉ์๋๋ฅผ ์ฌ์ฉํด ๊ฐ์ ธ์ Member ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
- ์ด๋ฅผ ์ด์ฉํด์ ๋น์ฆ๋์ค ๋ก์ง์ ์ํํ๊ณ ๋์ ์ผ๋ก HTML์ ์์ฑํด์ ์ ๋ฌํ๋ค.
โ ํ์ ๋ชฉ๋ก - Servlet
@WebServlet(name = "memberListServlet", urlPatterns = "/servlet/members")
public class MemberListServlet extends HttpServlet {
MemberRepository memberRepository = MemberRepository.getInstance();
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
List<Member> memberList = memberRepository.findAll();
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
PrintWriter w = response.getWriter();
w.write("<html>");
w.write("<head>");
w.write(" <meta charset=\"UTF-8\">");
w.write(" <title>Title</title>");
w.write("</head>");
w.write("<body>");
w.write("<a href=\"/index.html\">๋ฉ์ธ</a>");
w.write("<table>");
w.write(" <thead>");
w.write(" <th>id</th>");
w.write(" <th>username</th>");
w.write(" <th>age</th>");
w.write(" </thead>");
w.write(" <tbody>");
// memberRepository์ ์ ์ฅ๋ ๋ชจ๋ ๋ฉค๋ฒ๋ฅผ ๋์ ์ผ๋ก ์ถ๋ ฅ
for (Member member : memberList) {
w.write(" <tr>");
w.write(" <td>" + member.getId() + "</td>");
w.write(" <td>" + member.getUsername() + "</td>");
w.write(" <td>" + member.getAge() + "</td>");
w.write(" </tr>");
}
w.write(" </tbody>");
w.write("</table>"); w.write("</body>");
w.write("</html>");
}
}
- ๋์ ์ผ๋ก HTML์ ์์ฑํ ๋ for๋ฌธ์ ์ฌ์ฉํ ์ ์๋ค.
โ ํ ํ๋ฆฟ ์์ง
- ์๋ธ๋ฆฟ์ ์ด์ฉํด์ ๋์ ์ผ๋ก HTML์ ์์ฑํ ์ ์๋ค.
- ํ์ง๋ง ์๋ฐ ์ฝ๋์์ HTML ์ฝ๋๋ฅผ ํ์คํ์ค ์ ๋ ๊ฒ์ ๋ฒ๊ฑฐ๋กญ๊ณ ๋๋ฒ๊น ์ด ๊ต์ฅํ ํ๋ค๋ค.
- ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ํ ํ๋ฆฟ ์์ง์ ์ฌ์ฉํ ์ ์๋ค! e.g. JSP, Thymeleaf, Freemarker, Velocity
- ํ ํ๋ฆฟ ์์ง์ ์ฌ์ฉํ๋ฉด HTML ์ฝ๋์์ ํ์ํ ๊ณณ๋ง ์ฝ๋๋ฅผ ์ ์ฉํด์ ๋์ ์ผ๋ก ๋ณ๊ฒฝํ ์ ์๋ค.
๐ JSP๋ก ๊ตฌํํ๊ธฐ
main/webapp ํด๋ ๋ฐ์ ์๋ ํ์ผ์ ๊ธฐ๋ณธ์ ์ผ๋ก ํธ์ถ๋๋ค.
โ JSP ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ถ๊ฐ
//JSP ์ถ๊ฐ ์์
implementation 'org.apache.tomcat.embed:tomcat-embed-jasper'
implementation 'javax.servlet:jstl'
//JSP ์ถ๊ฐ ๋
- JSP๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ์ ์ฝ๋๋ฅผ build.gradle์ ์ถ๊ฐํด์ฃผ์ด์ผ ํ๋ค.
โ ํ์ ๋ฑ๋ก ํผ - JSP
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="/jsp/members/save.jsp" method="post">
username: <input type="text" name="username" />
age: <input type="text" name="age" />
<button type="submit">์ ์ก</button>
</form>
</body>
</html>
- ์ฒซ์ค์ JSP ๋ฌธ์์์ ๋ํ๋ธ๋ค.
- HTML๋ง ์ ๋ฌํ๋ ํ์ ๋ฑ๋ก ํผ์๋ ์๋ฐ ์ฝ๋๊ฐ ๋ค์ด๊ฐ์ง ์๊ณ HTML ์ฝ๋์ ๊ฑฐ์ ๊ฐ๋ค.
โ ํ์ ์ ์ฅ - JSP
<%@ page import="hello.servlet.domain.member.Member" %>
<%@ page import="hello.servlet.domain.member.MemberRepository" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
MemberRepository memberRepository = MemberRepository.getInstance();
// ๋์ด์จ ์ ๋ณด ๋ณ์์ ์
๋ ฅ
String username = request.getParameter("username");
int age = Integer.parseInt(request.getParameter("age"));
// ์ธ์คํด์ค ์์ฑํด์ ๋ฉค๋ฒ ์ ์ฅ์์ ์ ์ฅ
Member member = new Member(username, age);
memberRepository.save(member);
%>
<html>
<head>
<title>Title</title>
</head>
<body>
์ฑ๊ณต
<ul>
<li>id=<%=member.getId()%> </li>
<li>username=<%=member.getUsername()%> </li>
<li>age=<%=member.getAge()%> </li>
</ul>
<a href="/index.html">๋ฉ์ธ</a>
</body>
</html>
- JSP ์์ ์๋ฐ ์ฝ๋๋ <%~~%> ์์ ์ ์ด์ค๋ค.
- ์๋ฐ ์ฝ๋๋ฅผ ์ถ๋ ฅํ๋ ค๋ฉด <%=~~%> ์์ ์ ์ด์ค๋ค.
- ์๋ธ๋ฆฟ๊ณผ ๊ฐ์ด request์ response๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
โ ํ์ ๋ชฉ๋ก - JSP
<%@ page import="java.util.List" %>
<%@ page import="hello.servlet.domain.member.MemberRepository" %>
<%@ page import="hello.servlet.domain.member.Member" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
MemberRepository memberRepository = MemberRepository.getInstance();
List<Member> members = memberRepository.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 (Member member : members) {
out.write(" <tr>");
out.write(" <td>" + member.getId() + "</td>");
out.write(" <td>" + member.getUsername() + "</td>");
out.write(" <td>" + member.getAge() + "</td>");
out.write(" </tr>");
}
%>
</tbody>
</table>
</body>
</html>
- ๋น์ฆ๋์ค ์ฝ๋๋ฅผ ์คํํ๊ณ , ๊ฒฐ๊ณผ List๋ฅผ ์ฌ์ฉํด์ for๋ฌธ์ ์ด์ฉํด ๋์ ์ผ๋ก HTML์ ์ถ๋ ฅํ๋ค.
๐ ์๋ธ๋ฆฟ, JSP์ ํ๊ณ
- ์๋ธ๋ฆฟ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋ทฐ ํ๋ฉด์ ์ํ HTML ์ฝ๋์ ์๋ฐ ์ฝ๋๊ฐ ์์ฌ์์ด ์ง์ ๋ถํ๊ณ ๋ณต์กํ๋ค.
- JSP๋ฅผ ์ฌ์ฉํ๋ฉด ๋ทฐ๋ฅผ ์์ฑํ๋ HTML ์ฝ๋๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉํ๋ฉด์ ์ค๊ฐ์ค๊ฐ ๋์ ์ผ๋ก ๋ณ๊ฒฝ์ด ํ์ํ ๋ถ๋ถ์๋ง ์๋ฐ ์ฝ๋๋ฅผ ์ ์ฉํ๋ค.
- ํ์ง๋ง ๋๊ฐ์ง ๋ฐฉ๋ฒ ๋ชจ๋ ๋ทฐ์ ๋น์ฆ๋์ค ๋ก์ง์ ํ ํ์ผ ์์์ ๊ตฌํํ๊ธฐ ๋๋ฌธ์ ๊ฐ๊ฐ ๋๋ฌด ๋ง์ ์ญํ ์ ํ๋ค. (์ ์ง๋ณด์ ์ด๋ ค์)
- ๋ํ ๋๋ถ๋ถ ๋ทฐ ๋ถ๋ถ๊ณผ ๋น์ฆ๋์ค ๋ก์ง์ ๋ณ๊ฒฝ์ ๋์์ ๋ฐ์ํ์ง ์๋๋ค. ๋ณ๊ฒฝ์ ๋ผ์ดํ ์ฌ์ดํด์ด ๋ค๋ฅธ ๋ถ๋ถ์ ํ๋์ ์ฝ๋์์ ๊ด๋ฆฌํ๋ ๊ฒ์ ์ ์ง๋ณด์ํ๊ธฐ ์ข์ง ์๋ค.
→ MVC ํจํด ๋ฑ์ฅ!
๊ฐ์ ๋งํฌ
์คํ๋ง MVC 1ํธ - ๋ฐฑ์๋ ์น ๊ฐ๋ฐ ํต์ฌ ๊ธฐ์ - ์ธํ๋ฐ | ๊ฐ์
์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ๋ ํ์ํ ๋ชจ๋ ์น ๊ธฐ์ ์ ๊ธฐ์ด๋ถํฐ ์ดํดํ๊ณ , ์์ฑํ ์ ์์ต๋๋ค. ์คํ๋ง MVC์ ํต์ฌ ์๋ฆฌ์ ๊ตฌ์กฐ๋ฅผ ์ดํดํ๊ณ , ๋ ๊น์ด์๋ ๋ฐฑ์๋ ๊ฐ๋ฐ์๋ก ์ฑ์ฅํ ์ ์์ต๋๋ค., -
www.inflearn.com
'Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring] MVC 1ํธ (6) - MVC ํจํด ์ ์ฉ (0) | 2022.03.29 |
---|---|
[Spring] MVC 1ํธ (4) - HTTP ์๋ต ๋ฐ์ดํฐ (0) | 2022.03.29 |
[Spring] MVC 1ํธ (3) - HTTP ์์ฒญ ๋ฐ์ดํฐ (0) | 2022.03.29 |