대해서 말씀 드리겠습니다.
- 필요한 라이브러리
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-api</artifactId>
<version>2.1.4</version>
</dependency>
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-compat</artifactId>
<version>2.1.4</version>
</dependency>
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-core</artifactId>
<version>2.1.4</version>
</dependency>
제 블러그 "Spring3.0 관련 라이브러리 (pom.xml)" pom.xml을
참고 하시면 됩니다.
※여기서 중요한 부분이 tiles2 버전 2.1.4로 하셔야 합니다.
새로 나온 2.2.1 버전은 아직 spring3.0과
호환성 문제가 있습니다.구글링을 통해서 알아보니
외국애들도 이 문제에 대해서 이슈화 하고 있습니다.
- Controller 설정
@Controller
@RequestMapping("/dummy")
public class DummyController {
// ---------------------------------------------------------------------
// Class Variable Declaration
// ---------------------------------------------------------------------
/** The Constant logger. */
private static final Logger logger = LoggerFactory
.getLogger(DummyController.class);
// ---------------------------------------------------------------------
// Constructor Method Declaration
// ---------------------------------------------------------------------
/**
* Instantiates a new config controller.
*/
public DummyController(){}
// ---------------------------------------------------------------------
// DI Method (setter,getter) Declaration
// ---------------------------------------------------------------------
// ---------------------------------------------------------------------
// this Method (public/private) Declaration
// ---------------------------------------------------------------------
/**
* Gets the config.
*
* @param model the model
* @param request the request
*
* @return the config
*/
@RequestMapping(value = "/index")
public ModelAndView getMain() {
logger.info("========= DummyController.getMain");
return new ModelAndView();
}
/**
* Gets the show case tiles.
*
* @param model the model
* @param request the request
*
* @return the show case tiles
*/
@RequestMapping(value = "/list")
public ModelAndView getList() {
logger.info("========= DummyController.getList");
return new ModelAndView();
}
/**
* Gets the empty.
*
* @param model the model
* @param request the request
*
* @return the empty
*/
@RequestMapping(value = "/form")
public ModelAndView getForm() {
logger.info("==TilesController.getForm");
return new ModelAndView();
}
/**
* Handler empty.
*
* @return the model and view
*/
@RequestMapping(value = "/empty")
public ModelAndView getEmpty() {
logger.info("==TilesController.getEmpty");
return new ModelAndView();
}
// ---------------------------------------------------------------------
// interface implement Method (public/private) Declaration
// ---------------------------------------------------------------------
// ---------------------------------------------------------------------
// abstract implement Method (public/private) Declaration
// ---------------------------------------------------------------------
// ---------------------------------------------------------------------
// abstract Method (public/private) Declaration
// ---------------------------------------------------------------------
}
각각의 메서드들은 아래와 같은 요청시 처리 됩니다.
※참고로 호출 URL 확장자명은 "ssc" 입니다.
getMain : http://localhost:8080/dummy/index.ssc
getList :http://localhost:8080/dummy/list.ssc
getForm :http://localhost:8080/dummy/form.ssc
getEmpty : http://localhost:8080/dummy/empty.ssc
컨트롤러는 기본적인 annotation 기반 컨트롤러 입니다.
- spring XML
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util"
xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<!-- annotation config & scan -->
<context:annotation-config />
<context:component-scan base-package="org.ssc">
<context:include-filter type="annotation"
expression="org.springframework.stereotype.Controller" />
</context:component-scan>
<!--
JSR-303 support will be detected on classpath and enabled
automatically
-->
<mvc:annotation-driven />
<!-- convert request data -->
<bean
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="cacheSeconds" value="0" />
</bean>
<!-- tiles2 layout config -->
<bean id="tilesConfigurer"
class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">
<property name="definitions">
<list>
<value>classpath:/tiles2/tiles2.cfg.xml</value>
</list>
</property>
</bean>
<!-- view name tanslator -->
<bean id="viewNameTranslator"
class="org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator" />
<!-- view resolver -->
<bean
class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<property name="mediaTypes">
<map>
<entry key="atom" value="application/atom+xml" />
<entry key="ssc" value="text/html" />
<entry key="json" value="application/json" />
</map>
</property>
<property name="viewResolvers">
<list>
<bean class="org.springframework.web.servlet.view.BeanNameViewResolver" />
<bean class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.tiles2.TilesView" />
</bean>
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
</list>
</property>
<property name="defaultViews">
<list>
<bean
class="org.springframework.web.servlet.view.json.MappingJacksonJsonView">
<property name="prefixJson" value="true" />
</bean>
</list>
</property>
</bean>
</beans>
빈 아이디 "viewNameTranslator"는 요청 URL과 같은 형태로
View Name을 변환해 주는 빈입니다.
즉 "http://localhost:8080/dummy/index.ssc"로
호출하면 View Name은 "dummy/index"로 변환 됩니다.
빈 아이디 "tilesConfigurer"는 tiles2 초기화 하는
빈입니다. 파라미터로 초기화에 필요한 tiles2 설정
파일을 입력 합니다.
"ContentNegotiatingViewResolver" 빈이 제일
중요 합니다.
Spring3.0 부터 지원 합니다. 이 Resolver는 스스로
View를 resolving 할 수 있는 능력이 없습니다.
단 이름에서 알수 있듯이 여러 ViewResolver를
중에서 케이스별로 처리 할 수 있도록 resolving
logic을 해주는 resolver 입니다.
"mediaTypes"를 보면 "ssc"되는 부분이 있습니다.
전 뷰 형태의 호출 URL을 ".do" 또는 ".action"
이아닌 ".ssc"로 하고 있습니다.
저 말은 ".ssc"로 오는 요청은 "text/html"
타입을 처리 할 수 있는 "UrlBasedViewResolver"
또는 "InternalResourceViewResolver" 으로
포워딩 하라는 뜻 입니다.
".json" 형태로 오면 "MappingJacksonJsonView"
처리하게 되어 있습니다.
"viewResolvers" properties를 보면 "list" 형태로
되어 있습니다. 이것은 2.5.6의 "order" 태그와
같습니다. 컨트롤러에서 리턴된 view name을
위의 순서되로 찾아 갑니다.
tiles2 설정은 Part3에서 설명 드리겠습니다.
댓글 없음:
댓글 쓰기