JSPネタ3本目。
Ajaxです。
こちらも独自のライブラリを使うようですね。
drwというものが有名のようです。
Contents
dwr
pomでの記述
下記の記述でダウンロードすればOKです。
1 2 3 4 5 |
<dependency> <groupId>org.directwebremoting</groupId> <artifactId>dwr</artifactId> <version>3.0.0-RELEASE</version> </dependency> |
URL http://directwebremoting.org/dwr/downloads/index.html
web.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<servlet> <display-name>DWR Servlet</display-name> <servlet-name>dwr-invoker</servlet-name> <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>classes</param-name> <param-value>JavaScriptから呼ばれるJavaのプログラムのフルパス</param-value> </init-param> <init-param> <param-name>crossDomainSessionSecurity</param-name> <param-value>false</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>dwr-invoker</servlet-name> <url-pattern>/dwr/*</url-pattern> </servlet-mapping> |
dwr.xml
web.xmlと同階層に下記のような設定ファイルを設置します。
1 2 3 4 5 6 7 |
<dwr> <allow> <create creator="new" javascript="JavaScriptの名称" scope="スコープ"> <param name="class" value="Javaのプログラムのフルパス" /> </create> </allow> </dwr> |
JSP+JavaScript
JSP
ヘッダー部分のみ記述します。
1 2 3 4 |
<script type="text/javascript" src="dwr/engine.js"></script> <script type="text/javascript" src="dwr/util.js"></script> <script type="text/javascript" src="dwr/interface/ajaxManager.js"></script> <script type="text/javascript" src="JavaにアクセスするJavaScriptのパス"></script> |
上3行は決め打ちです。一番下は自分で作成するJavaScriptのパスを記述
http://localhost/プロジェクト名/dwr/interfaceにアクセスすると使用できるAjaxのプログラムが表示されます。
JavaScript
1 2 3 4 |
//dwr.xmlで設定した名前 ajaxManager.getSample(samplevar1,function(result){ alert(result); }); |
引数、コールバック関数の順です。上の例ではただの文字列ですが、オブジェクトを渡すこともできるようです。
もう一つうれしいこととして、コールバック関数の戻り値(上記でいうとresult)はListやMapを自動変換してくれ、JavaScriptでそのまま、配列やオブジェクトとして使えます。
JavaScriptからアクセスされるJava
AjaxManage.java
普通のPOJOです。
1 2 3 4 5 6 |
public class AjaxManager { public String getSample(String projectId) { return "hoge"; } } |
その他参考
独習Javaサーバサイド(P466~P480)にもdwrを使った方法が書かれていますが、staticで記述しなくてはならず、いまいち使い勝手がわるかったので上記の方法にしました。(調べが足りてないだけかもしれませんが・・・)
その他の小ネタ
Ajaxで呼ばれるJava(AjaxManager.java)からサーブレット(ServletContext)を呼び出す方法
今回と直接関係ないですが、warファイルの解凍方法