首先簡要介紹下我使用的開發環境吧:Eclipse3.3 IDE For Java EE Developers下載地址:http://www.eclipse.org/downloads/,JDK5或以上版本,Struts2.0.9(呵呵,在我寫作的同時Struts2.0.11已經發布,下載地址http://struts.apache.org/download.cgi#struts206)將下載的struts-2.0.11-all.zip解壓將struts2開發所必需的jar包加入你的classpath(在Eclipse wtp項目結構下拷貝到WebContent/WEB-INF/lib目錄下即可),我的做法是在Eclipse下創建了一個struts庫如圖所示: struts2-core.jar Struts2的核心api,也是我們以后打交道最多的 xwork.jar Struts2(同Webwork一樣)建立在XWork 2庫的基礎上 ognl.jar Object Graph Navigation Language (OGNL), 類似于jsp2.0中EL表達式的一門用于訪問對象的表達式語言 freemarker.jar Struts2所有的ui標記的模板均使用freemarker編寫,freemarker根據struts2 ui標記的模板渲染,可通過修改或重寫模板使struts2的ui標記按你的要求渲染 commons-logging.jar 封裝了通用的日志接口(在Log4J or JDK 1.4+日志api的基礎上 ) 上圖中Xwork和struts2 core展開的Source attaching和Javadoc location我分別配置了xwork和struts2 core的源代碼和其文檔的位置,方便開發中查看源代碼和api函數的說明。如果你是按照我這樣配置的話那么在Eclipse wtp下新建一個Dynamic Web Project取名為HelloWorld,選中該項目右鍵Build Path加入我們剛才配置好的Struts2庫如下圖
struts2-core.jar
Struts2的核心api,也是我們以后打交道最多的
xwork.jar
Struts2(同Webwork一樣)建立在XWork 2庫的基礎上
ognl.jar
Object Graph Navigation Language (OGNL), 類似于jsp2.0中EL表達式的一門用于訪問對象的表達式語言
freemarker.jar
Struts2所有的ui標記的模板均使用freemarker編寫,freemarker根據struts2 ui標記的模板渲染,可通過修改或重寫模板使struts2的ui標記按你的要求渲染
commons-logging.jar
封裝了通用的日志接口(在Log4J or JDK 1.4+日志api的基礎上 )
選擇Add Library選擇User Library加入Struts2所需的庫。
見上圖選擇J2EE Module Dependencies勾選struts2庫參看見下圖
勾選struts2庫后當Eclipse wtp將項目發布到Tomcat的時候strust2中的jar會拷貝項目WEB-INF下的lib目錄下(以后的文章將不在強調,請切記將需要的庫勾選,否則運行時會出現找不到某某類的錯誤,因為發布的時候Eclipse wtp不會將所需的jar拷貝到WEB-INF/lib目錄下,所以程序在運行時位于該庫的jar中的類會找不到)
在web.xml中注冊一個FilterDispatcher該Filter攔截所有的請求(/*)使得struts2框架為您服務。
在項目src目錄下新建一個struts.xml作為struts2的配置文件(項目發布到Tomcat的時候Eclipse會將src目錄下的文件對應其目錄結構中的文件拷貝到WEB-INF/classes下)如下所示:
Package類似于Java中的package,其實就是可以將Action分類,劃分到不同的package中。extends="struts-default"顧名思義繼承,那么繼承誰呢?請大家查看struts2-core.jar包里有個struts-default.xml文件里面為我們的應用程序提供了默認配置,應用程序從classpath加載struts.xml的時候會從classpath中加載struts2-core中并讀取struts-default.xml,以后我也會經常涉及這個struts-default文件(呵呵,其實我也不全了解這個文件里的配置,大家努力!!!)
那么到此Struts2的基本環境配置的模板搭建好了!
那么新建一個index.jsp
在這個頁面中我將使用struts2標記,先注個冊先如下:
<%@ taglib prefix="s" uri="/struts-tags"%>(在struts2-core.jar的META-INF/struts-tags.tld中的標記<uri>/struts-tags</uri>剛好與上面uri屬性匹配, struts2的所有標記的配置信息估計都在這文件里,大家一起研究研究吧!)
新建一個Action代碼如下:
按我上面所說的struts.xml的package中把這個Action注冊進去吧
我們回過頭來看看表單:
呵呵,看見message屬性沒,該表單發出的請求會被FilterDispatcher(web.xml配置的)攔截,然后讀取struts.xml配置信息并找到HelloWorld這個Action
通過class屬性找到tutorial.HelloWorld對象,由于表單有個message屬性會調用set方法設置message的值(同webwork,hibernate的持久類不也是這樣通過set對屬性賦值,通過get對屬性取值的嗎,這里也是一樣的)然后調用execute()方法返回一個字符串(我們在寫Action的時候可以覆寫這個方法,框架默認調用這個方法,當然我們也可以選擇不覆寫,定義自己的方法,以后在說好了),呵呵這個SUCCESS是個常量,它定義在所實現的Action接口中:public static final Sring SUCCESS = “success”;里面還定義了其它的常用的字符串,自己看看源碼吧!(實際上HelloWorld繼承ActionSupport而ActionSupport實現了Action接口,當然還有其它接口,有興趣的去挖挖源碼吧!)扯了半天就是execute()返回個”success的字符串”,然后從struts.xml的對應action配置中找到所匹配的result,然后將請求轉發到/helloworld.jsp去(result中的name=”success”可以不寫,默認的,老實說:到底struts默認了哪些東東,真希望官方搞張表全給我們列出來就好)
那么剩下的最后一個頁面就是helloworld.jsp了
<s:property value="message" />就這個東東了,很簡單輸出Action中的message屬性值。
運行下看看結果:
提交下
呵呵,大功告成!!!我會接著寫的,下次也是老套路登錄,呵呵,請關注博客更新!!!
Powered by: BlogJava Copyright © 爪哇園主