Externen Datenspeicher verwenden

In diesem Abschnitt wird CsvDataSourceServlet vorgestellt. CsvDataSourceServlet ist eine Beispielimplementierung, bei der eine CSV-Datei als externer Datenspeicher verwendet wird. In diesem Abschnitt finden Sie außerdem eine detaillierte Anleitung zum Ausführen und Testen von CsvDataSourceServlet.

Hinweis: Bevor Sie mit diesem Abschnitt beginnen, sollten Sie den Abschnitt Erste Schritte mit Datenquellen abschließen.

Wir stellen vor: CsvDataSourceServlet

Die Klasse CsvDataSourceServlet befindet sich im Paket examples. Diese Klasse bietet eine Beispielimplementierung, die eine CSV-Datei als externen Datenspeicher verwendet. CsvDataSourceServlet übernimmt DataSourceServlet, implementiert generateDataTable() und muss in einem Servlet-Container ausgeführt werden.

Ein Snippet von CsvDataSourceServlet finden Sie unten. Mit der Funktion generateDataTable werden Daten für die Bibliothek verfügbar gemacht. Diese Funktion erstellt eine Datentabellenbeschreibung, definiert die Datentabellenspalten und füllt die Datentabelle mit Daten aus einer CSV-Datei. Die CSV-Datei wird aus einer URL gelesen, die in der Abfrage einer anfragenden Visualisierung angegeben ist. Die Bibliothek übernimmt alle anderen Aktionen, die erforderlich sind, um die Datentabelle an die Abfragevisualisierung zurückzugeben.

/**
 * A demo servlet for serving a simple, constant data table.
 * This servlet extends DataSourceServlet, but does not override the default
 * empty implementation of method getCapabilities(). This servlet therefore ignores the
 * user query (as passed in the 'tq' url parameter), leaving the
 * query engine to apply it to the data table created here.
 *
 * @author Nimrod T.
 */
public class CsvDataSourceServlet extends DataSourceServlet {

  /**
   * Log.
   */
  private static final Log log = LogFactory.getLog(CsvDataSourceServlet.class.getName());

  /**
   * The name of the parameter that contains the url of the CSV to load.
   */
  private static final String URL_PARAM_NAME = "url";

  /**
   * Generates the data table.
   * This servlet assumes a special parameter that contains the CSV URL from which to load
   * the data.
   */
  @Override
  public DataTable generateDataTable(Query query, HttpServletRequest request)
      throws DataSourceException {
    String url = request.getParameter(URL_PARAM_NAME);
    if (StringUtils.isEmpty(url)) {
      log.error("url parameter not provided.");
      throw new DataSourceException(ReasonType.INVALID_REQUEST, "url parameter not provided");
    }

    Reader reader;
    try {
      reader = new BufferedReader(new InputStreamReader(new URL(url).openStream()));
    } catch (MalformedURLException e) {
      log.error("url is malformed: " + url);
      throw new DataSourceException(ReasonType.INVALID_REQUEST, "url is malformed: " + url);
    } catch (IOException e) {
      log.error("Couldn't read from url: " + url, e);
      throw new DataSourceException(ReasonType.INVALID_REQUEST, "Couldn't read from url: " + url);
    }
    DataTable dataTable = null;
    ULocale requestLocale = DataSourceHelper.getLocaleFromRequest(request);
    try {
      // Note: We assume that all the columns in the CSV file are text columns. In cases where the
      // column types are known in advance, this behavior can be overridden by passing a list of
      // ColumnDescription objects specifying the column types. See CsvDataSourceHelper.read() for
      // more details.
      dataTable = CsvDataSourceHelper.read(reader, null, true, requestLocale);
    } catch (IOException e) {
      log.error("Couldn't read from url: " + url, e);
      throw new DataSourceException(ReasonType.INVALID_REQUEST, "Couldn't read from url: " + url);
    }
    return dataTable;
  }
}

CsvDataSourceServlet ausführen und testen

In diesem Abschnitt finden Sie eine Anleitung zum Ausführen und Testen von CsvDataSourceServlet.

Wenn Sie CsvDataSourceServlet ausführen und testen möchten, erstellen Sie eine CSV-Datei, aktualisieren Sie Ihre Webanwendung und richten Sie eine Visualisierung ein, die die Datenquelle abfragt, wie in den folgenden Abschnitten beschrieben:

CSV-Datei erstellen

