??? 首先自然是下載WebWork的開發包,這個我就不專門做一節了。google一下,到WebWork官方站點下載最新的二進制版本,解壓后你會找到范例、文檔、一些jar、甚至是框架的源代碼。現在先不要被這么多的東西嚇倒,先不要管它們(雖然以后你會非常的需要它們),我們現在只要找出構建基本Web應用程序所需的內容,一些jar和配置文件。
一、搭建骨架
??? 在WebWork的開發包中找到下面一些應用程序必須的文件,相信這個難不倒你:)
??? ?? xwork.jar? WebWork構建所依賴的XWork類庫
??? ?? common-logging.jar? 通用的日志類庫,WebWork用它為Log4J或者JDK提供透明的日志記錄
??? ?? oscore.jar? OSCore,一個來自OpenSymphony公司的通用功能類庫
??? ?? velocity-dep.jar? 依賴Velocity類庫
??? ?? ognl.jar? 對象圖導航語言(OGNL),WebWork中使用的表達式語言
??? ?? xwork.xml? WebWork配置文件,為你的Web應用程序定義action、result和interceptor
??? ?? web.xml? J2EE Web應用程序配置文件,為你的Web應用程序定義servlet、JSP標簽庫等內容
??? 現在創建一個名為HelloWorld項目(用你喜歡和習慣的IDE),在項目下創建一個源代碼文件夾如src,一個web文件夾如webApp,把web.xml放在WEB-INF目錄下,而xwork.xml應該被放在WEB-INF\classes下,如果是在IDE環境下就放在源代碼文件夾下編譯后就會出現在WEB-INF\classes了。相關的*.jar自然是放在WEB-INF\lib下了。下面我們對幾個配置文件進行基本的修改。
??? 為了讓WebWork正常工作,我們必須配置一個在上一篇筆記中提到的前端控制器(Front Controller),使特定URL模式的請求都被提交給WebWork處理。這和Struts是相似的。來看代碼吧(web.xml):
?1?<web-app>
?2????
?3????<servlet>
?4???????<servlet-name>webwork</servlet-name>
?5???????<servlet-class>
?6??????????com.opensymphony.webwork.dispatcher.ServletDispatcher
?7???????</servlet-class>
?8????</servlet>
?9?
10????<servlet-mapping>
11???????<servlet-name>webwork</servlet-name>
12???????<url-pattern>*.action</url-pattern>
13????</servlet-mapping>
14????
15?</web-app>
?2????

?3????<servlet>
?4???????<servlet-name>webwork</servlet-name>
?5???????<servlet-class>
?6??????????com.opensymphony.webwork.dispatcher.ServletDispatcher
?7???????</servlet-class>
?8????</servlet>
?9?
10????<servlet-mapping>
11???????<servlet-name>webwork</servlet-name>
12???????<url-pattern>*.action</url-pattern>
13????</servlet-mapping>
14????

15?</web-app>
??? 為了使用WebWork的標簽庫,還需要給出一個告訴程序在哪里可以找到標簽苦的配置,還是看代碼吧(web.xml):
?1?<web-app>
?2?????
?3???<taglib>
?4??????<taglib-uri>webwork</taglib-uri>
?5??????<taglib-location>
?6?????????/WEB-INF/lib/webwork-2.1.7.jar
?7??????</taglib-location>
?8???</taglib>
?9???
10?</web-app>
?2?????

?3???<taglib>
?4??????<taglib-uri>webwork</taglib-uri>
?5??????<taglib-location>
?6?????????/WEB-INF/lib/webwork-2.1.7.jar
?7??????</taglib-location>
?8???</taglib>
?9???

