Tapestry - 高级功能

创建于 2024-12-02 / 55
字体: [默认] [大] [更大]

在本章中,我们将详细讨论 Apache Tapestry 的一些高级功能。

控制反转

Tapestry 提供内置的控制反转库。 Tapestry 深度集成到 IoC 中,并使用 IoC 来实现其所有功能。 Tapestry IoC 配置基于 Java 本身,而不是像许多其他 IoC 容器那样基于 XML。 基于 Tapestry IoC 的模块被打包到 JAR 文件中,并以零配置放入类路径中。 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

运行时异常

tapestry 的最佳功能之一是详细的错误报告。 Tapestry 通过提供最先进的异常报告来帮助开发人员。 Tapestry 异常报告是简单的 HTML,包含详细信息。 任何人都可以轻松理解该报告。 Tapestry 以 HTML 形式显示错误,并以纯文本形式保存异常,并注明发生异常的日期和时间。 这也将帮助开发人员检查生产环境中的异常。 开发人员可以有信心修复任何问题,例如损坏的模板、意外的空值、不匹配的请求等,

Live 类和模板重新加载

Tapestry 会在修改后自动重新加载模板和类。 此功能可以立即反映应用程序更改,而无需经过构建和测试周期。 此外,此功能极大地提高了应用程序开发的生产力。

考虑应用程序的根包是org.example.myfirstapp。 然后,扫描以下路径中的类以进行重新加载。

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

可以通过在AppModule.java中将生产模式设置为true来禁用实时类重新加载。

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

单元测试

单元测试是一种测试单个页面和组件的技术。 Tapestry 提供了简单的选项来对页面和组件进行单元测试。

对页面进行单元测试:Tapestry 提供一个类PageTester 来测试应用程序。 它既充当浏览器又充当 servlet 容器。 它在服务器端本身没有浏览器的情况下呈现页面,并且可以检查生成的文档是否正确呈现。 考虑一个简单的页面 Hello,它呈现 hello,并且 hello 文本包含在 id 为 hello_id 的 html 元素内。 为了测试这个功能,我们可以使用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 的小型库来进行集成测试。 该库与 Selenium 测试工具集成来执行测试。 该库提供了一个基类SeleniumTestCase,它启动并管理Selenium服务器、Selenium客户端和Jetty实例。

集成测试的一个例子如下 −

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

开发仪表板

开发仪表板是默认页面,用于识别/解决应用程序中的问题。 仪表板可通过 URL http://localhost:8080/myfirstapp/core/t5dashboard 访问。 仪表板显示应用程序中可用的所有页面、服务和组件库。

响应压缩

Tapestry 自动使用 GZIP 压缩 压缩响应并将其流式传输到客户端。 此功能将减少网络流量并有助于更快地交付页面。 可以使用 AppModule.java 中的符号 tapestry.min-gzip-size 来配置压缩。 默认值为 100 字节。 一旦响应的大小超过 100 字节,Tapestry 将压缩响应。

安全

Tapestry 提供了许多选项来保护应用程序免受 Web 应用程序中已知安全漏洞的影响。 下面列出了其中一些选项 −

  • HTTPS − Tapestry 页面可以使用 @Secure 进行注解,使其成为安全页面,并且只能通过 https 协议 访问。

  • Page access control − 控制页面只允许特定用户访问。

  • White-Listed Page − Tapestry 页面可以使用 @WhitelistAccessOnly 进行注解,以使其只能通过 localhost 进行访问。

  • Asset Security − 在 Tapestry 下,只能访问某些类型的文件。 其他文件只有在提供文件的MD5 哈希后才能访问。

  • Serialized Object Date − Tapestry将HMAC集成到序列化的Java对象数据中并将其发送到客户端以避免消息篡改。

  • Cross Site Request Forgery − Tapestry 提供了一个名为 Tapestry-csrf-protection 的第三方模块来防止任何 CSRF 攻击。

  • Security Framework integration − Tapestry 不锁定单个身份验证/授权实现。 Tapestry 可以与任何流行的身份验证框架集成。

Logging

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 应用程序集成。 它还可以帮助创建大型 Web 应用程序,因为它非常简单且快速。



0 人点赞过