Spring MVC-1 TIL (3)

YulHee Kimยท2021๋…„ 9์›” 6์ผ
0

Spring MVC

๋ชฉ๋ก ๋ณด๊ธฐ
3/11

[์ฐธ๊ณ  ๊ฐ•์˜] ๊น€์˜ํ•œ๋‹˜์˜ ์Šคํ”„๋ง MVC 1ํŽธ - ๋ฐฑ์—”๋“œ ์›น ๊ฐœ๋ฐœ ํ•ต์‹ฌ ๊ธฐ์ˆ 

๐Ÿ’ก ์„œ๋ธ”๋ฆฟ - HTTP ์š”์ฒญ ๋ฐ์ดํ„ฐ

โœ๏ธ API ๋ฉ”์‹œ์ง€ ๋ฐ”๋”” - ๋‹จ์ˆœ ํ…์ŠคํŠธ

HTTP message body์— ๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘ ๋‹ด์•„์„œ ์š”์ฒญ

  • HTTP API์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉ, JSON, XML, TEXT
  • ๋ฐ์ดํ„ฐ ํ˜•์‹์€ ์ฃผ๋กœ JSON์‚ฌ์šฉ
  • POST, PUT, PATCH

๋จผ์ € ๊ฐ€์žฅ ๋‹จ์ˆœํ•œ ํ…์ŠคํŠธ ๋ฉ”์‹œ์ง€๋ฅผ HTTP ๋ฉ”์‹œ์ง€ ๋ฐ”๋””์— ๋‹ด์•„์„œ ์ „์†กํ•˜๊ณ , ์ฝ์–ด๋ณด์ž.
HTTP ๋ฉ”์‹œ์ง€ ๋ฐ”๋””์˜ ๋ฐ์ดํ„ฐ๋ฅผ inputStream์„ ์‚ฌ์šฉํ•ด์„œ ์ง์ ‘ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค.

@WebServlet(name = "requestBodyStringServlet", urlPatterns = "/request-body-string")
public class RequestBodyStringServlet extends HttpServlet {

      @Override
      protected void service(HttpServletRequest request, HttpServletResponse response)
              throws ServletException, IOException {
              
          ServletInputStream inputStream = request.getInputStream();
          String messageBody = StreamUtils.copyToString(inputStream,
  StandardCharsets.UTF_8);
  
          System.out.println("messageBody = " + messageBody);
          
          response.getWriter().write("ok");
      }
}

๋ฌธ์ž ์ „์†ก

  • POST http://localhost:8080/request-body-string
  • content-type: text/plain
  • message body: hello
  • ๊ฒฐ๊ณผ: messageBody = hello

โœ๏ธ API ๋ฉ”์‹œ์ง€ ๋ฐ”๋”” - JSON

HTTP API์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋Š” JSON ํ˜•์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•ด๋ณด์ž.

  • POST http://localhost:8080/request-body-json
  • content-type: application/json
  • message body: {"username": "hello", "age": 20}
  • ๊ฒฐ๊ณผ: messageBody = {"username": "hello", "age": 20}

๊ฐ์ฒด ์ƒ์„ฑ

@Getter @Setter
public class HelloData {

      private String username;
      private int age;
      
}
@WebServlet(name = "requestBodyJsonServlet", urlPatterns = "/request-body-json")
public class RequestBodyJsonServlet extends HttpServlet {

        private ObjectMapper objectMapper = new ObjectMapper();
        
        @Override
        protected void service(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
                
            ServletInputStream inputStream = request.getInputStream();
            
            String messageBody = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);
    
            System.out.println("messageBody = " + messageBody);
            HelloData helloData = objectMapper.readValue(messageBody, HelloData.class);
            
            System.out.println("helloData.username = " + helloData.getUsername());
            System.out.println("helloData.age = " + helloData.getAge());
            
            response.getWriter().write("ok");
        }
}

์ถœ๋ ฅ ๊ฒฐ๊ณผ

    messageBody={"username": "hello", "age": 20}
    data.username=hello
    data.age=20

โœ๏ธ HttpServletResponse - ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•

HTTP ์‘๋‹ต ๋ฉ”์‹œ์ง€ ์ƒ์„ฑ

  • HTTP ์‘๋‹ต์ฝ”๋“œ ์ง€์ •
  • ํ—ค๋” ์ƒ์„ฑ
  • ๋ฐ”๋”” ์ƒ์„ฑ