10?</web-app>
??? 你是不是有點奇怪為什么taglib配置的是一個.jar而不是一個TLD文件,其實根據規范程序會自動到.jar中去找指定位置的TLD,我們暫且不管這個問題吧,先去看看WebWork自己的核心配置文件-xwork.xml吧。
??? 說明一下,因為WebWork是基于XWork這個這個子項目的,所以這個文件叫做xwork,不要被它弄迷糊了。我們先來對xwork.xml做一個最基本的配置,以后熟悉了再往里面加入自己的東西就很輕松了。(xwork.xml)
1?<xwork>
2?????<include?file="webwork-default.xml">
3?????
4?????<package?name="default"?extends="webwork-default">
5?????????<default-interceptor-ref?name="completeStack"/>
6?????</package>
7?</xwork>
2?????<include?file="webwork-default.xml">
3?????
4?????<package?name="default"?extends="webwork-default">
5?????????<default-interceptor-ref?name="completeStack"/>
6?????</package>
7?</xwork>
??? 我們暫時只用關注一個問題:xwork.xml中包含了一個名教webwork-default.xml的文件,這個文件已經包含在了webwork的.jar中了,它提供了讓WebWork正常運行的標準配置,也提供了一些默認的處理方式。了解到這里已經足夠了,我們繼續往下走。
??? 下面在xwork.xml同一個目錄下創建一個webwork.properties配置文件,它定義了一些告訴webwork如何工作的信息,暫時不用關注它,在里面加入一行內容:(webwork.properties)
1?webwork.tag.altSyntax?=?true
??? 到此,基本的骨架就搭成了,其實并不復雜。下面我們就開始進入真正與業務相關的內容吧。
二、你的第一個action
??? 我們現在假設HelloWorld的需求是這樣的:當用戶訪問一個URL的時候(如http://localhost/helloworld.action? webwork默認的后綴是action,后面的筆記中你會了解到這個是可以修改的,比如換成現在比較流行的jspa),都會有一條HelloWorld問候語顯示。從上面提到的webwork前端控制器的知識可以知道,URL請求會被映射到webwork中,所以我們要實現這個需求要做下面3件事情:
??? (1) 創建一個action類(用來實現業務邏輯,并準備返回)
??? (2) 創建一個result,這里是用JSP的形式,熟練后你可以靈活運用velocity、FreeMarker等
??? (3) 配置action與result
???
??? 第一部創建action類:HelloWorld.java ,還是先看代碼吧:
?1?package?example
?2?
?3?import?com.opensymphony.xwork.Action;
?4?
?5?public?class?HelloWorld?implements?Action{
?6?????private?String?message;
?7?????
?8?????public?String?execute(){
?9?????????message?=?"Hello,?World!\n";
10?????????message?+=?"The?time?is:\n";
11?????????message?+=?System.currentTimeMillis();
12?????????return?SUCCESS;
13?????}
14?????
15?????public?String?getMessage(){
16?????????return?message;
17?????}
18?}
?2?
?3?import?com.opensymphony.xwork.Action;
?4?
?5?public?class?HelloWorld?implements?Action{
?6?????private?String?message;
?7?????
?8?????public?String?execute(){
?9?????????message?=?"Hello,?World!\n";
10?????????message?+=?"The?time?is:\n";
11?????????message?+=?System.currentTimeMillis();
12?????????return?SUCCESS;
13?????}
14?????
15?????public?String?getMessage(){
16?????????return?message;
17?????}
18?}
??? 注意你所編寫的action類都必須實現定義了execute()方法的Action接口,而execute()就是在執行這個action的時候被WebWork調用的。
??? 在action中定義了message的getter方法,以便JSP標簽取得message的值顯示給客戶端。
??? 最后execute()方法返回了SUCCESS(其實就是一個值為“success”的字符串常量),并且所有的WebWork的action都必須返回一個result code(一個說明執行結果的字符串)。它告訴WebWork現在的執行結果和下一步應該對應到哪個result,雖然result code不一定必須對應一個result但是通常都是。既然業務已經處理完了,下面就來創建一個JSP頁面顯示HelloWorld問候語。
?1?<%@?taglib?prefix="ww"?uri="webwork"?%>
?2?????<html>
?3?????????<head>
?4?????????????<title>Hello?Page</title>
?5?????????</head>
?6?????????<body>
?7?????????The?message?generated?by?my?first?action?is:
?8?????????<ww:property?value="message"/>
?9?????????</body>
10?????</html>
11?
?2?????<html>
?3?????????<head>
?4?????????????<title>Hello?Page</title>
?5?????????</head>
?6?????????<body>
?7?????????The?message?generated?by?my?first?action?is:
?8?????????<ww:property?value="message"/>
?9?????????</body>
10?????</html>
11?
??? 用過頁面標簽的朋友肯定對這種代碼很熟悉了,即使你沒用過也沒關系,下面簡單介紹一下。第一行標簽庫定義將前綴ww和URI webwork(這個webwork就是前面在web.xml中定義的URI)之間建立了映射關系。前綴ww指明了所有WebWork標簽在使用的時候以“ww:”開頭。property標簽包含了一個value屬性值,通過設置value值,標簽可以從action中獲得對應表達式的內容。因為在action中創建一個名為getMessage()的方法,value值為message的property標簽就會得到getMessage()方法調用后的值。把上面的代碼保存為hello.jsp,放在webApp目錄下。
??? 配置你的action與result,已經創建了action類和視圖,最后還需要將它們聯系起來。你可以通過為action配置一個特別的URL,以及將SUCCESS這個result code映射到你剛才創建的JSP來完成這一步。當你配置一個WebWork action的時候,必須清楚下面3個方面:
??? (1) action類的全名,包含完整的包名
??? (2) 你打算將action存放于Web應用程序什么位置,即應用什么URL
??? (3) action可能返回所有結果碼
?1?<xwork>
?2?????<include?file="webwork-default.xml">
?3?????
?4?????<package?name="default"?extends="webwork-default">
?5?????????<default-interceptor-ref?name="completeStack"/>
?6?????????
?7?????????<action?name="helloWorld"?class="example.HelloWorld">
?8?????????????<result?name="success">hello.jsp</result>
?9?????????</action>
10?????</package>
11?</xwork>
?2?????<include?file="webwork-default.xml">
?3?????
?4?????<package?name="default"?extends="webwork-default">
?5?????????<default-interceptor-ref?name="completeStack"/>
?6?????????
?7?????????<action?name="helloWorld"?class="example.HelloWorld">
?8?????????????<result?name="success">hello.jsp</result>
?9?????????</action>
10?????</package>
11?</xwork>
??? 到這個時候就已經差不多了,編譯程序并發布在你喜歡的web容器中。啟動服務器你就可以在瀏覽器中輸入URL看看效果了,如http://localhost/helloWorld.action(如果端口為8080,還需要加上端口),這個時候你就會看到瀏覽器中顯示了HelloWorld的信息。這并不是一個令人興奮的網頁,但是你至少開始使用WebWork了,這難道不令人激動嗎?
??? 當然畢竟上這是一個很簡單的應用,實際的應用會比這復雜千倍萬倍,你將會在后面的筆記中慢慢深入WebWork的殿堂,下一篇將會詳細講述WebWork中三最為重要的概念-action、result、interceptor并告訴你如何最好的使用它們。讓我們一起期待吧!