[Spring] MVC 1ํŽธ (3) - HTTP ์š”์ฒญ ๋ฐ์ดํ„ฐ

2022. 3. 29. 08:32ยทSpring

๐Ÿ“Œ HttpServletRequest

โœ… ์—ญํ• 

HTTP ์š”์ฒญ ๋ฉ”์„ธ์ง€
POST /save HTTP/1.1
Host: localhost:8080
Content-Type: application/x-www-form-urlencoded

username=kim&age=20
  • ์„œ๋ธ”๋ฆฟ์€ ๊ฐœ๋ฐœ์ž๊ฐ€ HTTP ์š”์ฒญ ๋ฉ”์„ธ์ง€๋ฅผ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํŒŒ์‹ฑํ•ด์คŒ
  • ๊ทธ ๊ฒฐ๊ณผ๋ฅผ HttpServletRequest ๊ฐ์ฒด์— ๋‹ด์•„์„œ ์ œ๊ณต
  • + ๋ถ€๊ฐ€๊ธฐ๋Šฅ
    • ์ž„์‹œ ์ €์žฅ์†Œ ๊ธฐ๋Šฅ
      • ์ €์žฅ: request.setAttribute(name, value)
      • ์กฐํšŒ: request.getAttribute(name)
    • ์„ธ์…˜ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ
      • request.getSession(create: true)

 

๐Ÿ“Œ HTTP ์š”์ฒญ ๋ฉ”์„ธ์ง€ ์ „๋‹ฌ (ํด๋ผ์ด์–ธํŠธ → ์„œ๋ฒ„)

โœ… GET - ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ

  • /url?username=hello&age=20
  • ๋ฉ”์„ธ์ง€ ๋ฐ”๋”” ์—†์ด, URL์˜ ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ์— ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•ด์„œ ์ „๋‹ฌ
  • e.g. ๊ฒ€์ƒ‰, ํ•„ํ„ฐ, ํŽ˜์ด์ง• ๋“ฑ์—์„œ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹

 

โœ… POST - HTML Form

  • content-type: application/x-www-form-urlencoded
  • ๋ฉ”์„ธ์ง€ ๋ฐ”๋””์— ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ ํ˜•์‹์œผ๋กœ ์ „๋‹ฌ username=hello&age=20
  • e.g. ํšŒ์› ๊ฐ€์ž…, ์ƒํ’ˆ ์ฃผ๋ฌธ

 

โœ… HTTP ๋ฉ”์„ธ์ง€ ๋ฐ”๋””์— ๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘ ๋‹ด์•„์„œ ์š”์ฒญ

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

 

๐Ÿ“Œ ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ ์กฐํšŒ ๋ฉ”์„œ๋“œ

String username = request.getParameter("username"); //๋‹จ์ผ ํŒŒ๋ผ๋ฏธํ„ฐ ์กฐํšŒ
Enumeration<String> parameterNames = request.getParameterNames(); //ํŒŒ๋ผ๋ฏธํ„ฐ ์ด๋ฆ„๋“ค
๋ชจ๋‘ ์กฐํšŒ
Map<String, String[]> parameterMap = request.getParameterMap(); //ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ Map
์œผ๋กœ ์กฐํšŒ
String[] usernames = request.getParameterValues("username"); //๋ณต์ˆ˜ ํŒŒ๋ผ๋ฏธํ„ฐ ์กฐํšŒ
  • GET- ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฐฉ์‹๊ณผ POST - HTML Form์˜ ํŒŒ๋ผ๋ฏธํ„ฐ ํ˜•์‹์ด ๊ฐ™๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ™์€ ์กฐํšŒ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • ํŒŒ๋ผ๋ฏธํ„ฐ ์ด๋ฆ„์€ ํ•˜๋‚˜์ด๊ณ , ์ค‘๋ณต ๊ฐ’์ด ์žˆ์„ ๋•Œ๋Š” getParameter() ๋Œ€์‹  getParameterValues()๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

 

โ€ป์ฐธ๊ณ โ€ป

