SlideShare une entreprise Scribd logo
1  sur  42
Télécharger pour lire hors ligne
T2のいま
そしてこれから
                 T2 project
http://t-2.googlecode.com/
           大谷 晋平(shot6)
アジェンダ

自己紹介とチームの紹介
Web開発でいまおきていること
T2概要
T2主要コンポーネント
デモ
まとめ
自己紹介

大谷 晋平(おおたに しんぺい)
オープンソースプログラマ
  Java/ActionScript/JavaScript/C#...
ISIDってところで働いてます
Blog
  http://d.hatena.ne.jp/shot6/
Twitter
  http://twitter.com/shot6/
T2チームの紹介

五人のコミッタ
 四人は遭遇率高い、一人レアキャラ
全員プログラマ、特にJava
全員がフレームワークとアプリの両方を
ばりばり作る人達。
 五人それぞれの経験がT2に注ぎ込まれてます
Web開発でいまおきていること

Webアプリケーション再考のときが来た
 RIAは既に普通の選択肢のひとつ
  Ajax, Flex, Silverlightとか普通。
 クラウドという黒船
  Webアプリケーションが複数のクラウドにデプロイ
  される日がくる?
 HTTPベースなプロトコルやフォーマット全盛
 期の到来
  AMF, XMPP, reversehttp, pubsubhubbub
  またはSOAP
では何が必要になるのか?

RIAからRIPへ
ユニファイドプロトコルHTTP
クラウド可用性
RIP –Rich Internet Platform-

RIP(Rich Internet Platform)
  複数のRIAをサポートするプラットフォームが
  重要(HTML5, Ajax, Flex, Silverlight…).
  マルチパラダイム指向
  RIAによって、サーバサイドが影響を受けない
  HTML5がその中でも最も重要
    HTML4とは違い, HTML5はプラットフォーム.
    特にランタイムが重要
     • WebSockets、WebStorage、WebWorker
     • CacheManifest、Geolocation API
ユニファイドプロトコルHTTP

HTTP/HTTPS最強説
 どんな環境でもHTTPを喋るように。
  簡単にやりとりが可能。ブラウザのみじゃない。
 HTTPベースのフォーマットも同様に重要
  FlexのAMFや, jabberやGoogleTalkなどの
  XMPP(BOSH)、pubsubhubbubなど。
  インタラクティブ性やリアルタイム性が求められる
  新しいタイプのアプリケーションではこのような
  フォーマットやプロトコルが重要
  スマートフォンでもHTML5ベースのアプリが有力
クラウド可用性

Cloudability(クラウド可用性)
 クラウド環境で上手く動作する
 上手く動作するとは:
   デプロイが簡単
   スケールしやすいように原則ステートレス
   複数のクラウド環境で同じように動く
    • GAEやAmazonだけでなく、通常のアプリ環境もあわせ
      て同じように動く事が重要.
Webアプリ次のステップ

これらを指向するフレームワーク選びは
とても重要:
RIAでなくRIP
HTTPベースの複数フォーマットや仕組みをサ
ポート
クラウド可用性


そこで     ですよ!
T2とは

T2とはシンプルで使いやすい現代的な
Webフレームワーク
 アノテーションを使って簡単開発&メンテ
 最新バージョンは0.6.1-ga. ASL2ライセンス.
 http://code.google.com/p/t-2/ で開発中.
 勿論旧来のWebアプリも作りやすい!
 拡張可能かつ組み込みやすい
T2概要図
              HTTP
 Browser      POST                   Serverside java
                                      applications
             XmlHttp
JavaScript
             Request                POJO    ……
  Client
              AMF
                                     POJO   ……
Flex/AIR

                                     POJO   ……
REST-like
 Client      PUT /hoge/foo
                             リクエストフォーマットはサーバサ
                               イドのPOJOに影響しない
何故T2を作ったのか

何故T2を作ったのか
 JavaのWebフレームワークは開発も保守も難し
 すぎる。
 近代的なWebクライアントのサポートが無い
   Ajax, AMF, RESTリクエストなんかを同一のサーバ
   サイドのモデルで開発できる?
 No clean url, no life.
 No choice of template engine, no life.
 CoCより少ない設定を選ぼう。
何故T2を作ったのか(続き)

