Tapestry 3.0 的發布帶來了許多變化,包名、DTD 以及配置方式都與 2.x 版本有顯著差異。由於官方教程多基於舊版本,初學者往往難以快速上手。本文將以一個簡單的「Hello, Tapestry 3.0」案例,詳細講解在 Tapestry 3.0 環境下的配置與部署流程,幫助開發者快速熟悉新版本架構。
首先建立專案根目錄(以下以 $home 表示),並在其下建立標準 Web 應用目錄結構:
$home/
├── Home.html
└── WEB-INF/
├── classes/
└── lib/
在 $home 根目錄建立 Home.html:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Hello, Tapestry!</title>
</head>
<body>
你好,<b>Tapestry 3.0!</b>
</body>
</html>
Tapestry 3.0 的 web.xml 異常精簡,核心在於 RedirectFilter 與 ApplicationServlet 的配置:
<?xml version="1.0"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"https://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>Tapestry Tutorial</display-name>
<!-- 根路徑重導向至 /h -->
<filter>
<filter-name>redirect</filter-name>
<filter-class>org.apache.tapestry.RedirectFilter</filter-class>
<init-param>
<param-name>redirect-path</param-name>
<param-value>/h</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>redirect</filter-name>
<url-pattern>/</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>org.apache.tapestry.ApplicationServlet</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/h</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>15</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
關鍵說明: RedirectFilter 會將根路徑 / 的請求轉發至 /h,對應 ApplicationServlet 的映射路徑。若 welcome-file-list 生效,則優先載入 index.html。
雖然簡單案例可省略,但為完整性建議建立。放置於 $home/WEB-INF/hello.application:
<?xml version="1.0"?>
<!DOCTYPE application PUBLIC
"-//Apache Software Foundation//Tapestry Specification 3.0//EN"
"https://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
<application name="Hello Tapestry 3.0">
</application>
命名慣例:ApplicationServlet 的 servlet-name 為 hello,則對應 hello.application。
同樣放置於 $home/WEB-INF/Home.page:
<?xml version="1.0"?>
<!DOCTYPE page-specification PUBLIC
"-//Apache Software Foundation//Tapestry Specification 3.0//EN"
"https://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
<page-specification class="org.apache.tapestry.html.BasePage"/>
指定頁面類別為內建的 BasePage,無需自訂 Java 類別即可渲染純 HTML 模板。
將 Tapestry 發布包 workbench 範例中 WEB-INF/lib 目錄下所有 JAR 檔複製至專案的 $home/WEB-INF/lib。
兩種部署方式擇一:
jar 命令打包為 .war 檔$home 整個目錄複製至 $Tomcat_Home/webapps啟動 Tomcat,瀏覽器訪問 https://localhost:8080/hello,即可看到「你好,Tapestry 3.0!」畫面。
Tapestry 3.0 大幅簡化了配置流程:web.xml、.application、.page 檔案均採用約定優於配置原則,簡單案例甚至可省略後兩者。但在實際企業級開發中(如官方 workbench 範例),完整的規範檔案不可或缺。掌握基礎配置後,可進一步探索元件開發、表單處理、國際化等進階特性。