[Spring] @RequestMapping 을 xml 코드로 사용
지금 하고 있는 프로젝트가 모두 xml로 설정되어 있어서 혼자 어노테이션 사용하기 좀 그래서 xml 로 설정하고 있는 중에 Controller 클래스에서 @RequestMapping 부분을 xml로 어떻게 하는지 몰라서 프로젝트에 누가 짜놓았던 코드를 보니 ParameterMethodNameResolver 란 게 있었다.
이걸 사용하면 @RequestMapping 을 사용하지 않더라도 Controller 클래스에서 각각의 메소드들을 구분해 이용할 수 있다.
우선 스프링에 이걸 보고 있는 당신들의 프로젝트에 ~-context.xml 에 들어가자/.
그리고
<bean id="statisticsMethodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver"
p:paramName="type" p:defaultMethodName="default">
</bean>
와 같은 식으로 코드를 작성한다.
여기서 paramName은 좀 뒤에 다시 설명하도록 하고, defaultMethodName은 말 그대로 default로 사용될 메소드 이름을 작성하면 된다.
즉, 예를 들면 TestController 클래스에 다음과 같이 4가지의 메소드가 있다고 하자.
public ModelAndView test_1 () {
.. 코드
}
public ModelAndView test_2 () {
.. 코드
}
public ModelAndView test_3 () {
.. 코드
}
public ModelAndView default () {
.. 코드
}
이 때 위에 MethodNameResolver 로 인해서 파라미터가 없을 시에 기본적으로 default() 메소드에 접근한단 뜻이다.
그렇다면 paramName 은 뭘까?
우선 저렇게 default() 메소드를 제외한 3가지 메소드를 구분시켜야 한다. 그래서 A.do를 접근했을 때 test_1() 이 실행되고 아니면 A.do 에서 다른 버튼을 눌렀을 때 test_2()가 실행되도록 구분해야 한다는 말이다.
그래서 paramName 이 존재한다.
http://hojak99.tistory.com/admin/entry/post 와 같은 링크가 있다하자. 우선 기본으로 default() 메소드에서 비지니스 로직을 처리하고 나서 View 를 반환해 페이지가 작동했다.
여기서 어떤 버튼을 클릭해 이 페이지 상의 수치나 뭘 DB에 넣으려고 한다. 이에 대한 비지니스 코드는 test_1() 메소드에 존재한다.
그러면 버튼을 클릭했을 시 http://hojak99.tistory.com/admin/entry/post?type=test_1 가 되도록 한다. 이러면 test_1() 메소드로 접근할 수 있게 된다.
이 정도면 이해가 될 것 같다.
그런데 우리는 여기서 그저 MethodNameResolver 에 대한 Bean 만 생성했다. Controller 에 대한 Bean 에 이 MethodNameResolver 를 적용시켜줘야 한다.
그래서
<bean id="printController" class="kr.co.controller.printController"
p:methodNameResolver-ref="
statisticsMethodNameResolver" />
와 같이 methodNameResolver-ref 를 이용해 지정해주면 된다.
끝~