Spring Boot는 HTTP 요청을 처리하기 위해 DispatcherServlet이라는 중앙 컨트롤러를 사용합니다. DispatcherServlet은 클라이언트의 요청을 받아, 적절한 컨트롤러 메서드에 요청을 전달하고 결과를 반환합니다.
클라이언트 요청
브라우저나 HTTP 클라이언트가 /form_ok.do와 같은 URL로 요청을 보냅니다.
DispatcherServlet 요청 수신
Spring Boot의 DispatcherServlet이 모든 HTTP 요청을 가로챕니다.
Handler Mapping
DispatcherServlet은 요청 URL에 해당하는 컨트롤러와 메서드를 찾습니다.
컨트롤러 메서드 실행
요청 매핑된 컨트롤러 메서드가 호출되고, HttpServletRequest 등 필요한 매개변수가 주입됩니다.
응답 처리
컨트롤러에서 반환한 결과(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 응답 전송
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;
}
}
<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>
<% String data = (String) request.getAttribute("data"); %>
<p>Received Data: <%= data %></p>
| 개념 | 설명 |
|---|---|
@RequestMapping | 특정 URL에 대한 요청을 처리하는 컨트롤러 메서드를 정의합니다. |
HttpServletRequest | 클라이언트 요청에서 파라미터나 헤더를 읽을 때 사용합니다. |
ModelAndView | 데이터를 JSP와 같은 View에 전달하는 데 사용됩니다. |
| JSP | 클라이언트에게 반환할 HTML 페이지를 동적으로 생성하는 View 기술입니다. |
| 메서드 | 설명 | 예시 코드 |
|---|---|---|
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(); |
@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;
}
클라이언트가 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");
}