ส่วนนี้จะแนะนํา AdvancedExampleServlet2
AdvancedExampleServlet2
เป็นตัวอย่างการใช้งานแหล่งข้อมูลที่กําหนดความสามารถและโฟลว์เหตุการณ์ ในส่วนนี้ยังมีคําแนะนําทีละขั้นตอนเกี่ยวกับวิธีการเรียกใช้และทดสอบ AdvancedExampleServlet2
หมายเหตุ: คุณต้องกรอกข้อมูลในส่วนการเริ่มต้นใช้งานให้เสร็จสมบูรณ์ก่อนจึงจะเริ่มส่วนนี้ได้
ขอแนะนํา AdvancedExampleServlet2
คลาส AdvancedExampleServlet2
อยู่ในแพ็กเกจ examples
คลาสนี้จะให้ตัวอย่างการติดตั้งใช้งานที่บ่งบอกถึงความสามารถและโฟลว์ของเหตุการณ์
ส่วนที่สําคัญที่สุดของ AdvancedExampleServlet2
อธิบายไว้ในส่วนต่อไปนี้
การกําหนดโฟลว์ของกิจกรรม
AdvancedExampleServlet2
กําหนดขั้นตอนของเหตุการณ์
โดยลบล้างเมธอด HttpServlet.doGet()
แล้วเรียกใช้ฟังก์ชันตัวช่วยต่างๆ ของ DataSourceHelper
ข้อมูลโค้ดต่อไปนี้จะลบล้าง doGet()
พารามิเตอร์ HttpServletRequest
จะสรุปคําขอที่สร้างขึ้นจากการแสดงภาพไปยังเซิร์ฟเล็ต พารามิเตอร์ HttpServletResponse
จะสรุปการตอบกลับจากเซิร์ฟเล็ตไปยังการแสดงภาพการค้นหา
ข้อมูลโค้ดนี้ยังตั้งค่า dsRequest
เป็น Null ด้วย 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
และแบ่งคําค้นหาออกเป็น 2 คําค้นหาแยกกัน ส่วนอีกคําค้นหาหนึ่งเรียกว่าคําค้นหาแหล่งข้อมูล
อีกคําหนึ่งเรียกว่าคําค้นหาที่เสร็จสมบูรณ์ เนื่องจากความสามารถที่ประกาศของแหล่งข้อมูลคือ 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
จากนั้น
โค้ดจะกําหนดการตอบกลับของเซิร์ฟเล็ต คอนเทนเนอร์ของเซิร์ฟเล็ตจะแสดงการตอบกลับ
ที่เป็นภาพของการค้นหา
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 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 ในเบราว์เซอร์ คุณจะเห็นข้อมูลต่อไปนี้
ขั้นตอนถัดไป
หากต้องการสํารวจตัวอย่างเพิ่มเติมที่ให้มาพร้อมกับคลัง โปรดดูตัวอย่าง ข้อมูลอ้างอิงด่วน ดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้แหล่งข้อมูลที่ซับซ้อนได้ที่เคล็ดลับการติดตั้งใช้งาน