[Spring] 3.์๋ธ๋ฆฟ, JSP, MVC ํจํด
1. ํ์ ๊ด๋ฆฌ ์น ์ ํ๋ฆฌ์ผ์ด์ ์๊ตฌ์ฌํญ
[ํ์ ์ ๋ณด]
์ด๋ฆ : username
๋์ด : age
[๊ธฐ๋ฅ ์๊ตฌ์ฌํญ]
ํ์์ ์ฅ
ํ์ ๋ชฉ๋ก ์กฐํ
[ํ์ ๋๋ฉ์ธ ๋ชจ๋ธ]
@Getter @Setter
public class Member {
private Long id;
private String username;
private int age;
public Member() {
}
public Member(String username, int age) {
this.username = username;
this.age = age;
}
}
* id๋ ํ์ repo(์ ์ฅ์)์ ์ ์ฅํ๋ฉด repo๊ฐ ํ ๋น
ํ์ ์ ์ฅ์
/**
* ๋์์ฑ ๋ฌธ์ ๊ฐ ๊ณ ๋ ค๋์ด ์์ง ์์,
* ์ค๋ฌด์์๋ ConcurrentHashMap, AtomicLong ์ฌ์ฉ ๊ณ ๋ ค
*/
public class MemberRepository {
private static Map<Long, Member> store = new HashMap<>(); //static ์ฌ์ฉ
private static long sequence = 0L; //static ์ฌ์ฉ
private static final MemberRepository instance = new MemberRepository();
public static MemberRepository getInstance() {
return instance;
}
private MemberRepository() {
}
public Member save(Member member) {
member.setId(++sequence);
store.put(member.getId(), member);
return member;
}
public Member findById(Long id) {
return store.get(id);
}
public List<Member> findAll() {
return new ArrayList<>(store.values());
}
public void clearStore() {
store.clear();
}
}
* ์ฑ๊ธํค์ผ๋ก ์์ฑ๋๊ธฐ ๋๋ฌธ์ static ์์ด๋ ๋จ
|
ํ์ ์ ์ฅ์๋ ์ฑ๊ธํค ํจํด์ ์ ์ฉํ๋ค.
์คํ๋ง์ ์ฌ์ฉํ๋ฉด ์คํ๋ง ๋น์ผ๋ก ๋ฑ๋กํ๋ฉด ๋์ง๋ง, ์ง๊ธ์ ์ต๋ํ ์คํ๋ง ์์ด ์์ ์๋ธ๋ฆฟ ๋ง์ผ๋ก ๊ตฌํํ๋ ๊ฒ์ด ๋ชฉ์ ์ด๋ค. ์ฑ๊ธํค ํจํด์ ๊ฐ์ฒด๋ฅผ ๋จ ํ๋๋ง ์์ํด์ ๊ณต์ ํด์ผ ํ๋ฏ๋ก ์์ฑ์๋ฅผ private ์ ๊ทผ์๋ก ๋ง์๋๋ค. |
ํ์ ์ ์ฅ์ ํ ์คํธ ์ฝ๋
class MemberRepositoryTest {
MemberRepository memberRepository = MemberRepository.getInstance();
@AfterEach
void afterEach() {
memberRepository.clearStore();
}
@Test
void save() {
//given
Member member = new Member("hello", 20);
//when
Member savedMember = memberRepository.save(member);
//then
Member findMember = memberRepository.findById(savedMember.getId());
assertThat(findMember).isEqualTo(savedMember);
}
@Test
void findAll() {
//given
Member member1 = new Member("member1", 20);
Member member2 = new Member("member2", 30);
memberRepository.save(member1);
memberRepository.save(member2);
//when
List<Member> result = memberRepository.findAll();
//then
assertThat(result.size()).isEqualTo(2);
assertThat(result).contains(member1, member2);
}
}
2. ์๋ธ๋ฆฟ์ผ๋ก ํ์ ๊ด๋ฆฌ ์น ์ดํ๋ฆฌ์ผ์ด์ ๋ง๋ค๊ธฐ
์๋ธ๋ฆฟ์ผ๋ก ํ์ ๋ฑ๋ก HTML form ์ ๊ณต
WebServlet(name = "memberFormServlet", urlPatterns = "/servlet/members/new-form")
public class MemberFormServlet extends HttpServlet {
@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" +
" <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");
}
}
ํ์ ์ ์ฅ
@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");
String username = request.getParameter("username");
int age = Integer.parseInt(request.getParameter("age"));
Member member = new Member(username, age);
System.out.println("member = " + member);
memberRepository.save(member);
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
PrintWriter w = response.getWriter();
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>");
}
}
|
MemberSaveServlet ์ ๋ค์ ์์๋ก ๋์ํ๋ค.
1. ํ๋ผ๋ฏธํฐ๋ฅผ ์กฐํํด์ Member ๊ฐ์ฒด๋ฅผ ๋ง๋ ๋ค. 2. Member ๊ฐ์ฒด๋ฅผ MemberRepository๋ฅผ ํตํด์ ์ ์ฅํ๋ค. 3. Member ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํด์ ๊ฒฐ๊ณผ ํ๋ฉด์ฉ HTML์ ๋์ ์ผ๋ก ๋ง๋ค์ด์ ์๋ตํ๋ค. |
๋ชจ๋ ํ์ ๋ชฉ๋ก ์กฐํ
@WebServlet(name = "memberListServlet", urlPatterns = "/servlet/members")
public class MemberListServlet extends HttpServlet {
private MemberRepository memberRepository = MemberRepository.getInstance();
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
List<Member> members = memberRepository.findAll();
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>");
for (Member member : members) {
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>");
}
}
|
MemberListServlet ์ ๋ค์ ์์๋ก ๋์ํ๋ค.
1. memberRepository.findAll() ์ ํตํด ๋ชจ๋ ํ์์ ์กฐํํ๋ค. 2. ํ์ ๋ชฉ๋ก HTML์ for ๋ฃจํ๋ฅผ ํตํด์ ํ์ ์ ๋งํผ ๋์ ์ผ๋ก ์์ฑํ๊ณ ์๋ตํ๋ค. |
|
ํ
ํ๋ฆฟ ์์ง์ผ๋ก
์ง๊ธ๊น์ง ์๋ธ๋ฆฟ๊ณผ ์๋ฐ ์ฝ๋๋ง์ผ๋ก HTML์ ๋ง๋ค์ด๋ณด์๋ค. ์๋ธ๋ฆฟ ๋๋ถ์ ๋์ ์ผ๋ก ์ํ๋ HTML์ ๋ง์๊ป ๋ง๋ค ์ ์๋ค. ์ ์ ์ธ HTML ๋ฌธ์๋ผ๋ฉด ํ๋ฉด์ด ๊ณ์ ๋ฌ๋ผ์ง๋ ํ์์ ์ ์ฅ ๊ฒฐ๊ณผ๋ผ๋๊ฐ, ํ์ ๋ชฉ๋ก ๊ฐ์ ๋์ ์ธ HTML์ ๋ง๋๋ ์ผ์ ๋ถ๊ฐ๋ฅ ํ ๊ฒ์ด๋ค. ๊ทธ๋ฐ๋ฐ, ์ฝ๋์์ ๋ณด๋ฏ์ด ์ด๊ฒ์ ๋งค์ฐ ๋ณต์กํ๊ณ ๋นํจ์จ ์ ์ด๋ค. ์๋ฐ ์ฝ๋๋ก HTML์ ๋ง๋ค์ด ๋ด๋ ๊ฒ ๋ณด๋ค ์ฐจ๋ผ๋ฆฌ HTML ๋ฌธ์์ ๋์ ์ผ๋ก ๋ณ๊ฒฝํด์ผ ํ๋ ๋ถ๋ถ๋ง ์๋ฐ ์ฝ๋๋ฅผ ๋ฃ์ ์ ์๋ค๋ฉด ๋ ํธ๋ฆฌํ ๊ฒ์ด๋ค. ์ด๊ฒ์ด ๋ฐ๋ก ํ ํ๋ฆฟ ์์ง์ด ๋์จ ์ด์ ์ด๋ค. ํ ํ๋ฆฟ ์์ง์ ์ฌ์ฉํ๋ฉด HTML ๋ฌธ์์์ ํ์ํ ๊ณณ๋ง ์ฝ๋๋ฅผ ์ ์ฉํด์ ๋์ ์ผ๋ก ๋ณ๊ฒฝํ ์ ์๋ค. ํ ํ๋ฆฟ ์์ง์๋ JSP, Thymeleaf, Freemarker, Velocity๋ฑ์ด ์๋ค. ๋ค์ ์๊ฐ์๋ JSP๋ก ๋์ผํ ์์ ์ ์งํํด๋ณด์. |
3. JSP๋ก ํ์ ๊ด๋ฆฌ ์น ์ดํ๋ฆฌ์ผ์ด์ ๋ง๋ค๊ธฐ
๊ธฐ๋ณธ ์ค์ ํ๊ธฐ (๊ต์ฌ ํ์ธ)
ํ์ ๋ฑ๋ก ํผ
<%@ page contentType="text/html;charset=UTF-8" language="java" %> // JSP ๋ฌธ์๋ผ๋ ๋ป
<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
<%@ page import="hello.servlet.domain.member.MemberRepository" %>
<%@ page import="hello.servlet.domain.member.Member" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
// request, response ์ฌ์ฉ ๊ฐ๋ฅ
MemberRepository memberRepository = MemberRepository.getInstance();
System.out.println("save.jsp");
String username = request.getParameter("username");
int age = Integer.parseInt(request.getParameter("age"));
Member member = new Member(username, age);
System.out.println("member = " + member);
memberRepository.save(member);
%>
<html>
<head>
<meta charset="UTF-8">
</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>
* ์๋ฐ ์ฝ๋ ์ฌ์ฉ ๊ฐ๋ฅ
|
<%@ page import="hello.servlet.domain.member.MemberRepository" %>
|
<% ~~ %> : ์๋ฐ ์ฝ๋ ์ ๋ ฅ ๊ฐ๋ฅ
<%= ~~ %> : ์๋ฐ ์ฝ๋ ์ถ๋ ฅ ๊ฐ๋ฅ
|
ํ์ ์ ์ฅ JSP๋ฅผ ๋ณด๋ฉด, ํ์ ์ ์ฅ ์๋ธ๋ฆฟ ์ฝ๋์ ๊ฐ๋ค.
๋ค๋ฅธ ์ ์ด ์๋ค๋ฉด, HTML์ ์ค์ฌ์ผ๋ก ํ๊ณ , ์๋ฐ์ฝ๋๋ฅผ ๋ถ๋ถ๋ถ๋ถ ์ ๋ ฅํด์ฃผ์๋ค. <% ~ %> ๋ฅผ ์ฌ์ฉํด์ HTML ์ค๊ฐ์ ์๋ฐ ์ฝ๋๋ฅผ ์ถ๋ ฅํ๊ณ ์๋ค. |
ํ์ ๋ชฉ๋ก 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๋ฅผ ์ฌ์ฉํด์ ์ค๊ฐ์ <tr><td> HTML ํ๊ทธ๋ฅผ ๋ฐ๋ณตํด์ ์ถ๋ ฅํ๊ณ ์๋ค.
์๋ธ๋ฆฟ๊ณผ JSP์ ํ๊ณ
|
์๋ธ๋ฆฟ์ผ๋ก ๊ฐ๋ฐํ ๋๋ ๋ทฐ(View)ํ๋ฉด์ ์ํ HTML์ ๋ง๋๋ ์์
์ด ์๋ฐ ์ฝ๋์ ์์ฌ์ ์ง์ ๋ถํ๊ณ ๋ณต์กํ๋ค.
JSP๋ฅผ ์ฌ์ฉํ ๋๋ถ์ ๋ทฐ๋ฅผ ์์ฑํ๋ HTML ์์ ์ ๊น๋ํ๊ฒ ๊ฐ์ ธ๊ฐ๊ณ , ์ค๊ฐ์ค๊ฐ ๋์ ์ผ๋ก ๋ณ๊ฒฝ์ด ํ์ํ ๋ถ๋ถ์๋ง ์๋ฐ ์ฝ๋๋ฅผ ์ ์ฉํ๋ค. ๊ทธ๋ฐ๋ฐ ์ด๋ ๊ฒ ํด๋ ํด๊ฒฐ๋์ง ์๋ ๋ช๊ฐ์ง ๊ณ ๋ฏผ์ด ๋จ๋๋ค. ํ์ ์ ์ฅ JSP๋ฅผ ๋ณด์. ์ฝ๋์ ์์ ์ ๋ฐ์ ํ์์ ์ ์ฅํ๊ธฐ ์ํ ๋น์ฆ๋์ค ๋ก์ง์ด๊ณ , ๋๋จธ์ง ํ์ ์ ๋ฐ๋ง ๊ฒฐ๊ณผ๋ฅผ HTML๋ก ๋ณด์ฌ์ฃผ๊ธฐ ์ํ ๋ทฐ ์์ญ์ด๋ค. ํ์ ๋ชฉ๋ก์ ๊ฒฝ์ฐ์๋ ๋ง์ฐฌ๊ฐ์ง๋ค. ์ฝ๋๋ฅผ ์ ๋ณด๋ฉด, JAVA ์ฝ๋, ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ ๋ฆฌํฌ์งํ ๋ฆฌ ๋ฑ๋ฑ ๋ค์ํ ์ฝ๋๊ฐ ๋ชจ๋ JSP์ ๋ ธ์ถ๋์ด ์๋ค. JSP๊ฐ ๋๋ฌด ๋ง์ ์ญํ ์ ํ๋ค. ์ด๋ ๊ฒ ์์ ํ๋ก์ ํธ๋ ๋ฒ์จ ๋จธ๋ฆฌ๊ฐ ์ํ์ค๋๋ฐ, ์๋ฐฑ ์์ฒ์ค์ด ๋์ด๊ฐ๋ JSP๋ฅผ ๋ ์ฌ๋ ค๋ณด๋ฉด ์ ๋ง ์ง์ฅ๊ณผ ๊ฐ์ ๊ฒ์ด๋ค. (์ ์ง๋ณด์ ์ง์ฅ) |
MVC ํจํด์ ๋ฑ์ฅ
๋น์ฆ๋์ค ๋ก์ง์ ์๋ธ๋ฆฟ ์ฒ๋ผ ๋ค๋ฅธ๊ณณ์์ ์ฒ๋ฆฌํ๊ณ , JSP๋ ๋ชฉ์ ์ ๋ง๊ฒ HTML๋ก ํ๋ฉด(View)์ ๊ทธ๋ฆฌ๋ ์ผ์ ์ง์ค
4. MVC ํจํด - ๊ฐ์
๋๋ฌด ๋ง์ ์ญํ
- ํ๋์ ์๋ธ๋ฆฟ/JSP -> ๋น์ฆ๋์ค ๋ก์ง + ๋ทฐ ๋ ๋๋ง
- ์ ์ง๋ณด์ ์ด๋ ค์์ง
๋ณ๊ฒฝ์ ๋ผ์ดํ ์ฌ์ดํด
- ๋ณ๊ฒฝ์ ๋ผ์ดํ ์ฌ์ดํด์ด ๋ค๋ฅธ ๋ถ๋ถ์ ํ๋์ ์ฝ๋๋ก ๊ด๋ฆฌํ๋ ๊ฒ์ ์ ์ง๋ณด์ํ๊ธฐ ์ข์ง ์์
๊ธฐ๋ฅ ํนํ
- JSP (๋ทฐ ํ ํ๋ฆฟ) -> ํ๋ฉด ๋ ๋๋ง ์ต์ ํ (์ฌ๊ธฐ์ ์ง์ค)
MVC (Model View Controller)
- ์๋ธ๋ฆฟ์ด๋ JSP๋ก ์ฒ๋ฆฌํ๋ ๊ฒ์ ์ปจํธ๋กค๋ฌ(Controller)์ ๋ทฐ(View)๋ก ์ญํ ๋๋ ๊ฒ
- ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณดํต MVC ํจํด ์ฌ์ฉ
[๋ชจ๋ธ]
- ๋ทฐ์ ์ถ๋ ฅํ ๋ฐ์ดํฐ๋ฅผ ๋ด๊ณ ์ ๋ฌํด์ฃผ๋ ์ญํ
- ๋น์ฆ๋์ค ๋ก์ง์ด๋ ๋ฐ์ดํฐ์ ์ ๊ทผ ๋ชฐ๋ผ๋ ๋๊ณ ํ๋ฉด ๋ ๋๋ง์ ์ง์ค ๊ฐ๋ฅ
[๋ทฐ]
- ๋ชจ๋ธ์ ๋ด๊ฒจ์๋ ๋ฐ์ดํฐ ์ฌ์ฉํด์ ํ๋ฉด์ ๊ทธ๋ฆฌ๋ ์ผ์ ์ง์ค
- HTML ์์ฑ ๋ถ๋ถ
[์ปจํธ๋กค๋ฌ]
- HTTP ์์ฒญ์ ๋ฐ์ ํ๋ผ๋ฏธํฐ ๊ฒ์ฆ + ๋น์ฆ๋์ค ๋ก์ง ์คํ
- ๋ทฐ์ ์ ๋ฌํ ๊ฒฐ๊ณผ ๋ฐ์ดํฐ๋ฅผ ์กฐํํด์ ๋ชจ๋ธ์ ๋ด์
์ฐธ๊ณ )
์ปจํธ๋กค๋ฌ์ ๋น์ฆ๋์ค ๋ก์ง ๋ ์ ์์ง๋ง, ์ปจํธ๋กค๋ฌ ๋ถ๋ด ๋ง์์ง
๊ทธ๋์ ์ผ๋ฐ์ ์ผ๋ก ๋น์ฆ๋์ค ๋ก์ง์ ์๋น์ค(Service)๊ณ์ธต์์ ์ฒ๋ฆฌ
์ปจํธ๋กค๋ฌ๋ ๋น์ฆ๋์ค ๋ก์ง์ด ์๋ ์๋น์ค๋ฅผ ํธ์ถ
๋น์ฆ๋์ค ๋ก์ง ๋ณ๊ฒฝ -> ์ปจํธ๋กค๋ฌ ์ฝ๋ ๋ณ๊ฒฝํ ์ ์์
MVC ํจํด 1

