3日目は僕が使ってるDWRというものについて書いていきます.
DWRって?
JavaScriptから直接Javaのメソッドを叩けるよく分からない技術です.研究室で数年前流行ってました(今は多分僕しか使ってません).
なんで使ってるの?
クライアント,サーバ間で通信する為の記述が面倒臭いから使ってます.AjaxだのPostだのでリクエスト飛ばしてgetAttributeでどーのこーのして
処理が終わったらレスポンスにイソイソ値を入れてとか・・・
いちいち書くのが面倒くせぇ!!ので使ってます.
因みにセキュリティ的にどうのとか書き方的にどうのとか全く気にしてないので知りません.
あとこれしか書けることがn・・・ゲフン
そこ,「またDWRかよ…」とか言わない;
何が良いの?
- サーブレットを書く必要が無い.
- だからrequestやらresponseやらに値を出し入れする事もない.
- Javaさえ書ければ簡単にサーバー側を書ける!(多分).
DWRについてもちっと詳く
JavaScriptからJavaのメソッドが直接叩けます.例えばControllerクラスのloginCheck(String,String)みたいなメソッドがあれば
JavaScript側でController.loginCheck("admin","areare");で呼び出せます.
準備
1:DWRからdwr.jarを落とす.2:web.xmlのweb-app以下に下記を追加する.
3:WEB-INF以下にdwr.xmlを作成する.Direct Web Remoter Servlet DWR Servlet dwr-invoker uk.ltd.getahead.dwr.DWRServlet debug true dwr-invoker /dwr/*
例:testパッケージ内のCalculatorクラスをcalcという名前で
アプリケーションが終了するまでインスタンスを生存させる場合.
これでおしまい.
scopeについて
DWRで生成されるJavaインスタンスの生存期間が指定できます.何も書かないとメソッドを叩く度に生成されます.
- application アプリケーション全体で一つのインスタンスを生成.
- session セッション単位.
- request リクエスト毎.
- page ページ毎.
- script ページを表示している間.
確認の仕方
アプリケーションを実行しアドレスの末尾に「/dwr」とつけてアクセスするとデバッグページが表示されます.(http://localhost:8080/application/dwrみたいな感じ)使える引数
JavaとJS間では以下のように値を受け渡しできます.
Java ⇔ JavaScript
boolean ⇔ 論理型
Byte,Short,Integer,Long,Float,Double ⇔ 数値型
Character,String ⇔ 文字列型
JavaBeansとJavaオブジェクトも受け渡し可能です.
使い方(JS側)
HTMLに以下を記述する.(Helloクラスの場合)
例えば下記のようなメソッドがある場合
最後の引数+1にメソッドの戻り値が返ってきます.
上記の場合helloNameメソッドの結果をcallbackFunk関数で受け取ってます.
(引数のreturnDataに戻り値が入ってます)
これでHelloクラスのメソッドを叩くことができます.
例えば下記のようなメソッドがある場合
public String helloName(String name){ return "Hello "+name; }js側でこんな風に呼び出します.(コンソールに「Hello Yaga」って出ます)
Hello.helloName("Yaga",callbackFunc); function callbackFunc(returnData){ console.log(returnData); }引数が1つ多いと思いますが,DWRでJavaメソッドを呼び出すと
最後の引数+1にメソッドの戻り値が返ってきます.
上記の場合helloNameメソッドの結果をcallbackFunk関数で受け取ってます.
(引数のreturnDataに戻り値が入ってます)
引数にJavaBeansやJavaオブジェクトを使う方法
dwr.xmlのallow以下に以下のように書きます.
JavaBeans以外のJavaオブジェクトを利用する場合は
converterをobjectにします.
JavaBeans以外のJavaオブジェクトを利用する場合は
converterをobjectにします.
後はreturnData.propertyのようにアクセスできます.
var name; var id; var age; School.getStudentData("studentName",function(returnData){ name = returnData.name; id = returnData.id; age = returnData.age; console.log("学籍番号:"+id+" 氏名:"+name+" 年齢:"+age); }); var addStudentData = {name:"Meso",id:"C123456",age:10}; School.setStudentData(addStudentData);10~11行目はBeanDataをサーバー側に送る記述を書いてます.
ちょっと便利なutil関数
JS側に書いてインポートしてるutil.jsを使って色々できます.
ここにはその一部を紹介します.
ここにはその一部を紹介します.
dwr.util.getValue(id)
引数で指定したid属性を取ってきます,まとめて取ってくるgetValuesってのもあります.
dwr.util.setValue(id,value)
引数で指定したid属性の値を変更します.
dwr.util.addOptions(id,OptionData)
idで指定したセレクトボックスのOptionを追加します.
サーバーからオプションの一覧をStringの配列で返して第2引数に突っ込むだけでOKです.
以上になります
特別,必要な技術って訳じゃないですが
やってみると意外と便利だったりするので興味のある人は是非試してみてください.
そんなわけで4日目は前回node.jsについて書いてくれた高木君にバトンタッチします.
それではまた ノシ
0 件のコメント:
コメントを投稿