Apache Tapestry - สถาปัตยกรรม
Tapestry พยายามใช้คุณสมบัติที่มีอยู่ของ Java ให้มากที่สุด ตัวอย่างเช่นหน้า Tapestry ทั้งหมดเป็นเพียง POJO ไม่บังคับใช้อินเทอร์เฟซที่กำหนดเองหรือคลาสพื้นฐานใด ๆ ในการเขียนแอปพลิเคชัน แต่จะใช้ Annotation (ตัวเลือกน้ำหนักเบาเพื่อขยายการทำงานของคลาส Java) เพื่อให้คุณสมบัติต่างๆ มันขึ้นอยู่กับการทดสอบการต่อสู้Java Servlet APIและใช้งานเป็นตัวกรอง Servlet เป็นมิติใหม่ของเว็บแอปพลิเคชันและการเขียนโปรแกรมนั้นค่อนข้างเรียบง่ายยืดหยุ่นเข้าใจได้และมีประสิทธิภาพ
เวิร์กโฟลว์
ให้เราพิจารณาลำดับของการดำเนินการที่เกิดขึ้นเมื่อมีการร้องขอหน้าเทป
Step 1 - Java Servletได้รับการร้องขอหน้า Java Servlet นี้ได้รับการกำหนดค่าในลักษณะที่คำขอที่เข้ามาจะถูกส่งต่อไปยัง tapestry การกำหนดค่าเสร็จสิ้นในไฟล์web.xmlตามที่ระบุไว้ในโปรแกรมต่อไปนี้ แท็กตัวกรองและไส้กรองแมปเปลี่ยนเส้นทางทุกการร้องขอไปยังผ้ากรอง
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>My Tapestry Application</display-name>
<context-param>
<param-name>tapestry.app-package</param-name>
<param-value>org.example.myapp</param-value>
</context-param>
<filter>
<filter-name>app</filter-name>
<filter-class>org.apache.tapestry5.TapestryFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>app</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
Step 2 - Tapestry Filter เรียกไฟล์ HttpServletRequestHandler บริการโดย Service() วิธี.
Step 3 - HttpServletRequestHandler จัดเก็บคำขอและการตอบกลับใน RequestGlobals. นอกจากนี้ยังรวมการร้องขอและการตอบกลับเป็นอ็อบเจ็กต์ Request and Response และส่งไปยัง RequestHandler
Step 4 - RequestHandler เป็นนามธรรมที่อยู่ด้านบนของ HttpServletRequestของ Servlet API คุณสมบัติเด่นบางประการของพรมทำในRequestHandlerมาตรา. คุณสมบัติของ Tapestry สามารถขยายได้โดยการเขียนตัวกรองใน RequestHandler RequestHandler มีตัวกรองในตัวหลายตัวซึ่งรวมถึง -
CheckForUpdates Filter- รับผิดชอบในการโหลดคลาสสด ตัวกรองนี้ตรวจสอบคลาส java สำหรับการเปลี่ยนแปลงและอัปเดตแอปพลิเคชันตามความจำเป็น
Localization Filter - ระบุตำแหน่งของผู้ใช้และให้การสนับสนุนการแปลสำหรับแอปพลิเคชัน
StaticFiles Filter- ระบุคำขอคงที่และยกเลิกกระบวนการ เมื่อกระบวนการถูกยกเลิก Java Servlet จะเข้าควบคุมและดำเนินการตามคำขอ
Error Filter - ตรวจจับข้อยกเว้นที่ไม่ถูกจับและแสดงหน้ารายงานข้อยกเว้น
นอกจากนี้ RequestHandler ยังแก้ไขและจัดเก็บคำขอและการตอบกลับใน RequestQlobals และเรียกใช้บริการ MasterDispatcher
Step 5 - MasterDispatcherมีหน้าที่รับผิดชอบในการแสดงผลเพจโดยเรียกผู้มอบหมายงานหลายคนเป็นคำสั่งเฉพาะ ผู้แจกจ่ายหลักสี่ตัวที่เรียกโดย MasterDispatcher มีดังต่อไปนี้ -
RootPath Dispatcher - มันรับรู้เส้นทางราก“ /” ของคำขอและแสดงผลเหมือนกับหน้าเริ่มต้น
Asset Dispatcher - รับรู้คำขอเนื้อหา (สินทรัพย์ Java) โดยตรวจสอบรูปแบบ URL / สินทรัพย์ / และส่งเนื้อหาที่ร้องขอเป็นไบต์สตรีม
PageRender Dispatcher- การดำเนินการ Tapestry จำนวนมากจะดำเนินการใน PageRender Dispatcher และผู้มอบหมายงาน Component Dispatcher ถัดไป ผู้มอบหมายงานนี้รับรู้หน้าเฉพาะของคำขอนั้นและบริบทการเปิดใช้งาน (ข้อมูลเพิ่มเติม) จากนั้นจะแสดงเพจนั้นและส่งไปยังไคลเอนต์ ตัวอย่างเช่นหาก url คำขอคือ / product / 12123434 ผู้มอบหมายงานจะตรวจสอบว่ามีคลาสที่มีชื่อผลิตภัณฑ์ / 12123434 หรือไม่ หากพบจะเรียกคลาส product / 12123434 สร้างการตอบสนองและส่งไปยังไคลเอนต์ หากไม่เป็นเช่นนั้นจะตรวจสอบระดับผลิตภัณฑ์ หากพบจะเรียกคลาสผลิตภัณฑ์ที่มีข้อมูลเพิ่มเติม 121234434 สร้างการตอบสนองและส่งไปยังไคลเอนต์ ข้อมูลเพิ่มเติมนี้เรียกว่าบริบทการเปิดใช้งาน หากไม่พบคลาสก็เพียงส่งต่อคำขอไปยัง Component Dispatcher
Component Dispatcher- Component Dispatcher จับคู่ URL ของเพจด้วยรูปแบบ - / <class_name> / <component_id>: <event_type> / <activation_context> ตัวอย่างเช่น / product / grid: sort / asc แสดงถึงคลาสผลิตภัณฑ์ส่วนประกอบกริดประเภทการจัดเรียงเหตุการณ์และบริบทการเปิดใช้งาน asc ที่นี่ event_type เป็นทางเลือกและหากไม่มีการระบุการดำเนินการประเภทเหตุการณ์เริ่มต้นจะถูกทริกเกอร์ โดยปกติการตอบสนองของผู้มอบหมายงานคอมโพเนนต์คือการส่งการเปลี่ยนเส้นทางไปยังไคลเอนต์ ส่วนใหญ่การเปลี่ยนเส้นทางจะตรงกับ PageRender Dispatcher ในคำขอถัดไปและการตอบกลับที่เหมาะสมจะถูกส่งไปยังไคลเอนต์