Spring Web MVC - Http request

Hallelujah·2024년 11월 20일

Spring Boot

목록 보기
3/6

구구단 예시 코드
우편번호 찾기 예시 코드

1. HTTP 요청과 Spring MVC

Spring Boot는 HTTP 요청을 처리하기 위해 DispatcherServlet이라는 중앙 컨트롤러를 사용합니다. DispatcherServlet은 클라이언트의 요청을 받아, 적절한 컨트롤러 메서드에 요청을 전달하고 결과를 반환합니다.


2. HTTP 요청 처리 흐름

  1. 클라이언트 요청

    브라우저나 HTTP 클라이언트가 /form_ok.do와 같은 URL로 요청을 보냅니다.

  2. DispatcherServlet 요청 수신

    Spring Boot의 DispatcherServlet이 모든 HTTP 요청을 가로챕니다.

  3. Handler Mapping

    DispatcherServlet은 요청 URL에 해당하는 컨트롤러와 메서드를 찾습니다.

  4. 컨트롤러 메서드 실행

    요청 매핑된 컨트롤러 메서드가 호출되고, HttpServletRequest 등 필요한 매개변수가 주입됩니다.

  5. 응답 처리

    컨트롤러에서 반환한 결과(ModelAndView 또는 View 이름 등)가 클라이언트에 전송됩니다.


sequenceDiagram
    participant Client as 클라이언트
    participant Dispatcher as DispatcherServlet
    participant Handler as Handler Mapping
    participant Controller as 컨트롤러 메서드
    participant View as JSP View

    Client->>Dispatcher: HTTP 요청 (/form_ok.do)
    Dispatcher->>Handler: URL 매핑 확인
    Handler->>Dispatcher: 컨트롤러 메서드 반환
    Dispatcher->>Controller: 메서드 호출 (HttpServletRequest 주입)
    Controller-->>Dispatcher: 응답 데이터 (ModelAndView)
    Dispatcher->>View: JSP View 렌더링
    View-->>Client: HTML 응답 전송


3. 주요 개념

  • DispatcherServlet Spring MVC의 중앙 컨트롤러로, 모든 HTTP 요청을 처리하고 적절한 컨트롤러 메서드로 전달합니다.
  • Handler Mapping 요청 URL과 컨트롤러 메서드를 연결하는 역할을 합니다.
  • 컨트롤러 메서드 요청 데이터를 처리하고, 응답 데이터를 생성하는 비즈니스 로직의 핵심.
  • HttpServletRequest 클라이언트의 요청 정보를 담고 있는 객체로, 파라미터, 헤더, URI 등을 제공.
  • ModelAndView 컨트롤러에서 반환되는 데이터와 View 정보를 함께 전달하는 객체.

4. 예제 코드

요청 처리 컨트롤러

package com.example.web.controller;

import jakarta.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class ConfigController {

    @RequestMapping("/form.do")
    public ModelAndView form() {
        return new ModelAndView("form");
    }

    @RequestMapping("/form_ok.do")
    public ModelAndView form_ok(HttpServletRequest req) {
        String data = req.getParameter("data");
        System.out.println("data = " + data);
        ModelAndView mav = new ModelAndView("form_ok");
        mav.addObject("data", data);
        return mav;
    }
}

JSP 파일: form.jsp

<form action="form_ok.do" method="get">
    <label for="data">Enter Data:</label>
    <input type="text" name="data" id="data" />
    <button type="submit">Submit</button>
</form>

JSP 파일: form_ok.jsp

<% String data = (String) request.getAttribute("data"); %>
<p>Received Data: <%= data %></p>

3) 핵심 학습 포인트

개념설명
@RequestMapping특정 URL에 대한 요청을 처리하는 컨트롤러 메서드를 정의합니다.
HttpServletRequest클라이언트 요청에서 파라미터나 헤더를 읽을 때 사용합니다.
ModelAndView데이터를 JSP와 같은 View에 전달하는 데 사용됩니다.
JSP클라이언트에게 반환할 HTML 페이지를 동적으로 생성하는 View 기술입니다.

4) HttpServletRequest의 주요 메서드 활용

메서드설명예시 코드
getParameter(String name)요청 파라미터 값 가져오기req.getParameter("data")
getHeader(String name)요청 헤더 값 가져오기req.getHeader("User-Agent")
getRequestURI()요청 URI 가져오기req.getRequestURI()
getMethod()요청 메서드(GET, POST 등) 확인req.getMethod()
getSession()세션 객체 가져오기HttpSession session = req.getSession();

5. Spring MVC에서 요청 처리 확장

1) @RequestParam으로 간단한 파라미터 처리

HttpServletRequest 대신 @RequestParam을 사용하여 파라미터를 간단히 처리할 수 있습니다.

@RequestMapping("/form_ok.do")
public ModelAndView form_ok(@RequestParam("data") String data) {
    ModelAndView mav = new ModelAndView("form_ok");
    mav.addObject("data", data);
    return mav;
}

2) JSON 요청 처리

클라이언트가 JSON 데이터를 전송하면 @RequestBody를 활용합니다.

@RequestMapping(value = "/json", method = RequestMethod.POST)
public ResponseEntity<String> handleJson(@RequestBody Map<String, String> jsonData) {
    System.out.println("Received: " + jsonData.get("key"));
    return ResponseEntity.ok("Success");
}
profile
개발자

0개의 댓글