Java applet 語言環境可讓您在 Net.Data 應用程式中輕易地建立 Java applet 的 HTML 標籤。 當您呼叫 Java applet 語言環境時,您將指定 applet 的名稱, 以及傳遞 applet 需要的任何參數。語言環境會處理巨集,並建立 HTML applet 標籤, 然後 Web 瀏覽器會使用它來執行 applet。
此外,Net.Data 會提供一組介面,applet 可使用它們來存取表格參數。 這些介面位在類別 DTW_Applet.class 中。
下列各節將描述如何使用 Java applet 語言環境,來執行 Java applet。
請驗證下列架構陳述式是否在起始設定檔案中,且位在同一行上:
ENVIRONMENT (DTW_APPLET) DTWJAVA ( OUT RETURN_CODE )
請參閱環境架構陳述式,以瞭解 Net.Data 起始設定檔案及語言環境 ENVIRONMENT 陳述式。
在使用 Net.Data Java applet 語言環境之前,您需要決定您計劃使用哪些 applet, 或您需要撰寫哪些 applet。請參閱 Java 文件,以取得如何建立 applet 的詳細資訊。
您可以用 Net.Data 函數呼叫來建立 applet 語言環境的呼叫。 不需要宣告函數呼叫。函數呼叫的語法如下:
@DTWA_AppletName(parm1, parm2, ..., parmN)
若要撰寫一個建立 applet 標籤的巨集:
%define{ DATABASE = "celdial" <=資料庫名稱 MyGraph.codebase = "/netdata-java/" <=必要的 applet 屬性 MyGraph.height = "200" <=必要的 applet 屬性 MyGraph.width = "400" <=必要的 applet 屬性 MyTitle = "Celdial results" <=網頁名稱 MyTable = %TABLE(all) <=儲存查詢結果的表格 %}
%FUNCTION(DTW_SQL) mySQL(OUT table){ select name, ages from ibmuser.guests %}
例如:
%HTML(report){ @mySQL(MyTable) <=呼叫 mySQL @DTWA_MyGraph(MyTitle, DTW_COLUMN(ages) MyTable) <=Applet 函數呼叫 %}
您可以在 Net.Data 巨集中的任意處指定 applet 標籤的屬性。 Net.Data 會將具有套表 AppletName.attribute 的所有變數替代成作為屬性的 applet 標籤。 在 applet 標籤上定義屬性的語法如下:
%define AppletName.attribute = "value"
下列屬性對所有 applet 是必要的:
下列屬性是選用性的:
例如,如果您的 applet 稱為 MyGraph,則您可以定義如下的這些必要屬性:
%DEFINE{ MyGraph.codebase = "/netdata-java/" MyGraph.height = "200" MyGraph.width = "400" %}
在 DEFINE 區段中不需要真正的指定。您可以用 DTW_ASSIGN 函數來設定值。 如果您未定義一個變數代表 AppletName.code 變數, 則 Net.Data 將新增預設 code 參數到 applet 標籤。 code 參數的值為 AppletName.class, 其中 AppletName 是您的 applet 的名稱。
您可以在函數呼叫中定義要傳遞給 Java applet 語言環境的參數列示。 您可以傳遞包括下列的參數:
當您傳遞參數時,Net.Data 會在 HTML 輸出中,以您指定給參數的名稱及值, 來建立 Java applet PARAM 標籤。 您無法傳遞字串文字或函數呼叫的結果。
您可以使用 Net.Data 變數作為參數。如果您在巨集的 DEFINE 區塊中定義一個變數, 並傳遞 DTWA_AppletName 函數呼叫中的變數值, 則 Net.Data 將建立一個與變數具有相同名稱及值的 PARAM 標籤。例如, 給與下列巨集陳述式:
%define{ ... MyTitle = "This is my Title" %} %HTML(report){ @DTWA_MyGraph( MyTitle, ...) %}
Net.Data 將產生下列 applet PARAM 標籤:
<param name = 'MyTitle' value = "This is my Title" />
每次呼叫 Java applet 語言環境時,Net.Data 會自動以 DTW_NUMBER_OF_TABLES 的名稱, 建立 PARAM 標籤,並指定函數呼叫是否已傳遞任何表格變數。 值是 Net.Data 在函數中使用的表格變數的數目。 如果未在函數呼叫中指定任何表格變數,將建立下列標籤:
<param name = "DTW_NUMBER_OF_TABLES" value = "0" />
您可以傳遞一個或多個 Net.Data 表格變數,作為函數呼叫上的參數。 如果您在 DTWA_AppletName 函數呼叫上指定 Net.Data 表格變數, 則 Net.Data 將建立下列 PARAM 標籤:
這個標籤將指定要傳遞的表格的名稱。標籤具有下列語法:
<param name = 'DTW_TABLE_i_NAME' value = "tname" />
其中 i 是依據基於函數呼叫次序的表格號碼, 而 tname 則是表格的名稱。
您可建立 PARAM 標籤,來指定特殊表格的列數及欄數。這個標籤具有下列語法:
<param name = 'DTW_tname_NUMBER_OF_ROWS' value = "rows" /> <param name = 'DTW_tname_NUMBER_OF_COLUMNS' value = "cols" />
其中表格名稱是 tname、rows 是表格中的列數,而 cols 則是表格中的欄數。這一對標籤是針對函數呼叫中指定的每一個唯一表格而建立的。
這個 PARAM 標籤會指定特定直欄的直欄名稱。 這個標籤具有下列語法:
<param name = 'DTW_tname_COLUMN_NAME_j' value = "cname" />
其中表格名稱是 tname,j 是欄號,而 cname 是表格中直欄的名稱。
這個 PARAM 標籤會指定特殊橫列及直欄中的值。 這個標籤具有下列語法:
<param name = 'DTW_tname_cname_VALUE_k' value = "val" />
其中表格名稱是 tname,cname 是直欄名稱,k 是列號, 而 val 的值符合對應的橫列及直欄中的值。
您可以傳遞一個表格直欄,當作函數呼叫上的參數,來建立特定直欄的標籤。 Net.Data 僅會對指定的直欄建立對應的 applet 標籤。 表格直欄參數會使用下列語法:
@DTWA_AppletName(DTW_COLUMN( x )Table)
其中 x 是表格中的直欄名稱或欄號。
表格直欄參數會使用針對表格參數所定義的同一個 applet 標籤。
變數 DTW_APPLET_ALTTEXT 指定將顯示在不支援 Java 或已關閉 Java 支援的瀏覽器上的文字。 例如,下列變數定義:
%define DTW_APPLET_ALTTEXT = "<p>很抱歉,您的瀏覽器不支援 Java。"</p>
將產生下列 HTML 標籤及文字:
<p>很抱歉,您的瀏覽器不支援 Java。</p><
如果未定義這個變數,將不會顯示任何替代文字。
下列範例將描述一個 Net.Data 巨集,它可以呼叫 Java applet 語言環境, 以及呼叫語言環境所建立的結果 applet 標籤。
Net.Data 巨集含有 Java applet 語言環境的下列函數呼叫:
%define{ DATABASE = "celdial" DTW_APPLET_ALTTEXT = "<p>很抱歉,您的瀏覽器不支援 Java。"</p> DTW_DEFAULT_REPORT = "no" MyGraph.codebase = "/netdata-java/" MyGraph.height = "200" MyGraph.width = "400" MyTitle = "This is my Title" %} %FUNCTION(DTW_SQL) mySQL(OUT table){ select name, ages from ibmuser.guests %} %HTML(report){ @mySQL(MyTable) @DTWA_MyGraph( MyTitle, DTW_COLUMN(ages) MyTable ) %}
DEFINE 區段中的 Net.Data 巨集行會指定 applet 標籤的屬性:
MyGraph.codebase = "/netdata-java/" MyGraph.height = "200" MyGraph.width = "400"
語言環境會以下列限定元來建立 applet 標籤:
<applet code='MyGraph.class' codebase='/netdata-java/' width='400' height='200' >
Net.Data 會從輸出表格 MyTable 中的 Net.Data 巨集的 SQL 區段中,傳回 SQL 查詢結果。 這個表格是在 DEFINE 區段中指定:
MyTable = %TABLE(all)
巨集中 applet 的呼叫是在 HTML 區段中指定:
@DTWA_MyGraph( MyTitle, DTW_COLUMN(ages) MyTable )
依據函數呼叫中的參數,Net.Data 會建立一個完整的 applet 標籤, 它含有結果的相關資訊,如欄數、傳回的列數,以及結果列。 Net.Data 會對結果表格中的每一資料格建立一個參數標籤,範例如下:
<param name = 'DTW_MyTable_ages_VALUE_1' value = "35" />
參數名稱 DTW_MyTable_ages_VALUE_1 會指定表格 MyTable 中的表格資料格 (第一列,直欄經歷時間),它具有值 4。 applet 的函數呼叫中的關鍵字 DTW_COLUMN 指定您僅對在此顯示的 結果表格 MyTable 的直欄經歷時間有興趣:
@DTWA_MyGraph( MyTitle, DTW_COLUMN(ages) MyTable )
下列輸出會顯示 Net.Data 針對範例建立的完整 applet 標籤:
<applet code='MyGraph.class' codebase='/netdata-java/' width='400' height='200' > <param name = 'MyTitle' value = "This is my Title" /> <param name = 'DTW_NUMBER_OF_TABLES' value = "1" /> <param name = 'DTW_TABLE_1_NAME' value = "MyTable" /> <param name = 'DTW_MyTable_NUMBER_OF_ROWS' value = "5" /> <param name = 'DTW_MyTable_NUMBER_OF_COLUMNS' value = "1" /> <param name = 'DTW_MyTable_COLUMN_NAME_1' value = "ages" /> <param name = 'DTW_MyTable_ages_VALUE_1' value = "35" /> <param name = 'DTW_MyTable_ages_VALUE_2' value = "32" /> <param name = 'DTW_MyTable_ages_VALUE_3' value = "31" /> <param name = 'DTW_MyTable_ages_VALUE_4' value = "28" /> <param name = 'DTW_MyTable_ages_VALUE_5' value = "40" /> <p>很抱歉,您的瀏覽器不支援 Java。</p> </applet>
Net.Data 會在名為 DTW_Applet.class 的類別中提供一組介面, 您可以使用它,搭配您的 Java applet,來協助處理針對表格變數而建立的 PARAM 標籤。 您可以建立一個 applet,擴充這個介面,以便可從您的 applet 呼叫常式。
Net.Data 提供這些介面:
若要存取介面,請在您的 applet 程式碼中使用 EXTENDS 關鍵字, 從 DTW_APPLET 類別取出 applet 的次類別,範例如下:
import java.io.*; import java.applet.Applet; public class myDriver extends DTW_Applet { public void init() { super.init(); if (GetNumberOfTables() > 0) { String [] tables = GetTableNames(); printTables(tables); } } private void printTables(String[] tables) { String table_name; for (int i = 0; i < tables.length; i++) { table_name = tables[i]; printTable(table_name); } } private void printTable(String table_name) { int nrows = GetNumberOfRows(table_name); int ncols = GetNumberOfColumns(table_name); System.out.println("Table: " + table_name + " has " + ncols + " columns and " + nrows + " rows."); String [] col_names = GetColumnNames(table_name); System.out.println("----------------------------------------"); for (int i = 0; i < ncols; i++) System.out.print(" " + col_names[i] + " "); System.out.println("\n--------------------------------------"); String [][] mytable = GetTable(table_name); for (int j = 0; j < nrows; j++) { for (int i = 0; i < ncols; i++) System.out.print(" " + mytable[i][j] + " "); System.out.println("\n"); } } }