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 이름 등)가 클라이언트에 전송됩니다.
3. 주요 개념
- DispatcherServlet
- Spring MVC의 중앙 컨트롤러로, 모든 HTTP 요청을 처리하고 적절한 컨트롤러 메서드로 전달합니다.
- Handler Mapping
- 요청 URL과 컨트롤러 메서드를 연결하는 역할을 합니다.
- 컨트롤러 메서드
- 요청 데이터를 처리하고, 응답 데이터를 생성하는 비즈니스 로직의 핵심.
- HttpServletRequest
- 클라이언트의 요청 정보를 담고 있는 객체로, 파라미터, 헤더, URI 등을 제공.
- ModelAndView
- 컨트롤러에서 반환되는 데이터와 View 정보를 함께 전달하는 객체.
4. 예제 코드
요청 처리 컨트롤러
package com.example.mvc.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")
public ModelAndView form() {
return new ModelAndView("form");
}
@RequestMapping("/form_ok")
public ModelAndView form_ok(HttpServletRequest request) {
String data = request.getParameter("data");
System.out.println("data = " + data);
ModelAndView mav = new ModelAndView("form_ok");
mav.addObject("data", data);
return mav;
}
}
- @RequestMapping(”/form”) :
- /form URL로 요청이 들어오면 form() 메서드 호출 → form 뷰 반환
- @RequestMapping(”/form_ok”) :
- /form_ok URL로 요청이 들어오면 form_ok() 메서드 호출(요청 파라미터에서 data 값을 가져와서 출력하고, 이를 form_ok 뷰로 전달
- ModelAndView :
- ModelAndView 객체는 뷰 이름과 모델 데이터를 함께 전달할 수 있게 한다.
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")
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");
}
'Spring' 카테고리의 다른 글
JSP로 페이징 구현하기 (0) | 2024.12.20 |
---|---|
MVC 패턴이란? (2) | 2024.12.19 |
Spring Boot Web 프로젝트에서 JSP 적용하기 (0) | 2024.12.19 |
Spring Web - Controller와 RestController (0) | 2024.12.18 |
Spring Boot - Spring Web (0) | 2024.12.18 |