Korzystanie z zewnętrznego magazynu danych

W tej sekcji opisujemy CsvDataSourceServlet. CsvDataSourceServlet to przykład implementacji, która używa pliku CSV jako zewnętrznego magazynu danych. W tej sekcji znajdziesz także szczegółowe instrukcje uruchamiania i testowania środowiska CsvDataSourceServlet.

Uwaga: przed rozpoczęciem tej sekcji musisz wypełnić sekcję Pierwsze kroki ze źródłami danych.

Przedstawiamy CsvDataSourceServlet

Klasa CsvDataSourceServlet znajduje się w pakiecie examples. Ta klasa zawiera przykładową implementację, która wykorzystuje plik CSV jako zewnętrzny magazyn danych. Ustawienie CsvDataSourceServlet dziedziczy z kontenera DataSourceServlet, implementuje metodę generateDataTable() i musi być uruchamiane w kontenerze serwletu.

Fragment kodu CsvDataSourceServlet znajdziesz poniżej. Funkcja generateDataTable udostępnia dane w bibliotece. Ta funkcja tworzy opis tabeli danych, definiuje kolumny tabeli danych i uzupełnia tabelę danych danymi pochodzącymi z pliku CSV. Plik CSV jest odczytywany z adresu URL określonego w żądaniu wizualizacji. Biblioteka obsługuje wszystkie inne działania niezbędne do przywrócenia tabeli danych do wizualizacji zapytań.

/**
 * 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;
  }
}

Uruchamianie i testowanie CsvDataSourceServlet

W tej sekcji znajdziesz instrukcje dotyczące uruchamiania i testowania środowiska CsvDataSourceServlet.

Aby uruchomić i przetestować CsvDataSourceServlet, utwórz plik CSV, zaktualizuj aplikację internetową i skonfiguruj wizualizację dla źródła danych w sposób opisany w poniższych sekcjach:

Tworzenie pliku CSV

Plik csv_example.csv znajduje się w katalogu <data_source_library_install>/examples/src/html. Tabela zawiera te wartości:

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

Skopiuj ten plik do katalogu <tomcat_home>/webapps/myWebApp utworzonego w sekcji Pierwsze kroki.

Aktualizowanie aplikacji internetowej w Apache Tomcat

Aby zaktualizować aplikację internetową na serwerze Apache Tomcat, wykonaj lub dostosuj podane niżej instrukcje. Te instrukcje dotyczą Apache Tomcat w systemie Windows:

  1. Plik web.xml skopiowany wcześniej do katalogu WEB-INF zawiera już definicję i mapowanie wymagane w tym przykładzie. Wiersze, które to definiują:
    <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. Uruchom program Tomcat lub uruchom ponownie Tomcata, jeśli jest już uruchomiony.
     
  3. Kliknij ten link: http://localhost:8080/myWebApp/csv?url=http://localhost:8080/myWebApp/csv_example.csv

    Na ekranie wyświetli się 6–7 wierszy tekstu.
    Tekst zaczyna się od google.visualization.Query.setResponse
    i kończy na {c:[{v:'Bob'},{v:'Jane'}]}]}});

    To jest odpowiedź, którą przykładowe źródło danych CSV wysyła na wizualizację.

Wizualizacja do wyświetlania danych

Plik all_examples.html w katalogu <data_source_library_install>/examples/src/html może służyć do wyświetlania wizualizacji danych.

Jeśli wyświetlasz źródło pliku all_examples.html, zobaczysz w nim 3 wizualizacje. Podane niżej fragmenty kodu odzwierciedlają specyfikację wizualizacji.

  • Wiersz csv przedstawia przykład w tej sekcji:
    query = new google.visualization.Query('csv?url=http://localhost:8080/myWebApp/csv_example.csv');
    Poniższy wiersz określa wizualizację wykresu organizacji:
    var chart = new google.visualization.OrgChart(document.getElementById('csv_div'));
  • Ten wiersz określa simpleexample w sekcji Pierwsze kroki:
    var query = new google.visualization.Query('simpleexample?tq=select name,population');
    Poniższy wiersz określa wizualizację wykresu kołowego:
    var chart = new google.visualization.PieChart(document.getElementById('simple_div'));
  • Ten wiersz określa przykład właściwości advanced:

Więcej informacji o sposobie określania wykresu i korzystaniu z języka zapytania znajdziesz w artykułach Wprowadzenie do używania wykresów i Informacje o języku zapytań.

Aby wyświetlić wizualizację danych wyświetlanych przez CsvDataSourceServlet (lub dostosować się do poniższych instrukcji):

  1. Skopiuj plik all_examples.html z katalogu <data_source_library_install>/examples/src/html do katalogu <tomcat_home>/webapps/myWebApp/.
  2. Kliknij ten link: http://localhost:8080/myWebApp/all_examples.html. Powinna wyświetlić się ta wizualizacja.


Przykład zaawansowanego źródła danych omawiamy w sekcji Definiowanie możliwości i przepływu zdarzeń.

Następne kroki

Następny przykład znajdziesz w sekcji Definiowanie możliwości i przepływu zdarzeń. Możesz też kliknąć te linki: