구성요소라는 뜻으로 독립적인 단위 모듈을 뜻한다.
스프링 부트에선 IoC 컨테이너에 등록된 클래스를 뜻한다.
@Component
어노테이션을 사용해 직접 작성한 클래스를 IoC 컨테이너에 등록 할 수 있다.
Controller Component란?
Client의 요청을 직접적으로 받는 Component이다.
Cleint가 url을 통한 요청을 보내면 해당 url에 매칭되는 Controller가 해당 요청을 handle한다.
@Controller
어노테이션을 통해 생성한 컨트롤러는 전통적인 Spring MVC Framework
에서 주로 사용하는 컨트롤러이다. 이 컨트롤러의 주요 목적은 View를 반환하기 위함이다. 즉, Client에 요청에 따라 그에 맞는 View를 찾아 반환해주는 역할을 수행한다.
사용 예시
@Controller
@RequestMapping("/user")
public class UserController {
@Resource(name = "userService")
private UserService userService;
@PostMapping(value = "/info")
public @ResponseBody User info(@RequestBody User user){
return userService.retrieveUserInfo(user);
}
@GetMapping(value = "/infoView")
public String infoView(Model model, @RequestParam(value = "userName", required = true) String userName){
User user = userService.retrieveUserInfo(userName);
model.addAttribute("user", user);
return "/user/userInfoView";
}
}
@RestController
는 @Controller
에 @ResponseBody
어노테이션을 활용해 데이터를 반환하던 것과 같은 역할을 수행한다. 즉, @RestController
는 View가 아니라 JSON와 같은 데이터를 반환하는 용도로 사용된다.
사용 예시
@RestController
@RequestMapping("/user")
public class UserController {
@Resource(name = "userService")
private UserService userService;
@PostMapping(value = "/info1")
public User info1(@RequestBody User user){
return userService.retrieveUserInfo(user);
}
@PostMapping(value = "/info2")
public ResponseEntity<User> info2(@RequestParam(value = "userName", required = true) String userName){
User user = userService.retrieveUserInfo(userName);
if(user == null){
return ResponseEntity.noContent().build()
}
return ResponseEntity.ok(user)
}
@PostMapping(value = "/info3")
public ResponseEntity<User> info3(@RequestParam(value = "userName", required = true) String userName){
return Optional.ofNullable(userService.retrieveUserInfo(userName))
.map(user -> ResponseEntity.ok(user))
.orElse(ResponseEntity.noContent().build());
}
}
SpringBoot에서 WebConfig 설정을 할 때,@EnableWebMvc
, WebMvcConfigurer
를 설정하는 방법이 있다.
@EnableWebMvc
를 사용하거나 WebMvcConfigurer를 구현하지 않으면 아래와 같이 WebConfig 설정 시 Bean
을 직접 등록해줘야하는 등으로 권장하지 않는 방법이라고 한다.
@Configuration
public class WebConfig {
@Bean
public InternalResourceViewResolver viewResolver() {
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setPrefix("/WEB-INF/jsp/");
viewResolver.setSuffix(".jsp");
return viewResolver;
}
}
WebMvcConfigurer는 SpringBoot의 자동 설정(WebMvcAutoConfiguration)을 유지하면서 기능을 쉽게 확장할 수 있게 해준다.
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
registry.jsp("/WEB-INF/jsp/",".jsp");
}
}
정보 감사합니다.