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 ของ บริษัท อื่นได้ นอกจากนี้ยังสามารถช่วยในการสร้างเว็บแอปพลิเคชันขนาดใหญ่ได้เนื่องจากค่อนข้างง่ายและรวดเร็ว