@WebServlet(name = "responseHeaderServlet", urlPatterns = "/response-header")
public class ResponseHeaderServlet extends HttpServlet {

       @Override
       protected void service(HttpServletRequest request, HttpServletResponse response)
              throws ServletException, IOException {
              
          //[status-line]
          response.setStatus(HttpServletResponse.SC_OK); //200
          
          //[response-headers]
          response.setHeader("Content-Type", "text/plain;charset=utf-8");
          response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
          response.setHeader("Pragma", "no-cache");
          response.setHeader("my-header","hello");
          
	  //[Header ํŽธ์˜ ๋ฉ”์„œ๋“œ] 
	  content(response); 
      	  cookie(response); 
          redirect(response);
          
          //[message body]
          PrintWriter writer = response.getWriter();
          writer.println("ok");
      }
}

Content ํŽธ์˜ ๋ฉ”์„œ๋“œ

private void content(HttpServletResponse response) {
    //Content-Type: text/plain;charset=utf-8
    //Content-Length: 2
    //response.setHeader("Content-Type", "text/plain;charset=utf-8");
    response.setContentType("text/plain"); 
    response.setCharacterEncoding("utf-8");

}

์ฟ ํ‚ค ํŽธ์˜ ๋ฉ”์„œ๋“œ

 private void cookie(HttpServletResponse response) {
 
//Set-Cookie: myCookie=good; Max-Age=600; 
//response.setHeader("Set-Cookie", "myCookie=good; Max-Age=600"); 
      Cookie cookie = new Cookie("myCookie", "good"); 
      cookie.setMaxAge(600); //600์ดˆ
      
      response.addCookie(cookie);
  }

redirect ํŽธ์˜ ๋ฉ”์„œ๋“œ

private void redirect(HttpServletResponse response) throws IOException {
      //Status Code 302
      //Location: /basic/hello-form.html
      
      //response.setStatus(HttpServletResponse.SC_FOUND); //302
      //response.setHeader("Location", "/basic/hello-form.html");
      response.sendRedirect("/basic/hello-form.html");
}

โœ๏ธ HTTP ์‘๋‹ต ๋ฐ์ดํ„ฐ - ๋‹จ์ˆœ ํ…์ŠคํŠธ, HTML

HttpServletResponse - HTML ์‘๋‹ต

Content-type์„ text/html๋กœ ์ง€์ •ํ•ด์•ผํ•จ

@WebServlet(name = "responseHtmlServlet", urlPatterns = "/response-html")
public class ResponseHtmlServlet extends HttpServlet {

      @Override
      protected void service(HttpServletRequest request, HttpServletResponse
  response)
              throws ServletException, IOException {
              
          //Content-Type: text/html;charset=utf-8
          response.setContentType("text/html");
          response.setCharacterEncoding("utf-8");
	  PrintWriter writer = response.getWriter(); 
          writer.println("<html>"); 
          writer.println("<body>");
	  writer.println(" <div>์•ˆ๋…•?</div>"); 
          writer.println("</body>"); 
          writer.println("</html>");
     } 
}

API JSON ์‘๋‹ต ๋ฐ์ดํ„ฐ

content-type์„ application/json์œผ๋กœ ์ง€์ •ํ•ด์•ผ ํ•œ๋‹ค.
Jackson ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ œ๊ณตํ•˜๋Š” objectMapper.writeValueAsString()๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ์ฒด๋ฅผ JSON ๋ฌธ์ž๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.

@WebServlet(name = "responseJsonServlet", urlPatterns = "/response-json")
public class ResponseJsonServlet extends HttpServlet {

      private ObjectMapper objectMapper = new ObjectMapper();
      
      @Override
      protected void service(HttpServletRequest request, HttpServletResponse response)
              throws ServletException, IOException {
              
          //Content-Type: application/json
          response.setHeader("content-type", "application/json");
          response.setCharacterEncoding("utf-8");
          HelloData data = new HelloData();
          data.setUsername("kim");
          data.setAge(20);
            //{"username":"kim","age":20}
          String result = objectMapper.writeValueAsString(data);
          response.getWriter().write(result);
      } 
}

์ง„์งœ ๊ฐ•์˜ ๊ณง ํญ์ฃผํ•ด์„œ ๋“ค์–ด์•ผ๊ฒ ๋‹น..!!!!

profile
๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž

0๊ฐœ์˜ ๋Œ“๊ธ€