ส่วนนี้จะแนะนำ 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 และ แยกคำค้นหาออกเป็น 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();
List requiredColumns = 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();
List requiredColumns = 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 ในเบราว์เซอร์ คุณควรจะเห็นสิ่งต่อไปนี้

ขั้นตอนถัดไป
หากต้องการดูตัวอย่างเพิ่มเติมในไลบรารี โปรดดูตัวอย่างข้อมูลอ้างอิงด่วน ดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้แหล่งข้อมูลที่ซับซ้อนได้ในเคล็ดลับการใช้งาน