Java 小应用程序语言环境可让您在自己的 Net.Data 应用程序中方便地为 Java 小 应用程序生成 HTML 标记。当您调用 Java 小应用程序语言环境时,需要指定小应用程序的名称 并传送小应用程序所需的全部参数。语言环境将处理宏并生成 HTML 小应用程序标记,Web 浏览器使用这些标记来运行 该小应用程序。
另外,Net.Data 提供了一系列接口,您的小应用程序可以用它们来访问表格参数。这些 接口包含在 DTW_Applet.class 类中。
以下章节将描述如何使用 Java 小应用程序语言环境来运行您的 Java 小应用程序。
验证初始化文件中有以下配置语句,并且是在一行上:
ENVIRONMENT (DTW_APPLET) DTWJAVA ( OUT RETURN_CODE )
参见环境配置语句,以进一步了解 Net.Data 初始化文件和语言环境 ENVIRONMENT 语句。
使用 Net.Data Java 小应用程序语言环境之前,您需要确定您计划使用哪些小应用 程序或者需要编写哪些小应用程序。参见您的 Java 文档以获取更多有关创建小应用程序的信息。
您使用 Net.Data 函数调用来指定对小应用程序语言环境的调用。对于这个函数调用不需要任何 说明。函数调用的语法如下:
@DTWA_AppletName(parm1, parm2, ..., parmN)
要编写一个生成小应用程序标记的宏:
%define{ DATABASE = "celdial" <=Name of the database MyGraph.codebase = "/netdata-java/" <=Required applet attribute MyGraph.height = "200" <=Required applet attribute MyGraph.width = "400" <=Required applet attribute MyTitle = "Celdial results" <=Name of the Web page MyTable = %TABLE(all) <=Table to store query results %}
%FUNCTION(DTW_SQL) mySQL(OUT table){ select name, ages from ibmuser.guests %}
例如:
%HTML(report){ @mySQL(MyTable) <=A call to mySQL @DTWA_MyGraph(MyTitle, DTW_COLUMN(ages) MyTable) <=Applet function call %}
您可以在 Net.Data 宏中的任何地方为小应用程序标记指定属性。 Net.Data 将所有形如 AppletName.attribute 的变量替代到 小应用程序标记中,作为属性。对小应用程序标记定义属性的语法是这样的:
%define AppletName.attribute = "value"
以下属性是所有小应用程序都需要的:
以下属性是可选的:
例如,如果您的小应用程序名为 MyGraph,那么您可以定义这些必需的属性:
%DEFINE{ MyGraph.codebase = "/netdata-java/" MyGraph.height = "200" MyGraph.width = "400" %}
实际的赋值不需要在 DEFINE 部分完成。您可以使用 DTW_ASSIGN 函数来设置值。如果您没有 为 AppletName.code 变量定义一个变量,则 Net.Data 将在小应用程序标记中 添加一个缺省的 code 参数。code 参数的值 为 AppletName.class,其中 AppletName 是您的小应用程序名。
您定义一个参数列表,它们在函数调用中传送至 Java 小应用程序语言环境。您可以传递的参数包括:
传递参数时,Net.Data 将使用您为该参数指定的名称和值在 HTML 输出中创建 一个 Java 小应用程序 PARAM 标记。 不能传递字符串文字或函数调用的结果。
您可以将 Net.Data 变量用作参数。如果您在宏的 DEFINE 块中定义一个变量并在 DTWA_AppletName 函数调用中传送该变量,那么 Net.Data 将生成一个名称与值 都与该变量相同的 PARAM 标记。例如,给出以下宏语句:
%define{ ... MyTitle = "This is my Title" %} %HTML (report){ @DTWA_MyGraph( MyTitle, ...) %}
Net.Data 产生以下小应用程序的 PARAM 标记:
<param name = 'MyTitle' value = "This is my Title" />
每次调用 Java 小应用程序语言环境时,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 仅 对于指定的列生成相应的小应用程序标记。表格列参数使用以下语法:
@DTWA_AppletName(DTW_COLUMN( x )Table)
其中 x 是表格中的列名或列号。
表格列参数使用为表格参数定义的小应用程序标记。
变量 DTW_APPLET_ALTTEXT 指定了显示在不支持 Java 的浏览器或关闭了 Java 支持的 浏览器上的文本。例如,以下变量定义:
%define DTW_APPLET_ALTTEXT = "<p>Sorry, your browser is not Java-enabled."</p>
将产生以下 HTML 标记和文本:
<p>Sorry, your browser is not Java-enabled.</p><
如果没有定义这个变量,则不显示任何替换文本。
下面的示例演示了调用 Java 小应用程序语言环境的 Net.Data 宏以及该语言环境生成的 结果小应用程序标记。
Net.Data 宏中包含以下对 Java 小应用程序语言环境的函数调用:
%define{ DATABASE = "celdial" DTW_APPLET_ALTTEXT = "<p>Sorry, your browser is not Java-enabled."</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 宏定义行指定了小应用程序标记的属性:
MyGraph.codebase = "/netdata-java/" MyGraph.height = "200" MyGraph.width = "400"
语言环境使用以下限定符生成了一个小应用程序标记:
<applet code='MyGraph.class' codebase='/netdata-java/' width='400' height='200' >
Net.Data 从 Net.Data 宏的 SQL 部分返回 SQL 查询的结果,结果放在 输出表 MyTable 中。此表格在 DEFINE 部分指定:
MyTable = %TABLE(all)
宏当中对小应用程序的调用是在 HTML 部分指定的:
@DTWA_MyGraph( MyTitle, DTW_COLUMN(ages) MyTable )
根据函数调用中的参数,Net.Data 生成完整的小应用程序标记,其中包含有关结果表格的信息, 例如:列数、返回的行数以及结果行。 Net.Data 为结果表格中的每个单元生成一个参数标记,如下面这个示例所示:
<param name = 'DTW_MyTable_ages_VALUE_1' value = "35" />
参数名称 DTW_MyTable_ages_VALUE_1 指定了表格 MyTable 中的 表格单元(行 1,列 ages),其值为 4。在对小应用程序的函数调用中的 关键字 DTW_COLUMN 指定了您只对结果表格 MyTable 中的列 age 感兴趣,如这里所示:
@DTWA_MyGraph( MyTitle, DTW_COLUMN(ages) MyTable )
以下输出显示了 Net.Data 为上述示例生成的完整的小应用程序标记。
<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>Sorry, your browser is not Java-enabled.</p> </applet>
Net.Data 在一个名为 DTW_Applet.class 的类中提供了一系列接口,它们可以和 您的 Java 小应用程序一起使用,帮助处理为表格变量生成的 PARAM 标记。您可以创建一个扩充此 接口的小应用程序,用于从您的小应用程序调用例程。
Net.Data 提供了这些接口:
要访问接口,请在您的小应用程序代码中使用 EXTENDS 关键字来把您的小应用程序从 DTW_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"); } } }