SpringMVCとのApacheタイルの統合
1. 概要
Apache Titles は、純粋にコンポジットデザインパターンに基づいて構築された無料のオープンソーステンプレートフレームワークです。
複合デザインパターンは、オブジェクトをツリー構造に構成してパーツ全体の階層を表す構造パターンの一種であり、このパターンは個々のオブジェクトとオブジェクトの構成を均一に扱います。 つまり、タイルでは、タイルと呼ばれるサブビューの構成を組み立てることによってページが作成されます。
他のフレームワークに対するこのフレームワークの利点は次のとおりです。
- 再利用性
- 設定が簡単
- 低パフォーマンスのオーバーヘッド
この記事では、ApacheタイルとSpringMVCの統合に焦点を当てます。
2. 依存関係の構成
ここでの最初のステップは、必要な依存関係をpom.xmlに追加することです。
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-jsp</artifactId>
<version>3.0.8</version>
</dependency>
3. タイルレイアウトファイル
次に、テンプレート定義を定義する必要があります。具体的には、各ページごとに、その特定のページのテンプレート定義を上書きします。
<tiles-definitions>
<definition name="template-def"
template="/WEB-INF/views/tiles/layouts/defaultLayout.jsp">
<put-attribute name="title" value="" />
<put-attribute name="header"
value="/WEB-INF/views/tiles/templates/defaultHeader.jsp" />
<put-attribute name="menu"
value="/WEB-INF/views/tiles/templates/defaultMenu.jsp" />
<put-attribute name="body" value="" />
<put-attribute name="footer"
value="/WEB-INF/views/tiles/templates/defaultFooter.jsp" />
</definition>
<definition name="home" extends="template-def">
<put-attribute name="title" value="Welcome" />
<put-attribute name="body"
value="/WEB-INF/views/pages/home.jsp" />
</definition>
</tiles-definitions>
4. ApplicationConfigurationおよびその他のクラス
構成の一部として、 ApplicationInitializer 、 ApplicationController 、およびApplicationConfigurationという3つの特定のJavaクラスを作成します。
- ApplicationInitializer は、ApplicationConfigurationクラスで指定された必要な構成を初期化してチェックします
- ApplicationConfiguration クラスには、SpringMVCをApacheTilesフレームワークと統合するための構成が含まれています
- ApplicationController クラスは、 tiles.xml ファイルと同期して動作し、着信要求に基づいて必要なページにリダイレクトします
各クラスの動作を見てみましょう。
@Controller
@RequestMapping("/")
public class TilesController {
@RequestMapping(
value = { "/"},
method = RequestMethod.GET)
public String homePage(ModelMap model) {
return "home";
}
@RequestMapping(
value = { "/apachetiles"},
method = RequestMethod.GET)
public String productsPage(ModelMap model) {
return "apachetiles";
}
@RequestMapping(
value = { "/springmvc"},
method = RequestMethod.GET)
public String contactUsPage(ModelMap model) {
return "springmvc";
}
}
public class WebInitializer implements WebApplicationInitializer {
public void onStartup(ServletContext container) throws ServletException {
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
ctx.register(TilesApplicationConfiguration.class);
container.addListener(new ContextLoaderListener(ctx));
ServletRegistration.Dynamic servlet = container.addServlet(
"dispatcher", new DispatcherServlet(ctx));
servlet.setLoadOnStartup(1);
servlet.addMapping("/");
}
}
SpringMVCアプリケーションでタイルを構成する際に重要な役割を果たす2つの重要なクラスがあります。 それらはTilesConfigurerとTilesViewResolverです。
- TilesConfigurer は、タイル構成ファイルへのパスを提供することにより、TilesフレームワークをSpringフレームワークにリンクするのに役立ちます
- TilesViewResolver は、タイルビューを解決するためにSpringAPIによって提供されるアダプタークラスの1つです。
最後に、 ApplicationConfiguration クラスでは、TitlesConfigurerクラスとTilesViewResolverクラスを使用して統合を実現しました。
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.baeldung.spring.controller.tiles")
public class TilesApplicationConfiguration implements WebMvcConfigurer {
@Bean
public TilesConfigurer tilesConfigurer() {
TilesConfigurer tilesConfigurer = new TilesConfigurer();
tilesConfigurer.setDefinitions(
new String[] { "/WEB-INF/views/**/tiles.xml" });
tilesConfigurer.setCheckRefresh(true);
return tilesConfigurer;
}
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
TilesViewResolver viewResolver = new TilesViewResolver();
registry.viewResolver(viewResolver);
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**")
.addResourceLocations("/static/");
}
}
5. タイルテンプレートファイル
これまで、Apache Tilesフレームワークの構成と、アプリケーション全体で使用されるテンプレートと特定のタイルの定義を完了しました。
このステップでは、tiles.xmlで定義されている特定のテンプレートファイルを作成する必要があります。
特定のページを作成するためのベースとして使用できるレイアウトのスニペットを見つけてください。
<html>
<head>
<meta
http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title><tiles:getAsString name="title" /></title>
<link href="<c:url value='/static/css/app.css' />"
rel="stylesheet">
</link>
</head>
<body>
<div class="flex-container">
<tiles:insertAttribute name="header" />
<tiles:insertAttribute name="menu" />
<article class="article">
<tiles:insertAttribute name="body" />
</article>
<tiles:insertAttribute name="footer" />
</div>
</body>
</html>
6. 結論
これで、SpringMVCとApacheTilesの統合は完了です。
完全な実装は、次のgithubプロジェクトにあります。