Bagian ini memperkenalkan AdvancedExampleServlet2
. AdvancedExampleServlet2
adalah
contoh penerapan sumber data yang menentukan kemampuan dan
alur peristiwa. Bagian ini juga memberikan petunjuk langkah demi langkah tentang cara menjalankan dan menguji AdvancedExampleServlet2
.
Catatan: Anda harus menyelesaikan bagian Memulai sebelum memulai bagian ini.
Memperkenalkan AdvancedExampleServlet2
Class AdvancedExampleServlet2
terletak dalam paket examples
.
Class ini menyediakan contoh implementasi yang menentukan kemampuan dan alur peristiwa.
Bagian terpenting dari AdvancedExampleServlet2
dijelaskan
di bagian berikut:
Menentukan alur peristiwa
AdvancedExampleServlet2
menentukan alur peristiwa dengan mengganti metode HttpServlet.doGet()
dan memanggil berbagai fungsi bantuan yang disediakan oleh DataSourceHelper
.
Cuplikan berikut mengganti doGet()
. Parameter HttpServletRequest
mengenkapsulasi permintaan yang dibuat oleh visualisasi ke servlet. Parameter HttpServletResponse
merangkum respons dari servlet terhadap visualisasi kueri.
Cuplikan ini juga menetapkan dsRequest
ke null. dsRequest
digunakan pada berbagai titik di sepanjang kode.
@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { DataSourceRequest dsRequest = null;
Cuplikan berikut mengekstrak parameter
permintaan dari HttpServletRequest
untuk membuat konteks tempat permintaan berjalan.
try { // Extract the request parameters. dsRequest = new DataSourceRequest(req);
Cuplikan berikut mengambil kueri dari
objek dsRequest
dan membaginya
menjadi dua kueri terpisah. Satu kueri disebut kueri sumber data, kueri lainnya disebut kueri penyelesaian. Karena kemampuan sumber data yang
dideklarasikan adalah SELECT
, kueri sumber data terdiri dari
operasi SELECT
jika objek dsRequest
menyertakan operasi SELECT
.
Kueri penyelesaian terdiri dari semua operasi lain yang diperlukan oleh permintaan, yang mungkin juga mencakup operasi SELECT
. Misalnya, jika kueri yang diminta
adalah SELECT a ORDER
BY b
, kueri sumber data akan menjadi SELECT a, b
dan kueri
penyelesaiannya akan sama dengan kueri asli SELECT a ORDER BY b
.
// Split the query. QueryPair query = DataSourceHelper.splitQuery(dsRequest.getQuery(), Capabilities.SELECT);
Cuplikan berikut mengambil kueri sumber data yang dibuat oleh cuplikan sebelumnya dan HttpServletRequest,
serta membuat tabel data. Lihat bagian Menggunakan
kemampuan
untuk mengetahui detail selengkapnya.
// Generate the data table. DataTable data = generateMyDataTable(query.getDataSourceQuery(), req);
Kode berikut mengambil kueri penyelesaian yang dihasilkan saat kueri dibagi, tabel data yang dihasilkan oleh cuplikan sebelumnya, dan lokal pengguna dari visualisasi kueri. Kode kemudian membuat tabel data baru.
// Apply the completion query to the data table. DataTable newData = DataSourceHelper.applyQuery(query.getCompletionQuery(), data, dsRequest.getUserLocale());
Kode berikut mengambil tabel data yang dihasilkan oleh cuplikan sebelumnya, dan parameter permintaan dari HttpServletRequest
. Kode kemudian menetapkan respons servlet. Container servlet menampilkan respons ini pada visualisasi kueri.
DataSourceHelper.setServletResponse(newData, dsRequest, resp);
Menangani error
Cuplikan berikut menangkap pengecualian, mendapatkan pesan yang sesuai, memformat respons, dan menetapkan respons servlet. Jika dsRequest
null, DataSourceRequest
tidak akan tersedia, mungkin karena kegagalan
konstruktor. Dalam hal ini, HttpRequest
digunakan, bukan DataSourceRequest
.
catch (RuntimeException rte) { log.error("A runtime exception has occured", rte); ResponseStatus status = new ResponseStatus(StatusType.ERROR, ReasonType.INTERNAL_ERROR, rte.getMessage()); if (dsRequest == null) { dsRequest = DataSourceRequest.getDefaultDataSourceRequest(req); } DataSourceHelper.setServletErrorResponse(status, dsRequest, resp); } catch (DataSourceException e) { if (dsRequest != null) { DataSourceHelper.setServletErrorResponse(e, dsRequest, resp); } else { DataSourceHelper.setServletErrorResponse(e, req, resp); } }
Menggunakan parameter URL
Cuplikan berikut mengambil kueri sumber data yang dibuat saat kueri dipisah dan HttpServletRequest
.
HttpServletRequest
secara opsional dapat menyertakan parameter tableId
yang ditentukan sebagai URL. Parameter tableId
ini menentukan tabel data mana yang ditampilkan sebagai berikut:
- Jika parameter
tableId
dihilangkan, atau jika selainplanets
, sumber data akan menampilkan tabel data hewan. - Jika parameter
tableId
ditentukan sebagaiplanets
, sumber data akan menampilkan tabel data planet.
Saat menulis kode untuk menampilkan tabel data, Anda memutuskan parameter mana yang akan diambil.
private DataTable generateMyDataTable(Query query, HttpServletRequest req) throws TypeMismatchException { String tableID = req.getParameter("tableId"); if ((tableID != null) && (tableID.equalsIgnoreCase("planets"))) { return generatePlanetsTable(query); } return generateAnimalsTable(query); }
Menggunakan kemampuan
Cuplikan berikut mengambil kueri dan membuat tabel data animals
.
private DataTable generateAnimalsTable(Query query) throws TypeMismatchException { DataTable data = new DataTable(); ListrequiredColumns = getRequiredColumns(query, ANIMAL_TABLE_COLUMNS); data.addColumns(requiredColumns); // Populate the data table for (String key : animalLinksByName.keySet()) { TableRow row = new TableRow(); for (ColumnDescription selectionColumn : requiredColumns) { String columnName = selectionColumn.getId(); if (columnName.equals(ANIMAL_COLUMN)) { row.addCell(key); } else if (columnName.equals(ARTICLE_COLUMN)) { row.addCell(animalLinksByName.get(key)); } } data.addRow(row); } return data; }
Cuplikan berikut mengambil kueri dan membuat tabel data planets
.
private DataTable generatePlanetsTable(Query query) throws TypeMismatchException { DataTable data = new DataTable(); ListrequiredColumns = getRequiredColumns( query, planetTableColumns); data.addColumns(requiredColumns); // Populate data table for (Planet planet : Planet.values()) { TableRow row = new TableRow(); for (ColumnDescription selectionColumn : requiredColumns) { String columnName = selectionColumn.getId(); if (columnName.equals(PLANET_COLUMN)) { row.addCell(planet.name()); } else if (columnName.equals(MASS_COLUMN)) { row.addCell(planet.getMass()); } else if (columnName.equals(GRAVITY_COLUMN)) { row.addCell(planet.getSurfaceGravity()); } else if (columnName.equals(MOONS_COLUMN)) { row.addCell(planet.getNumberOfMoons()); } } data.addRow(row); } return data; }
Menjalankan dan Menguji AdvancedExampleServlet2
Bagian ini memberikan petunjuk tentang cara menjalankan dan menguji AdvancedExampleServlet2
.
Untuk menjalankan dan menguji AdvancedExampleServlet2
, update
aplikasi web Anda, lalu siapkan visualisasi yang mengkueri sumber
data, seperti yang dijelaskan di bagian berikut:
Memperbarui Aplikasi Web di Apache Tomcat
Ikuti atau sesuaikan petunjuk di bawah untuk mengupdate aplikasi web Anda di Apache Tomcat. Petunjuk ini khusus untuk Apache Tomcat di sistem Windows:
- File
web.xml
yang sebelumnya Anda salin ke direktoriWEB-INF
sudah berisi definisi dan pemetaan yang diperlukan untuk contoh ini. Baris yang menjelaskan hal ini adalah:
<servlet> <servlet-name>AdvancedExampleServlet2</servlet-name> <description> AdvancedExampleServlet2 </description> <servlet-class>AdvancedExampleServlet2</servlet-class> </servlet> <servlet-mapping> <servlet-name>AdvancedExampleServlet2</servlet-name> <url-pattern>/advanced</url-pattern> </servlet-mapping>
- Mulai Tomcat, atau mulai ulang Tomcat jika sudah berjalan.
- Klik link berikut:http://localhost:8080/myWebApp/advanced
Layar menampilkan 6-7 baris teks, bergantung pada lebar layar Anda. Teks diawali dengangoogle.visualization.Query.setResponse
dan diakhiri dengan{v:'http://en.wikipedia.org/wiki/Tiger'}]}]}});
Ini adalah respons yang dikirim sumber data CSV contoh ke visualisasi.
Menggunakan Visualisasi untuk Melihat Data
File all_examples.html
dalam direktori <data_source_library_install>/examples/src/html
dapat digunakan untuk melihat visualisasi data.
Cuplikan berikut dari all_examples
menentukan
servlet advanced
, tabel planets
, kueri tertentu, dan
visualisasi diagram batang.
query = new google.visualization.Query('advanced?tableId=planets&tq=select planet,mass'); ... var chart = new google.visualization.BarChart(document.getElementById('advanced_div'));
Untuk penjelasan tentang visualisasi lain yang disertakan dalam all_examples.html
,
lihat bagian Menggunakan Penyimpanan Data Eksternal.
Untuk informasi selengkapnya tentang cara menentukan visualisasi dan menggunakan bahasa kueri, lihat Menggunakan Diagram dan Referensi Bahasa Kueri.
Ikuti atau adaptasikan petunjuk di bawah untuk melihat visualisasi data yang disediakan oleh sumber data lanjutan:
- Jika Anda belum melakukannya, salin file
all_examples.html
dari direktori<data_source_library_install>/examples/src/html
ke direktori<tomcat_home>/webapps/myWebApp/
.
- Klik link berikut: http://localhost:8080/myWebApp/all_examples.html di browser. Anda akan melihat kode berikut:
Langkah Berikutnya
Untuk mempelajari lebih lanjut contoh yang disediakan bersama library, lihat Contoh Referensi Cepat. Untuk mempelajari penerapan sumber data yang kompleks lebih lanjut, lihat Tips Penerapan.