이번 포스팅에서는 클라이언트의 요청을 알맞게 처리할 컨트롤러와 처리 결과를 보여줄 JSP 코드를 통해 실습해 보도록 하겠습니다.
컨트롤러 구현
package chap09;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class HelloController {
@GetMapping("/hello")
public String hello(Model model, @RequestParam(value = "name", required = false) String name) {
model.addAttribute("greeting", "안녕하세요 " + name);
return "hello";
}
}
@Controller
@Controller 어노테이션을 적용한 클래스는 스플이 MVC 컨트롤러로 사용합니다.
@GetMapping("/hello")
@GetMapping 어노테이션은 메서드가 처리할 요청 경로를 지정합니다. 위 코드의 경우 "/hello" 경로로 들어온 요청을 hello() 메서드를 이용해서 처리한다고 설정했습니다. 이름에서 알 수 있듯이 HTTP 요청 메서드 중 GET 메서드에 대한 매핑을 설정합니다.
public String hello(Model model, @RequestParam(value = "name", required = false) String name) {
model.addAttribute("greeting", "안녕하세요 " + name);
return "hello";
}
Model 파라미터는 컨트롤러의 처리 결과를 뷰에 전달할 때 사용합니다.
@RequestParam 어노테이션은 HTTP 요청 파라미터의 값을 메서드의 파라미터로 전달할 때 사용됩니다. 위 코드의 경우 name 요청 파라미터의 값을 name 파라미터에 전달합니다.
"greeting"이라는 모델 속성에 값을 설정합니다. 값으로 "안녕하세요 + name" 값을 사용합니다.
컨트롤러의 처리 결과를 보여줄 뷰 이름으로 "hello"를 사용합니다.
스프링 MVC 프레임워크에서 컨트롤러(Controller) : 웹 요청을 처리하고 그 결과를 뷰에 전달하는 스프링 빈 객체입니다.
스프링 컨트롤러로 사용될 클래스는 @Controller를 붙여야 하고 @GetMapping 어노테이션이나 @PostMapping 어노테이션과 같은 요청 매핑 어노테이션을 이용해서 처리할 경로를 지정해주어야 합니다.
@GetMapping어노테이션과 요청 URL 간의 관계, @RequestParam 어노테이션과 요청 파라미터와의 관계
URL : http://localhost:8080/sp5-chap09/hello?name=bk
/hello -> @GetMapping("/hello"), name -> @RequestParam(value = "name"..
@Controller
public class HelloController {
@GetMapping("/hello")
public String hello(Model model, @RequestParam(value = "name", required = false) String name) {
model.addAttribute("greeting", "안녕하세요 " + name);
return "hello";
}
}
@GetMapping 어노테이션의 값은 서블릿 콘텍스트 경로(또는 웹 어플리케이션 경로)를 기준으로 합니다.
예를 들어, 톰캣의 경우 webapps\sp5-chap09 폴더는 웹 브라우저에서 http://localhost:port/sp5-chap09 경로에 해당하는데, 이때 sp5-chap09가 컨텍스트 경로가 됩니다. 컨텍스트 경로가 /sp5-chap09이므로 http://localhost:port/sp5-chap09/main/list 경로를 처리하기 위한 컨트롤러는 @GetMapping("/main/list")를 사용해야 합니다.
@RequestParm 어노테이션은 HTTP 요청 파라미터를 메서드의 파라미터로 전달받을 수 있게 해 줍니다. @RequestParam 어노테이션의 value 속성은 HTTP 요청 파라미터의 이름을 지정하고 required 속성은 필수 여부를 지정합니다.
name 요청 파라미터 값인 "bk"가 hello() 메서드의 name 파라미터에 전달됩니다.
파라미터로 전달받은 Model 객체의 addAtrribute() 메서드를 실행하고 있는데 이는 뷰에 전달할 데이터를 지정하기 위해 사용됩니다.
Model.addAttribute() 메서드의 첫 번째 파라미터는 데이터를 식별하는 데 사용되는 속성 이름이고 두 번째 파라미터는 속성 이름에 해당하는 값입니다. 뷰 코드는 이 속성 이름을 사용해서 컨트롤러가 전달한 데이터에 접근하게 됩니다.
@GetMapping이 붙은 메서드는 컨트롤러의 실행 결과를 보여줄 뷰 이름을 리턴합니다. 해당 실습에서는 "hello"라는 뷰 이름을 리턴합니다. 해당 뷰 이름은 논리적인 이름이며 실제로 뷰 이름에 해당하는 뷰 구현을 찾아주는 것은 ViewResolver가 처리합니다.
컨트롤러를 구현했으면 컨트로러를 스프링 빈으로 등록할 차례입니다. 컨트로러 클래스를 빈으로 등록할 때 사용할 설정파일을 다음과 같이 작성해 봅시다.
package config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import chap09.HelloController;
@Configuration
public class ControllerConfig {
@Bean
public HelloController helloController() {
return new HelloController();
}
}
'Spring' 카테고리의 다른 글
[Spring] 스프링 MVC 핵심 구성 요소 (0) | 2024.04.01 |
---|---|
[Spring] Spring MVC - 컨트롤러와 JSP (0) | 2024.03.26 |
[Spring] 스프링 MVC 설정 (0) | 2024.03.25 |
[Spring] Spring MVC (0) | 2024.03.20 |
[Spring] @EnableTransactionManagement 주요속성과 트랜잭션 전파 (0) | 2024.03.06 |