Tapestry 高级功能
在本章中,我们将详细讨论 Apache Tapestry 的一些高级功能。
控制反转
Tapestry 提供了内置的控制反转库。 Tapestry 与 IoC 深度集成,并使用 IoC 实现其所有功能。 Tapestry IoC 配置基于 Java 本身,而不是像许多其他 IoC 容器一样的 XML。基于 Tapestry IoC 的模块被打包到 JAR 文件中,并以零配置直接放入类路径中。 Tapestry IoC 使用基于亮度,这意味着-
两个或三个方法的小接口。
带有两个或三个参数的小方法。
通过事件进行匿名通信,而不是显式方法调用。
模块
Module 是一种扩展 Tapestry 应用程序功能的方法。 Tapestry 既有内置模块,也有大量第三方模块。 Hibernate 是 Tapestry 提供的热门且非常有用的模块之一。它还具有集成 JMX、JPA、Spring 框架、JSR 303 Bean 验证、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 异常报告是带有详细信息的简单 HTML。任何人都可以轻松理解该报告。 Tapestry 以 HTML 格式显示错误,并以纯文本形式保存异常,其中包含异常发生的日期和时间。这也将有助于开发人员检查生产环境中的异常。开发人员可以放心地修复任何问题,例如损坏的模板、意外的空值、不匹配的请求等,
实时类和模板重新加载
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 提供了许多选项来保护应用程序免受网络应用程序中已知的安全漏洞的影响。下面列出了其中一些选项-
HTTPS-Tapestry 页面可以使用 @Secure 进行注释,使其成为安全页面,并且只能通过 https 协议 访问。
Page access control-控制页面仅供特定用户访问。
White-Listed Page-Tapestry 页面可以使用 @WhitelistAccessOnly 进行注释,使其只能通过 localhost 访问。
Asset Security-在挂毯下,只能访问某些类型的文件。只有提供了文件的 MD5 哈希 才能访问其他文件。
Serialized Object Date-Tapestry 将 HMAC 集成到序列化 Java 对象数据中,并将其发送到客户端以避免消息篡改。
Cross Site Request Forgery-Tapestry 提供了一个名为 Tapestry-csrf-protection 的第 3rd 方模块,以防止任何 CSRF 攻击。
安全框架集成-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 应用程序集成。它还可以帮助创建大型 Web 应用程序,因为它非常简单快捷。