เคล็ดลับการใช้งาน

ส่วนนี้กล่าวถึงเคล็ดลับบางประการที่จะช่วยให้คุณเขียนไลบรารีที่ซับซ้อนยิ่งขึ้นได้

การใช้เซิร์ฟเวอร์ของคุณเอง

การติดตั้งใช้งานแหล่งข้อมูลที่ง่ายที่สุดจะรับค่าจากคลาส DataSourceServlet ของไลบรารี หากต้องการรับค่าจากคลาสอื่นที่ไม่ใช่ DataSourceServlet ให้ใช้แหล่งข้อมูลดังต่อไปนี้

  1. ใช้อินเทอร์เฟซ DataTableGenerator และลบล้าง getCapabilities() และ generateDataTable()
  2. เรียกใช้ DataSourceHelper.executeDataSourceServletFlow() จากภายในโค้ดของเซิร์ฟเล็ตเพื่อเรียกใช้โฟลว์แหล่งข้อมูลเมธอดนี้ใช้พารามิเตอร์ต่อไปนี้
    • ออบเจ็กต์ HttpServletRequest
    • ออบเจ็กต์ HttpServletResponse
    • การใช้งานอินเทอร์เฟซ DataTableGenerator จากขั้นตอนที่ 1 ด้านบน
    • บูลีนสำหรับระบุโหมดการเข้าถึงที่จำกัดหรือไม่จำกัด

เช่น หากต้องการรับค่าเซิร์ฟเล็ตจากคลาสเซิร์ฟเล็ตอื่นที่เรียกว่า AuthServlet ที่มีการตรวจสอบสิทธิ์ในตัว คุณจะเขียน SimpleServletExample ใหม่เพื่อรับ AuthServlet แทน DataSourceServlet ได้ดังนี้

  1. ใช้อินเทอร์เฟซ DataTableGenerator
  2. ย้าย generateDataTable() จากการใช้งาน DataSourceServlet ไปยังการใช้งาน DataTableGenerator
  3. ลบล้าง getCapabilities() ในการใช้งาน DataTableGenerator เพื่อแสดงผล Capabilities.None
  4. เรียกใช้ DataSourceHelper.executeDataSourceServletFlow() จากภายในโค้ดของเซิร์ฟเล็ต (doGet() หรือ doPost()) และส่งผ่านการใช้งาน DataTableGenerator ของคุณ เมธอดนี้เรียกใช้ขั้นตอนทั้งหมดของแหล่งข้อมูล รวมถึงการแสดงผลผลลัพธ์ของแหล่งข้อมูลในการตอบสนองของเซิร์ฟเล็ต

คุณใช้เทคนิคเดียวกันนี้ได้หากใช้เฟรมเวิร์กของเซิร์ฟเล็ตที่โดยปกติแล้วคุณรับค่าคลาส Abstract จากเฟรมเวิร์กนี้ ตัวอย่างเช่น หากใช้ WebWork คุณอาจต้องการรับค่าคลาส ActionSupport

การกำหนดความสามารถ

หากพื้นที่เก็บข้อมูลมีข้อมูลจำนวนมาก และคุณต้องการเพิ่มประสิทธิภาพของแหล่งข้อมูล ให้ใช้ความสามารถในการค้นหาของพื้นที่เก็บข้อมูล ตัวอย่างเช่น สมมติว่าพื้นที่เก็บข้อมูลของคุณ เป็นฐานข้อมูล และฐานข้อมูลมีคอลัมน์จำนวนมาก หากการแสดงภาพขอคอลัมน์เหล่านั้นเพียงไม่กี่คอลัมน์ การเรียกใช้การดำเนินการ SELECT ภายในฐานข้อมูลจะมีประสิทธิภาพมากกว่าการดึงข้อมูลคอลัมน์ทั้งหมดและใช้ความสามารถในการค้นหาของไลบรารีเพื่อทำ SELECT หากต้องการใช้ความสามารถของ SELECT คุณต้องเขียนโค้ดเพื่อเรียกใช้การดำเนินการ SELECT ภายในฐานข้อมูลและเพื่อแสดงผลตารางข้อมูล

ใช้ Enum Capabilities เพื่อกำหนดความสามารถในการค้นหาที่โค้ดของคุณมี ตัวเลือกที่ใช้ได้มีดังนี้

  • NONE: โดยค่าเริ่มต้น โค้ดของคุณ จะไม่มีการดำเนินการค้นหา
  • SQL: โค้ดจะมีการดำเนินการค้นหา SQL
  • SORT_AND_PAGINATION: โค้ดมีทั้งการดำเนินการค้นหา การจัดเรียงและการใส่เลขหน้า
  • SELECT: โค้ดจะมีการดำเนินการให้เลือก
  • ALL: โค้ดจะมีการดำเนินการ SQL, SORT_AND_PAGINATION และ SELECT

