Apache Tapestry - Tính năng nâng cao

Trong chương này, chúng ta sẽ thảo luận chi tiết về một số tính năng nâng cao của Apache Tapestry.

Đảo ngược kiểm soát

Tapestry cung cấp thư viện Inversion of Control tích hợp sẵn. Tapestry được tích hợp sâu vào IoC và sử dụng IoC cho tất cả các tính năng của nó. Cấu hình IoC của Tapestry dựa trên chính Java thay vì XML như nhiều vùng chứa IoC khác. Các mô-đun dựa trên IoC của Tapestry được đóng gói thành tệp JAR và chỉ được đưa vào classpath với cấu hình bằng không. Việc sử dụng IoC của tấm thảm dựa trên độ nhẹ, có nghĩa là -

  • Các giao diện nhỏ của hai hoặc ba phương thức.

  • Các phương thức nhỏ với hai hoặc ba tham số.

  • Giao tiếp ẩn danh thông qua các sự kiện, thay vì các lệnh gọi phương thức rõ ràng.

Mô-đun

Mô-đun là một cách để mở rộng chức năng của ứng dụng Tapestry. Tấm thảm có cả mô-đun tích hợp và số lượng lớn mô-đun của bên thứ ba. Hibernate là một trong những mô-đun nóng và rất hữu ích do Tapestry cung cấp. Nó cũng có các mô-đun tích hợp JMX, JPA, Spring Framework, JSR 303 Bean Validation, JSON, v.v. Một số mô-đun của bên thứ ba đáng chú ý là:

  • 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

Ngoại lệ thời gian chạy

Một trong những tính năng tốt nhất của tấm thảm là Detailed Error Reporting. Tapestry giúp một nhà phát triển bằng cách cung cấp báo cáo ngoại lệ hiện đại. Báo cáo ngoại lệ của tấm thảm là HTML đơn giản với thông tin chi tiết. Bất kỳ ai cũng có thể dễ dàng hiểu được bản báo cáo. Tấm thảm hiển thị lỗi trong HTML cũng như lưu ngoại lệ trong văn bản thuần túy với ngày và giờ xảy ra ngoại lệ. Điều này cũng sẽ giúp nhà phát triển kiểm tra ngoại lệ trong môi trường sản xuất. Nhà phát triển có thể tự tin khắc phục mọi sự cố như mẫu bị hỏng, giá trị rỗng không mong muốn, yêu cầu chưa được so khớp, v.v.

Lớp Trực tiếp và Tải lại Mẫu

Tấm thảm sẽ tự động tải lại các mẫu và lớp khi được sửa đổi. Tính năng này cho phép phản ánh ngay lập tức các thay đổi của ứng dụng mà không cần trải qua chu kỳ xây dựng và thử nghiệm. Ngoài ra, tính năng này cải thiện đáng kể năng suất phát triển ứng dụng.

Hãy coi gói gốc của ứng dụng là org.example.myfirstapp. Sau đó, các lớp trong các đường dẫn sau được quét để tải lại.

  • org.example.myfirstapp.pages
  • org.example.myfirstapp.components
  • org.example.myfirstapp.mixins
  • org.example.myfirstapp.base
  • org.example.myfirstapp.services

Việc tải lại lớp trực tiếp có thể bị vô hiệu hóa bằng cách đặt chế độ sản xuất thành true trong AppModule.java.

configuration.add(SymbolicConstants.PRODUCTION_MODE,”false”);

Kiểm tra đơn vị

Kiểm thử đơn vị là một kỹ thuật mà các trang và thành phần riêng lẻ được kiểm tra. Tapestry cung cấp các tùy chọn dễ dàng cho các trang và thành phần kiểm tra đơn vị.

Đơn vị kiểm tra một trang: Tấm thảm cung cấp một lớp PageTesterđể kiểm tra ứng dụng. Điều này hoạt động như cả trình duyệt và vùng chứa servlet. Nó hiển thị trang mà không có trình duyệt ở phía máy chủ và tài liệu kết quả có thể được kiểm tra để hiển thị chính xác. Xem xét một trang đơn giảnHello, hiển thị lời chào và văn bản xin chào được đặt bên trong phần tử html có id hello_id. Để kiểm tra tính năng này, chúng ta có thể sử dụng PageTester như hình dưới đây:

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 cũng cung cấp tùy chọn để bao gồm thông tin ngữ cảnh, gửi biểu mẫu, điều hướng liên kết, v.v., ngoài việc hiển thị trang.

Kiểm tra tích hợp

