Apache Tapestry - คุณสมบัติขั้นสูง
ในบทนี้เราจะพูดถึงคุณสมบัติขั้นสูงบางประการของ Apache Tapestry โดยละเอียด
การผกผันของการควบคุม
Tapestry มีไลบรารี Inversion of Control ในตัว Tapestry ถูกรวมเข้ากับ IoC อย่างลึกซึ้งและใช้ IoC สำหรับคุณสมบัติทั้งหมด การกำหนดค่า Tapestry IoC ขึ้นอยู่กับ Java เองแทนที่จะเป็น XML เหมือนคอนเทนเนอร์ IoC อื่น ๆ โมดูลที่ใช้ Tapestry IoC จะรวมอยู่ในไฟล์ JAR และเพิ่งทิ้งลงใน classpath โดยไม่มีการกำหนดค่าเป็นศูนย์ การใช้งาน Tapestry IoC ขึ้นอยู่กับความเบาซึ่งหมายความว่า -
อินเทอร์เฟซขนาดเล็กสองหรือสามวิธี
วิธีการเล็ก ๆ ที่มีพารามิเตอร์สองหรือสามตัว
การสื่อสารแบบไม่ระบุตัวตนผ่านเหตุการณ์แทนที่จะเรียกใช้เมธอดอย่างชัดเจน
โมดูล
โมดูลเป็นวิธีการขยายการทำงานของแอปพลิเคชัน Tapestry Tapestry มีทั้งโมดูลในตัวและโมดูลของบุคคลที่สามจำนวนมาก Hibernate เป็นหนึ่งในโมดูลที่ร้อนแรงและมีประโยชน์มากโดย Tapestry นอกจากนี้ยังมีโมดูลที่รวม JMX, JPA, Spring Framework, JSR 303 Bean Validation, JSON และอื่น ๆ โมดูลของบุคคลที่สามที่โดดเด่นบางส่วน ได้แก่ -
- Tapestry-Cayenne
- Tapestry5-googleanalytics
- Gang of Tapestry 5 - Tapestry5-HighCharts
- Gang of Tapestry 5 - Tapestry5-jqPlot
- Gang of Tapestry 5 - Tapestry5-Jquery
- Gang of tapestry 5 - Tapestry5-Jquery-mobile
- Gang of tapestry 5 - Tapestry5-Portlet
ข้อยกเว้นรันไทม์
คุณสมบัติที่ดีที่สุดอย่างหนึ่งของพรมคือ Detailed Error Reporting. Tapestry ช่วยนักพัฒนาโดยจัดทำรายงานข้อยกเว้นที่ทันสมัย รายงานข้อยกเว้น Tapestry เป็น HTML แบบง่ายพร้อมข้อมูลโดยละเอียด ทุกคนสามารถเข้าใจรายงานได้อย่างง่ายดาย Tapestry แสดงข้อผิดพลาดใน HTML รวมทั้งบันทึกข้อยกเว้นในข้อความธรรมดาพร้อมวันที่และเวลาที่เกิดข้อยกเว้น สิ่งนี้จะช่วยให้นักพัฒนาตรวจสอบข้อยกเว้นในสภาพแวดล้อมการผลิตได้เช่นกัน นักพัฒนาสามารถมั่นใจในการแก้ไขปัญหาต่างๆเช่นเทมเพลตที่ใช้งานไม่ได้ค่า null ที่ไม่คาดคิดคำขอที่ไม่ตรงกันเป็นต้น
กำลังโหลดคลาสสดและเทมเพลตอีกครั้ง
Tapestry จะโหลดเทมเพลตและคลาสใหม่โดยอัตโนมัติเมื่อแก้ไข คุณลักษณะนี้ช่วยให้สามารถสะท้อนการเปลี่ยนแปลงของแอปพลิเคชันได้ทันทีโดยไม่ต้องผ่านวงจรการสร้างและทดสอบ นอกจากนี้คุณสมบัตินี้ยังช่วยเพิ่มประสิทธิภาพการทำงานของการพัฒนาแอปพลิเคชัน
พิจารณาแพ็คเกจรูทของแอปพลิเคชันคือ org.example.myfirstapp. จากนั้นคลาสในพา ธ ต่อไปนี้จะถูกสแกนเพื่อโหลดซ้ำ
- org.example.myfirstapp.pages
- org.example.myfirstapp.components
- org.example.myfirstapp.mixins
- org.example.myfirstapp.base
- org.example.myfirstapp.services
การรีโหลดคลาสสดสามารถปิดใช้งานได้โดยตั้งค่าโหมดการผลิตเป็น true ใน AppModule.java.
configuration.add(SymbolicConstants.PRODUCTION_MODE,”false”);
การทดสอบหน่วย
การทดสอบหน่วยเป็นเทคนิคที่ใช้ทดสอบแต่ละหน้าและส่วนประกอบ Tapestry มีตัวเลือกที่ง่ายในการจัดหน่วยหน้าทดสอบและส่วนประกอบต่างๆ
หน้าทดสอบหน่วย: Tapestry จัดให้มีชั้นเรียน PageTesterเพื่อทดสอบแอปพลิเคชัน ซึ่งทำหน้าที่เป็นทั้งเบราว์เซอร์และคอนเทนเนอร์ servlet มันแสดงผลเพจโดยไม่มีเบราว์เซอร์ในฝั่งเซิร์ฟเวอร์และสามารถตรวจสอบเอกสารผลลัพธ์เพื่อการแสดงผลที่ถูกต้อง พิจารณาหน้าง่ายๆHelloซึ่งแสดงผลสวัสดีและข้อความสวัสดีอยู่ภายในองค์ประกอบ html ที่มี id hello_id. ในการทดสอบคุณสมบัตินี้เราสามารถใช้ PageTester ดังที่แสดงด้านล่าง -
public class PageTest extends Assert {
@Test
public void test1() {
Sring appPackage = "org.example.myfirstapp"; // package name
String appName = "App1"; // app name
PageTester tester = new PageTester(appPackage, appName, "src/main/webapp");
Document doc = tester.renderPage("Hello");
assertEquals(doc.getElementById("hello_id").getChildText(), "hello");
}
}
PageTester ยังมีตัวเลือกในการรวมข้อมูลบริบทการส่งแบบฟอร์มการนำทางลิงก์ ฯลฯ นอกเหนือจากการแสดงผลเพจ
การทดสอบแบบบูรณาการ
การทดสอบแบบรวมช่วยในการทดสอบแอปพลิเคชันเป็นโมดูลแทนที่จะตรวจสอบแต่ละหน้าเหมือนในการทดสอบหน่วย ในการทดสอบแบบรวมสามารถทดสอบหลายโมดูลร่วมกันเป็นหน่วย Tapestry มีห้องสมุดขนาดเล็กที่เรียกว่าTapestry Test Utilitiesทำการทดสอบแบบบูรณาการ ไลบรารีนี้รวมเข้ากับเครื่องมือทดสอบซีลีเนียมเพื่อทำการทดสอบ ไลบรารีจัดเตรียมคลาสพื้นฐานSeleniumTestCaseซึ่งเริ่มต้นและจัดการเซิร์ฟเวอร์ Selenium ไคลเอนต์ Selenium และ Jetty Instance
หนึ่งในตัวอย่างของการทดสอบแบบรวมมีดังนี้ -
import org.apache.tapestry5.test.SeleniumTestCase;
import org.testng.annotations.Test;
public class IntegrationTest extends SeleniumTestCase {
@Test
public void persist_entities() {
open("/persistitem");
assertEquals(getText("//span[@id='name']").length(), 0);
clickAndWait("link = create item");
assertText("//span[@id = 'name']", "name");
}
}
แดชบอร์ดการพัฒนา
แดชบอร์ดการพัฒนาเป็นเพจเริ่มต้นที่ใช้เพื่อระบุ / แก้ไขปัญหาในแอปพลิเคชันของคุณ แดชบอร์ดเข้าถึงได้โดย URLhttp://localhost:8080/myfirstapp/core/t5dashboard. แดชบอร์ดจะแสดงเพจบริการและไลบรารีคอมโพเนนต์ทั้งหมดที่มีอยู่ในแอปพลิเคชัน
การบีบอัดการตอบสนอง
Tapestry บีบอัดการตอบสนองโดยอัตโนมัติโดยใช้ GZIP compressionและสตรีมไปยังไคลเอนต์ คุณลักษณะนี้จะช่วยลดปริมาณการใช้งานเครือข่ายและช่วยให้การแสดงเพจเร็วขึ้น การบีบอัดสามารถกำหนดค่าได้โดยใช้สัญลักษณ์tapestry.min-gzip-sizeใน AppModule.java ค่าเริ่มต้นคือ 100 ไบต์ Tapestry จะบีบอัดการตอบสนองเมื่อขนาดของการตอบสนองเกิน 100 ไบต์
ความปลอดภัย
Tapestry มีตัวเลือกมากมายในการรักษาความปลอดภัยแอปพลิเคชันจากช่องโหว่ด้านความปลอดภัยที่ทราบในเว็บแอปพลิเคชัน บางส่วนของตัวเลือกเหล่านี้แสดงอยู่ด้านล่าง -
HTTPS - หน้า Tapestry สามารถใส่คำอธิบายประกอบ @Secure เพื่อให้เป็นเพจที่ปลอดภัยและเข้าถึงได้โดยไฟล์ https protocol เท่านั้น.
Page access control - การควบคุมเพจที่จะเข้าถึงได้โดยผู้ใช้บางคนเท่านั้น
White-Listed Page - หน้า Tapestry สามารถใส่คำอธิบายประกอบด้วยไฟล์ @WhitelistAccessOnly เพื่อให้สามารถเข้าถึงได้ผ่านไฟล์ localhost.
Asset Security- ภายใต้พรมคุณสามารถเข้าถึงไฟล์บางประเภทเท่านั้น ผู้อื่นสามารถเข้าถึงได้เฉพาะเมื่อไฟล์MD5 hash ของไฟล์มีให้
Serialized Object Date - Tapestry รวม HMAC เข้ากับข้อมูลวัตถุ Java แบบอนุกรมและส่งไปยังไคลเอนต์เพื่อหลีกเลี่ยงการปลอมแปลงข้อความ
Cross Site Request Forgery- พรมมี 3 ถโมดูลของบุคคลที่เรียกว่าพรม-CSRF ป้องกันเพื่อป้องกันการโจมตี CSRF ใด ๆ
Security Framework integration- Tapestry ไม่ได้ล็อคการใช้งานการพิสูจน์ตัวตน / การอนุญาตเพียงครั้งเดียว Tapestry สามารถรวมเข้ากับเฟรมเวิร์กการพิสูจน์ตัวตนที่เป็นที่นิยม
การบันทึก
Tapestry ให้การสนับสนุนอย่างกว้างขวางสำหรับการบันทึกการบันทึกความคืบหน้าของแอปพลิเคชันโดยอัตโนมัติในขณะที่ทำงาน Tapestry ใช้ไลบรารีการบันทึก Java โดยพฤตินัยSLF4J. คำอธิบายประกอบ@Logสามารถอยู่ในเมธอดคอมโพเนนต์ใดก็ได้เพื่อปล่อยการเข้าและออกของเมธอดและข้อยกเว้นที่เป็นไปได้เช่นกัน นอกจากนี้วัตถุ Tapestry ที่ให้มาคนตัดไม้สามารถฉีดเข้าไปในส่วนประกอบใดก็ได้โดยใช้ไฟล์@Inject คำอธิบายประกอบดังแสดงด้านล่าง -
public class MyPage {
@Inject
private Logger logger;
// . . .
void onSuccessFromForm() {
logger.info("Changes saved successfully");
}
@Log
void onValidateFromForm() {
// logic
}
}
สุดท้ายนี้เราสามารถพูดได้ว่า Apache Tapestry นำเสนอวิธีที่ดีที่สุดในการสร้างแอปพลิเคชันที่กระชับปรับขนาดได้บำรุงรักษาได้แข็งแกร่งและเปิดใช้งาน Ajax Tapestry สามารถรวมเข้ากับแอปพลิเคชัน Java ของ บริษัท อื่นได้ นอกจากนี้ยังสามารถช่วยในการสร้างเว็บแอปพลิเคชันขนาดใหญ่ได้เนื่องจากค่อนข้างง่ายและรวดเร็ว