ส่วนนี้กล่าวถึงเคล็ดลับบางประการที่จะช่วยให้คุณเขียนไลบรารีที่ซับซ้อนยิ่งขึ้นได้
- การใช้เซิร์ฟเวอร์ของคุณเอง
- การกำหนดความสามารถ
- การปรับแต่งโฟลว์เหตุการณ์
- กำลังส่งพารามิเตอร์ไปยัง
DataTableGenerator.generateDataTable
- การใช้งานแหล่งข้อมูลที่ไม่ใช่เซิร์ฟเล็ต
การใช้เซิร์ฟเวอร์ของคุณเอง
การติดตั้งใช้งานแหล่งข้อมูลที่ง่ายที่สุดจะรับค่าจากคลาส 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
ของคุณ เมธอดนี้เรียกใช้ขั้นตอนทั้งหมดของแหล่งข้อมูล รวมถึงการแสดงผลผลลัพธ์ของแหล่งข้อมูลในการตอบสนองของเซิร์ฟเล็ต
คุณใช้เทคนิคเดียวกันนี้ได้หากใช้เฟรมเวิร์กของเซิร์ฟเล็ตที่โดยปกติแล้วคุณรับค่าคลาส Abstract จากเฟรมเวิร์กนี้
ตัวอย่างเช่น หากใช้ 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