Apache Tapestry - 高级功能
在本章中,我们将详细讨论 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 应用程序,因为它非常简单且快速。