Transcript *** 1
整合現有服務的API
語言之研究
第三季報告
計劃主持人:義守大學 資工系 歐陽振森 教授
大綱
第三季執行目標:
現有雲端服務API的實作與整理
分析並設計呼叫兩大系列所提供的API中介語言,以
對應XML為主的中介語言規格。並以進行以Google為
主的單機系統模擬。
第三季執行成果:
Google API函式介紹
DWR介紹與實例
第四季預期目標:
設計雲端應用服務API描述中介語言(meta-language)剖
析器。進行剖析器演算法實做及撰寫結案報告。
Google API函式(1/5)
因為本子計劃最主要是要建立中介語言(meta-language)
以方便使用者在開發程式時更容易使用,故整理分類
google所提供之API的重點不會放在已有的google服務,
而會放在撰寫程式時google所提供之必要函式
<script src="http://www.google.com/jsapi"></script>
<script>
// 載入 jQuery
google.load("jquery", "1");
// 網頁載入完成後,使用 jQuery 函數
google.setOnLoadCallback(
function()
{
$.get("http://jsgears.com/index.php",
function (data)
{
// 處理取得的 data
});
});
</script>
Google API函式(2/5)
load():
使用 Google AJAX API Loader 的 google.load() 來把檔案讀
進來
google.load() 的第一個參數是 library 的名稱,目前支援的
libraries 包含了:
* jquery
* prototype
* scriptaculous
* mootools
* dojo
Google API函式(3/5)
第二參數則是指定版本,版本的指定方式很靈活,假
設版本有 1.8.2、1.8.4 以及 1.9.1 三種,你可以指定
1.8.2 明確地表示要使用 1.8.2 這個版本,也可以指定
1.8 表示要使用 1.8.x 的最新版,也就是 1.8.4,甚至你
也可以指定 1 表示使用 1.x 的最新版,即為 1.9.1。
Google API函式(4/5)
setOnLoadCallback():
此函數是google提供在載入頁面時,即會去執行()內所
指向的函式,如下圖之程式,即是載入頁面時去執行
名為initialize的函式,所以主要要執行的動作,即是寫
在initialize裡。
<head>
<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script type="text/javascript">
google.load("language","1");
function initialize()
{
var text=document.getElementById("text").innerHTML;
google.language.detect(text, function(result)
{
if(!result.error && result.language)
{
google.language.translate(text,
result.language, "en", function(result)
{
var
translated=document.getElementById("translation");
if(result.translation)
{
translated.innerHTML=result.translation;
}
});
}
});
}
google.setOnLoadCallback(initialize);
</script>
</head>
<body>
<div id="text">你好,這是翻譯的例子</div>
<div id="translation"></div>
</body>
參考資料:Google API大全 程式設計 開發 實例
DWR(Direct Web Remoting)介紹
DWR是設計給Java語言的Ajax框架,讓開發人員可以
利用JavaScript程式呼叫Java語法
DWR的運作可分為兩個部分,一方面用在瀏覽器上,
處理連接伺服器端Java程式,另一部分則是用來展示
回傳資料。
透過DWR呼叫Java的函式,它會處理連接處理的細節,
而當資料被處理完成後,DWR就會執行回呼函式,以
進行後續呈現的處理。
DWR(Direct Web Remoting)介紹
下載 dwr.jar與commons-loggin放在 WEB-INF/lib
在WEB-INF/web.xml 加上
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<display-name>ajaxDWR</display-name>
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
<init-param>
<description></description>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
</web-app>
在web.xml同層中增加文件dwr.xml,此文件是
javaScript中調用的方法,影射到class檔
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD
Direct Web Remoting 1.0//EN"
"http://www.getahead.ltd.uk/dwr/dwr10.dtd">
<dwr>
<allow>
<create creator="new" javascript="Counter">
<param name="class" value=“Hello" />
</create>
</allow>
</dwr>
撰寫後端程式Hello.java做傳字串動作
Hello.java
public class Hello
{
public String hello(String name)
{
return "哈囉!" + name + "!您的第一個DWR!";
}
}
編譯後產生Hello.class
將Hello.java編譯後的.class檔放置WEB-INF\classes
撰寫網頁
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=BIG5">
<title>第一個DWR程式</title>
<script type='text/javascript' src='dwr/interface/Hello.js'></script>
<script type='text/javascript' src='dwr/engine.js'></script>
<script type='text/javascript' src='dwr/util.js'></script>
<script type='text/javascript' src='hello.js'></script>
</head>
<body>
<input id="user" type="text" />
<input type='button' value='哈囉' onclick='hello();' />
<div id="result"></div>
</body>
</html>
撰寫前端呼叫後端hello.js
function hello()
{
var user = $('user').value;
Hello.hello(user, callback);
}
function callback(msg)
{
DWRUtil.setValue('result', msg);
}
結論
DWR可以利用javascript呼叫java,即可在前端呼叫後
端java程式,故可做到客戶端呼叫伺服器的動作,與
本子計劃預期進度相同
第四季 預期目標
設計雲端應用服務API描述中介語言(meta-language)剖
析器。進行剖析器演算法實做及撰寫結案報告。