Webフレームワークってこうあるべき
 もっともっと簡単でいい
 単一の簡単で使いやすいモデルを提供すべき
 色々なリクエストを上手く扱おう
  Ajax、AMF、RESTなど
 綺麗なURLを提供しよう
  強制はしないけど
 テンプレートエンジンはお好きにどうぞ
コンセプト

コンセプト
 一つの事をうまくやろう!
  T2はHTTPクライアントからの接続を適切なPOJOに
  適切なフォーマットで渡すだけ。他の事はしない。
 WEBの多様性を受け入れよう
  色々なクライアントがこれから出てくる。それぞれ
  のやり方を受け入れ、でもサーバサイドは同じ。
  一つだけ確かな事は、HTTP をしゃべり、URLを持
  つ事。それだけが大事。
想定ユーザ

T2を使う想定ユーザ
 こんな開発者の方々:
  自分で作るWebアプリを用意に開発&コントロール
  できるようにしたい.
  クライアントサイドとサーバサイドをキレイに分離
  したい
  自前フレームワークをシンプルかつ拡張容易でコン
  トローラブルにしたい
  RESTやAjax, Flexなどを使ってRIAアプリをさっく
  り作りたい
  クラウドベースのアプリをさっくり作りたい
プログラミングモデル

Pageモデル
 T2を使ったアプリの基本
 基本的にPOJOだけど、アノテーションでエン
 ハンスする
 Pageは1URLと1POJOをマッピングしたもの
 Pageは アクションメソッド を持つ
 アクションパラメータ はアクションメソッドの
 引数でT2がインジェクトする
プログラミングモデル(続き)

 Example:
@Page("employee")
public class EmployeePage {
  @Default
  public Navigation index(WebContext context) {
    …...
  }
@GET
  @ActionPath("list/detail")
  public Navigation detail(WebContext context) {
    ……
  }
}
アクションメソッドデザイン

Funnel(ろうと)デザイン
 Pageは大枠から詳細へ徐々に設定するように作
 る事が出来る
  PageにアノテーションでURLをつける
  ->アクションメソッドにHTTPメソッドをつける
  ->アクションメソッドにURLをつける
  ->->インジェクトしてほしい引数を並べる
アクションメソッドデザイン

Example: HTTP GET /hoge/foo?bar=2
 Pageクラスが/hogeをURLとする
 アクションメソッドで@GETをつける
 アクションメソッドで/fooをURLとする
 アクションパラメータbarをStringで受け取る
アクションメソッドデザイン