์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ ํ˜•์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•  ๋•Œ๋Š” HTTP ๋ฉ”์„ธ์ง€ ๋ฐ”๋””๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— content-type์ด ์—†๋Š” ๋ฐ˜๋ฉด, HTML From ํ˜•์‹์œผ๋กœ ์ „๋‹ฌํ•  ๊ฒฝ์šฐ HTTP ๋ฉ”์„ธ์ง€ ๋ฐ”๋””์— ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•ด์„œ ๋ณด๋‚ด๊ธฐ ๋•Œ๋ฌธ์— content-type์„ ์ง€์ •ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. (application/x-www-form-urlencoded)

 

๐Ÿ“Œ API ๋ฉ”์„ธ์ง€ ๋ฐ”๋”” - ๋‹จ์ˆœ ํ…์ŠคํŠธ

  • content-type: text/plain
@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");
 }
  • HTTP ๋ฉ”์„ธ์ง€ ๋ฐ”๋””์˜ ๋ฐ์ดํ„ฐ๋ฅผ InputStream์„ ์‚ฌ์šฉํ•ด์„œ ์ง์ ‘ ์ฝ์„ ์ˆ˜ ์žˆ์Œ
  • inputStream์€ byte ์ฝ”๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— charset์„ ์ง€์ •ํ•ด์ฃผ์–ด์•ผ ํ•จ

 

๐Ÿ“Œ API ๋ฉ”์„ธ์ง€ ๋ฐ”๋”” - JSON

  • content-type: application/json
JSON ํ˜•์‹์œผ๋กœ ํŒŒ์‹ฑํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ์ฒด
@Getter @Setter
public class HelloData {
     private String username;
     private int age;
}

 

 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");
 }
  • JSON ๊ฒฐ๊ณผ๋ฅผ ํŒŒ์‹ฑํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋ฐ” ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Jackson ๊ฐ™์€ JSON ๋ณ€ํ™˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•จ. Spring MVC๋ฅผ ์„ ํƒํ•˜๋ฉด ๊ธฐ๋ณธ์œผ๋กœ Jackson ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ (ObjectMapper)๋ฅผ ์ œ๊ณต

 


๊ฐ•์˜ ๋งํฌ

 

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

์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ๋•Œ ํ•„์š”ํ•œ ๋ชจ๋“  ์›น ๊ธฐ์ˆ ์„ ๊ธฐ์ดˆ๋ถ€ํ„ฐ ์ดํ•ดํ•˜๊ณ , ์™„์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์Šคํ”„๋ง MVC์˜ ํ•ต์‹ฌ ์›๋ฆฌ์™€ ๊ตฌ์กฐ๋ฅผ ์ดํ•ดํ•˜๊ณ , ๋” ๊นŠ์ด์žˆ๋Š” ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž๋กœ ์„ฑ์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค., -

www.inflearn.com

 

์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'Spring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Spring] MVC 1ํŽธ (4) - HTTP ์‘๋‹ต ๋ฐ์ดํ„ฐ  (0) 2022.03.29
[Spring] MVC 1ํŽธ (2) - ์„œ๋ธ”๋ฆฟ  (0) 2022.03.28
[Spring] MVC 1ํŽธ (1) - ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ดํ•ด  (0) 2022.03.28
'Spring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [Spring] MVC 1ํŽธ (5) - โ€‹ ์„œ๋ธ”๋ฆฟ, JSP๋ฅผ ์‚ฌ์šฉํ•œ ํšŒ์› ๊ด€๋ฆฌ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜
  • [Spring] MVC 1ํŽธ (4) - HTTP ์‘๋‹ต ๋ฐ์ดํ„ฐ
  • [Spring] MVC 1ํŽธ (2) - ์„œ๋ธ”๋ฆฟ
  • [Spring] MVC 1ํŽธ (1) - ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ดํ•ด
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ํŽธ (3) - HTTP ์š”์ฒญ ๋ฐ์ดํ„ฐ
์ƒ๋‹จ์œผ๋กœ

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