Die Datei csv_example.csv wird im Verzeichnis <data_source_library_install>/examples/src/html bereitgestellt. Es enthält die folgenden Werte:

Employee,Manager
Roger,John
Robert,John
Jane,Roger
Jack,Jane
Bob,Jane

Kopieren Sie diese Datei in das Verzeichnis <tomcat_home>/webapps/myWebApp, das Sie im Abschnitt Erste Schritte erstellt haben.

Webanwendung auf Apache Tomcat aktualisieren

Folgen Sie der Anleitung unten oder passen Sie sie an, um Ihre Webanwendung auf Apache Tomcat zu aktualisieren. Die folgende Anleitung gilt speziell für Apache Tomcat auf einem Windows-System:

  1. Die Datei web.xml, die Sie zuvor in das Verzeichnis WEB-INF kopiert haben, enthält bereits die für dieses Beispiel erforderliche Definition und Zuordnung. Folgende Zeilen werden dafür definiert:
    <servlet>
      <servlet-name>CSV Example</servlet-name>
      <description>
      CsvDataSourceServlet
      </description>
      <servlet-class>CsvDataSourceServlet</servlet-class>
    </servlet>
    
    <servlet-mapping>
      <servlet-name>CSV Example</servlet-name>
      <url-pattern>/csv</url-pattern>
    </servlet-mapping>
    
  2. Starten Sie Tomcat neu oder starten Sie Tomcat neu, falls es bereits ausgeführt wird.
     
  3. Klicken Sie auf den folgenden Link: http://localhost:8080/myWebApp/csv?url=http://localhost:8080/myWebApp/csv_example.csv

    Auf dem Bildschirm werden je nach Breite des Bildschirms 6–7 Textzeilen angezeigt.
    Der Text beginnt mit google.visualization.Query.setResponse
    und endet mit {c:[{v:'Bob'},{v:'Jane'}]}]}});.

    Das ist die Antwort, die die CSV-Beispieldatenquelle an eine Visualisierung sendet.

Daten mithilfe einer Visualisierung ansehen

Mit der Datei all_examples.html im Verzeichnis <data_source_library_install>/examples/src/html können die Daten visualisiert werden.

Wenn Sie sich den Quellcode der Datei all_examples.html ansehen, sehen Sie, dass die Datei drei Visualisierungen enthält. Die folgenden Snippets reproduzieren die Spezifikation dieser Visualisierungen.

  • Die folgende Zeile enthält das in diesem Abschnitt behandelte csv-Beispiel:
    query = new google.visualization.Query('csv?url=http://localhost:8080/myWebApp/csv_example.csv');
    Die folgende Zeile gibt die Visualisierung eines Organigramms an:
    var chart = new google.visualization.OrgChart(document.getElementById('csv_div'));
  • Die folgende Zeile enthält die simpleexample, die im Abschnitt Erste Schritte behandelt werden:
    var query = new google.visualization.Query('simpleexample?tq=select name,population');
    Die folgende Zeile gibt eine Kreisdiagramm-Visualisierung an:
    var chart = new google.visualization.PieChart(document.getElementById('simple_div'));
  • Die folgende Zeile enthält das advanced-Beispiel, das unter Funktionen und Ereignisfluss definieren behandelt wird:
    query = new google.visualization.Query('advanced?tableId=planets&tq=select planet,mass');
    Die folgende Zeile gibt die Visualisierung eines Balkendiagramms an:
    var chart = new google.visualization.BarChart(document.getElementById('advanced_div'));

Weitere Informationen zum Angeben eines Diagramms und zum Verwenden der Abfragesprache finden Sie unter Einführung in die Verwendung von Diagrammtools und in der Referenz zur Abfragesprache.

Folgen oder passen Sie die folgende Anleitung an, um eine Visualisierung der von CsvDataSourceServlet bereitgestellten Daten anzuzeigen:

  1. Kopieren Sie die Datei all_examples.html aus dem Verzeichnis <data_source_library_install>/examples/src/html in das Verzeichnis <tomcat_home>/webapps/myWebApp/.
  2. Klicken Sie auf den folgenden Link: http://localhost:8080/myWebApp/all_examples.html. Sie sollten die folgende Visualisierung sehen.


Das Beispiel für eine erweiterte Datenquelle wird unter Funktionen und Ereignisfluss definieren erläutert.

Nächste Schritte

Das nächste Beispiel wird im Abschnitt Funktionen und Ereignisfluss definieren beschrieben. Alternativ können Sie sich die folgenden Links ansehen: