隨筆 - 81  文章 - 1033  trackbacks - 0
          <2025年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          在浮躁的年代里,我們進(jìn)取心太切,患得患失;虛榮心太強(qiáng),戰(zhàn)戰(zhàn)兢兢。一心爭強(qiáng)好勝,惟恐榜上無名。
          I think I can fly , and flying like a bird !
          程序員一名,已售出,缺貨中!

          我的郵件聯(lián)系方式

          用且僅用于MSN

          博客點擊率
          free web counter
          free web counter

          常用鏈接

          留言簿(36)

          隨筆檔案

          搜索

          •  

          積分與排名

          • 積分 - 186878
          • 排名 - 308

          最新評論

          閱讀排行榜

          評論排行榜

          ??? 在本篇將會通過一個簡單卻經(jīng)典的HelloWorld程序手把手的教你如何編寫(其實我更愿意稱之為創(chuàng)建,因為有了這么強(qiáng)大的框架需要編寫的代碼已經(jīng)很少很少)一個WebWork應(yīng)用程序。即使你從沒接觸過WebWork甚至你從沒用過任何其他框架,在本篇結(jié)束的時候你都能夠輕松的通過WebWork建立簡單的Web應(yīng)用程序了。不過我們約定你必須懂一定的HTML和JAVA知識:)。Let's Go!

          ??? 首先自然是下載WebWork的開發(fā)包,這個我就不專門做一節(jié)了。google一下,到WebWork官方站點下載最新的二進(jìn)制版本,解壓后你會找到范例、文檔、一些jar、甚至是框架的源代碼。現(xiàn)在先不要被這么多的東西嚇倒,先不要管它們(雖然以后你會非常的需要它們),我們現(xiàn)在只要找出構(gòu)建基本W(wǎng)eb應(yīng)用程序所需的內(nèi)容,一些jar和配置文件。

          一、搭建骨架

          ??? 在WebWork的開發(fā)包中找到下面一些應(yīng)用程序必須的文件,相信這個難不倒你:)

          ??? ?? xwork.jar? WebWork構(gòu)建所依賴的XWork類庫
          ??? ?? common-logging.jar? 通用的日志類庫,WebWork用它為Log4J或者JDK提供透明的日志記錄
          ??? ?? oscore.jar? OSCore,一個來自O(shè)penSymphony公司的通用功能類庫
          ??? ?? velocity-dep.jar? 依賴Velocity類庫
          ??? ?? ognl.jar? 對象圖導(dǎo)航語言(OGNL),WebWork中使用的表達(dá)式語言
          ??? ?? xwork.xml? WebWork配置文件,為你的Web應(yīng)用程序定義action、result和interceptor
          ??? ?? web.xml? J2EE Web應(yīng)用程序配置文件,為你的Web應(yīng)用程序定義servlet、JSP標(biāo)簽庫等內(nèi)容


          ??? 現(xiàn)在創(chuàng)建一個名為HelloWorld項目(用你喜歡和習(xí)慣的IDE),在項目下創(chuàng)建一個源代碼文件夾如src,一個web文件夾如webApp,把web.xml放在WEB-INF目錄下,而xwork.xml應(yīng)該被放在WEB-INF\classes下,如果是在IDE環(huán)境下就放在源代碼文件夾下編譯后就會出現(xiàn)在WEB-INF\classes了。相關(guān)的*.jar自然是放在WEB-INF\lib下了。下面我們對幾個配置文件進(jìn)行基本的修改。

          ??? 為了讓W(xué)ebWork正常工作,我們必須配置一個在上一篇筆記中提到的前端控制器(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>

          ??? 為了使用WebWork的標(biāo)簽庫,還需要給出一個告訴程序在哪里可以找到標(biāo)簽苦的配置,還是看代碼吧(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>

          ??? 你是不是有點奇怪為什么taglib配置的是一個.jar而不是一個TLD文件,其實根據(jù)規(guī)范程序會自動到.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>

          ??? 我們暫時只用關(guān)注一個問題:xwork.xml中包含了一個名教webwork-default.xml的文件,這個文件已經(jīng)包含在了webwork的.jar中了,它提供了讓W(xué)ebWork正常運行的標(biāo)準(zhǔn)配置,也提供了一些默認(rèn)的處理方式。了解到這里已經(jīng)足夠了,我們繼續(xù)往下走。

          ??? 下面在xwork.xml同一個目錄下創(chuàng)建一個webwork.properties配置文件,它定義了一些告訴webwork如何工作的信息,暫時不用關(guān)注它,在里面加入一行內(nèi)容:(webwork.properties)

          1?webwork.tag.altSyntax?=?true

          ??? 到此,基本的骨架就搭成了,其實并不復(fù)雜。下面我們就開始進(jìn)入真正與業(yè)務(wù)相關(guān)的內(nèi)容吧。

          二、你的第一個action

          ??? 我們現(xiàn)在假設(shè)HelloWorld的需求是這樣的:當(dāng)用戶訪問一個URL的時候(如http://localhost/helloworld.action? webwork默認(rèn)的后綴是action,后面的筆記中你會了解到這個是可以修改的,比如換成現(xiàn)在比較流行的jspa),都會有一條HelloWorld問候語顯示。從上面提到的webwork前端控制器的知識可以知道,URL請求會被映射到webwork中,所以我們要實現(xiàn)這個需求要做下面3件事情:
          ??? (1) 創(chuàng)建一個action類(用來實現(xiàn)業(yè)務(wù)邏輯,并準(zhǔn)備返回)
          ??? (2) 創(chuàng)建一個result,這里是用JSP的形式,熟練后你可以靈活運用velocity、FreeMarker等
          ??? (3) 配置action與result

          ???
          ??? 第一部創(chuàng)建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?}

          ??? 注意你所編寫的action類都必須實現(xiàn)定義了execute()方法的Action接口,而execute()就是在執(zhí)行這個action的時候被WebWork調(diào)用的。

          ??? 在action中定義了message的getter方法,以便JSP標(biāo)簽取得message的值顯示給客戶端。

          ??? 最后execute()方法返回了SUCCESS(其實就是一個值為“success”的字符串常量),并且所有的WebWork的action都必須返回一個result code(一個說明執(zhí)行結(jié)果的字符串)。它告訴WebWork現(xiàn)在的執(zhí)行結(jié)果和下一步應(yīng)該對應(yīng)到哪個result,雖然result code不一定必須對應(yīng)一個result但是通常都是。既然業(yè)務(wù)已經(jīng)處理完了,下面就來創(chuàng)建一個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?

          ??? 用過頁面標(biāo)簽的朋友肯定對這種代碼很熟悉了,即使你沒用過也沒關(guān)系,下面簡單介紹一下。第一行標(biāo)簽庫定義將前綴ww和URI webwork(這個webwork就是前面在web.xml中定義的URI)之間建立了映射關(guān)系。前綴ww指明了所有WebWork標(biāo)簽在使用的時候以“ww:”開頭。property標(biāo)簽包含了一個value屬性值,通過設(shè)置value值,標(biāo)簽可以從action中獲得對應(yīng)表達(dá)式的內(nèi)容。因為在action中創(chuàng)建一個名為getMessage()的方法,value值為message的property標(biāo)簽就會得到getMessage()方法調(diào)用后的值。把上面的代碼保存為hello.jsp,放在webApp目錄下。

          ??? 配置你的action與result,已經(jīng)創(chuàng)建了action類和視圖,最后還需要將它們聯(lián)系起來。你可以通過為action配置一個特別的URL,以及將SUCCESS這個result code映射到你剛才創(chuàng)建的JSP來完成這一步。當(dāng)你配置一個WebWork action的時候,必須清楚下面3個方面:
          ??? (1) action類的全名,包含完整的包名
          ??? (2) 你打算將action存放于Web應(yīng)用程序什么位置,即應(yīng)用什么URL
          ??? (3) action可能返回所有結(jié)果碼


          ?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>

          ??? 到這個時候就已經(jīng)差不多了,編譯程序并發(fā)布在你喜歡的web容器中。啟動服務(wù)器你就可以在瀏覽器中輸入URL看看效果了,如http://localhost/helloWorld.action(如果端口為8080,還需要加上端口),這個時候你就會看到瀏覽器中顯示了HelloWorld的信息。這并不是一個令人興奮的網(wǎng)頁,但是你至少開始使用WebWork了,這難道不令人激動嗎?

          ??? 當(dāng)然畢竟上這是一個很簡單的應(yīng)用,實際的應(yīng)用會比這復(fù)雜千倍萬倍,你將會在后面的筆記中慢慢深入WebWork的殿堂,下一篇將會詳細(xì)講述WebWork中三最為重要的概念-action、result、interceptor并告訴你如何最好的使用它們。讓我們一起期待吧!
          posted on 2007-02-09 12:39 cresposhi 閱讀(3269) 評論(17)  編輯  收藏

          FeedBack:
          # re: WebWork In Action學(xué)習(xí)筆記(二) WebWork方式的HelloWorld[未登錄] 2007-02-09 12:58 小祝
          先搶沙發(fā),再看。。。  回復(fù)  更多評論
            
          # re: WebWork In Action學(xué)習(xí)筆記(二) WebWork方式的HelloWorld 2007-02-09 13:10 ⒍‰羽化絆徑
          板凳我拿走了
          哈哈  回復(fù)  更多評論
            
          # re: WebWork In Action學(xué)習(xí)筆記(二) WebWork方式的HelloWorld 2007-02-09 13:11 賣女孩的小火柴
          我也搶個,忽忽~~再別讓魚哥搶前幾名了  回復(fù)  更多評論
            
          # re: WebWork In Action學(xué)習(xí)筆記(二) WebWork方式的HelloWorld 2007-02-09 13:14 賣女孩的小火柴
          雖然看不懂,還是支持一下~~
          嘿咻~嘿咻~
          給abc增加人氣啊  回復(fù)  更多評論
            
          # re: WebWork In Action學(xué)習(xí)筆記(二) WebWork方式的HelloWorld 2007-02-09 13:29 小祝
          一會有時間配的試哈,呵呵。  回復(fù)  更多評論
            
          # re: WebWork In Action學(xué)習(xí)筆記(二) WebWork方式的HelloWorld 2007-02-09 13:31 施偉
          這個例子應(yīng)該是差一個包的,呵呵。自己去研究吧,留點思考的余地給大家!  回復(fù)  更多評論
            
          # re: WebWork In Action學(xué)習(xí)筆記(二) WebWork方式的HelloWorld 2007-02-09 13:32 施偉
          多謝大家的支持!HOHO~  回復(fù)  更多評論
            
          # re: WebWork In Action學(xué)習(xí)筆記(二) WebWork方式的HelloWorld 2007-02-09 13:42 睿不可當(dāng)
          不錯,照著做一個先,等待三  回復(fù)  更多評論
            
          # re: WebWork In Action學(xué)習(xí)筆記(二) WebWork方式的HelloWorld 2007-02-09 14:40 梅穎
          來晚了,罪過罪過  回復(fù)  更多評論
            
          # re: WebWork In Action學(xué)習(xí)筆記(二) WebWork方式的HelloWorld 2007-02-09 16:28 施偉
          不晚不晚,呵呵  回復(fù)  更多評論
            
          # re: WebWork In Action學(xué)習(xí)筆記(二) WebWork方式的HelloWorld 2007-02-09 19:46 睿不可當(dāng)
          呵呵 ,跟著你學(xué)webwork
          helloworld成功了.
          期待三啊。。。。。。!!!  回復(fù)  更多評論
            
          # re: WebWork In Action學(xué)習(xí)筆記(二) WebWork方式的HelloWorld 2007-02-09 21:38 小祝
          我配的試了下,成功了,結(jié)果如下:
          The message generated by my first action is:
          Hello, World! The time is: 1171027825781

          其中遇到了幾個問題。
          1.差包webwork-2.1.7.jar(我先就放進(jìn)來了)。
          2.我用自動生成web項目的時候web.xml帶有頭信息
          <web-app version="2.4"
          xmlns="http://java.sun.com/xml/ns/j2ee"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
          http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
          時會報錯找不到<taglib>,去掉后面的信息后即可。
          3.<include file="webwork-default.xml">這個地方后面差一個結(jié)束符應(yīng)為
          <include file="webwork-default.xml"/>  回復(fù)  更多評論
            
          # re: WebWork In Action學(xué)習(xí)筆記(二) WebWork方式的HelloWorld 2007-02-09 21:43 小祝
          推薦:http://webwork.javascud.org/
          有很多中文資料。  回復(fù)  更多評論
            
          # re: WebWork In Action學(xué)習(xí)筆記(二) WebWork方式的HelloWorld 2007-02-10 21:59 施偉
          看來大家都很用功啊!勤奮的人總會成功!!!  回復(fù)  更多評論
            
          # re: WebWork In Action學(xué)習(xí)筆記(二) WebWork方式的HelloWorld 2007-02-11 03:09 sinoly
          踏著56k的電話貓,我來了。。。
          @賣女孩的小火柴
          你說的話ms對我意見很大滴說?郁悶ing  回復(fù)  更多評論
            
          # re: WebWork In Action學(xué)習(xí)筆記(二) WebWork方式的HelloWorld 2007-03-02 11:58 施偉
          好久沒出第三輯,慚愧啊,忙不過來。。。
          一定要加把勁,gogogo  回復(fù)  更多評論
            
          # re: WebWork In Action學(xué)習(xí)筆記(二) WebWork方式的HelloWorld 2007-03-02 17:43 穎穎
          那就再抽時間,抽抽抽,呵呵,抽光你的血  回復(fù)  更多評論
            

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 健康| 东港市| 沁阳市| 江永县| 定襄县| 万安县| 沂水县| 瑞丽市| 嘉鱼县| 迭部县| 平凉市| 博乐市| 来宾市| 富平县| 当阳市| 岢岚县| 琼海市| 苍山县| 渭源县| 洪江市| 麦盖提县| 临湘市| 天祝| 临海市| 独山县| 巴彦县| 江达县| 巴楚县| 嘉义县| 乌拉特中旗| 大理市| 石林| 定边县| 中宁县| 裕民县| 遵义县| 广河县| 潮州市| 乐清市| 崇明县| 昆山市|