Kiểm thử tích hợp giúp kiểm tra ứng dụng dưới dạng mô-đun thay vì kiểm tra từng trang riêng lẻ như trong kiểm thử đơn vị. Trong thử nghiệm Tích hợp, nhiều mô-đun có thể được thử nghiệm cùng nhau như một đơn vị. Tapestry cung cấp một thư viện nhỏ có tên làTapestry Test Utilitiesđể thực hiện kiểm tra tích hợp. Thư viện này tích hợp với công cụ kiểm tra Selenium để thực hiện kiểm tra. Thư viện cung cấp một lớp cơ sởSeleniumTestCase, khởi động và quản lý máy chủ Selenium, máy khách Selenium và Jetty Instance.

Một trong những ví dụ về thử nghiệm tích hợp như sau:

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"); 
   } 
}

Bảng điều khiển phát triển

Bảng điều khiển phát triển là trang mặc định được sử dụng để xác định / giải quyết các vấn đề trong ứng dụng của bạn. Trang tổng quan được truy cập bằng URLhttp://localhost:8080/myfirstapp/core/t5dashboard. Bảng điều khiển hiển thị tất cả các trang, dịch vụ và thư viện thành phần có sẵn trong ứng dụng.

Nén phản hồi

Tapestry tự động nén phản hồi bằng cách sử dụng GZIP compressionvà truyền trực tuyến cho khách hàng. Tính năng này sẽ giảm lưu lượng mạng và hỗ trợ phân phối trang nhanh hơn. Nén có thể được cấu hình bằng cách sử dụng biểu tượngtapestry.min-gzip-sizetrong AppModule.java. Giá trị mặc định là 100 byte. Tapestry sẽ nén phản hồi khi kích thước của phản hồi vượt qua 100 byte.

Bảo vệ

Tapestry cung cấp nhiều tùy chọn để bảo mật ứng dụng khỏi các lỗ hổng bảo mật đã biết trong ứng dụng web. Một số tùy chọn này được liệt kê bên dưới -

  • HTTPS - Các trang thảm có thể được chú thích bằng @Secure để làm cho nó trở thành một trang an toàn và có thể truy cập bởi https protocol chỉ có.

  • Page access control - Kiểm soát trang chỉ được truy cập bởi một người dùng nhất định.

  • White-Listed Page - Các trang thảm có thể được chú thích bằng @WhitelistAccessOnly để làm cho nó chỉ có thể truy cập thông qua localhost.

  • Asset Security- Dưới tấm thảm, chỉ một số loại tệp mới có thể truy cập được. Những người khác chỉ có thể được truy cập khiMD5 hash của tệp được cung cấp.

  • Serialized Object Date - Tapestry tích hợp HMAC vào dữ liệu đối tượng Java được tuần tự hóa và gửi nó đến máy khách để tránh giả mạo tin nhắn.

  • Cross Site Request Forgery- Tapestry cung cấp một mô-đun bên thứ 3 được gọi là tapestry-csrf-Protection để ngăn chặn bất kỳ cuộc tấn công CSRF nào.

  • Security Framework integration- Tấm thảm không khóa vào một thực hiện xác thực / ủy quyền duy nhất. Tấm thảm có thể được tích hợp với bất kỳ khung xác thực phổ biến nào.

Ghi nhật ký

Tapestry cung cấp hỗ trợ rộng rãi cho việc ghi nhật ký, tự động ghi lại tiến trình của ứng dụng khi nó chạy. Tapestry sử dụng thư viện ghi nhật ký Java de-facto,SLF4J. Chú thích@Logcó thể nằm trong bất kỳ phương thức thành phần nào để phát ra lối vào và lối ra của phương thức và cả ngoại lệ có thể có. Ngoài ra, đối tượng trình ghi nhật ký do Tapestry cung cấp có thể được đưa vào bất kỳ thành phần nào bằng cách sử dụng@Inject chú thích như hình dưới đây -

public class MyPage { 
   @Inject 
   private Logger logger; 
   
   // . . . 
    
   void onSuccessFromForm() { 
      logger.info("Changes saved successfully"); 
   } 
     
   @Log 
   void onValidateFromForm() { 
      // logic 
   } 
}

Cuối cùng, bây giờ chúng ta có thể nói rằng Apache Tapestry mang đến những cách tốt nhất để xây dựng các ứng dụng ngắn gọn, có thể mở rộng, có thể bảo trì, mạnh mẽ và hỗ trợ Ajax. Tấm thảm có thể được tích hợp với bất kỳ ứng dụng Java nào của bên thứ ba. Nó cũng có thể giúp tạo một ứng dụng web lớn vì nó khá dễ dàng và nhanh chóng.