يتناول هذا القسم AdvancedExampleServlet2
. AdvancedExampleServlet2
هو مثال على تنفيذ مصدر بيانات يحدّد الإمكانات
وتدفق الأحداث. يوفّر هذا القسم أيضًا تعليمات مفصّلة حول
كيفية تشغيل واختبار AdvancedExampleServlet2
.
ملاحظة: يجب عليك إكمال قسم البدء قبل أن تبدأ هذا القسم.
نقدّم لك "AdvancedExampleServlet2
"
تقع الفئة AdvancedExampleServlet2
في الحزمة examples
.
تقدم هذه الفئة مثالاً على التنفيذ الذي يحدد الإمكانات
وتدفق الأحداث.
تم توضيح أهم أجزاء AdvancedExampleServlet2
في الأقسام التالية:
تحديد تدفُّق الأحداث
تحدّد السمة AdvancedExampleServlet2
تدفّق الأحداث من خلال إلغاء الطريقة HttpServlet.doGet()
واستدعاء دوال مساعِدة مختلفة يوفّرها DataSourceHelper
.
يلغي المقتطف التالي doGet()
. تتضمن المعلمة HttpServletRequest
الطلب الذي تم تقديمه من خلال التصور في serlet. تضم المعلمة HttpServletResponse
الاستجابة من serlet إلى التصور الخاص بالاستعلام.
يؤدي هذا المقتطف أيضًا إلى ضبط السمة 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
، يتألف طلب بحث مصدر البيانات من عملية SELECT
إذا كان الهدف dsRequest
يتضمّن عملية 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,
وينشئ جدول بيانات. راجِع قسم استخدام الإمكانيات
لمزيد من التفاصيل.
// 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
. يحدد الكود بعد ذلك
استجابة serlet. ترجع حاوية serlet هذه الاستجابة
إلى تصور الاستعلام.
DataSourceHelper.setServletResponse(newData, dsRequest, resp);
أخطاء المعالجة
يضع المقتطف التالي استثناءً، ويحصل على الرسالة المناسبة
وينسّق الردّ، ويعيّن استجابة serlet. إذا كانت dsRequest
فارغة، لن تكون السمة DataSourceRequest
متاحة، وقد يرجع ذلك إلى عطل في دالة الإنشاء. في هذه الحالة، يتم استخدام HttpRequest
بدلاً من 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); } }
استخدام مَعلمات عناوين URL
يأخذ المقتطف التالي استعلام مصدر البيانات
الذي تم إنشاؤه عند تقسيم طلب البحث وHttpServletRequest
.
ويمكن أن تتضمّن HttpServletRequest
بشكل اختياري مَعلمة tableId
محدّدة كعنوان URL. تحدِّد معلمة 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 Tomcat. هذه التعليمات خاصة ببرنامج Apache Tomcat على نظام التشغيل Windows:
- إنّ الملف
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>
- ابدأ تشغيل Tomcat أو أعِد تشغيل Tomcat إذا كان قيد التشغيل.
- انقر على الرابط التالي:http://localhost:8080/myWebApp/advanced
تعرض الشاشة من 6 إلى 7 أسطر من النص، حسب عرض الشاشة. يبدأ النص بـgoogle.visualization.Query.setResponse
وينتهي بـ{v:'http://en.wikipedia.org/wiki/Tiger'}]}]}});
هذه هي الإجابة التي يرسلها مثال مصدر بيانات ملف CSV إلى العرض المرئي.
استخدام التمثيل المرئي لعرض البيانات
ويمكن استخدام ملف all_examples.html
في الدليل <data_source_library_install>/examples/src/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
،
يُرجى الاطّلاع على القسم استخدام مخزن بيانات خارجي.
لمزيد من المعلومات حول كيفية تحديد تمثيل بصري واستخدام لغة طلب البحث، راجِع استخدام الرسوم البيانية ومرجع لغة طلب البحث.
اتبع أو تكييف التعليمات أدناه لعرض تصور للبيانات التي يقدمها مصدر البيانات المتقدم:
- إذا لم يسبق لك إجراء ذلك، انسخ ملف
all_examples.html
من الدليل<data_source_library_install>/examples/src/html
إلى دليل<tomcat_home>/webapps/myWebApp/
.
- انقر على الرابط التالي: http://localhost:8080/myWebApp/all_examples.html في
المتصفح. من المفترض أن يظهر لك ما يلي:
الخطوات التالية
لاستكشاف الأمثلة المتوفّرة مع المكتبة بشكل أكبر، يمكنك الاطّلاع على أمثلة مرجع سريع. لمعرفة المزيد من المعلومات حول استخدام مصدر بيانات معقّد، يمكنك الاطّلاع على نصائح حول التنفيذ.