1. 程式人生 > >SSH框架之Struts的預設訪問字尾、相同訪問路徑問題、常量

SSH框架之Struts的預設訪問字尾、相同訪問路徑問題、常量

一、Struts中預設訪問字尾:
1、Struts1中預設訪問字尾是*.do
2、Struts2中預設訪問字尾是*.action

3、如何修改預設訪問字尾:
1)Struts2的.action訪問字尾在哪裡定義?
Struts-core-2.3.4.1.jar/org.apache.struts/default.properties中的

struts.action.extension=action,,

2)在struts.xml中進行對常量的修改
所有的專案都要使用,是一個全域性配置,所以位置應該位於:
<struts>標籤的後面,<package>標籤的前面!

<!--指定訪問字尾為action/do/沒有訪問字尾,都可以-->
<constant name="struts.action.extension" value="action,do,"></constant>

4、情況分析

value="action,,"
    localhost:8080/struts_02/user_register          OK
    localhost:8080/struts_02/user_register.action   OK

value="action,"value="action"
    localhost:8080
/struts_02/user_register.action OK value="action,do," localhost:8080/struts_02/user_register OK localhost:8080/struts_02/user_register.do OK localhost:8080/struts_02/user_register.action OK value="action,do" localhost:8080/struts_02/user_register.do OK localhost:8080/struts_02/user_register.action OK

二、相同訪問路徑問題
問題產生:
1、Action

2、struts.xml

<action name="user_*" class="sram.config.UserAction4" method="{1}">
    <result name="success">/index.jsp</result>
</action>

<action name="user_*" class="sram.config2.UserAction" method="{1}">
    <result name="success">/index.jsp</result>
</action>

3、由於上述情況,所以二者想要訪問register方法的訪問路徑均為:
http://localhost:8080/struts_02/user_register

結果:
當我們訪問此路徑時,執行情況到底如何?

由此可見,配置在前面的會被配置在後面的覆蓋掉

三、Struts中的常量(Struts-core-2.3.4.1.jar/org.apache.struts/default.properties中)
1、詳解:

<!--指定預設編碼集,作用於HttpServletRequest的setCharacterEncoding方法 和freemarker 、velocity的輸出(僅對POST起作用)-->
<constant name="struts.i18n.encoding" value="UTF-8"/>

<!--自定義字尾修改常量-->
<constant name="struts.action.extension" value="do"/>

<!--設定瀏覽器是否快取靜態內容,預設值為true(生產環境下使用),開發階段最好關閉 -->
<constant name="struts.serve.static.browserCache" value="false"/>

<!--當struts的配置檔案修改後,系統是否自動重新載入該檔案,預設值為false(生產環境下使用),開發階段最好開啟 -->
<constant name="struts.configuration.xml.reload" value="true"/>

<!--開發模式下使用,這樣可以打印出更詳細的錯誤資訊 -->
<constant name="struts.devMode" value="true" />

<!--預設的檢視主題 -->
<constant name="struts.ui.theme" value="simple" />

<!--與spring整合時,指定由spring負責action物件的建立--> 
<constant name="struts.objectFactory" value="spring" />

<!--該屬性設定Struts 2是否支援動態方法呼叫,該屬性的預設值是true。如果需要關閉動態方法呼叫,則可設定該屬性為 false-->
<constant name="struts.enable.DynamicMethodInvocation" value="false"/>

<!--上傳檔案的大小限制,value的值為單位位元組-->
<constant name="struts.multipart.maxSize" value=“10701096"/>

2、應用:動態方法呼叫(不推薦使用,原因:這種形式,需要對程式結構有所瞭解,不安全)
1、動態方法呼叫語法:action name+!+方法名
2、舉例: