การกําหนดความสามารถและโฟลว์ของกิจกรรม

ส่วนนี้จะแนะนํา 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();
  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 โดยเฉพาะ

  1. ไฟล์ 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> 
  2. เริ่มใช้ Tomcat หรือรีสตาร์ท Tomcat หากทํางานอยู่แล้ว
  3. คลิกลิงก์ต่อไปนี้ 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 โปรดดูส่วนการใช้ที่เก็บข้อมูลภายนอก

ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีระบุการแสดงภาพและใช้ภาษาของคําค้นหาได้ที่การใช้แผนภูมิและการอ้างอิงภาษาของคําค้นหา

ทําตามหรือปรับวิธีการด้านล่างนี้เพื่อดูการแสดงภาพข้อมูลที่ได้จากแหล่งข้อมูลขั้นสูง

  1. หากยังไม่ได้ดําเนินการ ให้คัดลอกไฟล์ all_examples.html จากไดเรกทอรี <data_source_library_install>/examples/src/html
    ไปยังไดเรกทอรี <tomcat_home>/webapps/myWebApp/
     
  2. คลิกลิงก์ http://localhost:8080/myWebApp/all_examples.html ในเบราว์เซอร์ คุณจะเห็นข้อมูลต่อไปนี้

ขั้นตอนถัดไป

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