個人的なメモエントリー。
Google App Engine for Java(GAE/J)を触り始めた影響で、過去の記憶を久々に掘り起こすシリーズ第二弾。Strutsを現役バリバリ(表現が古い)で使っていた時に使用していたテンプレートエンジンであるTilesを再現してみます。どうも最近の主流はVelocityとかいうらしいのだけど、まあ、馴染みのある方いいかと気にしないことにします。
とりあえず、公式サイト(http://tiles.apache.org/)から、ブツをダウンロードするのだけど、Ver.2.2がBeta版らしいので、ひとつ前のVer.2.1.4を選択しました。
落としてきたtiles-2.1.4-bin.zipの
- tiles-api-2.1.4.jar
- tiles-compat-2.1.4.jar
- tiles-core-2.1.4.jar
- tiles-jsp-2.1.4.jar
- tiles-portlet-2.1.4.jar
- tiles-servlet-2.1.4.jar
をWEB-INF/libへ放り込みます。ただ、色々入れていくとごちゃごちゃしそうだったので実際は”WEB-INF/lib/tiles”に配置。
あとはがりがり設定&設定&設定。。。必要な部分だけ抜粋して列記。
WEB-INF/web.xml
<servlet>
<servlet-name>TilesDispatchServlet</servlet-name>
<servlet-class>org.apache.tiles.web.util.TilesDispatchServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>tiles</servlet-name>
<servlet-class>org.apache.tiles.web.startup.TilesServlet</servlet-class>
<init-param>
<param-name>org.apache.tiles.definition.DefinitionsFactory.DEFINITIONS_CONFIG</param-name>
<param-value>/WEB-INF/tiles-defs.xml</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>TilesDispatchServlet</servlet-name>
<url-pattern>*.tiles</url-pattern>
</servlet-mapping>
WEB-INF/tiles-defs.xml
<tiles-definitions>
<!-- 基本レイアウト -->
<definition name="main.layout" template="/WEB-INF/tiles/layouts/main_layout.jsp">
<put-attribute name="header" value="/WEB-INF/tiles/common/header.jsp" />
<put-attribute name="body" value="/WEB-INF/tiles/common/body.jsp" />
<put-attribute name="footer" value="/WEB-INF/tiles/common/footer.jsp" />
</definition>
<!-- 個別ページ1 -->
<definition name="main.page1" extends="main.layout">
<put-attribute name="body" value="/WEB-INF/tiles/body/body1.jsp" />
</definition>
<!-- 個別ページ2 -->
<definition name="main.page2" extends="main.layout">
<put-attribute name="body" value="/WEB-INF/tiles/body/body2.jsp" />
</definition>
</tiles-definitions>
/WEB-INF/tiles/layouts/main_layout.jsp
<html><body>
<tiles:insertAttribute name="header" />
<hr>
<tiles:insertAttribute name="body" />
<hr>
<tiles:insertAttribute name="footer" />
</body></html>
header.jsp、footer.jsp、body1.jsp、body2.jspは省略。それっぽいものを配置すればOK。
src/TilesServlet.java
public class TilesServlet extends HttpServlet
{
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
// TilesDispatchServletに拾ってもらうために末尾を".tiles"とする
String nextPage = "main.page1.tiles";
// 必要であれば、表示先を条件分岐させる。
if ( hogehoge ) { nextPage = "main.page2.tiles"; }
RequestDispatcher dispatcher = request.getRequestDispatcher(nextPage);
dispatcher.forward(request, response);
}
}
ざっとこんな感じで。昔はもうちょっと細かいところまで駆使してた記憶があるけど、とりあえずは動くところまで。やっていくうちに必要なものもでてくるでしょう。
次は、Tilesの細かい部分か、Taglibsを思いだそうと思います。
