傳智播客-struts2(1)-配置文件裏的常量、視圖和通配符應用

struts2課程是張孝祥老師講解的。張老師的技術實力自不必說,講課水平也是一流。因爲客觀地,技術本身多少有些枯燥,如果只是純講技術點,學員可能聽起來會有些喫力,也容易犯困,但是這個問題在張老師面前則迎刃而解。因爲張老師不僅對技術瞭解透徹,而且因爲其豐富的經驗和閱歷,每講一個技術點,都可以用生活中大家易知易懂的事實舉例,信手拈來,既加速理解又便於記憶。當然,張老師講課不僅長於講故事打比方,而且相當細緻嚴謹,在講課的過程中,時不時可能會遇到新的問題,每次新解決一個問題,都會補充記錄在自己的ppt上,同時特別注意思路的講解。

 

其實學到現在,已經明白一個基本的事實:很多框架,搭建其環境的時候,兩個要素必不可缺,一是jar包,二是配置文件。struts2(我們學的版本是2.1.8.1)的配置文件不少,每個文件裏的配置項也不少,就不一一敘述了,下面挑幾個用途廣泛而且應用方便的內容講講,更多內容就看文檔吧:)

 

常量
首先,當我們學習一個框架的時,一般可以參考框架自帶的示例項目。例如struts2,剛入門的時候,可以參考其自帶的blank項目。當部署完這個項目後,開啓tomcat服務,在地址欄裏輸入請求的action路徑時,可以發現,雖然沒有給該action定義擴展名,但是地址裏輸入的action路徑沒有擴展名或者擴展名爲action時都可以通過。爲什麼呢?這是由struts2的默認配置屬性決定的。

 

常量的默認配置在struts2-core-2.1.8.1/org/apache/struts2/default.properties文件裏,像定義訪問action的默認擴展名、開發模式設置、i18n以及默認字符編碼等等,例如struts.action.extension=action,,

 

應當注意的是,一般情況不要修改框架系統的原始文件,如果要更改默認的配置項,可以採用覆蓋的方式。struts.xml是struts2的基本配置文件之一。該文件內可以配置多個常量,以覆蓋默認的常量配置,例如<constant name="struts.action.extension" value="do,," />表示action的可用擴展名爲do或者不用擴展名。

 

常量可以在下面多個文件中進行定義,struts2加載常量的搜索順序如下,後面的設置可以覆蓋前面的設置:
default.properties文件
struts-default.xml
struts-plugin.xml
struts.xml
struts.properties(爲了與webwork向後兼容而提供)
web.xml

 

視圖
struts2豐富了支持的視圖類型,具體內容可以參見文檔的“Result Types”部分。這裏只記錄兩點:
1、文檔裏列出的視圖類型中有一種是“plaintext”,但實際在配置文件裏配置的時候,應該是“plainText”,可以從struts2-core-2.1.8.1/struts-default.xml文件中<result-types>元素下內容求證。
2、struts2允許用戶自定義類型,但無論那種類型的視圖,表示該視圖的類都需要實現com.opensymphony.xwork2.Result接口。

 

通配符應用
<action name="*_*" class="cn.itcast.struts2demo.web.struts2.actions.HelloWorldAction" method="{1}">
        <result name="success" type="dispatcher">
            <param name="location">/WEB-INF/pages/hello/{2}.jsp</param>
        </result>
</action>
上文是struts.xml裏action的配置。如果從地址欄輸入以下內容:
http://localhost:8080/項目名/namespace/sayHello2_view1
調用的是方法sayHello2,展示的是視圖view1。

如果該方法沒有指定,則默認調用execute方法,沒有的話拋NoSuchMethodException異常。

 

不過現在一般規範編程都只用一個“*”,然後方法名和視圖名相同。當然,也可以用“*”定義目錄名,例如<param name="location">/WEB-INF/pages/{2}/view1.jsp</param>

 

此外,應用通配符時,struts2可以忽略下劃線:
productCreate(類名)--product* (action name)--product(路徑)
product_Create(類名)--product_* (action name)--product(路徑)
以上兩種方式均可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章