본문 바로가기

스프링

[spring] 뷰_뷰리졸버 기초

1.     Com.springsource.javax.activation : Spring java-mail

2.     Com.springsource.javax.mail : Spring java-mail

3.     Com.springsource.org.aopalliance : Spring ProxyFactoryBean

4.     Com.springsource.org.aspectj.tools : AspectJExpressionPointcut 포인트컷 표현식 지원

5.     Com.springsource.org.cator.core : 자동으로 자바 오브젝트를 XML로 변환 지원.

6.     Com.springsource.org.cator.xml : 자동으로 자바 오브젝트를 XML로 변환 지원.

7.     Com.springsource.junit : junit

8.     Commons-logging : Spring-context가 사용

9.     Mail : java-mail

10.   Mockito : 목 프레임워크 중 Mockito

11.   Mysql-connector : Mysql JDBC

12.   Org.springframework.context.support : Spring java-mail

13.   Org.springframework.oxm : Object-XML Mapping. 마샬러 빈을 지정해 모델에서 변환에 사용할 오브젝트를 지정해주면, OXM마샬러를 통해 모델 오브젝트를 XML로 변환해서 뷰의 결과로 사용할 수 있음.

14.   Spring-aop : 스프링 기능 자체의 aop, Spring ProxyFactoryBean

15.   Spring-bean : 스프링 코어와 함께 의존성 주입 제공 (Core Container)

16.   Spring-context : 스프링 코어, BeanFactory를 확장한 어플리케이션 컨텍스트 구현, 리소스 로드 및 국제화 지원(Core Container)

17.   Spring-core : 다른 스프링 모듈이 사용하는 유틸리티(Core Container)

18.   Spring-expression : EL 확장 Bean속성(배열, 컬렉션 포함).(Core Container)

19.   Spring-jdbc : 스프링이 지원하는 jdbc.

20.   Spring-test.jar

-       @RunWith : Junit 프레임워크의 테스트 실행방법을 확장시 사용.

-       SpringJUnit4ClassRunner : 어플리케이션컨텍스트를 만들고 관리하는 확장 클래스

-       @ContextConfiguration(경로) : 자동으로 만들어줄 어플리케이션 컨텍스트 설정파일

21.   Spring-tx : DuplicateKeyException.class 파일 존재 및 스프링 트랜잭션

22.   Spring-web : ContextLoaderListener 내장 루트 컨텍스트(서비스,DAO)

23.   Spring-webmvc : SpringMVC를 위한 리졸버, 모델앤뷰 등 지원

 

DispatcherServlet이 사용하는 뷰 오브젝트는 위의 스프링의 View 인터페이스를 구현해야한다.

1. getContentType() : 뷰 오브젝트가 생성하는 콘텐트 타입 정보를 제공

2. render : 결과물을 만들어주는 메소드

 

InternalResourceView

- 위처럼 request에 정보를 담아 Forward() : request, response가 유지되어 jsp로 전달된다.

jsp에서는 EL 혹은 아래 스샷처럼 값을 빼낸다.

- forward()는 이동할 페이지로 이동시키는 것, include() include()된 페이지 처리가 끝나면 다시 돌아옴.

 

 

JstlView : 지역정보 등의 여러 가지 추가 기능을 활용할 수 있는 View, InternalResourceView의 자식 클래스

 

InternalResourceView, JstlView 디폴트 리졸버 추후 재설명

뷰리졸버를 사용하지 않으면 InternalResourceView, JstlView를 직접생성해서 사용해야하지만, 뷰 리졸버를 사용한다면 논리적인 뷰 이름만 넘겨주면됨.

* 캐싱 : 명령어들과 데이터들을 램에 일시적으로 저장하는 것.

 

테스트 디스패처 서블릿을 위한 인터페이스

 

* XML 설정 대신 AbstractDispatcherServletTest를 사용

25. DispatcherServlet 초기화시 ServletConfig 오브젝트를 만들어 초기화해야함.

50. ContextRoot 값이 있을 때 추가해줌

54. setServletPath : 컨텍스트 root를 넣을 수 있도록 셋팅

58. requesturi 정보와 get,post mothod 셋팅 및 리스판스 객체 생성

 