หมายเหตุ: ในทุกกรณี ไลบรารีจะจัดการการค้นหาที่ไม่ได้มาจากโค้ดของคุณ

หากต้องการใช้ความสามารถอื่นที่ไม่ใช่ NONE ให้ลบล้าง Capabilities.getCapabilities() และใช้ DataTable.generateDataTable() เพื่อค้นหาพื้นที่เก็บข้อมูลและแสดงผลตารางข้อมูล

ตัวอย่าง 3 รายการแสดงวิธีนำความสามารถไปใช้ ได้แก่ AdvancedExampleServlet, AdvancedExampleServlet2 และ SqlDataSourceServlet ทั้งหมดอยู่ในแพ็กเกจ example AdvancedExampleServlet2 มีการกล่าวถึงในการกำหนดความสามารถและโฟลว์ของเหตุการณ์

การปรับแต่งโฟลว์เหตุการณ์

ขั้นตอนเริ่มต้นของเหตุการณ์มีการกำหนดไว้ใน DataSourceHelper.executeDataSourceServletFlow ขั้นตอนเริ่มต้นมีดังนี้

  1. แยกและแยกวิเคราะห์พารามิเตอร์การค้นหา
  2. สำหรับโหมดที่จำกัดเท่านั้น ให้ยืนยันว่าคำขอมาจากโดเมนเดียวกับเซิร์ฟเล็ต
  3. แยกวิเคราะห์คำขอเพื่อสร้างออบเจ็กต์การค้นหา 2 รายการ ได้แก่ การค้นหาแหล่งข้อมูลและการค้นหาเสร็จสมบูรณ์ ส่งต่อการค้นหาแหล่งข้อมูลไปยังการใช้งาน generateDataTable()
  4. การใช้งาน generateDataTable() จะสร้างตารางข้อมูล
  5. เรียกใช้การค้นหาเสร็จสมบูรณ์ในตารางข้อมูลที่สร้างขึ้นในขั้นตอนที่ 5
  6. แสดงผลตารางข้อมูลในรูปแบบที่ระบุโดยการแสดงภาพ และตั้งค่าการตอบสนองของเซิร์ฟเล็ต

หากต้องการระบุการแสดงเหตุการณ์ของคุณเอง ให้เรียกใช้ฟังก์ชันตัวช่วยใน datasource.DataSourceHelper ดูตัวอย่างการใช้งานได้ในการกำหนดความสามารถและโฟลว์ของเหตุการณ์

กำลังส่งพารามิเตอร์ไปยัง DataTableGenerator.generateDataTable

คุณใช้ HttpServletRequest.setAttribute เพื่อส่งข้อมูลที่ไม่ได้เป็นส่วนหนึ่งของการค้นหาหรือออบเจ็กต์ HttpServletRequest ไปยัง DataTableGenerator.generateDataTable ได้ ดูโค้ดตัวอย่างได้ที่ด้านล่าง

ในโค้ดของเซิร์ฟเล็ต ให้ใส่ออบเจ็กต์ที่คุณต้องการส่งผ่านไปยัง HttpServletRequest ดังนี้

request.setAttribute("my_object_name", myObject);
DataSourceHelper.executeDataSourceServletFlow(request, response, dataTableGenerator);

ในการใช้งานอินเทอร์เฟซ dataTableGenerator ให้รับออบเจ็กต์จาก HttpServletRequest ดังนี้

public DataTable generateDataTable(Query query, HttpServletRequest request){
  Object myObject = request.getAttribute("my_object_name"); 
  // Add your code to manipulate myObject here 
} 

การใช้แหล่งข้อมูล ที่ไม่ใช่เซิร์ฟเล็ต

หากใช้ไลบรารีโดยไม่ใช้เซิร์ฟเล็ต คุณจะใช้ได้เฉพาะคลาสและฟังก์ชันตัวช่วยเหล่านั้นที่ไม่จำเป็นต้องใช้สภาพแวดล้อมของเซิร์ฟเล็ต ซึ่งรวมถึงคลาส Query และ DataTable และฟังก์ชันบางอย่างของ DataSourceHelper เช่น parseQuery, applyQuery, validateQuery และ splitQuery คุณใช้ชั้นเรียนและฟังก์ชันเหล่านี้เพื่อทำสิ่งต่อไปนี้ได้

  • แยกวิเคราะห์คำค้นหา ที่เป็นการแสดงข้อมูลผ่านภาพ
  • แบ่งการค้นหาออกเป็นการค้นหาแหล่งข้อมูลและการค้นหาที่เสร็จสมบูรณ์
  • เรียกใช้การค้นหาที่เสร็จสมบูรณ์เพื่อสร้างตารางข้อมูล
  • แสดงตารางข้อมูลในรูปแบบ HTML, CSV หรือ JSON