ControllerClassNameHandlerMapping 잘 되네~

@Controller
public class MemberController {

    @Autowired
    private MemberService memberService;

    @RequestMapping
    public ModelAndView list(){
        return new ModelAndView(“member/list”)
            .addObject(“members”, memberService.getAll());
    }
}

요렇게만 해두면, /member/list.xxx 라는 요청이 오면 알아서(Conversion) 저 메소드가 처리하도록 합니다. ㄴXxx-servlet.xml에는 XML에는

<bean class=”org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping” />

애만 등록해주면 됩니다. 저 한 줄의 XML로 URL 맵핑을 손수 적는 수고를 덜 수 있습니다.

계속해서 진화하는 Spring MVC 어디까지 갈텐가~~ 멋있어 멋있어 끝까지 가는거야~~

2008/04/08 – [모하니?/Coding] – ControllerClassNameHandlerMapping가 찾아 준댔는데…
ps : 새벽에 괜히 삽질만 하고… 잠이나 계속 잘껄..

ControllerClassNameHandlerMapping가 찾아 준댔는데…

어젠가 오늘 배포된 Spring 2.5.3부터는 ControllerClassNameHandlerMapping의 기능이 확장되서, @Controller로 만든 컨트롤러들도 인식한다고 합니다.

ControllerClassNameHandlerMapping는 스프링의 막강한 CoC 기능 중에 하나로 매번 귀찮게 요청과 요청을 처리할 클래스 맵핑을 하지 않아도 되는 매우 편리한 클래스입니다.

@Controller를 사용하면, 요청을 처리할 클래스나 메소드 위에 @RequestMapping을 사용해서 요청 맵핑을 해야만 했는데, 이제는 저 클래스를 사용해여 Conversion을 적용하면 @RequestMapping을 일일히 안적어 주고, 메소드 이름을 요청의 이름이랑 맞춰주면 됩니다.

그러나…. 테스트 해봤더니 못 찾습니다. 에구구.. 다시 자야지.. 왜 안 돼지; 되면 정말 편한데..

2007/06/19 – [Spring/Chapter 13] – 13.11. Convention over configuration 1
2007/03/02 – [Hibernate/study] – Convention over Configuration

13.11. Convention over configuration 1

Spring 2.0에 추가된 기능으로 네이밍으로 규약을 정하고 그것을 지키기만 하면 설정을 대폭 줄일 수 있는 방법이 마련되었습니다.

Request -> 컨트롤러 규약 :: ControllerClassNameHandlerMapping

즉 핸들러 맵핑을 통해 매번 각각의 요청을 처리할 컨트롤러들을 등록했었습니다. 보통 다음과 같은 소스코드를 확인하실 수 있습니다.
사용자 삽입 이미지
ControllerClassNameHandlerMapping 핸들러를 등록하면 다음과 같은 규약을 사용할 수 있습니다.

if(WelcomeController == MultiActionController){
    WelcomeController 는 /welcome/* 요청을 처리하게 됩니다.
} else {
    WelcomeController 는 /welcome* 요청을 처리하게 됩니다.
}

사용하는 방법은 간단합니다. ControllerClassNameHandlerMapping 을 등록해주기만 하면 됩니다.

    <bean id=”handlerMapping” class=”org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping”/>

    <bean class=”org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping”/>

BeanNameUrlHandlerMapping은 CoC를 사용하지 않고 직접 url과 매핑 시켜줄 컨트롤러들을 위해 등록해 줍니다.

이제부터는 요청을 처리하는 컨트롤러를 찾으려고 XXX-sevlet.xml에서 검색하지 않아도 됩니다. 그냥 요청의 이름만 보면 해당 요청을 어디서 처리할 지 알 수 있습니다.

    <bean class=”net.agilejava.nayoung.controller.IssueController” />

컨트롤러를 등록할 때 name이나 id를 주지 않아도 되기 때문에 컨트롤러를 등록할 때 ‘이 컨트롤러가 처리하는 url이 어떤거였더라..’ 라는 고민을 하지 않아도 됩니다.