전에 했던 것은 기본 Controller 을 구현 하는 것으로 썼는데.. 이번엔 MuiltiActionController 를 사용하여 써 보겠습니다.
갑자기 쌩뚱맞게 MultiActionController 쓰는 이유는 Antop 이 예전에
http://주소:포트번호/응용프로그래명/주소.do 로 프로그램이 불뤼어 졌을때 뒤에 파라미터를 붙여서
http://주소:포트번호/응용프로그래명/주소.do?파미터타입=파라미터 이렇게 주어졌을때 각각 불뤼어 지는건 어떻게 하냐는 요청이 들어왔었기 때문에 요구사항을 접수하여 미리 포스팅 하도록 하겠습니다 ^^
MultiActionController 에 대한 기본 지식 개념은 url 을 붙여 넣겠습니다. 참고하세요~
(url : http://openframework.or.kr/framework_reference/spring/ver1.2.2/html_single/#mvc-controller-multiaction )
MultiActionController
위의 박스내용과 같이 특정 파라미터 값에 따라서 다른 기능을 구현해야 할 때, MultiActionControlle 클래스를 상속받아 컨트롤러 클래스를 구현합니다. (상속받습니다!!! 상속! extends 입니다. Controller 처럼 implements 해서 쓰는것이 아니라, 상속!! 입니다 ^^) MuiltiActionController 클래스는 특정파라미터의 값이나 URL 등을 이용해서 다음과 같은 형식의 메서드를 호출해서 클라이언트의 요청을 처리합니다.
일단 http://joke00.tistory.com/107 에서 Shop.war 파일을 다운 받아 이클립스에 개발가능 하도록 합니다. 기존 되있던 것에서 메소드를 주어 바뀌는 것을 보여 드리겠습니다. ^^
전,
http://localhost:5555/Shop/index.do?method=list
http://localhost:5555/Shop/index.do?method=test
이렇게 2개를 해 보겠습니다. 여기서 method 는 ParameterMethodNameResolver 의 paramName 의 value 이구요 (이 value 는 본인이 쓰고 싶은거 쓰시면 됩니다. 프로퍼티의 name 은 꼭 paramName 과 defaultMethodName 는 꼭 지켜주셔야 합니다) list 와 test 는 불뤼어질 메소드 이름입니다.
1. servlet.xml 파일 변경
* shop-servlet,xml
<!-- url -->
<bean id="bbsMethodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
위와 같이 method 로 주게 되구요 defaulMethodName 으로 인하여 기본 적으로 파라미터 값이 없을때 불뤼어질 기본 parameter 를 설정해 줍니다. 이렇게 되면 http://localhost:5555/Shop/index.do 와 http://localhost:5555/Shop/index.do?method=list 는 똑같은 것이 불뤼어 지게 되겠지요?! ^^
그리고 controller 에 맵핑 시켜 줍니다. property 의 name 은 반드시 methodNameResolver 로 써야 합니다. 아니면 에러를 뿜는답니다~ -0-/////
2. controller 변경
list 메소드와 test 메소드를 만듭니다. 단순 테스터라 간단하게만 페이지 전환으로 보여드리겠습니다.
list 로 파라미터 값이 불뤼어 졌을때엔 index.jsp 로 가게 될 것이고, test 로 불뤼어 지면 test.jsp 로 가게 되겠지요~ ^^
[New]- [Others..] 를 눌러 jsp 를 선택한 후 test.jsp 를 하나 생성하도록 합니다 ^^
* IndexController.java
package controller;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import logic.Item;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
import service.ItemCatalog;
public class IndexController extends MultiActionController {
private ItemCatalog itemCatalog;
public void setItemCatalog(ItemCatalog itemCatalog) {
this.itemCatalog = itemCatalog;
}
// public ModelAndView handleRequest(HttpServletRequest request,
public ModelAndView list(HttpServletRequest request,
HttpServletResponse response) throws Exception {
System.out.println("---------- list ----------------------");
// 상품리스트 정보 취득
List<Item> itemList = this.itemCatalog.getItemList();
// 모델작성
Map model = new HashMap();
model.put("itemList", itemList);
// 반환값이 되는 ModelAndView 인스턴스작성
ModelAndView mav = new ModelAndView();
mav.setViewName("index");
mav.addAllObjects(model);
return mav;
}
public ModelAndView test(HttpServletRequest request,
HttpServletResponse response) throws Exception {
System.out.println("---------- testesteste----------------");
ModelAndView mav = new ModelAndView();
mav.setViewName("test");
return mav;
}
}
설정이 모두 끝났습니다. 이제 테스트를 해 보아야죠~
1. http://localhost:5555/Shop/index.do?method=list
*** 콘솔에 찍힌 로그 입니다
2. http://localhost:5555/Shop/index.do?method=test
*** 콘솔에 찍힌 로그입니다 ^^
테스트에 모두 성공 하셨나요? -0-
MultiActionContrller 를 이용할 경우엔 무분별한 Controller 남발이 없어서 편리하겠군요~ ^^
파라미터 값과 메소드 이름을 항상 일치시켜야 한다는 사실~ 잊지마세요!!!! ^-^
파라미터 값을 가지고 메소드를 찾으니깐요~
그럼 다음에도 또 보아요~
용자님께서는 알아서 테스트를~ ^^
db : oracle 10g
was : tomcat 6
java : jdk 1.6
갑자기 쌩뚱맞게 MultiActionController 쓰는 이유는 Antop 이 예전에
http://주소:포트번호/응용프로그래명/주소.do 로 프로그램이 불뤼어 졌을때 뒤에 파라미터를 붙여서
http://주소:포트번호/응용프로그래명/주소.do?파미터타입=파라미터 이렇게 주어졌을때 각각 불뤼어 지는건 어떻게 하냐는 요청이 들어왔었기 때문에 요구사항을 접수하여 미리 포스팅 하도록 하겠습니다 ^^
http://host/aaa.do?mode=in
http://host/aaa.do?mode=out
위의 형태로 mode 값이 in 일때 불뤼는 메소드 따로, out 일때 불뤼는 메소드 따로 사용할지를 선택이 가능하도록 합니다.
이해가.. 되나요?~ ^^;;;
http://host/aaa.do?mode=out
위의 형태로 mode 값이 in 일때 불뤼는 메소드 따로, out 일때 불뤼는 메소드 따로 사용할지를 선택이 가능하도록 합니다.
이해가.. 되나요?~ ^^;;;
MultiActionController 에 대한 기본 지식 개념은 url 을 붙여 넣겠습니다. 참고하세요~
(url : http://openframework.or.kr/framework_reference/spring/ver1.2.2/html_single/#mvc-controller-multiaction )
위의 박스내용과 같이 특정 파라미터 값에 따라서 다른 기능을 구현해야 할 때, MultiActionControlle 클래스를 상속받아 컨트롤러 클래스를 구현합니다. (상속받습니다!!! 상속! extends 입니다. Controller 처럼 implements 해서 쓰는것이 아니라, 상속!! 입니다 ^^) MuiltiActionController 클래스는 특정파라미터의 값이나 URL 등을 이용해서 다음과 같은 형식의 메서드를 호출해서 클라이언트의 요청을 처리합니다.
public [ModelAndView | Map | void ] 메서드이름 ( HttpServletRequest request, HttpServletResponse response)
public [ModelAndView | Map | void ] 메서드 이름
( HttpServletRequest request, HttpServletResponse response
[HttpSession session | SomeCommand commandObject] )
********* 규칙 !!!!! **************
1. 리턴타입은 ModelAndView, Map, void 중의 하나여야 합니다.
2. 첫번째 파라미터와 두번째 파라미터는 반드시 request, response 여야 합니다.
3. 세번째 파라미터는 선택적으로 지정할 수 있으며 HttpSession 이거나 커맨드 객체로 사용할 클래스여야 한다
(nerv 의 예전의 kdbrace 응용프로그램에선 command vo 라고 했었는데.. 기억 할랑가 모르겠네요 ^^ )
4. 세번째 파라미터가 HttpSession 인 경우에는 메서드가 호출될 때 반드시 request 와 관련된 HttpSession 인스턴스가 존재해야 합니다. 그렇지 않을경우 ServletException 을 발생시킵니다.
public [ModelAndView | Map | void ] 메서드 이름
( HttpServletRequest request, HttpServletResponse response
[HttpSession session | SomeCommand commandObject] )
********* 규칙 !!!!! **************
1. 리턴타입은 ModelAndView, Map, void 중의 하나여야 합니다.
2. 첫번째 파라미터와 두번째 파라미터는 반드시 request, response 여야 합니다.
3. 세번째 파라미터는 선택적으로 지정할 수 있으며 HttpSession 이거나 커맨드 객체로 사용할 클래스여야 한다
(nerv 의 예전의 kdbrace 응용프로그램에선 command vo 라고 했었는데.. 기억 할랑가 모르겠네요 ^^ )
4. 세번째 파라미터가 HttpSession 인 경우에는 메서드가 호출될 때 반드시 request 와 관련된 HttpSession 인스턴스가 존재해야 합니다. 그렇지 않을경우 ServletException 을 발생시킵니다.
일단 http://joke00.tistory.com/107 에서 Shop.war 파일을 다운 받아 이클립스에 개발가능 하도록 합니다. 기존 되있던 것에서 메소드를 주어 바뀌는 것을 보여 드리겠습니다. ^^
http://localhost:5555/Shop/index.do?method=list
http://localhost:5555/Shop/index.do?method=test
이렇게 2개를 해 보겠습니다. 여기서 method 는 ParameterMethodNameResolver 의 paramName 의 value 이구요 (이 value 는 본인이 쓰고 싶은거 쓰시면 됩니다. 프로퍼티의 name 은 꼭 paramName 과 defaultMethodName 는 꼭 지켜주셔야 합니다) list 와 test 는 불뤼어질 메소드 이름입니다.
1. servlet.xml 파일 변경
* shop-servlet,xml
<!-- url -->
<bean id="bbsMethodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
<property name="paramName" value="method"></property>
<property name="defaultMethodName">
<property name="defaultMethodName">
<value>list</value>
</property>
</bean>
<!-- java bean mapping -->
<bean id="indexController" class="controller.IndexController">
<!-- java bean mapping -->
<bean id="indexController" class="controller.IndexController">
<property name="itemCatalog"><ref bean="itemCatalog"/></property>
<property name="methodNameResolver"><ref local="bbsMethodNameResolver" /></property>
<property name="methodNameResolver"><ref local="bbsMethodNameResolver" /></property>
</bean>
위와 같이 method 로 주게 되구요 defaulMethodName 으로 인하여 기본 적으로 파라미터 값이 없을때 불뤼어질 기본 parameter 를 설정해 줍니다. 이렇게 되면 http://localhost:5555/Shop/index.do 와 http://localhost:5555/Shop/index.do?method=list 는 똑같은 것이 불뤼어 지게 되겠지요?! ^^
그리고 controller 에 맵핑 시켜 줍니다. property 의 name 은 반드시 methodNameResolver 로 써야 합니다. 아니면 에러를 뿜는답니다~ -0-/////
2. controller 변경
list 메소드와 test 메소드를 만듭니다. 단순 테스터라 간단하게만 페이지 전환으로 보여드리겠습니다.
list 로 파라미터 값이 불뤼어 졌을때엔 index.jsp 로 가게 될 것이고, test 로 불뤼어 지면 test.jsp 로 가게 되겠지요~ ^^
[New]- [Others..] 를 눌러 jsp 를 선택한 후 test.jsp 를 하나 생성하도록 합니다 ^^
* IndexController.java
package controller;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import logic.Item;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
import service.ItemCatalog;
public class IndexController extends MultiActionController {
private ItemCatalog itemCatalog;
public void setItemCatalog(ItemCatalog itemCatalog) {
this.itemCatalog = itemCatalog;
}
// public ModelAndView handleRequest(HttpServletRequest request,
public ModelAndView list(HttpServletRequest request,
HttpServletResponse response) throws Exception {
System.out.println("---------- list ----------------------");
// 상품리스트 정보 취득
List<Item> itemList = this.itemCatalog.getItemList();
// 모델작성
Map model = new HashMap();
model.put("itemList", itemList);
// 반환값이 되는 ModelAndView 인스턴스작성
ModelAndView mav = new ModelAndView();
mav.setViewName("index");
mav.addAllObjects(model);
return mav;
}
public ModelAndView test(HttpServletRequest request,
HttpServletResponse response) throws Exception {
System.out.println("---------- testesteste----------------");
ModelAndView mav = new ModelAndView();
mav.setViewName("test");
return mav;
}
}
설정이 모두 끝났습니다. 이제 테스트를 해 보아야죠~
1. http://localhost:5555/Shop/index.do?method=list
*** 콘솔에 찍힌 로그 입니다
2. http://localhost:5555/Shop/index.do?method=test
*** 콘솔에 찍힌 로그입니다 ^^
테스트에 모두 성공 하셨나요? -0-
MultiActionContrller 를 이용할 경우엔 무분별한 Controller 남발이 없어서 편리하겠군요~ ^^
파라미터 값과 메소드 이름을 항상 일치시켜야 한다는 사실~ 잊지마세요!!!! ^-^
파라미터 값을 가지고 메소드를 찾으니깐요~
그럼 다음에도 또 보아요~
용자님께서는 알아서 테스트를~ ^^
db : oracle 10g
was : tomcat 6
java : jdk 1.6
'nerv-team.co.kr' 카테고리의 다른 글
[로지텍] 로지텍 마우스 A/S 방법 (0) | 2010.12.17 |
---|---|
[Hibernate] Spring + Hibernate Mapping (1) | 2010.05.20 |
[Hibernate] Spring + Hibernate Mapping 준비 Middlegen Plugin 설치 (0) | 2010.05.19 |
[Spring] nerv-team.co.kr "Default MVC" CH02.상세 화면 보기 (0) | 2010.04.26 |
[Spring] nerv-team.co.kr "Default MVC" CH01.목록 띄우기 (0) | 2010.04.21 |