يقدّم هذا القسم 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
، يتكون طلب مصدر البيانات من عملية 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
. وبعد ذلك، يُحدّد الرمز استجابة استجابة Selive. تعرض حاوية بحثخة هذه الاستجابة إلى التمثيل البصري لطلب البحث.
DataSourceHelper.setServletResponse(newData, dsRequest, resp);
الأخطاء المتعلقة بمعالجة البيانات
يحصل المقتطف التالي على استثناء، ويتلقّى الرسالة المناسبة وينسّق الرد ويحدّد استجابة الخادم. وإذا كانت قيمة 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 Catcat. هذه التعليمات مخصّصة لنظام 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 في متصفّح. من المفترض أن يظهر لك ما يلي:
الخطوات التالية
لاستكشاف الأمثلة الإضافية المقدَّمة مع المكتبة، يُرجى الاطّلاع على أمثلة المراجع السريعة. لمزيد من المعلومات حول تنفيذ مصدر بيانات معقّد، يُرجى الاطّلاع على نصائح التنفيذ.