🍀 Spring Boot

[Spring Boot] Day88 - Spring Boot MVC 구현

harveydent 2023. 9. 14. 18:04
728x90

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

 

GitHub - Qkrwnsgus0522/SpringBoot

Contribute to Qkrwnsgus0522/SpringBoot development by creating an account on GitHub.

github.com

 

728x90