今週のキャリッジさん

とある銀座の零細システム会社の社員ブログ

Apache Tilesを動かせるところまで設定する。

1月 27th, 2010

個人的なメモエントリー。

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を思いだそうと思います。

Leave a Reply