Hyunebee

스프링 MVC - 스프링 MVC(2) 본문

Spring/MVC

스프링 MVC - 스프링 MVC(2)

Hyunebee 2022. 1. 15. 15:08

옛날 방식의 MVC 구현(1)

@Component("/springmvc/old-controller")
public class OldController implements Controller {
    @Override
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
        System.out.println("OldController.handleRequest");
        return new ModelAndView("new-form");
    }
}

Controller를 구현해준다.

이때 Controller(interface)는 @Controller와는 다른것 이다.

 

이 컨트롤러가 호출될려면 handler와 adapter가 필요하다.

 

HandlerMapping (우선 순위 별)

0 = RequestMappingHandlerMapping : 애노테이션 기반의 컨트롤러인 @RequestMapping에서 사용

1 = BeanNameUrlHandlerMapping : 스프링 빈의 이름으로 핸들러를 찾는다

 

핸들러가 있는지 찾는 for문

 

HandlerAdapter

0 = RequestMappingHandlerAdapter : 애노테이션 기반의 컨트롤러인 @RequestMapping에서 사용

1 = HttpRequestHandlerAdapter : HttpRequestHandler 처리

2 = SimpleControllerHandlerAdapter : Controller 인터페이스(애노테이션X, 과거에 사용) 처리

 

 

ViewResolver 

 

application.properties에 등록 - ServletApplication에 직접 등록하는 방법도 있음

 

@RequestMapping

요청 정보를 매핑한다. 해당 URL이 호출되면 이 메서드가 호출된다. 애노테이션을 기반으로 동작하기 때문에, 메서드의 이름은 임의로 지으면 된다.

 

new-form

@RequestMapping("/springmvc/v1/members/new-form")
public ModelAndView process(){
    return new ModelAndView("new-form");
}

 

 

 컨트롤러 통합

@RequestMapping("/springmvc/v2/members")
public class SpringMemberControllerV2 {

    private final MemberRepository memberRepository = MemberRepository.getInstance();


    @RequestMapping("/new-form")
    public ModelAndView newForm(){
        return new ModelAndView("new-form");
    }

공통된 부분은 묶어 처리할 수 있다.

 

 

더욱 발전된 처리

@RequestMapping(method = RequestMethod.GET)
public String Members(Model model){
    List<Member> memberList = memberRepository.findAll();
    model.addAttribute("members", memberList);
    return "members";
}

method를 설정해 GET method가 아니면 요청을 못하게 한다. 모두 모델을 파라미터로 받음으로 interface Model로 받아서 처리할 수 있다.

 

 

@RequestMapping ->@GetMapping, @PostMapping 

@PostMapping("/members/save")
public String save(@RequestParam("username") String username,
                         @RequestParam("age")int age,
                         Model model){

더 간략하게 GetMapping, PostMapping으로 사용할 수있다. 

HttpServltRequest는 @RequestParm으로 대체할 수 있다.

'Spring > MVC' 카테고리의 다른 글

스프링 MVC - 기본 기능  (0) 2022.01.17
스프링 MVC - 로깅  (0) 2022.01.17
스프링 MVC - 스프링 MVC  (0) 2022.01.15
스프링MVC - frontController(4)  (0) 2022.01.14
스프링MVC - frontController(3)  (0) 2022.01.14