T2-samplesの動かし方
nobuさんのフィードバックを受けてドキュメント書いてみました.
足りなければ、書き足しますので言ってくださると大変たすかりますm(_ _)m
T2-employeeも書くのでしばらくお待ちください。
よろしくおねがいします。
T2-employeeの動かし方
簡単ですが書いてみました.
折をみてユーザガイドにも反映させたいと思います.
(追記)
Wikiでドキュメントはこういうフィードバックを早くできる点が楽ですね.
ちなみにIssueにもTaskとして追加してみました.
T2入門その1 -@Pageとアクションメソッド-
さて、リリースはしたT2 0.3(通称Project Diet)ですが、まだまだドキュメントも足りずノウハウも
たまっていません.なので毎日くらいの勢いでドキュメントの元ネタをがんがんblogに書こうと思います.
まずは今日はT2の基本中の基本について書いてみたいと思います.
T2の基本、それはアノテーションです.
アノテーションで、URLの一部とPOJOをマッピングして、POJO内のメソッドを条件にマッチするときに実行します.
これが基本です.
ここでHelloWorldが来ると思う方も多いでしょうが、実はT2-samplesではGetAndPostPageというクラスが
一番簡単なサンプルです.このサンプルはまるでServlet3.0仕様か!くらいの非常に簡単かつ純粋なサンプルですw
ではまずはGetAndPostPageを見てみましょう.
GetAndPostPageでは、http://yourdomain.com/context-root/getandpostというURLでViewからリクエストされた場合に
動くPOJOとします.あ、yourdomain.comとcontext-rootは特に今回は関係ないので適当です.
@Page("getandpost")が一番の基本です.
(@RequestScopeとかはT2の機能じゃないのでまた今度説明します)
これでhttp://yourdomain.com/context-root/getandpostというリクエストがあったら、
Pageクラスはこいつが使われることが確定します.
こんな感じになります.
package examples.page; ...... /** * This example shows you T2 can do like Servlet3.0:P * * @author shot * */ @RequestScope @Page("getandpost") public class GetAndPostPage {
ここまで簡単なので、おわかりいただけるかと思います.
では次にメソッドの説明にいきましょう!
T2で呼び出されるメソッドを「アクションメソッド」と呼びます.
アクションメソッドは以下のような形になります.
- 戻り値はNavigationインタフェースの実装クラス
- メソッドアノテーションによって、呼び出すときの条件を決定する
- 引数アノテーションによって、渡す値を絞り込んだりもできる
- 暗黙的に引数に渡せる値はHttpServletRequestなどいくつか存在する(ここはドキュメントよんでちょ)
T2のポリシーとして、HTTPメソッドごとにアクションメソッドは呼び分けるようにしています.
これとっても重要です. HTTPのメソッドが違えばやりたいことも違うでしょう、というのがT2の考え方です.
強制はしてませんから、別に一緒にもできますが、ちゃーんとHTTPの基本に則って開発するのが良いですよ、という
T2のメッセージと捉えてほしいと思ってます^^
ではPOSTとGETを分けて実行してみましょう.
HTTPメソッド用のアノテーションとして、@POST/@GETを使います.
こんな感じ.まるでServlet3.0・・・・
@POST public Navigation post(HttpServletRequest request, HttpServletResponse response) { request.setAttribute("message", "Do POST."); return Forward.to("jsp/simpleGetAndPost.jsp"); } @GET public Navigation get(HttpServletRequest request, HttpServletResponse response) { request.setAttribute("message", "Do GET."); return Forward.to("jsp/simpleGetAndPost.jsp"); }
@POST/@GETがついたメソッド、どちらもリクエストに値をちょろっと設定して、フォワードしているだけです.
が、これでHTTPメソッドごとに呼び出すメソッドを切り分けることができるようになってます.
PUTとDELETEも実は動かすように出来ますが今のところOFFにしてたはず.
0.4か0.5でコンソールクライアントのサンプルでも作ろうと思っているので、そこから使えるようにしようかな・・・
最後にjspは以下のような感じです.
${t:url('/getandpost')とかはJSPのFunction機能で、コンテキストルートを先頭に追加してるだけです.
JSP2.0から入ったFunction機能はCubbyで知りました。ありがとう、Cubbyの皆さん!!
しかし、便利すぐる、Function.
<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" errorPage="/error/debug.jsp"%> <%@taglib prefix="t" uri="http://www.t2framework.org/web/t2/functions"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Simple GET and POST</title> </head> <body> <span>${ message }</span> <form name="form1" action="${t:url('/getandpost')}" method="post"> <input type="submit" name="posts" value="POST"/> </form> <form name="form2" action="${t:url('/getandpost')}" method="get"> <input type="submit" name="gets" value="GET"/> </form> </body> </html>
駆け足でT2の基本@Pageと、@POST/@GETを説明してみました.
まとめると、以下の2点です.
次回はアクションメソッドを呼び出す条件を絞り込む、@ActionPathなどを説明します.
Google Chrome
T2のサンプルのweb.xml修正しました.
id:shinさんにつっこまれて気づいた.web.xmlの設定がServlet2.4のままでしたw
ありがとうございます.
というわけで修正して、Servlet2.5としました.次のリリース(0.3.1かな?)にこの修正は入ります.
あと、キーワードを作りました.
T2よりはT2Frameworkで書くほうがお奨めです.
どちらもRSSで拾ってますので何かしら反応できるはずです.
Web2.0の本質
いまさらWeb2.0という人もいるかもしれませんが、今だからWeb2.0について書いてみます.
mark-wadaさんが書いていたのでそれに便乗してみます.
こうした観点から考えていくが、最初にWeb2.0とはいったい何のことかをみていく。
具体的な技術やコンセプトを言う前に大づかみに捉えておくことにする。どうもWeb2.0というのは、「つなぐ」あるいは「つながる」技術でありコンセプトであるのはないかと思う。
http://kamawada.com/~masanori/blog/2008/09/web20web20.html
つなげるものはそれぞれ違うが結局その相互の関係性を従来と違った形に変えていくものであると規定してみた。
まさに自分の考えがこのとおりです.つなぐ&つながるがWeb2.0の本質じゃないかと思っています.
あえて一言追加するならば、Web1.0はそれはユーザが主体的に行わなければいけなかった.
しかし、Web2.0はユーザが受動になれるのが特徴的です.しかもフォーマットなどの受け取り方や、
つなぎ方などはかなり動的に変わるといえるでしょう.パッシブに「つなぐ・つながる」の効果や
メリットを享受できるのがWeb2.0の価値じゃないかなと自分は思っています.
その際たるものがRSSじゃないでしょうか.あれこそパッシブに情報を大量に受信できる仕組みの最たる例です.
また、これらはユーザが人だけの場合に限らず、システムをユーザとして見た場合に
最近のWebサービス系だけがその価値を享受できるわけではなく、色々なところで
実は応用が利くんじゃないのかなあというのが自分が考えているテーマです.
なので、この辺はとても興味がありますね.
下記の議論も非常に面白そうです.
そうすると、次のような切り口が見えてくる。
1) 何と何をつなぐのか
2) どうやってつなぐのか
3) つなぐと何が変わるのか
4) めざすものは何かこれからそれぞれについて検討を加えていくことにする。
http://kamawada.com/~masanori/blog/2008/09/web20web20.html