配置src/struts.xml |
<?xml version="1.0" encoding="UTF-8" ?> <!--DOCTYPE struts表示根節點為struts -//Apache Software Foundation//DTD Struts Configuration 2.0//EN一個uri http://struts.apache.org/dtds/struts-2.0.dtd程式設計的時候通路,有自動補全的作用--> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <!-- 包的名稱自定義,可以配置多個包,但是名字必須唯一,起繼承作用,例如最原始的package的name值為struts-default,之後的包都要直接或者間接的繼承它; namespace命名空間:定義通路package的名字空間,也表示真實存在于WebRoot目錄下的路徑,該名字空間影響到url的位址. 例如:在result标簽中,如果配置的是相對路徑,就是相對namespace的路徑, 其次,在通路http://localhost:8080/struts2demo/path1/path2/test.action 過程中,會先去找到namespace為/path1/path2的package 如果該package中不包含name為test的action,就到namespace為/path1的package 去尋找name為test的action,如果還沒有找到,最後到根目錄以及預設的namespace中尋找 如果沒有,就傳回404錯誤 可以了解為從裡到外尋找 extends 值是struts-default或者繼承了struts-default的packageName --> <package name="xxxx" namespace="/user" extends="struts-default"> <!-- name是url請求名,不需要加字尾(.action) name屬性+namespace唯一标志一個action, class是處理url請求對應的java類,class要求包名+類名 并且該類是由公共的無參構造方法的。 預設為ActionSupport類 method配置處理請求類的處理的方法,預設為execute: 方法要滿足是公共的,傳回值類型是String,無參 method和name無關--> <action name="hello" class="cn.itcast.action.HelloAction" method="execute"> <!-- result-指結果集 name:比對請求處理方法的傳回值;預設是success type:結果處理類型;預設是dispather轉發 --> <!-- 其他type類型: ***chain:指action鍊,連結下一個action;執行actionA以後直接執行ActionB後直接執行ActionC,用得較少 位址欄是執行的第一action ***dispatcher:轉發;和servlet一緻。如果request中有資料要到視圖顯示,那麼使用dispatcher ***redirect:重定向;如果是重定向到jsp頁面,可以直接重定向,如果是重定向到另一個action,需注意 是否配置了action的字尾名。如果要求有字尾名,那麼重定向的action一定要加上字尾名 redirect的路徑一定不能在WEB-INF路徑下,因為redirect是相當于使用者直接通路了路徑,而使用者不能通路WEB-INF目錄下的檔案, 隻有程式内部轉發的時候才能轉發到WEB-INF下的JSP。 ***redirectAction:重定向導另一個action;不用加action的字尾名,會将前一個action的字尾名自動加上 ***stream:以流的形式顯示---檔案下載下傳 > <result name="success">/success.jsp</result> </action> </package> </struts> <!-- 使用通配符優化步驟 --> <!-- http://localhost:8080/struts02/user_login --> <action name="user_*" class="cn.itcast.a_config.UserAction" method="{1}"> <result name="{1}">/{1}.jsp</result> </action> * 可以比對零個或多個字元, 但不包括 / 字元. 如果想把 / 字元包括在内, 需要使用 **. 如果需要對某個字元進行轉義, 需要使用 \. <!-- 什麼情況不配置class? 即處理的aciton --> <!-- 答案: 當隻是需要跳轉到WEB-INF下資源的時候。 --> <action name="test2"> <result name="success" type="redirect">/WEB-INF/index.jsp</result> </action> 總配置檔案可以引入其他配置檔案 <include file="檔案路徑"></include> <!-- 一、全局配置 --> <!-- 0. 請求資料編碼 --> <constant name="struts.i18n.encoding" value="UTF-8"/> 指定預設編碼集,作用于HttpServletRequest的setCharacterEncoding方法 和freemarker 、velocity的輸出 <!-- 1. 修改Struts預設的通路字尾 ,這裡表示修改後預設*.action以及*.do以及什麼都不加,do後面的'',''是有意義的--> <constant name="struts.action.extension" value="action,do,"></constant> 預設情況下,如使用者請求路徑不帶字尾或者字尾以.action結尾,請求将被轉入Struts 2架構處理,否則Struts 2架構将略過該請求。 這個屬性在:struts2-core-2.1.8.1.jar\org\apache\struts2\ default.properties <!-- 2. 修改xml自動重新加載 --> <constant name="struts.configuration.xml.reload" value="true"/> struts.xml修改後是否自動重新加載這個配置檔案(開發環境下最好開啟) <!-- 3. 開啟動态方法調用 (預設不開啟)--> <constant name="struts.enable.DynamicMethodInvocation" value="true"/> actionName!action中的方法 http://localhost:8080/struts02/user!login <!-- 4. 修改上傳檔案的最大大小為30M --> <constant name="struts.multipart.maxSize" value="31457280"/> 機關是位元組 |