2022年4月30日土曜日

Cozy Web/Tag

前回紹介したとおりCozy WebではHTMLページを動的に生成するための機能として、テンプレートエンジンScalateによるSspやJade(Pug)を提供しています。

SspやJadeでは、基本的にプログラミング言語の断片をHTMLに埋め込む形になります。プログラミング機能をフルに使えるので、リッチな動的コンテンツを作成できるというメリットがある反面おまじない的なコードが必要になったり、アプリケーションロジックがプレゼンテーション層であるWebページに混入しがちになるといった問題がでてきます。

この問題に対してCozy Webではタグ機能を用意しました。タグ機能はCozy Webが提供する様々な機能をビュー層で簡単に使えるようにするための機能を提供します。拡張タグをHTML内に埋め込むことで、HTMLページの動的機能を簡単に実現することができます。

SSP

まずSSPによる動的ページについて確認しておきましょう。

以下はSSPによる動的ページです。

  1. <%@ var context: ViewContext %>  
  2. <html>  
  3.     <head>  
  4.     <title>HelloTag</title>  
  5.     </head>  
  6.     <body>  
  7.     <p>現在の時刻は${context.datetime}です。</p>  
  8.     </body>  
  9. </html>  

まずページ内で使用する変数として、以下の行でViewContextを格納する変数contextを定義しています。

  1. <%@ var context: ViewContext %>  

そして、以下の行でViewContextオブジェクトのdateTimeメソッドを呼び出し、その結果をpタグ内の文章に埋め込んでいます。dateTimeメソッドは現在時刻をロケール、タイムゾーンに対応した文字列で返します。

  1. <p>現在の時刻は${context.dateTime}です。</p>  

HelloTag

Cozy Webのタグを使用したWebアプリケーションHelloTagを作成します。

アプリケーション

以下のHTMLはCozy Webタグを使用して前出のSSPと同じ動作をします。

  1. <html>  
  2.     <head>  
  3.     <title>HelloTag</title>  
  4.     </head>  
  5.     <body>  
  6.     <p>現在の時刻は<c:datetime/>です。</p>  
  7.     </body>  
  8. </html>  

以下の行で現在時刻を埋め込みたい場所にタグc:datetime配置しています。Cozy WebではHTML内に配置されたc:datetimeを現在時刻に変換します。

  1. <p>現在の時刻は<c:datetime/>です。</p>  

SSPなどのようなプログラミング成分はなく、動的なコンテンツ部分を宣言的に定義することができます。

配備

cozyを起動するディレクトリにwebappsディレクトリに、アプリケーションのホームとなるディレクトリHelloTagを作成します。

このHelloTagディレクトリに前述のindex.htmlを作成すればOKです。

起動

Cozyをwebコマンドで起動するとWebプラットフォームとして起動します。

  1. $ cozy web  

実行

curlコマンドによってローカルホストの8080ポート上の /web/HelloTag/index.html を取得します。

/web はCozy上のWebアプリケーションのホームです。その配下のHelloTagが、先程作成したディレクトリHelloTagに対応するもので、ディレクトリ名がアプリケーション名になっています。

  1. curl -v http://localhost:8080/web/HelloTag/index.html  

取得結果は以下になります。無事登録したHTMLファイルを取得することができました。

-vスイッチが指定されているので、HTTPのプロトコルヘッダーも表示されています。

  1. > GET /web/HelloTag/index.html HTTP/1.1  
  2. > Host: localhost:8080  
  3. > User-Agent: curl/7.76.1  
  4. > Accept: */*  
  5. >   
  6. * Mark bundle as not supporting multiuse  
  7. < HTTP/1.1 200 OK  
  8. < Date: Sat, 30 Mar 2022 18:30:00 GMT  
  9. < Content-Type: text/html;charset=utf-8  
  10. < Transfer-Encoding: chunked  
  11. < Server: Jetty(9.4.38.v20210224)  
  12. <   
  13. <!DOCTYPE html>  
  14. <html>  
  15.     <head>  
  16.     <title>Hello Tag</title>  
  17.     </head>  
  18.     <body>  
  19.     <p>現在の時刻は2022430183000秒です。</p>  
  20.     </body>  
  21. </html>  

まとめ

今回はCozy WebのTag機能を説明しました

Tag機能を使えば、通常のHTMLにタグを埋め込むだけで動的コンテンツのWebページを作成することができます。

次回は動的コンテンツを実現する要の機能であるコントローラー機能を説明します。

諸元

Cozy
0.0.5