去年年底进入一家新的公司,公司使用的技术是自己以前没涉及的,现将官方文档阅读翻译记录到blog。
准备开始
观看视频
观看Mark W.Shead的 10分钟简介,来快速了解Tapestry。该视频向您介绍了如何建立一个基于Hibernate和Ajax,具备校验的简单应用,并向您展示Tapestry开发者所享受的快速高效开发经验。
mvn archetype:generate -DarchetypeCatalog=http://tapestry.apache.org
Maven 将提示你下载来创建Tapestry 5 快速开始项目并添加版本号(比如5.4.0),同时会询问你组织ID,个人ID和版本号。
如果您想下载一个未发布版本的Tapestry,请使用一个官方提供的URI。
您将看到以下进度内容:
$ mvn archetype:generate -DarchetypeCatalog=https://repository.apache.org/content/repositories/staging [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building Maven Stub Project (No POM) 1 [INFO] ------------------------------------------------------------------------ [INFO] [INFO] >>> maven-archetype-plugin:2.3:generate (default-cli) > generate-sources @ standalone-pom >>> [INFO] [INFO] <<< maven-archetype-plugin:2.3:generate (default-cli) < generate-sources @ standalone-pom <<< [INFO] [INFO] --- maven-archetype-plugin:2.3:generate (default-cli) @ standalone-pom --- [INFO] Generating project in Interactive mode [INFO] No archetype defined. Using maven-archetype-quickstart (org.apache.maven.archetypes:maven-archetype-quickstart:1.0) Choose archetype: ... 5: https://repository.apache.org/content/repositories/staging -> org.apache.tapestry:quickstart (-) ... Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 105: 5 Choose org.apache.tapestry:quickstart version: 1: 5.3 2: 5.3.1 3: 5.3.2 4: 5.3.3-rc-1 5: 5.3.3 6: 5.3.4 7: 5.3.5 8: 5.3.6 9: 5.3.7 10: 5.3.8 11: 5.4-beta-3 12: 5.4-beta-6 13: 5.4-beta-22 14: 5.4-beta-26 15: 5.4-beta-27 16: 5.4-beta-28 Choose a number: 16: 16 Define value for property 'groupId': : com.example Define value for property 'artifactId': : newapp Define value for property 'version': 1.0-SNAPSHOT: : Define value for property 'package': com.example: : com.example.newapp Confirm properties configuration: groupId: com.example artifactId: newapp version: 1.0-SNAPSHOT package: com.example.newapp Y: : [INFO] ---------------------------------------------------------------------------- [INFO] Using following parameters for creating project from Archetype: quickstart:5.4-beta-28 [INFO] ---------------------------------------------------------------------------- [INFO] Parameter: groupId, Value: com.example [INFO] Parameter: artifactId, Value: newapp [INFO] Parameter: version, Value: 1.0-SNAPSHOT [INFO] Parameter: package, Value: com.example.newapp [INFO] Parameter: packageInPathFormat, Value: com/example/newapp [INFO] Parameter: package, Value: com.example.newapp [INFO] Parameter: version, Value: 1.0-SNAPSHOT [INFO] Parameter: groupId, Value: com.example [INFO] Parameter: artifactId, Value: newapp [INFO] project created from Archetype in dir: /users/joeuser/workspace/tapestry/tapestry-doc-examples/newapp [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 32.094 s [INFO] Finished at: 2015-04-03T08:10:26-07:00 [INFO] Final Memory: 15M/216M [INFO] ------------------------------------------------------------------------ ~/workspaces/tapestry/tapestry-doc-examples
下载完成后,Maven 会创建一个可运行的框架项目。由于我们指定了新项目的个人ID,所以该项目在新项目的路径被创建(注意:如果你在当前得到一个'Ubable to get resource'的警告,你可以在防火墙里解除Maven资源库的 HTTP 限制)。
执行该项目,需要改变新项目的路径并执行:
$ mvn jetty:run [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building newapp Tapestry 5 Application 1.0-SNAPSHOT [INFO] ------------------------------------------------------------------------ ... Application 'app' (version 1.0-SNAPSHOT-DEV) startup time: 329 ms to build IoC Registry, 919 ms overall. ______ __ ____ /_ __/__ ____ ___ ___ / /_______ __ / __/ / / / _ `/ _ \/ -_|_-</ __/ __/ // / /__ \ /_/ \_,_/ .__/\__/___/\__/_/ \_, / /____/ /_/ /___/ 5.4-beta-28 (development mode) [INFO] Started SelectChannelConnector@0.0.0.0:8080 [INFO] Started Jetty Server稍等片刻,待下载完成后,你可以打开浏览器,输入 http://localhost:8080/newapp 来查看正在运行的应用:
![]()
该项目包含了3个相同风格的页面:初始页面,首页,基本操作页面。你也可以将该项目导入的IDE开始编程,学习下一章节来查看应用组件。
浏览项目结构
newapp/ ├── build.gradle ├── gradle │ └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── pom.xml └── src ├── main │ ├── java │ │ └── com │ │ └── example │ │ └── newapp │ │ ├── components │ │ │ └── Layout.java │ │ ├── pages │ │ │ ├── About.java │ │ │ ├── Contact.java │ │ │ ├── Error404.java │ │ │ ├── Index.java │ │ │ └── Login.java │ │ └── services │ │ ├── AppModule.java │ │ ├── DevelopmentModule.java │ │ └── QaModule.java │ ├── resources │ │ ├── com │ │ │ └── example │ │ │ └── newapp │ │ │ ├── components │ │ │ │ └── Layout.tml │ │ │ ├── logback.xml │ │ │ └── pages │ │ │ ├── About.tml │ │ │ ├── Contact.tml │ │ │ ├── Error404.tml │ │ │ ├── Index.properties │ │ │ ├── Index.tml │ │ │ └── Login.tml │ │ └── log4j.properties │ └── webapp │ ├── WEB-INF │ │ ├── app.properties │ │ └── web.xml │ ├── favicon.ico │ ├── images │ │ └── tapestry.png │ └── mybootstrap │ ├── css │ │ ├── bootstrap-responsive.css │ │ └── bootstrap.css │ ├── img │ │ ├── glyphicons-halflings-white.png │ │ └── glyphicons-halflings.png │ └── js │ └── bootstrap.js ├── site │ ├── apt │ │ └── index.apt │ └── site.xml └── test ├── conf │ ├── testng.xml │ └── webdefault.xml ├── java │ └── PLACEHOLDER └── resources └── PLACEHOLDER 30 directories, 39 files一个Tapestry应用是由页面组成,每个页面包含一个模板文件和一个Java类。
Tapestry 的页面模板文件,拥有.tml后缀并且在应用包 src/main/resources/ 下 (本例:src/main/resources/com/example/newapp/pages).
模板文件本质上是有特殊标记语法,和Java 类相关联的HTML
同理,Tapestry 页面Java类在应用包 src/main/java(本例:src/main/java/com/example/newapp/pages)它们的名称匹配 页面文件名称, (Index.tml -> Index.java).
在框架项目中,大部分的HTML在页面包里是找不到的除非是一个全局布局组件模板,组件Java 类在src/main/java/com/example/newapp/components,模板文件在src/main/resources/com/example/newapp/components。
下载项目包含一些可选项:
- Bootstrap Css library 目录,在src/webapp/context/mybootstrap可以查看,在AppModule.java中决定生效与否。
- 默认情况下,Tapestry 使用的是重写了JQuery的 Prototype 作为它的前端库。
- 项目自动添加了简单的过滤器来展示每个请求
- 项目不仅使用了Maven编译,还有Gradle
下一步
如欲进一步了解,请查看下一节 Tapestry Tutorial ,将会更详细讲述设置和导入项目至Eclipse...然后继续揭示有关Tapestry的更多信息。