Upload
yoshiori-shoji
View
4.737
Download
4
Embed Size (px)
Citation preview
次世代 ウェブフレームワーク
の幕開け~ステートフルはじめました
君が僕を望むなら僕は君を忘れない~
Yoshiori SHOJI
自己紹介
注意このプレゼンに登場する
ステートフルなフレームワークは現在流行中の RESTful と
競合したり、敵対するのもではありません誤った認識でみてしまうと
本質を見落としてしまいがちになりますのでご注意ください。
ステートって何?
ステート = 状態
http://rest.blueoxen.net/cgi-bin/wiki.pl?RestFaq#nid5EC
A: 電話番号教えて
B: あんた誰?
A: ちょw 古い友達のフランクだよ!!
B: あ、そか、俺の番号は…
stateful
A: 電話番号教えて
B: あんた誰?
A: 古い友達のフランクだけど電話番号教えて
B: 俺の番号は…
stateless
HTTP プロトコル
HTTP プロトコル•プロトコルレベルではステートレス
•クライアント側との連携で擬似的に接続状態の維持をしている
•誤解を恐れずに言えば「プロトコルレベルではステートレスだけど実質的にはステートフル」とも言える
すごくシンプルな例
ブラウザの戻る,進む
クライアント側(ブラウザに限らず)は様々な情報を使ってサーバと状態のやりとりをする
•cookie• 値を直接 cookie に
• サーバ側との一意なキー(実際の値はサーバ側で持っている)
•GET パラメータ
•POST パラメータ
•ヘッダ
アプリケーション
アプリケーション•ステートレスな処理もあればステートフルな処理もある
•ステートレスだけで済ませられればそれにこしたことは無い
•しかしステートレスだけで処理しようとすると問題もある
よくある例
入力画面 確認画面 完了画面
入力画面で入力されたものを
ここまで持っていなければいけない
今までのフレームワーク
今までのフレームワーク•基本的にはプロトコルに準拠
•プロトコルレベルを薄くラップしてステートフルを実現
• session に値を保存
•もしくは hidden や GET パラメータなど
フレームワーク
HTTP プロトコル
ステートレス
アプリケーション
ステートフル
フレームワーク
簡単にいうと
•HTTP プロトコルはステートレス
•Web アプリケーションはステートを持つ必要がある
• session への保持や破棄は本来のロジック記述には不必要な作業
ん?どこかで聞いたことのあるような台詞?
メモリ管理や GC などで散々議論されてきた話題とにていませんか?
セキュリティ
•cookie• 値を直接 cookie に
• サーバ側との一意なキー(実際の値はサーバ側で持っている)
•GET パラメータ
•POST パラメータ
•ヘッダ
クライアントに値を返してる
入力画面 確認画面 完了画面
validate必要 validate必要
クライアントに値を返すと
ちょっとでもミスをすると……
こんにちは!こんにちは! こんにちは!
こんにちは!こんにちは!こんにちは!
こんにちは!こんにちは!
こんにちは!こんにちは!
こんにちは!こんにちは!
こんにちは!こんにちは!
こんにちは!こんにちは!
こんにちは!こんにちは!
こんにちは!こんにちは!
こんにちは!こんにちは!
こんにちは!こんにちは!
こんにちは!こんにちは!
表示画像と内容には一切関係はありません
その他にも
様々な問題の解決
•戻るボタン対策
•ダブルサブミット
•マルチウインドウ対策
• F5(更新)連打対策
ステートフルなwebアプリケーションフレームワークは
開発者がビジネスロジックに
注力できる
JBoss Seam
JBoss Seam とは?•JBoss SeamはJBossによって開発された初めての Webアプリケーションフレームワークである
• JSR-299:WebBeans(2)
• Specification Lead Gavin King JBoss, Inc.
Seam は Glue(糊)
•JSF - View と Controller
•EJB3 - Model
@Stateful @Name("hello") @Scope(CONVERSATION) public class HelloAction implements Hello,Serializable{ @In private User user; @Begin public String imput() { // ... return "success"; } @End public String save() { // ... return "success"; }}
Wicket
Wicket とは?
•Swing ライクなコーディング
• View と Controller
• コンポーネント
• (X)HTML と Java だけで簡潔
public class ExamplePage extends WebPage { private static final long serialVersionUID = 1L; private String labelText;
public ExamplePage() { Form form = new Form("form"); form.add( new TextField("field", new PropertyModel(this,"labelText"))); form.add(new Button("nextButton") { private static final long serialVersionUID = 1L; protected void onSubmit() { setResponsePage(new NextPage(ExamplePage.this)); } }); super.add(form); } // ... }
コスト
session使いまくっていいの?
すぐに移行すべきか
Struts Ruby on Rails枯れた技術の集合
ステートフルなフレームワークを
抽象的に理解することこそが
大事
最後に
今年のデブサミのテーマ「コードで世界を変える」
「誰か」という人は存在しない
みんなで変えていこう!
• blog とかで何でもいいから発信を!
•ただ文句を言うだけでなくどうしたいかを!
•どんどん発表しよう!!Java-ja1000Speakers
ご静聴ありがとうございました