Bu bölümde AdvancedExampleServlet2
tanıtılmaktadır. AdvancedExampleServlet2
, özellikleri ve etkinlik akışını tanımlayan bir veri kaynağı uygulaması örneğidir. Bu bölümde, AdvancedExampleServlet2
komut dosyasını çalıştırma ve test etmeyle ilgili adım adım talimatlar da verilmiştir.
Not: Bu bölüme başlamadan önce Başlarken bölümünü tamamlamanız gerekir.
Karşınızda AdvancedExampleServlet2
AdvancedExampleServlet2
sınıfı examples
paketinde yer alıyor.
Bu sınıf, etkinliklerin özelliklerini ve akışını tanımlayan bir örnek uygulama sağlar.
AdvancedExampleServlet2
ürününün en önemli bölümleri aşağıdaki bölümlerde açıklanmıştır:
Etkinlik akışını tanımlama
AdvancedExampleServlet2
, HttpServlet.doGet()
yöntemini geçersiz kılarak ve DataSourceHelper
tarafından sağlanan çeşitli yardımcı işlevleri çağırarak etkinlik akışını tanımlar.
Aşağıdaki snippet doGet()
değerini geçersiz kılar. HttpServletRequest
parametresi, servlet'e görselleştirme tarafından yapılan isteği içerir. HttpServletResponse
parametresi, servlet'ten sorgu görselleştirmeye verilen yanıtı içerir.
Bu snippet aynı zamanda dsRequest
öğesini boş olarak ayarlar. dsRequest
kodun geri kalanında çeşitli noktalarda kullanılır.
@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { DataSourceRequest dsRequest = null;
Aşağıdaki snippet, isteğin çalıştığı bağlamı oluşturmak için HttpServletRequest
parametresinden istek parametrelerini çıkarır.
try { // Extract the request parameters. dsRequest = new DataSourceRequest(req);
Aşağıdaki snippet, sorguyu dsRequest
nesnesinden alıp iki ayrı sorgu halinde böler. Bir sorguya veri kaynağı sorgusu, diğerine de tamamlanma sorgusu denir. Veri kaynağının bildirdiği özellik SELECT
olduğundan, dsRequest
nesnesinde SELECT
işlemi varsa veri kaynağı sorgusu SELECT
işleminden oluşur.
Tamamlama sorgusu, isteğin gerektirdiği diğer tüm işlemleri (bir SELECT
işlemini de içerebilir) içerir. Örneğin, istenen sorgu SELECT a ORDER
BY b
ise veri kaynağı sorgusu SELECT a, b
ve tamamlama sorgusu, orijinal sorgu (SELECT a ORDER BY b
) ile aynı olur.
// Split the query. QueryPair query = DataSourceHelper.splitQuery(dsRequest.getQuery(), Capabilities.SELECT);
Aşağıdaki snippet, önceki snippet ve HttpServletRequest,
tarafından oluşturulan veri kaynağı sorgusunu alıp bir veri tablosu oluşturur. Daha ayrıntılı bilgi için Özellikleri kullanma bölümüne bakın.
// Generate the data table. DataTable data = generateMyDataTable(query.getDataSourceQuery(), req);
Aşağıdaki kod, sorgu bölündüğünde oluşturulan tamamlanma sorgusunu, önceki snippet tarafından oluşturulan veri tablosunu ve sorgu görselleştirmesinden kullanıcı yerel ayarını alır. Ardından kod, yeni bir veri tablosu oluşturur.
// Apply the completion query to the data table. DataTable newData = DataSourceHelper.applyQuery(query.getCompletionQuery(), data, dsRequest.getUserLocale());
Aşağıdaki kod, önceki snippet tarafından oluşturulan veri tablosunu ve HttpServletRequest
kaynağından istek parametrelerini alır. Ardından kod, servlet yanıtını ayarlar. Serlet kapsayıcı, bu yanıtı sorgu görselleştirmesine döndürür.
DataSourceHelper.setServletResponse(newData, dsRequest, resp);
Kullanım hataları
Aşağıdaki snippet bir istisnayı yakalar, uygun mesajı alır, yanıtı biçimlendirir ve servlet yanıtını ayarlar. dsRequest
Boşsa, muhtemelen
oluşturucunun başarısız olması nedeniyle
DataSourceRequest
kullanılamaz. Bu durumda, DataSourceRequest
yerine HttpRequest
kullanılır.
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); } }
URL parametrelerini kullanma
Aşağıdaki snippet, sorgu bölündüğünde oluşturulan veri kaynağı sorgusunu ve HttpServletRequest
öğesini alır.
HttpServletRequest
isteğe bağlı olarak URL olarak belirtilen bir tableId
parametresi içerebilir. Bu tableId
parametresi, hangi veri tablosunun aşağıdaki gibi döndürüldüğünü belirler:
-
tableId
parametresi atlanırsa veyaplanets
dışında bir şeyse veri kaynağı, hayvanlar veri tablosunu döndürür. tableId
parametresiplanets
olarak belirtilirse veri kaynağı, gezegenler veri tablosunu döndürür.
Veri tablosu döndürmek için kendi kodunuzu yazdığınızda hangi parametreleri alacağınıza karar verirsiniz.
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); }
Özellikleri kullanma
Aşağıdaki snippet, sorguyu alarak animals
veri tablosunu oluşturur.
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; }
Aşağıdaki snippet, sorguyu alarak planets
veri tablosunu oluşturur.
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; }
Çalıştırma ve Test Etme AdvancedExampleServlet2
Bu bölümde, AdvancedExampleServlet2
'nun çalıştırılması ve test edilmesiyle ilgili talimatlar verilmiştir.
AdvancedExampleServlet2
oyununu çalıştırmak ve test etmek için web uygulamanızı güncelleyin ve aşağıdaki bölümlerde açıklandığı gibi, veri kaynağını sorgulayan bir görselleştirme oluşturun:
Apache Tomcat'ta Web Uygulamasını Güncelleme
Apache Tomcat'te web uygulamanızı güncellemek için aşağıdaki talimatları uygulayın veya uyarlayın. Bu talimatlar bir Windows sisteminde Apache Tomcat'e özeldir:
- Daha önce
WEB-INF
dizinine kopyaladığınızweb.xml
dosyası, bu örnek için gereken tanımı ve eşlemeyi zaten içeriyor. Bunu tanımlayan satırlar:
<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>
- Tomcat'i başlatın veya zaten çalışıyorsa Tomcat'i yeniden başlatın.
- Şu bağlantıyı tıklayın: http://localhost:8080/myWebApp/advanced
Ekran genişliğinize bağlı olarak ekranda 6-7 satırlık metinler gösterilir. Metingoogle.visualization.Query.setResponse
ile başlar ve{v:'http://en.wikipedia.org/wiki/Tiger'}]}]}});
ile biter
Bu, örnek CSV veri kaynağının görselleştirmeye gönderdiği yanıttır.
Verileri Görüntülemek için Görselleştirmeyi Kullanma
<data_source_library_install>/examples/src/html
dizinindeki all_examples.html
dosyası, verilerin görselleştirmesini görüntülemek için kullanılabilir.
Aşağıdaki all_examples
snippet'i, advanced
servlet'i, planets
tablosunu, belirli bir sorguyu ve bir çubuk grafik görselleştirmesini belirtir.
query = new google.visualization.Query('advanced?tableId=planets&tq=select planet,mass'); ... var chart = new google.visualization.BarChart(document.getElementById('advanced_div'));
all_examples.html
içindeki diğer görselleştirmelerin açıklaması için Harici Veri Deposu Kullanma bölümünü inceleyin.
Görselleştirme belirtme ve sorgu dilini kullanma hakkında daha fazla bilgi için Grafikleri Kullanma ve Sorgu Dili Referansı bölümlerine bakın.
Gelişmiş veri kaynağı tarafından sağlanan verilerin görselleştirmesini görüntülemek için aşağıdaki talimatları uygulayın veya uyarlayın:
- Henüz yapmadıysanız
all_examples.html
dosyasını<data_source_library_install>/examples/src/html
dizininden
dizinine<tomcat_home>/webapps/myWebApp/
dizinine kopyalayın.
- Şu bağlantıyı tıklayın: Bir tarayıcıda http://localhost:8080/myWebApp/all_examples.html adresini tıklayın. Aşağıdaki ekranı görmeniz gerekir:
Sonraki Adımlar
Kitaplıkla birlikte verilen örnekleri daha ayrıntılı incelemek için Örnekler Hızlı Referans'a bakın. Karmaşık bir veri kaynağını uygulama hakkında daha fazla bilgi için Uygulama İpuçları konusuna bakın.