MVC ํจํด 2

5. 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๋ก ์ด๋ํ ์ ์๋ ๊ธฐ๋ฅ์ด๋ค. ์๋ฒ ๋ด๋ถ์์ ๋ค์ ํธ์ถ์ด ๋ฐ์
* ์ด ๊ฒฝ๋ก์์ 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์ ๋ณด๋ฉด ์ ๋๊ฒฝ๋ก(/๋ก์์) ์๋๋ผ ์๋๊ฒฝ๋ก
- ์ด๋ ๊ฒ ์๋๊ฒฝ๋ก ์ด์ฉํ๋ฉด ํผ ์ ์ก์ ํ์ฌ URL์ด ์ํ ๊ณ์ธต ๊ฒฝ๋ก + save ํธ์ถ
ex)
ํ์ฌ ๊ณ์ธต ๊ฒฝ๋ก : '/servlet-mvc/members/'
๊ฒฐ๊ณผ : '/servlet-mvc/members/save'
ํ์ ์ ์ฅ
ํ์ ์ ์ฅ ์ปจํธ๋กค๋ฌ
@WebServlet(name = "mvcMemberSaveServlet", urlPatterns = "/servlet-mvc/members/save")
public class MvcMemberSaveServlet extends HttpServlet {
private MemberRepository memberRepository = MemberRepository.getInstance();
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String username = request.getParameter("username");
int age = Integer.parseInt(request.getParameter("age"));
Member member = new Member(username, age);
System.out.println("member = " + member);
memberRepository.save(member);
//Model์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ดํ๋ค.
request.setAttribute("member", member);
String viewPath = "/WEB-INF/views/save-result.jsp";
RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath);
dispatcher.forward(request, response);
}
}
ํ์ ์ ์ฅ ๋ทฐ
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<meta charset="UTF-8">
</head>
<body> ์ฑ๊ณต
<ul>
<li>id=${member.id}</li>
<li>username=${member.username}</li>
<li>age=${member.age}</li>
</ul>
<a href="/index.html">๋ฉ์ธ</a>
</body>
</html>
ํ์ ๋ชฉ๋ก ์กฐํ
ํ์ ๋ชฉ๋ก ์กฐํ ์ปจํธ๋กค๋ฌ
@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);
}
}
- request ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํด์ ๋ฆฌ์คํธ๋ฅผ ๋ชจ๋ธ์ ์ ์ฅ
ํ์ ๋ชฉ๋ก ์กฐํ ๋ทฐ
<%@ 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>
- c: forEach = jstl ๋ฌธ๋ฒ
|
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
|
5. MVC ํจํด - ํ๊ณ
|
MVC ํจํด์ ์ ์ฉํ ๋๋ถ์ ์ปจํธ๋กค๋ฌ์ ์ญํ ๊ณผ ๋ทฐ๋ฅผ ๋ ๋๋ง ํ๋ ์ญํ ์ ๋ช
ํํ๊ฒ ๊ตฌ๋ถํ ์ ์๋ค.
ํนํ ๋ทฐ๋ ํ๋ฉด์ ๊ทธ๋ฆฌ๋ ์ญํ ์ ์ถฉ์คํ ๋๋ถ์, ์ฝ๋๊ฐ ๊น๋ํ๊ณ ์ง๊ด์ ์ด๋ค. ๋จ์ํ๊ฒ ๋ชจ๋ธ์์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๊บผ๋ด๊ณ , ํ๋ฉด์ ๋ง๋ค๋ฉด ๋๋ค. ๊ทธ๋ฐ๋ฐ ์ปจํธ๋กค๋ฌ๋ ๋ฑ ๋ด๋ ์ค๋ณต์ด ๋ง๊ณ , ํ์ํ์ง ์๋ ์ฝ๋๋ค๋ ๋ง์ด ๋ณด์ธ๋ค |
MVC ์ปจํธ๋กค๋ฌ์ ๋จ์
1) ํฌ์๋ ์ค๋ณต
- View๋ก ์ด๋ํ๋ ์ฝ๋๊ฐ ํญ์ ์ค๋ณต ํธ์ถ๋์ด์ผ ํ๋ค.
- ๋ฌผ๋ก ์ด ๋ถ๋ถ์ ๋ฉ์๋๋ก ๊ณตํตํํด๋ ๋์ง๋ง, ํด๋น ๋ฉ์๋๋ ํญ์ ์ง์ ํธ์ถํด์ผ ํ๋ค.
RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath);
dispatcher.forward(request, response);
2) ViewPath์ ์ค๋ณต
String viewPath = "/WEB-INF/views/new-form.jsp";
prefix & suffix
-> ๋ง์ฝ jsp์์ thymeleaf ๋ทฐ๋ก ๋ณ๊ฒฝ๋๋ฉด ์ ์ฒด ์ฝ๋ ๋ค ๋ณ๊ฒฝํด์ผํจ
3) ์ฌ์ฉํ์ง ์๋ ์ฝ๋
HttpServletRequest request, HttpServletResponse response
- ํ์ฌ ์์์์ reponse ์ฌ์ฉ๋์ง ์์
4) ๊ณตํต ์ฒ๋ฆฌ๊ฐ ์ด๋ ค์ **
- ๊ธฐ๋ฅ ๋ณต์กํด์ง์๋ก ์ปจํธ๋กค๋ฌ์์ ๊ณตํต์ผ๋ก ์ฒ๋ฆฌํด์ผํ๋ ๋ถ๋ถ ๋์ด๋จ
- ๊ณตํต ๊ธฐ๋ฅ์ ๋ฉ์๋๋ก ๋ฝ์ผ๋ฉด ๋ ๊ฒ ๊ฐ์ง๋ง ๊ฒฐ๊ณผ์ ์ผ๋ก ํญ์ ํด๋น ๋ฉ์๋ ํธ์ถํด์ผํจ
[์ ๋ฆฌ]
๊ณตํต ์ฒ๋ฆฌ ์ด๋ ค์
-> ๊ณตํต ๊ธฐ๋ฅ ์ฒ๋ฆฌ (์๋ฌธ์ฅ ์ญํ )
-> Front Controller (ํ๋ก ํธ ์ปจํธ๋กค๋ฌ) ํจํด์ผ๋ก ํด๊ฒฐ (ํต์ฌ)
'๐จโ๐ป Web Development > Spirng - MVC ํจํด l' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Spring] 6.์คํ๋ง MVC - ๊ธฐ๋ณธ ๊ธฐ๋ฅ (0) | 2023.03.15 |
|---|---|
| [Spring] 5.์คํ๋ง MVC - ๊ตฌ์กฐ ์ดํด (0) | 2023.03.14 |
| [Spring] 4.MVC ํ๋ ์์ํฌ ๋ง๋ค๊ธฐ (0) | 2023.03.13 |
| [Spring] 2.์๋ธ๋ฆฟ (0) | 2023.03.12 |
| [Spring] 1.์น ์ ํ๋ฆฌ์ผ์ด์ ์ดํด (0) | 2023.03.11 |




์ต๊ทผ๋๊ธ