こんなかんじ:
@Page("/hoge”)
public YourPage {
 @GET
 @ActionPath(“hoge”)
 public Navigation hoge(@RequestParam("bar") String bar) {
   ……
アクションパラメータデザイン

Struts 1.xを思い出そう
 Actionは引数で固定のものがわたってきた
 あれはあれで良いモデル
T2は?
 もう少しバリエーションをつけたが原則同じ
 パラメータで貰えれば一番わかりやすい
   Setterで貰うと見るべきところが分散する
 対象メソッドだけ見れば良い。
アクションパラメータデザイン

以下のようなアクションパラメータ
 T2が準備したコンテキスト
  WebContext/Request/Response…
 Servletのコンテキスト
  HttpServletRequest/HttpServletResponse…
 フォームデータなどをPOJOに変換したもの
  From HTTP POST, or from Flex AMF
 その他便利なもの
  REST-like なURLの部分、foreachのインデクス、
  ファイルアップロード
コードはこんな感じ!
@Page(”sample")
public class SamplePage {
 @Default
 public Navigation index(WebContext context) {…
 @Amf
 public Navigation execute(HogeDto hoge) {…
@ActionParam
 public Navigation submit(@Form FooDto foo) {…
@ActionPath(“fuga/{moge}”)
 public Navigation submit(@Var(“moge”) String s) {…
主要コンポーネント

@Page
HTTPハンドル機能 @GET/@POST
URLパターン機能 @ActionPath
データマッチング機能 @ActionParam
タイプマッチング機能 @Ajax/@Amf
Navigation
ContainerAdapter
@Page

T2 Pageクラスのルートアノテーション
 @Pageは必ずつけないと駄目
 T2は最小限設定にするために、web.xmlのルー
 トパッケージ設定と@Pageだけで設定完了
 @Pageで大枠のURLを指定する
HTTPマッチング

HTTPメソッドごとに呼び出すメソッドを
変える
 GET, POST, PUT, DELETE, またはHEAD.
 各アノテーションで区別される
 原則アクションメソッドにはつける
  HTTPメソッドごとに処理内容は違う
  PUT/DELETEはブラウザから呼べないので、
  _methodというリクエストパラメータを使う
URLマッチング

リクエストされたURLごとに呼び出すメ
ソッドを変える
 @ActionPathがその中心
 @Page(“hoge”) + @ActionPath(“foo”)
   /hoge/fooがアクセスされるURL
 @Page(“hoge”) + @ActionPath(“foo/{bar}”)
   /hoge/foo/aaaはOK
   /hoge/moge/aaaはNG
データマッチング

送信されてきたデータで呼び出すメソッ
ドを変える
 @ActionParamがその中心
リクエストパラメータ名とメソッド名が同一な
ら呼び出す
  Submitボタンがおされたらsubmitメソッドを呼ぶ
  直感的でわかりやすい
リクエストタイプマッチング

リクエストタイプによって呼び出すメ
ソッドを変える
 @Ajax
  XmlHttpRequestのみを受け付ける
  近代的jsフレームワークの習慣的につけるヘッダで
  ある“X-Requested-With”を利用
 @Amf
  Flex/AIRの高効率バイナリフォーマットAMF
  content-typeヘッダなどで判断
リクエストタイプマッチング

リクエストタイプはとても重要!
Ajax呼び出しとフォームのサブミットは求めら
れる特性が違う。
 同期、非同期を意識する
 T2では明示的に分ける工夫がされている
デフォルトメソッド

デフォルトメソッドは結構重要
 変なエラーを起こさない
 Pageごとに適切なデフォルト動作をセット
@Defaultがそのアノテーション
 一般的にはそのPageが受け持つ遷移先を返す
 状態のクリアなんかも必要な場合も。
 Pageに一個定義しておくべき。
Navigation

Navigationは開発者が最も使うAPI:
 T2に次にどこに遷移するか伝える
 T2にどのようにレスポンスに書くのかを伝える
特徴
 簡単に使える
 拡張や自前実装も簡単
用意されているNavigation

大体こんなもんがある
Forward/Redirect/Proceed(携帯用仮想のリダ
イレクト)
Json(またはSecureJson)
Direct(ストリームレスポンス)
AmfResponse(Flex/AIR AMF)
CacheManifest(Generate HTML5 manifest)
 将来は
  CVS, PDF, GoogleMap, Chartsなどなど
ContainerAdapter

DIコンテナは今やデファクトな技術
 T2はDIコンテナへのアダプタ機能を提供
    Spring/Guice/Seasar2またはLucy
 web.xmlで設定
<init-param>
 <param-name>t2.container.adapter</param-name>
 <param-
value>org.t2framework.t2.adapter.SpringAdapter</param-
value>
</init-param>
デモ

RIAのデモ
 PureMVC + T2 + Spring
クラウドデモ
 Flex + GAEJ + T2
 T2が持っているAMF3実装を使用
Ajaxチックなサンプル(時間あれば)
Mayaaとの連携(時間あれば)
ロードマップ

T2 0.6.x
  コア機能は固まった。
  しばらく0.6系でリリースする予定
  サービスブラウザを追加する
  RESTサポート。POSTオーバロードなど
  T2AMFの機能強化
ロードマップ

T2 0.7以降予定
 Navigationをより豊富に。
  RSS, CSV, PDF, GoogleMap, Chartなど。
 HTML5対応
 WebService対応
  @WebServiceのようなやつ
 XMPP対応
 SSO/OpenID対応
  OpenSSO/OpenID4Java
まとめ

Webアプリケーションは再考の時期に来
ている。変化の時期が来ている。
 RIAからRIPへ。中心はHTML5
 クラウド環境
 HTTP最強説と拡張フォーマットの利用
T2はシンプルで開発しやすく、変化に強
いフレームワーク
 現在の環境も新しい環境も強力にサポート
リソース

サイト
 http://code.google.com/p/t-2/
ダウンロード
 http://code.google.com/p/t-2/downloads/list
Mavenサイト
 http://maven.t2framework.org/maven2/
リソース

ドキュメント
 http://code.google.com/p/t-2/wiki/Index
メーリングリスト
 http://groups.google.com/group/t2-users-en
ソース
 http://code.google.com/p/t-2/source/checkout
ありがとうございました


ご清聴ありがとうございました。
これからもT2を宜しくお願いします!

次のセッションも来てね^^

Contenu connexe

Tendances

Web技術勉強会11回目
Web技術勉強会11回目Web技術勉強会11回目
Web技術勉強会11回目龍一 田中
 
Mylynとおともだち
MylynとおともだちMylynとおともだち
MylynとおともだちHiroki Kondo
 
PXI, LabVIEW事例集2
PXI, LabVIEW事例集2PXI, LabVIEW事例集2
PXI, LabVIEW事例集2nishimizu
 
JUI Conference "Flashはもういらない!?" Adobe MAX Japan 2009
JUI Conference "Flashはもういらない!?" Adobe MAX Japan 2009JUI Conference "Flashはもういらない!?" Adobe MAX Japan 2009
JUI Conference "Flashはもういらない!?" Adobe MAX Japan 2009Yusuke Kawasaki
 
タッチレス・インタラクティブ機能
タッチレス・インタラクティブ機能タッチレス・インタラクティブ機能
タッチレス・インタラクティブ機能LM3LABS
 
25000社以上採用計測ソリューション
25000社以上採用計測ソリューション25000社以上採用計測ソリューション
25000社以上採用計測ソリューションnishimizu
 
【13-C-6】 帳票開発に時間かけすぎていませんか?~もっと簡単に「作る」現場、「使う」現場の最適解を探る~
【13-C-6】 帳票開発に時間かけすぎていませんか?~もっと簡単に「作る」現場、「使う」現場の最適解を探る~【13-C-6】 帳票開発に時間かけすぎていませんか?~もっと簡単に「作る」現場、「使う」現場の最適解を探る~
【13-C-6】 帳票開発に時間かけすぎていませんか?~もっと簡単に「作る」現場、「使う」現場の最適解を探る~devsumi2009
 
Jaws2008 Presen2
Jaws2008 Presen2Jaws2008 Presen2
Jaws2008 Presen2umekoumeda
 
Perlで圧縮
Perlで圧縮Perlで圧縮
Perlで圧縮Naoya Ito
 
はてなブックマークのシステムについて
はてなブックマークのシステムについてはてなブックマークのシステムについて
はてなブックマークのシステムについてNaoya Ito
 
Top Ten SE Concepts V11.1 Jp
Top Ten SE Concepts V11.1 JpTop Ten SE Concepts V11.1 Jp
Top Ten SE Concepts V11.1 JpKenji Hiranabe
 
PHPカンファレンス2009 - 45分で分かる安全なWebアプリケーション開発のための発注・要件・検収
PHPカンファレンス2009 - 45分で分かる安全なWebアプリケーション開発のための発注・要件・検収PHPカンファレンス2009 - 45分で分かる安全なWebアプリケーション開発のための発注・要件・検収
PHPカンファレンス2009 - 45分で分かる安全なWebアプリケーション開発のための発注・要件・検収Hiroshi Tokumaru
 
デブサミ2009 はてなの開発戦略
デブサミ2009 はてなの開発戦略デブサミ2009 はてなの開発戦略
デブサミ2009 はてなの開発戦略Yuichi Tateno
 
OSC2009KYOTO Asterisk User\'s Group Japan
OSC2009KYOTO Asterisk User\'s Group JapanOSC2009KYOTO Asterisk User\'s Group Japan
OSC2009KYOTO Asterisk User\'s Group JapanKenichi 深海
 
ATND - Recruit Media Technology Labs (Internet Week 2008)
ATND - Recruit Media Technology Labs (Internet Week 2008)ATND - Recruit Media Technology Labs (Internet Week 2008)
ATND - Recruit Media Technology Labs (Internet Week 2008)Yusuke Kawasaki
 
【13-B-3】 企業システムをマッシュアップ型に変えるには
【13-B-3】 企業システムをマッシュアップ型に変えるには【13-B-3】 企業システムをマッシュアップ型に変えるには
【13-B-3】 企業システムをマッシュアップ型に変えるにはdevsumi2009
 

Tendances (20)

Web技術勉強会11回目
Web技術勉強会11回目Web技術勉強会11回目
Web技術勉強会11回目
 
Mylynとおともだち
MylynとおともだちMylynとおともだち
Mylynとおともだち
 
114th
114th114th
114th
 
PXI, LabVIEW事例集2
PXI, LabVIEW事例集2PXI, LabVIEW事例集2
PXI, LabVIEW事例集2
 
EclipSky200712
EclipSky200712EclipSky200712
EclipSky200712
 
JUI Conference "Flashはもういらない!?" Adobe MAX Japan 2009
JUI Conference "Flashはもういらない!?" Adobe MAX Japan 2009JUI Conference "Flashはもういらない!?" Adobe MAX Japan 2009
JUI Conference "Flashはもういらない!?" Adobe MAX Japan 2009
 
タッチレス・インタラクティブ機能
タッチレス・インタラクティブ機能タッチレス・インタラクティブ機能
タッチレス・インタラクティブ機能
 
25000社以上採用計測ソリューション
25000社以上採用計測ソリューション25000社以上採用計測ソリューション
25000社以上採用計測ソリューション
 
Ext Ncs 20081029
Ext Ncs 20081029Ext Ncs 20081029
Ext Ncs 20081029
 
【13-C-6】 帳票開発に時間かけすぎていませんか?~もっと簡単に「作る」現場、「使う」現場の最適解を探る~
【13-C-6】 帳票開発に時間かけすぎていませんか?~もっと簡単に「作る」現場、「使う」現場の最適解を探る~【13-C-6】 帳票開発に時間かけすぎていませんか?~もっと簡単に「作る」現場、「使う」現場の最適解を探る~
【13-C-6】 帳票開発に時間かけすぎていませんか?~もっと簡単に「作る」現場、「使う」現場の最適解を探る~
 
Jaws2008 Presen2
Jaws2008 Presen2Jaws2008 Presen2
Jaws2008 Presen2
 
Perlで圧縮
Perlで圧縮Perlで圧縮
Perlで圧縮
 
はてなブックマークのシステムについて
はてなブックマークのシステムについてはてなブックマークのシステムについて
はてなブックマークのシステムについて
 
Top Ten SE Concepts V11.1 Jp
Top Ten SE Concepts V11.1 JpTop Ten SE Concepts V11.1 Jp
Top Ten SE Concepts V11.1 Jp
 
PHPカンファレンス2009 - 45分で分かる安全なWebアプリケーション開発のための発注・要件・検収
PHPカンファレンス2009 - 45分で分かる安全なWebアプリケーション開発のための発注・要件・検収PHPカンファレンス2009 - 45分で分かる安全なWebアプリケーション開発のための発注・要件・検収
PHPカンファレンス2009 - 45分で分かる安全なWebアプリケーション開発のための発注・要件・検収
 
デブサミ2009 はてなの開発戦略
デブサミ2009 はてなの開発戦略デブサミ2009 はてなの開発戦略
デブサミ2009 はてなの開発戦略
 
OSC2009KYOTO Asterisk User\'s Group Japan
OSC2009KYOTO Asterisk User\'s Group JapanOSC2009KYOTO Asterisk User\'s Group Japan
OSC2009KYOTO Asterisk User\'s Group Japan
 
Bi10 ye-001
Bi10 ye-001Bi10 ye-001
Bi10 ye-001
 
ATND - Recruit Media Technology Labs (Internet Week 2008)
ATND - Recruit Media Technology Labs (Internet Week 2008)ATND - Recruit Media Technology Labs (Internet Week 2008)
ATND - Recruit Media Technology Labs (Internet Week 2008)
 
【13-B-3】 企業システムをマッシュアップ型に変えるには
【13-B-3】 企業システムをマッシュアップ型に変えるには【13-B-3】 企業システムをマッシュアップ型に変えるには
【13-B-3】 企業システムをマッシュアップ型に変えるには
 

Plus de Shinpei Ohtani

AWS Lambda and Amazon API Gateway
AWS Lambda and Amazon API GatewayAWS Lambda and Amazon API Gateway
AWS Lambda and Amazon API GatewayShinpei Ohtani
 
ECS for Docker Meetup #4
ECS for Docker Meetup #4ECS for Docker Meetup #4
ECS for Docker Meetup #4Shinpei Ohtani
 
JVM的な何か@JVM Operation Casual Talk
JVM的な何か@JVM Operation Casual TalkJVM的な何か@JVM Operation Casual Talk
JVM的な何か@JVM Operation Casual TalkShinpei Ohtani
 
Amazon kinesisで広がるリアルタイムデータプロセッシングとその未来
Amazon kinesisで広がるリアルタイムデータプロセッシングとその未来Amazon kinesisで広がるリアルタイムデータプロセッシングとその未来
Amazon kinesisで広がるリアルタイムデータプロセッシングとその未来Shinpei Ohtani
 
Amazon Elastic MapReduce@Hadoop Conference Japan 2011 Fall
Amazon Elastic MapReduce@Hadoop Conference Japan 2011 FallAmazon Elastic MapReduce@Hadoop Conference Japan 2011 Fall
Amazon Elastic MapReduce@Hadoop Conference Japan 2011 FallShinpei Ohtani
 
プログラマブルクラウドの薦め
プログラマブルクラウドの薦めプログラマブルクラウドの薦め
プログラマブルクラウドの薦めShinpei Ohtani
 
サンプルから見るMapReduceコード
サンプルから見るMapReduceコードサンプルから見るMapReduceコード
サンプルから見るMapReduceコードShinpei Ohtani
 
Hadoopソースリーディング第1回アジェンダ
Hadoopソースリーディング第1回アジェンダHadoopソースリーディング第1回アジェンダ
Hadoopソースリーディング第1回アジェンダShinpei Ohtani
 
サンプルから見るMap reduceコード
サンプルから見るMap reduceコードサンプルから見るMap reduceコード
サンプルから見るMap reduceコードShinpei Ohtani
 
Hadoopソースリーディング第1回アジェンダ
Hadoopソースリーディング第1回アジェンダHadoopソースリーディング第1回アジェンダ
Hadoopソースリーディング第1回アジェンダShinpei Ohtani
 
Struts2を始めよう!
Struts2を始めよう!Struts2を始めよう!
Struts2を始めよう!Shinpei Ohtani
 

Plus de Shinpei Ohtani (16)

Amazon Aurora
Amazon AuroraAmazon Aurora
Amazon Aurora
 
AWS Lambda and Amazon API Gateway
AWS Lambda and Amazon API GatewayAWS Lambda and Amazon API Gateway
AWS Lambda and Amazon API Gateway
 
ECS for Docker Meetup #4
ECS for Docker Meetup #4ECS for Docker Meetup #4
ECS for Docker Meetup #4
 
JVM的な何か@JVM Operation Casual Talk
JVM的な何か@JVM Operation Casual TalkJVM的な何か@JVM Operation Casual Talk
JVM的な何か@JVM Operation Casual Talk
 
Amazon kinesisで広がるリアルタイムデータプロセッシングとその未来
Amazon kinesisで広がるリアルタイムデータプロセッシングとその未来Amazon kinesisで広がるリアルタイムデータプロセッシングとその未来
Amazon kinesisで広がるリアルタイムデータプロセッシングとその未来
 
Amazon Elastic MapReduce@Hadoop Conference Japan 2011 Fall
Amazon Elastic MapReduce@Hadoop Conference Japan 2011 FallAmazon Elastic MapReduce@Hadoop Conference Japan 2011 Fall
Amazon Elastic MapReduce@Hadoop Conference Japan 2011 Fall
 
プログラマブルクラウドの薦め
プログラマブルクラウドの薦めプログラマブルクラウドの薦め
プログラマブルクラウドの薦め
 
サンプルから見るMapReduceコード
サンプルから見るMapReduceコードサンプルから見るMapReduceコード
サンプルから見るMapReduceコード
 
Hadoopソースリーディング第1回アジェンダ
Hadoopソースリーディング第1回アジェンダHadoopソースリーディング第1回アジェンダ
Hadoopソースリーディング第1回アジェンダ
 
サンプルから見るMap reduceコード
サンプルから見るMap reduceコードサンプルから見るMap reduceコード
サンプルから見るMap reduceコード
 
Hadoopソースリーディング第1回アジェンダ
Hadoopソースリーディング第1回アジェンダHadoopソースリーディング第1回アジェンダ
Hadoopソースリーディング第1回アジェンダ
 
はやわかりHadoop
はやわかりHadoopはやわかりHadoop
はやわかりHadoop
 
T2 Web Framework
T2 Web FrameworkT2 Web Framework
T2 Web Framework
 
Struts2を始めよう!
Struts2を始めよう!Struts2を始めよう!
Struts2を始めよう!
 
Struts2 in a nutshell
Struts2 in a nutshellStruts2 in a nutshell
Struts2 in a nutshell
 
ASP.NET MVC 1.0
ASP.NET MVC 1.0ASP.NET MVC 1.0
ASP.NET MVC 1.0
 

T2 webframework