Spring Boot MVC 구현
파일 구조
Controller
@Controller
public class CTRL {
@RequestMapping("/") // 루트 요청
public @ResponseBody String root() { // @ResponseBody로 인해 ViewResolver를 사용하지 않음
return "루트 요청";
}
root() 메서드는 루트 URL("/")로 들어오는 요청을 처리하며 @ResponseBody 어노테이션을 사용하여 응답 데이터가 ViewResolver를 통해 렌더링되지 않고 직접 응답으로 반환됩니다. 즉, "루트 요청"문자열이 HTTP 응답 본문으로 직접 반환됩니다.
@RequestMapping("/test")
public String test(VO vo, Model model) { // 커맨드 객체
System.out.println("vo : " + vo);
model.addAttribute("apple", vo.getId());
return "test"; // WEB-INF/views/test.jsp
}
test() 메서드는 VO 커맨드 객체의 필드에 요청 파라미터를 자동으로 바인딩합니다. 그 후 뷰로 데이터를 전달하기 위해 model.addAttritute를 사용하여 apple에 vo.getId() 값을 추가합니다.
@RequestMapping("/test")
public String test(@ModelAttribute("banana")VO vo) {
System.out.println("vo : " + vo);
return "test";
}
test() 메서드는 VO 커맨드 객체의 필드에 요청 파라미터를 자동으로 바인딩합니다. 또한 banana라는 이름을 가진 ModelAttribute로 뷰에 전달됩니다.
활용
@RequestMapping("/test01")
public String test01(HttpServletRequest request, Model model) {
VO vo = new VO();
vo.setId(request.getParameter("id"));
System.out.println("vo : " + vo);
model.addAttribute("apple", vo.getId());
model.addAttribute("apple", request.getParameter("id"));
System.out.println("request.getParameter(id) : " + request.getParameter("id"));
return "test";
}
이 방식은 Spring의 기능을 활용하지 않고 HttpServletRequest를 사용하여 요청 파라미터의 값을 가져오기 때문에 활용도가 낮습니다.
@RequestMapping("/test02")
public String test02(@RequestParam("id")String id, @RequestParam("name")String name, Model model) {
model.addAttribute("apple", id);
model.addAttribute("banana", name);
System.out.println("id : " + id + ", name : " + name);
return "test";
}
이 방식은 간단하고 가독성이 좋지만, 커맨드 객체를 사용하는 방식보다는 요청 파라미터의 개수가 적을 때 적합합니다. 요청 파라미터가 많거나 단일 객체로 묶여야 하는 경우에는 커맨드 객체를 사용하는 것이 더 나은 선택입니다.
@RequestMapping("/test03/{id}/{name}")
public String test03(@PathVariable String id, @PathVariable String name, Model model) {
model.addAttribute("apple", id);
model.addAttribute("banana", name);
System.out.println("id : " + id + ", name : " + name);
return "test";
}
이 방식은 URL 경로에서 데이터를 직접 추출하여 처리하므로 간단하고 명시적입니다. 특히 REST API 방식에서 주로 채용하는 방식으로 요청 URL의 경로 일부로 데이터를 전달할 때 효과적으로 활용할 수 있습니다.
View
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset = "UTF-8">
<title>test</title>
</head>
<body>
<h1>apple : ${ apple }</h1>
<h3>model 활용하여 값 출력하기</h3>
<h1>vo : ${ banana.id } | ${ banana.name }</h1>
<h3>커맨드 객체를 사용하여 model 활용하지 않고 값 출력하기</h3>
</body>
</html>
test.jsp
Model
package com.jun.app;
import lombok.Data;
@Data
public class VO {
private String id;
private String name;
}
VO.java
GitHub
https://github.com/Qkrwnsgus0522/SpringBoot