Apache Tapestry是一个使用Java编写的开源Web框架,采用组件化的方式构建Web应用程序。Tapestry的组件是普通的Java类(POJO),既不需要继承框架特定的基类,也不实现任何接口,因此具有很高的灵活性和可扩展性。
一、Apache Tapestry介绍
Tapestry的核心特性之一是广泛使用Java注解。通过注解,Tapestry实现了强大的功能支持,并允许开发者使用少量的代码实现复杂的应用程序。Tapestry的网页通常由多个组件组成,每个组件都有一个基于XML的模板文件,以及用注解装饰的组件类。
1、Tapestry的优点
- 高度可扩展:适用于开发复杂和大规模的Web应用程序;
- 灵活的API:自适应且易于扩展;
- 成熟稳定:经过多年发展,性能和功能均非常可靠;
- 持久化状态管理:内置支持管理用户会话和应用状态;
- 内置控制反转 (IoC):减少了开发者的工作量,并提高了代码的可测试性。
2、Tapestry的功能
- 详细的异常报告:提供清晰易懂的错误信息,帮助开发者快速定位问题;
- 静态结构与动态行为:结合了静态类型检查和动态页面更新;
- 广泛使用POJO:大部分代码为普通的Java对象,无需继承框架特定的类或实现接口;
- 简化开发:通过减少代码量,使得开发者可以更专注于功能实现。
虽然Java世界中已经存在如JSP、Struts等多种Web框架,但Tapestry提供了一种更加现代、简洁的开发方式,解决了传统框架的许多痛点。许多老旧框架往往有着复杂的学习曲线,且每次更新都需要经过繁琐的编译、测试和部署周期。而Tapestry则通过支持实时类重新加载,使得开发更加高效,避免了频繁的部署流程。
与其他框架引入大量接口、抽象类和基类不同,Tapestry采用的轻量级注解设计使得开发者可以快速构建功能强大的应用程序,并支持AJAX等现代Web技术。
3、Tapestry的架构
Tapestry充分利用Java语言的特性,所有Tapestry页面都是普通的POJO(Java类),开发者不需要遵循特定的接口或继承约定。它通过注解增强类的功能,提供了强大的支持。Tapestry基于成熟的Java Servlet API,并通过Servlet Filter 实现,能够为Web应用程序提供强大的功能支持,同时保持编程的简单性、灵活性和健壮性。
二、Tapestry工作流程
让我们讨论请求Tapestry页面时发生的操作顺序。
1、Java Servlet接收页面请求
该Java Servlet 的配置方式是将传入请求转发到 Tapestry。 配置在 web.xml 中完成,如以下程序中指定。 过滤器和过滤器映射标记将所有请求重定向到Tapestry Filter。
2、Tapestry Filter 通过其 Service() 方法调用 HttpServletRequestHandler 服务。
3、HttpServletRequestHandler 将请求和响应存储在 RequestGlobals 中。 它还将请求和响应包装为 Request 和 Response 对象并将其发送到 RequestHandler。
4、RequestHandler 是 Servlet API 的 HttpServletRequest 之上的抽象。 Tapestry 的一些显着功能是在 RequestHandler 部分完成的。 可以通过在RequestHandler中编写过滤器来扩展tapestry功能。 RequestHandler 提供了几个内置的过滤器,其中包括:
- 检查更新过滤器 − 负责实时类重载。 此过滤器检查 java 类的更改并根据需要更新应用程序;
- 本地化过滤器 − 识别用户的位置并为应用程序提供本地化支持;
- 静态文件过滤器 − 识别静态请求并中止进程。 一旦进程中止,Java Servlet 就会接管控制并处理请求;
- 错误过滤器 − 捕获未捕获的异常并呈现异常报告页面。
RequestHandler 还会修改并存储 RequestQlobals 中的请求和响应,并调用 MasterDispatcher 服务。
5、MasterDispatcher负责通过按特定顺序调用多个调度程序来渲染页面。 MasterDispatcher调用的四个主要调度器如下
- 根路径调度程序 − 它识别请求的根路径”/”并呈现与起始页相同的内容;
- 资源调度程序 − 它通过检查 url 模式 /assets/ 来识别资源(Java 资源)请求,并将请求的资源作为字节流发送;
- PageRenderer 调度程序 − 大部分Tapestry操作是在 PageRender Dispatcher 和下一个调度程序 Component Dispatcher 中完成的。 该调度程序识别该请求的特定页面及其激活上下文(附加信息)。然后它呈现该特定页面并将其发送到客户端。 例如,如果请求 url 为 /product/12123434,则调度程序将检查是否有任何名称为Product/12123434 的类可用。 如果找到,它会调用product/12123434类,生成响应并将其发送到客户端。 如果没有,它会检查产品类别。 如果找到,它会使用额外信息 121234434 调用产品类,生成响应并将其发送到客户端。 这些额外信息称为激活上下文。 如果没有找到类,它只是将请求转发给组件调度程序。
- 组件调度程序 − 组件调度程序将页面的 URL 与模式进行匹配 – /<class_name>/<component_id>:<event_type>/<activation_context>。例如,/product/grid:sort/asc 表示产品类、网格组件、排序事件类型和 asc 激活上下文。 这里,event_type 是可选的,如果没有提供,将触发默认的事件类型操作。 通常,组件调度程序的响应是将重定向发送到客户端。 最有可能的是,重定向将与下一个请求中的 PageRender Dispatcher 相匹配,并且正确的响应将发送到客户端。
三、Apache Tapestry安装
1、先决条件
Tapestry 的唯一依赖项是Core Java。 Tapestry是独立开发的,没有使用任何第三方库/框架。 甚至 Tapestry 使用的 IoC 库也是从头开始开发的。 用 Tapestry 编写的 Web 应用程序可以从控制台本身构建和部署。
可以使用Maven、Eclipse和Jetty来改善开发体验。 Maven 提供快速启动应用程序模板和选项来在 Jetty(Java 事实上的开发服务器)中托管应用程序。 Eclipse 提供了广泛的项目管理功能,并与 Maven 很好地集成。
理想的 Tapestry 应用程序开发需要以下内容
- Java 1.6 or later
- Apache Maven
- Eclipse IDE
- Jetty Server
2、验证Maven安装
我希望你已经在你的机器上安装了 Maven。 要验证 Maven 安装,请键入以下命令
mvn --version
可以看到如下所示的响应
如果尚未安装,请访问https://maven.apache.org/网站下载并安装最新版本的maven。
3、下载Tapestry
Tapestry的最新版本是5.4,您可以从https://tapestry.apache.org/网站下载。 下载binary包就够了。 如果我们使用Maven快速启动模板,那么我们不需要单独下载Tapestry。 Maven 会自动下载必要的 Tapestry Jars 并配置应用程序。
四、Apache Tapestry快速入门
安装 Tapestry 后,让我们使用 Maven 创建一个新的初始项目,如下所示
$ mvn archetype:generate -DarchetypeCatalog=http://tapestry.apache.org
可以看到如下所示的响应
Maven构建完所有操作后,选择archetype创建Tapestry 5 QuickStart项目,如下
1、选择原型
- https://tapestry.apache.org → org.apache.tapestry:quickstart (Tapestry 5 Quickstart Project)
- https://tapestry.apache.org → org.apache.tapestry:tapestry-archetype (Tapestry 4.1.6 Archetype)
选择号码或应用过滤器 (format: [groupId:]artifactId, case sensitive contains): : 1
现在将收到如下所示的响应
按如下方式提取快速入门版本号:Choose a number: 5: 5
此处,快速入门项目采用选项 5 的版本”5.4.1″。 现在,Tapestry原型一一询问以下信息,如下 −
- 5.1 groupId − 定义属性”groupId”的值::com.example
- 5.2 artifactId − 定义属性”artifactId”的值::Myapp
- 5.3 version − 定义属性”version”的值:1.0-SNAPSHOT: :
- 5.4 package name − 定义属性”package”的值: com.example: : com.example.Myap
现在屏幕要求您确认:
确认属性配置
- groupId − com.example
- artifactId − Myapp
- version − 1.0-SNAPSHOT
- package − com.example.Myapp
验证所有属性并使用下面所示的选项确认更改:Y::Y
将看到如下所示的屏幕
到这里已经成功构建了 Tapestry Quick Start 项目。 使用以下命令移动到新创建的 Myapp 目录的位置并开始编码。
cd Myapp
2、运行应用程序
要运行 skeleton 项目,请使用以下命令
mvn jetty:run -Dtapestry.execution-mode=development
你会看到这样的屏幕
到目前为止,我们已经在 Tapestry 中创建了一个基本的快速入门项目。 要在 Web 浏览器中查看正在运行的应用程序,只需在地址栏中键入以下 URL 并按 Enter −
https://localhost:8080/myapp
这里,myapp是应用程序的名称,开发模式下应用程序的默认端口是8080。
五、使用Eclipse
1、打开Eclipse IDE
打开 Eclipse 并选择 File → New → Project… → 选项,如以下屏幕截图所示。
现在,选择 Maven → Maven project 选项。
注:如果未配置 Maven,则配置并创建项目。
选择 Maven 项目后,单击”下一步”,然后再次单击”下一步”按钮。
之后将看到一个屏幕,您应该在其中选择配置选项。 配置完成后,您将看到以下屏幕。
2、目录配置
第一步完成后,您应该单击添加远程目录。 然后添加以下更改,如下面的屏幕截图所示。
现在,添加了 Apache Tapestry 目录。 然后,选择过滤器选项 org.apache.tapestry Quickstart 5.4.1,如下所示。
然后单击”下一步”,将出现以下屏幕。
3、配置GroupId、ArtifactId、版本和包
向 Tapestry 目录配置添加以下更改。
然后单击”完成”按钮,现在我们已经创建了第一个 skeleton 应用程序。 第一次使用 Maven 时,项目创建可能需要一段时间,因为 Maven 会下载 Maven、Jetty 和 Tapestry 的许多 JAR 依赖项。 Maven 完成后,您将在 Package Explorer 视图中看到一个新目录 MyFirstApplication。
4、使用Jetty服务器运行应用程序
您可以使用Maven直接运行Jetty。 在 Package Explorer 视图中右键单击 MyFirstApplication 项目并选择 Run As → Maven Build…,您将看到如下所示的屏幕。
在配置对话框中,输入目标选项”jetty:run”,然后单击”运行”按钮。
Jetty 初始化后,您将在控制台中看到以下屏幕。
5、在网络浏览器中运行
键入以下 URL 以在 Web 浏览器中运行应用程序:https://loclhost:8080/MyFirstApplication
6、停止Jetty服务器
要停止 Jetty 服务器,请单击控制台中的红色方形图标,如下所示。
-
广告合作
-
QQ群号:707632017