Controller
- 사용자의 요청이 진입하는 지점(entry point)
- 요청에 따라 어떤 처리를 할지 결정해준다. 실질적인 처리는 서비스에서 처리한다
- 사용자에게 view를 응답으로 보내준다
왜 쓰는가
- 대규모로 갈수록 처리해야할 서비스가 많아지는데, 이를 하나의 클래스에서 몰아서 처리하는게 아니라 A요청에 대한 것은 A controller에서 맡아 로직처리를 위한 서비스를 호출한다
- spring은 기본적으로 MVC 패턴을 사용하는데 이 때 controller를 사용하며 역할에 따른 설계가 가능하여 유지보수에 유리하다
사용방법
- spring 설정파일에 등록된 패키지 안에서 검색하기 때문에 컨트롤러를 스캔할 경로를 지정해주어야 한다
- @Controller를 이용해 클래스 생성
- @RequestMapping을 이용해 view의 요청 경로를 지정한다
- view의 이름을 return한다. return하면 spring의 viewResolver를 통해 view와 ModelAndView를 DispathcerServlet에 전달한다
@Controller // 컨트롤러 지정
@RequestMapping(value = "/home") // 컨트롤러와 메스드에 각각 mapping하면 깔끔하게 코드를 구현할 수 있다
public class HomeController {
@RequestMapping(value = "/list", method = RequestMethod.GET) // 뷰의 요청 경로 지정
public String home(Locale locale, Model model) {
// 로직 수행
...
// Model 객체를 paramater로 받아서 view로 Data를 전달할 수 있다
// jsp 파일에서는 ${변수이름} 형태로 값을 사용할 수 있다
model.addAttribute("변수이름", "변수에 넣을 데이터값");
return "home"; // 뷰 파일 리턴
}
@RequestMapping("/content")
public ModelAndView content() { // model과 거의 동일하다
// 데이터와 뷰를 동시에 설정이 가능
ModelAndView mv = new ModelAndView();
mv.setViewName("/content"); // 뷰의 경로
// model과 마찬가지로 jsp 파일에서는 ${변수이름} 형태로 값을 사용할 수 있다
mv.addObject("변수이름", "데이터 값"); // 뷰로 보낼 데이터 값
return mv;
}
}
레퍼런스
https://po9357.github.io/spring/2019-05-11-Spring_Controller/