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