यह सेक्शन AdvancedExampleServlet2
के बारे में जानकारी देता है. AdvancedExampleServlet2
, डेटा सोर्स को लागू करने का एक
उदाहरण है. यह इवेंट की क्षमताओं और
फ़्लो के बारे में बताता है. इस सेक्शन में AdvancedExampleServlet2
को चलाने और उसकी जांच करने के सिलसिलेवार निर्देश भी दिए गए हैं.
ध्यान दें: इस सेक्शन को शुरू करने से पहले, आपको शुरू करना सेक्शन पूरा करना होगा.
पेश है AdvancedExampleServlet2
AdvancedExampleServlet2
क्लास, examples
पैकेज में मौजूद है.
इस क्लास में उदाहरण के तौर पर एक उदाहरण दिया गया है, जो इवेंट की क्षमताओं
और फ़्लो को तय करता है.
AdvancedExampleServlet2
के सबसे अहम हिस्सों के बारे में नीचे दिए गए सेक्शन में बताया गया है:
- इवेंट के फ़्लो को तय करना
- हैंडलिंग से जुड़ी गड़बड़ियां
- यूआरएल पैरामीटर का इस्तेमाल करना
- क्षमताओं का इस्तेमाल करना
इवेंट के फ़्लो को तय करना
AdvancedExampleServlet2
, HttpServlet.doGet()
तरीके को ओवरराइड करके और DataSourceHelper
से मिले
हेल्पर फ़ंक्शन को कॉल करके, इवेंट के फ़्लो के बारे में बताता है.
यह स्निपेट, doGet()
को बदल देता है. HttpServletRequest
पैरामीटर, विज़ुअलाइज़ेशन में किए गए अनुरोध को सर्वलेट की मदद से इकट्ठा करता है. HttpServletResponse
पैरामीटर,
सर्वलेट से क्वेरी क्वेरी को रिस्पॉन्स के तौर पर इकट्ठा करता है.
यह स्निपेट dsRequest
को भी शून्य पर सेट करता है. dsRequest
कोड के बाकी हिस्सों में
अलग-अलग समय पर इस्तेमाल होता है.
@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { DataSourceRequest dsRequest = null;
नीचे दिया गया स्निपेट, अनुरोध से जुड़े पैरामीटर बनाने के लिए HttpServletRequest
से अनुरोध पैरामीटर निकालता है.
try { // Extract the request parameters. dsRequest = new DataSourceRequest(req);
नीचे दिया गया स्निपेट, dsRequest
ऑब्जेक्ट से क्वेरी लेता है और उसे दो अलग-अलग क्वेरी में बांट देता है. एक क्वेरी को डेटा सोर्स
क्वेरी कहा जाता है. वहीं, दूसरी क्वेरी को पूरा होने वाली क्वेरी कहा जाता है. डेटा सोर्स की एलान की क्षमता SELECT
है. इसलिए, dsRequest
ऑब्जेक्ट में SELECT
ऑपरेशन शामिल होने पर, डेटा सोर्स क्वेरी में SELECT
का ऐक्शन शामिल होता है.
अनुरोध पूरा करने की क्वेरी में, अनुरोध के मुताबिक ज़रूरी सभी अन्य कार्रवाइयां शामिल होती हैं. इसमें SELECT
कार्रवाई भी शामिल हो सकती है. उदाहरण के लिए, अगर क्वेरी SELECT a ORDER
BY b
के लिए अनुरोध की गई है, तो डेटा सोर्स क्वेरी SELECT a, b
होगी और पूरी क्वेरी
SELECT a ORDER BY b
मूल क्वेरी जैसी ही होगी.
// Split the query. QueryPair query = DataSourceHelper.splitQuery(dsRequest.getQuery(), Capabilities.SELECT);
नीचे दिया गया स्निपेट पिछले स्निपेट और HttpServletRequest,
के ज़रिए बनाई गई डेटा सोर्स क्वेरी लेता है और एक डेटा टेबल बनाता है. ज़्यादा जानकारी के लिए Capacity का इस्तेमाल करना देखें.
// Generate the data table. DataTable data = generateMyDataTable(query.getDataSourceQuery(), req);
नीचे दिया गया कोड क्वेरी के स्प्लिट होने पर, पूरी की गई क्वेरी लेता है, पिछले स्निपेट का बनाया गया डेटा टेबल, और क्वेरी विज़ुअलाइज़ेशन से उपयोगकर्ता की स्थान-भाषा लेता है. फिर कोड एक नई डेटा टेबल बनाता है.
// Apply the completion query to the data table. DataTable newData = DataSourceHelper.applyQuery(query.getCompletionQuery(), data, dsRequest.getUserLocale());
नीचे दिया गया कोड पिछले स्निपेट से बनाई गई डेटा टेबल और HttpServletRequest
से अनुरोध पैरामीटर लेता है. कोड तब सर्वेल रिस्पॉन्स सेट करता है. सर्वलेट कंटेनर, क्वेरी करने वाले विज़ुअलाइज़ेशन को
यह जवाब देता है.
DataSourceHelper.setServletResponse(newData, dsRequest, resp);
गड़बड़ियां ठीक करना
नीचे दिया गया स्निपेट एक अपवाद बनाता है, एक ज़रूरी मैसेज लेता है, रिस्पॉन्स को फ़ॉर्मैट करता है, और सर्वलेट रिस्पॉन्स सेट करता है. अगर dsRequest
शून्य है, तो हो सकता है कि
DataSourceRequest
उपलब्ध न हो. ऐसा शायद कंस्ट्रक्टर की गड़बड़ी की वजह से हो सकता है. इस मामले में, DataSourceRequest
के बजाय HttpRequest
का इस्तेमाल किया जाता है.
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); } }
यूआरएल पैरामीटर का इस्तेमाल करना
नीचे दिया गया स्निपेट उस डेटा सोर्स क्वेरी को चुनता है जो क्वेरी को बांटकर HttpServletRequest
को बनाई गई थी.
HttpServletRequest
में यूआरएल के तौर पर बताए गए tableId
पैरामीटर को भी शामिल किया जा सकता है. यह tableId
पैरामीटर तय करता है कि कौनसी डेटा टेबल नीचे दी गई है:
- अगर
tableId
पैरामीटर को हटा दिया जाता है याplanets
के अलावा, कोई और डेटा छोड़ दिया जाता है, तो डेटा सोर्स, जानवरों के डेटा की टेबल दिखाता है. - अगर
tableId
पैरामीटर के बारे मेंplanets
बताया गया है, तो डेटा सोर्स, ग्रहों की डेटा टेबल दिखाता है.
डेटा टेबल लौटाने के लिए खुद का कोड लिखते समय, आप यह तय करते हैं कि कौनसे पैरामीटर लेने हैं.
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); }
क्षमताओं का इस्तेमाल करना
यह स्निपेट, क्वेरी को लेकर 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; }
यह स्निपेट, क्वेरी को लेकर 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; }
AdvancedExampleServlet2
की दौड़ और टेस्टिंग
इस सेक्शन में, AdvancedExampleServlet2
को चलाने और उसकी जांच करने के बारे में निर्देश दिए गए हैं.
AdvancedExampleServlet2
को चलाने और उसकी जांच करने के लिए, अपने वेब ऐप्लिकेशन को अपडेट करें. साथ ही, ऐसा विज़ुअलाइज़ेशन सेट अप करें जो डेटा सेक्शन की क्वेरी करता हो, जैसा कि यहां दिए गए सेक्शन में बताया गया है:
Apache पर वेब ऐप्लिकेशन अपडेट करना Tomcat
Apache टॉमकैट पर अपने वेब ऐप्लिकेशन को अपडेट करने के लिए, नीचे दिए गए निर्देशों का पालन करें या उनमें बदलाव करें. ये निर्देश खास तौर पर Windows सिस्टम पर Apache टॉमकैट के लिए होते हैं:
web.xml
फ़ाइल जिसे आपने पहलेWEB-INF
डायरेक्ट्री में कॉपी किया था, उसमें पहले से ही इस उदाहरण की परिभाषा और मैपिंग ज़रूरी है. इससे पता चलने वाली लाइनें:
<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>
- टॉमकैट शुरू करें या अगर यह पहले से चल रहा है, तो टॉमकैट को रीस्टार्ट करें.
- नीचे दिए गए लिंक पर क्लिक करें:http://localhost:8080/myWebApp/advanced
आपकी स्क्रीन की चौड़ाई के आधार पर, स्क्रीन टेक्स्ट की 6 से 7 लाइनें दिखाती है. टेक्स्टgoogle.visualization.Query.setResponse
से शुरू होता है और{v:'http://en.wikipedia.org/wiki/Tiger'}]}]}});
पर खत्म होता है यही उदाहरण, CSV डेटा का उदाहरण है जो विज़ुअलाइज़ेशन को भेजता है.
डेटा देखने के लिए विज़ुअलाइज़ेशन का इस्तेमाल करना
<data_source_library_install>/examples/src/html
डायरेक्ट्री में मौजूद all_examples.html
फ़ाइल का इस्तेमाल करके, डेटा का विज़ुअलाइज़ेशन देखा जा सकता है.
all_examples
का यह स्निपेट, advanced
सर्वेलेट, planets
टेबल, एक चुनिंदा क्वेरी, और
एक बार चार्ट विज़ुअलाइज़ेशन के बारे में बताता है.
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
में शामिल अन्य विज़ुअलाइज़ेशन के बारे में ज़्यादा जानकारी के लिए, बाहरी डेटा स्टोर का इस्तेमाल करना सेक्शन देखें.
विज़ुअलाइज़ेशन तय करने और क्वेरी की भाषा इस्तेमाल करने के बारे में ज़्यादा जानने के लिए, चार्ट इस्तेमाल करना और क्वेरी भाषा का संदर्भ देखें.
बेहतर डेटा सोर्स से मिले डेटा का विज़ुअलाइज़ेशन देखने के लिए, नीचे दिए गए निर्देशों का पालन करें या उनके मुताबिक बदलाव करें:
- अगर आपने अब तक ऐसा नहीं किया है, तो
<data_source_library_install>/examples/src/html
डायरेक्ट्री
सेall_examples.html
फ़ाइल को<tomcat_home>/webapps/myWebApp/
डायरेक्ट्री में कॉपी करें.
- नीचे दिए गए लिंक पर क्लिक करें: ब्राउज़र में http://localhost:8080/myWebApp/all_examples.html. आपको नीचे दी गई जानकारी दिखेगी:
अगले चरण
लाइब्रेरी में दिए गए उदाहरणों के बारे में ज़्यादा जानने के लिए, उदाहरण के लिए, क्विक रेफ़रंस देखें. कॉम्प्लेक्स डेटा सोर्स लागू करने के बारे में ज़्यादा जानने के लिए, लागू करने के बारे में सलाह देखें.