[Spring] MVC 1ํŽธ (5) - โ€‹ ์„œ๋ธ”๋ฆฟ, JSP๋ฅผ ์‚ฌ์šฉํ•œ ํšŒ์› ๊ด€๋ฆฌ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜

2022. 3. 29. 20:26ยทSpring

๐Ÿ“Œ ํšŒ์› ๊ด€๋ฆฌ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์š”๊ตฌ์‚ฌํ•ญ

  • ํšŒ์› ์ •๋ณด : 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
'Spring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [Spring] MVC 1ํŽธ (7) - MVC ํ”„๋ ˆ์ž„์›Œํฌ ๋งŒ๋“ค๊ธฐ v1, v2, v3
  • [Spring] MVC 1ํŽธ (6) - MVC ํŒจํ„ด ์ ์šฉ
  • [Spring] MVC 1ํŽธ (4) - HTTP ์‘๋‹ต ๋ฐ์ดํ„ฐ
  • [Spring] MVC 1ํŽธ (3) - HTTP ์š”์ฒญ ๋ฐ์ดํ„ฐ
Sue
Sue
๊ฐœ๋ฐœ ๊ณต๋ถ€ ๋กœ๊ทธ
  • Sue
    Sue's devlog
    Sue
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (122)
      • Algorithm (2)
      • WEB (8)
      • Java & Kotlin (83)
      • Spring (26)
      • Database (1)
      • Infra (0)
      • Git (1)
      • devlog (1)
  • ์ธ๊ธฐ ๊ธ€

  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
Sue
[Spring] MVC 1ํŽธ (5) - โ€‹ ์„œ๋ธ”๋ฆฟ, JSP๋ฅผ ์‚ฌ์šฉํ•œ ํšŒ์› ๊ด€๋ฆฌ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”