81. 테스트 DispatcherServlet Init

 

 

 

* RedirectView : HttpServletResponsesendRedirect()를 호출해주는 기능을 가진 뷰. 리다이렉트에서 쓰는 URLhttp://로 시작할 수도 있고, /로 시작하는 경우는 서버의 루트 URL로 시작돼야 한다.

26. 1) RedirectView 오브젝트를 직접 만들어서 리턴.

2) true : 웹 애플리케이션의 컨텍스트 루트가 /가 아니라면, 이때는 위처럼 생성자나 프로퍼티를 통해 contextRelativetrue로 바꿔주면, 컨텍스트 패스를 제외한 나머지 경로만 지정해도 된다. 예를 들어 웹 애플리케이션이 /sub이라면, 리다이렉트 URL을 작성할 때 /sub/main.do과 같이 모든 경로를 지정해야 하지만, true로 설정하면 /main.do 만 지정해서 사용할 수 있다. 서블릿 패스는 자동 추가되지 않는다.

27. redirect:를 통해 뷰리졸버가 인식할 수 있도록 리턴하는 편이 편하다.

 

VelocityView, FreeMarkerView

 

 

 

OXM(Object XML Mapping) 변환을 위한 스키마나 매핑파일을 만들기 귀찮아 Castor 라이브러리를 이용한다. 물론 본격적으로 OXM을 사용하려면 꼼꼼하게 매핑파일을 만드는 것을 권장.

 Castor에게 Info 타입의 오브젝트를 넘기면, 매핑정보 없이도 일정한 규칙을 이용해서 XML 엘리먼트로 변환해준다.

 

7. context:annotation-config : @Component, @Repository, @Service, @Controller 어노테이션이 존재하면 빈으로 생성함.

9. Marshaller(유도) 인터페이스로 추상화된 Castor 마샬러를 등록. 추상화가 적용되었으므로 엔진과 매핑정보는 자유롭게 변경 가능.

11. marshaller 빈을 사용해서 Info 오브젝트를 XML로 변환해줄 뷰인 MarshallingView를 빈으로 등록.

12~13. 마샬러와 모델에서 매핑할 오브젝트의 이름을 지정. 이제 컨트롤러에서 info 오브젝트가 포함된 모델과 마샬링 뷰를 리턴해주면 된다.

13. 컨트롤러가 리턴한 모델에서 어떤 이름의 오브젝트에 마샬러를 적용할 것인지 지정.

16. Test 클래스 안의 컨트롤러에 @Controller 어노테이션을 붙이기 애매해서 추가.

 

28. 같은 타입의 뷰가 여러 개 존재할 수 있으므로 빈 이름으로 매핑되도록 @Resource 사용.

34. 컨트롤러에서 준비한 모델은 DispatcherServlet에 의해 helloMarshallingView 오브젝트로 전달될 것이다. 모델에서 info 오브젝트를 꺼내서 DI 받은 마샬러로 XML을 생성해준다.

24. <info>~~</info> : castor 마샬러를 거쳐 최종 완성뷰

 

 

 

AbstractExcelView, AbstractJExcelView, AbstractPdfView

 

 

 

 

뷰 리졸버는 핸들러 매핑이 URL로부터 컨트롤러를 찾아주는 것처럼, 뷰이름으로부터 사용할 뷰 오브젝트(디폴트 InternalResourceView, JstlView)를 찾아준다. 뷰 리졸버를 빈으로 등록하지 않았다면 DispatcherServlet의 디폴트 뷰리졸버인 InternalResourceViewResolver가 사용됨. 핸들러 매핑과 마찬가지로 뷰리졸버는 하나 이상 빈으로 등록할 수 있는데, 이때는 order 프로퍼티를 이용해서 순서를 지정해주는 것이 좋다.

 

논리적인 이름을 종속시키지 않으면 “jsonView” 또는 벨로시티나 프리마커 뷰로 전환해도 뷰 리졸버의 suffix.vm .flt 로 바꿔주기만 하면 된다.

 

 

ResourceBundleViewResolver : 컨트롤러마다 뷰의 종류가 달라질 때 사용 085.뷰리졸버 참조