หัวข้อนี้จะครอบคลุมเคล็ดลับบางประการที่จะช่วยให้คุณเขียนการติดตั้งใช้งานไลบรารีที่ซับซ้อนยิ่งขึ้น
- การใช้ Servlet ของคุณเอง
- การกําหนดความสามารถ
- การปรับแต่งโฟลว์เหตุการณ์
- การส่งพารามิเตอร์ไปยัง
DataTableGenerator.generateDataTable
- การใช้แหล่งข้อมูลที่ไม่ใช่เซิร์ฟเวอร์
การใช้ Servlet ของคุณเอง
การใช้แหล่งข้อมูลที่เรียบง่ายที่สุดจะรับช่วงมาจากคลาส DataSourceServlet
ของไลบรารี
หากต้องการรับช่วงมาจากคลาสอื่นที่ไม่ใช่ DataSourceServlet
ให้ใช้แหล่งข้อมูลดังนี้
- ใช้อินเทอร์เฟซ
DataTableGenerator
และลบล้างgetCapabilities()
และgenerateDataTable()
- เรียกใช้
DataSourceHelper.executeDataSourceServletFlow()
จาก ในโค้ดของที่แสดงของบริการเพื่อเรียกใช้ขั้นตอนแหล่งข้อมูลวิธีนี้ใช้พารามิเตอร์ต่อไปนี้- ออบเจ็กต์
HttpServletRequest
- ออบเจ็กต์
HttpServletResponse
- การใช้งานอินเทอร์เฟซ
DataTableGenerator
จากขั้นตอนที่ 1 ด้านบน - บูลีนสําหรับระบุโหมดการเข้าถึงแบบจํากัดหรือไม่จํากัด
- ออบเจ็กต์
เช่น หากคุณต้องการรับช่วงต่อหมู่บ้านเล็กจากชั้นเรียนอื่น
ที่ชื่อว่า AuthServlet
ที่มีการตรวจสอบสิทธิ์ในตัว ให้เขียน SimpleServletExample
ขึ้นใหม่เพื่อรับค่า AuthServlet
แทนที่จะเป็น DataSourceServlet
ดังนี้
- ใช้อินเทอร์เฟซ
DataTableGenerator
- ย้าย
generateDataTable()
จากการใช้งานDataSourceServlet
ไปยังการติดตั้งใช้งานDataTableGenerator
- ลบล้าง
getCapabilities()
ในการติดตั้งใช้งานDataTableGenerator
เพื่อแสดงผลCapabilities.None
- เรียก
DataSourceHelper.executeDataSourceServletFlow()
จาก รหัสโค้ด (doGet()
หรือdoPost()
) แล้วส่งการใช้งานDataTableGenerator
วิธีนี้จะเรียกใช้ขั้นตอนทั้งหมดของแหล่งข้อมูล รวมถึงการแสดงผลแหล่งข้อมูลแหล่งข้อมูลไปยังการตอบสนองของที่ยอมรับได้
คุณสามารถใช้เทคนิคเดียวกันนี้ได้หากใช้เฟรมเวิร์กเซอร์เลตที่โดยปกติคุณจะรับค่าคลาสนามธรรมจากเฟรมเวิร์กนี้
เช่น หากใช้ WebWork คุณอาจต้องการรับค่าคลาส ActionSupport
ด้วย
การกําหนดความสามารถ
หากที่เก็บข้อมูลมีข้อมูลจํานวนมากและคุณต้องการเพิ่มประสิทธิภาพของแหล่งข้อมูล คุณอาจใช้ความสามารถในการสืบค้นของพื้นที่เก็บข้อมูล ตัวอย่างเช่น สมมติว่าพื้นที่เก็บข้อมูลของคุณเป็นฐานข้อมูล และฐานข้อมูลมีคอลัมน์จํานวนมาก หากการแสดงภาพขอคอลัมน์เพียงไม่กี่คอลัมน์ การเรียกใช้ SELECT
ภายในฐานข้อมูลจะมีประสิทธิภาพมากกว่าการดึงข้อมูลคอลัมน์ทั้งหมด และการใช้ความสามารถในการค้นหาของไลบรารีเพื่อดําเนินการ SELECT
หากต้องการใช้ความสามารถของ SELECT
คุณเขียนโค้ดเพื่อเรียกใช้การดําเนินการ SELECT
ภายในฐานข้อมูลและแสดงผลตารางข้อมูล
ใช้ Enum Capabilities
เพื่อกําหนดความสามารถในการค้นหาโค้ดของคุณ ตัวเลือกที่ใช้ได้มีดังนี้
NONE
: ค่าเริ่มต้นเป็นโค้ด ไม่มีการดําเนินการค้นหาSQL
: โค้ดจัดเตรียมการดําเนินการค้นหา SQLSORT_AND_PAGINATION
: โค้ดจะมีทั้งการดําเนินการจัดเรียงและการใส่เลขหน้าSELECT
: โค้ดมีการดําเนินการเลือกALL
: รหัสมีการดําเนินงานSQL
,SORT_AND_PAGINATION
, และSELECT
หมายเหตุ: ในทุกกรณี ไลบรารีจะดูแลการดําเนินการค้นหาใดๆ ที่โค้ดของคุณไม่ได้ระบุ
หากต้องการใช้ความสามารถอื่นๆ ที่นอกเหนือจาก NONE
ให้ลบล้าง Capabilities.getCapabilities()
แล้วใช้ DataTable.generateDataTable()
เพื่อค้นหาที่เก็บข้อมูลและแสดงผลตารางข้อมูล
ตัวอย่าง 3 รายการจะแสดงวิธีใช้ความสามารถ ซึ่งได้แก่ AdvancedExampleServlet
,
AdvancedExampleServlet2
และ SqlDataSourceServlet
ทั้งหมดนี้อยู่ในแพ็กเกจ example
AdvancedExampleServlet2
ได้พูดคุยเกี่ยวกับ การกําหนดความสามารถและโฟลว์ของกิจกรรม
การปรับแต่งโฟลว์เหตุการณ์
โฟลว์เริ่มต้นของเหตุการณ์จะอยู่ใน DataSourceHelper.executeDataSourceServletFlow
ขั้นตอนเริ่มต้นมีดังนี้
- แยกและแยกวิเคราะห์พารามิเตอร์การค้นหา
- สําหรับโหมดการเข้าถึงที่จํากัดเท่านั้น ให้ยืนยันว่าคําขอมาจากโดเมนเดียวกับของบริการ
- แยกวิเคราะห์คําขอสร้างออบเจ็กต์คําค้นหา 2 รายการ ได้แก่ คําค้นหาแหล่งข้อมูลและคําค้นหาที่สําเร็จ ส่งคําค้นหาแหล่งข้อมูลไปยังการใช้งาน
generateDataTable()
ของคุณ - การใช้งาน
generateDataTable()
จะสร้างตารางข้อมูล - เรียกใช้การสืบค้นข้อมูลเสร็จสมบูรณ์ในตารางข้อมูลที่สร้างขึ้นในขั้นตอนที่ 5
- แสดงผลตารางข้อมูลให้อยู่ในรูปแบบที่ระบุโดยการแสดงภาพ และตั้งค่าการตอบสนองของที่ยอมรับได้
หากต้องการระบุโฟลว์เหตุการณ์ของคุณเอง ให้เรียกใช้ฟังก์ชันตัวช่วยใน 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