<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!-- 這裏是打開structs的開發模式,默認是true -->
<constant name="struts.devMode" value="true" />
<!-- 方法感嘆號動態調用,必須把這個打開 -->
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<!--structs2 國際化,編碼問題 -->
<constant name="struts.i18n.encoding" value="utf-8" /><!-- internationalization
18個字母 -->
<include file="/com/jaovo/struts2/ognl/ognl.xml"/><!--包含,把指定文件的xml,包含到當前xml文件中-->
<!--========================================================================= -->
<package name="front" namespace="/front" extends="struts-default"><!--(1)模塊名字,(2)在地址欄寫的那個包名(並非寫前面的包名,是這裏的,通常都和前面的包名(name)一致),(3)繼承於底層的"struts-default"-->
<!--name是包名,可是目錄要打namespace裏面的值(建議是包名前面加個/)-->
<action name="index"><!--action名字-->
<result><--這裏不寫 後面默認是result name="success"-->
/Hello.jsp<!--要跳轉的頁面-->
</result>
</action>
</package>
<!--===============默認主頁=======================================-->
<package name="default" namespace="/" extends="struts-default">
<default-action-ref name="index" /><!--默認自動跳轉到name爲index的action中,指定的頁面-->
<!-- 沒有上面這一句,url中就必須加index,要否則訪問不到,默認就用這個
在web.xml中,經過
<welcome-file-list>
</welcome-file-list>
來指定默認主頁
可是也能夠去調用,經過struts2指定
-->
<action name="index">
<result>/default.jsp</result>
</action>
</package>
<!--========================================================================= -->
<!-- 這裏是默認是匹配不到的就匹配這裏,可是和配置相關
F:\Step06_JavaEE\_01_Strust2\struts-2.3.24-all\struts-2.3.24\src\core\src\main\java\org\apache\struts2\dispatcher\mapper
這個類裏面有相關源碼
-->
<!-- 若是namespace爲空的話,就是全部匹配不上的,都匹配到這裏來
我這裏只管namespace,無論的別的,和action無關
-->
<package name="fron" namespace="" extends="struts-default"><!--前面怎麼錯都行,後面的index對應上,就行,別的都匹配不上的時候,就匹配到這個-->
<action name="index">
<result>
/404.jsp
</result>
</action>
</package>
<!--========================================================================= -->
<package name="front" namespace="/" extends="struts-default">
<action name="index" class="com.jaovo.structs2.front.action.IndexAction3"><!--action跳轉到指定類,在從類中的方法的返回值中,得到一個字符串,去匹配下面這個result name=success-->
<!-- 這裏的返回值是success,而後回去匹配result爲success的result -->
<!--類返回這個字符串有三種方法,看./Struts2.java裏面的execute :-->
<result name="success">
/404.jsp
</result>
</action>
</package>
<!--==================================方法調用============================================-->
<!--========第一種,指定名字調用userAdd,一個方法,要對應一個action====-->
<package name="user" namespace="/user" extends="struts-default">
<!--兩個a超連接是在jsp裏面要跳轉時候寫的-->
<a href="user/userAdd">action調用add方法添加用戶</a><br /> 調用第一種action方法
<action name="userAdd" class="com.jaovo.structs2.user.action.UserAction"
method="add"><!--method 是調用方法,後面是方法名-->
<result name="success">
/user_add_success.jsp
</result>
</action>
<!--==========第二種 !感嘆號調用============-->
<!--a超連接是在jsp裏面要跳轉時候寫的-->
<a href="user/user!add">URL動態傳參調用相關的方法執行</a><br /> 調用第二種action方法,user定位到類,!後面跟方法名
<action name="user" class="com.jaovo.structs2.user.action.UserAction">
<result>
/user_add_success.jsp
</result>
</action>
</package>
<!--=========================第三種,推薦,通配符===================-->
<package name="actions" namespace="/actions" extends="struts-default">
<!-- 記得sql語句中的?通配符嗎,嘿嘿,同樣的,{1},第一個星,{2}第二個星 -->
<!--jsp文件,a連接寫法-->
<a href="actions/Studentadd">添加學生</a>
<a href="actions/Studentdelete">刪除學生</a>
<br /> 不過,必定要遵照"約定優於配置"的原則
<action name="Student*" class="com.jaovo.structs2.action.StudentAction"
method="{1}"><!--如上面,是否是類名後面跟着是方法名,這個是方法名我用*代替,別管你輸入什麼方法,只要我有,*號就代替什麼方法,而後再去匹配,就不用好多action了吧,method後面跟方法名,要換成{1},就是第一個星號的意思-->
<result name="success">
/Student{1}_success.jsp<!--而後找到對應的jsp(注意:jsp命名,必定要和這個一致,名字加方法名,要麼找不到對應的jsp文件),就好了,-->
</result>
</action>
兩個**號匹配一切,------------------------------
<!--jsp文件,a連接寫法-->
<br /> 不過,必定要遵照"約定優於配置"的原則
<a href="actions/Teacher_add">添加老師</a>
<a href="actions/Teacher_delete">刪除老師</a>
<a href="actions/Course_add">添加課程</a>
<a href="actions/Course_delete">刪除課程</a>
<!-- 兩個星號,匹配規則的一切,前面截胡一切uri的類名和方法名的請求 -->
<action name="*_*" class="com.jaovo.structs2.action.{1}Action"
method="{2}"><!--第一個*號是類名把,第二個*號是方法名,注意細節,這個是類後面加_再加方法名,必定要和本身的跳轉a連接對應上-->
<result>
/{1}_{2}_success.jsp
</result>
</action>
</package>
<!--========================方法調用和傳參====================================-->
<!--jsp文件傳參寫法-->
<a href="user/User_add?name=a&age=8">添加用戶</a>
<!-- 領域傳值模型,本質才uri中,加上具體的對象 -->
ModelDriven傳值.默認是實現ModelDriven接口,實現getModel方法,
而後在uri傳值中,就能夠不用在封裝數據,會自動封裝到實體類中,這個要在類中實例化實體類對象
<a href="user/User_add?user.name=dongrege&user.age=18">添加用戶</a>//封裝到對象裏面了,對象是誰new的?底層.....
--------------------------
<package name="actions" namespace="/user" extends="struts-default"><!--name是包名,可是目錄要打/user-->
<!-- 兩個星號,匹配規則的一切 -->
<action name="*_*" class="com.jaovo.structs2.user.action.{1}Action"
method="{2}">
<result name="success">
/{1}_{2}_success.jsp
</result>
</action>
</package>
<!--=============================四種方式跳轉==========================================-->
<!--=============================dispatcher=========================================-->
地址欄不顯示要跳轉的**.jsp 是同一個棧,是同一個線程內局部變量
<package name="resultTypes" namespace="/r" extends="struts-default">
<!-- 這一個的跳轉,就是同一個棧,也就是同一個ThreadLocal,線程內局部變量,傳過來的那個參數,保存request,在整個請求過程當中都能用-->
<action name="r1">
<!--這裏的result,並非咱們傳統意義上,方法的那個返回值(是方法的返回值,只不過是預約義的),而是,經過預約義返回值的方式,進行不一樣頁面間的跳轉控制-->
<!-- 不指定,默認就是這個 : 運用服務器跳轉, forward(),用服務器跳轉到結果頁面,不能是action-->
<result type="dispatcher">/r1.jsp</result>
</action>
<!--=============================redirect=========================================-->
地址欄顯示**.jsp 就是跳轉頁面,沒有通過action
<!-- 這個,就是跳轉到一個簡單的jsp頁面,沒有通過action -->
<action name="r2">
<!-- 不能是action 就是底層那個redirect,至關於我要發送到客戶端瀏覽器,這是瀏覽器跳轉
瀏覽器端的jsp
-->
<result type="redirect">/r2.jsp</result>
</action>
<!--=============================chain=========================================-->
鏈式跳轉,chain指定的是r1 意思是跳轉到另外一個action的name爲r1的那個跳轉頁面,再由r1action 跳轉到指定頁面,地址欄不會顯示**,jsp 能夠跳轉到action中,也能夠直接跳轉到一個jsp頁面,可是action能夠傳參,可是jsp頁面不能夠傳參 action的內容保存在valuestack中 jsp中屬性在actioncontext中保存
<!-- 下面這一個,是跳轉到一個不一樣的action中,也就是否是同一個ThreadLocal,因此須要傳遞參數 -->
<action name="r3">
<!-- 能夠跳轉到action 至關於forward到另一個action,跳轉到r1 action,而後由r1action 跳轉到r1.jsp-->
<result type="chain">r1</result>
<!--
<param name="actionName">/方法名</param>
<param name="namespace">/包名</param>
-->
</action>
<!--=============================redirectAction=========================================-->
先跳轉到action的name爲r2的,再有那個action跳轉到指定頁面,地址欄顯示**.jsp
能夠跳轉到action中,也能夠直接跳轉到一個jsp頁面,可是action能夠傳參,可是jsp頁面不能夠傳參 action的內容保存在valuestack中 jsp中屬性在actioncontext中保存
<!-- 這個是在服務器端先跳轉到一個action,而後在在那個action決定跳轉到那個jsp頁面 -->
<action name="r4">
<!-- 客戶端跳轉 跳轉到對應的action-->
<result type="redirectAction">r2</result>
</action>
</package>
<!--==========================跨包訪問=======================================-->
<!-- 如何訪問到另一個package中的,跨包訪問 -->
<!-- <package name="admin" namespace="/admin" extends="struts-default"> -->
<package name="admin" namespace="/admin" extends="user"><!--默認繼承struts-default 這裏能夠改成咱們的包(本身的user包)-->
<action name="admin" class="com.jaovo.struts2.user.action.AdminAction"><!--這裏若是方法返回回來的不是success ,就會報錯,繼承於user 返回值返回回來的,就能夠去繼承的那個包裏面找result對應的name爲,返回回來的那個值,再匹配不到纔會報錯-->
<result>/admin.jsp</result>
</action>
</package>
<!--===================封裝形式 ${值}-->
<package name="user" namespace="/user" extends="struts-default">
<!--
實體類中這樣寫
@Override
public String execute() throws Exception {
if(type == 1) r="/user_success.jsp";
else if (type == 2) r="/user_error.jsp";
return "success";
}
-->
<action name="user" class="com.jaovo.struts2.user.action.UserAction">
<!-- 動態的去讀valueStack裏面的內容 r裏面的值,r的值根據默認常量值,動態賦予的jsp頁面,當這裏去讀的時候,就能讀出相應的內容-->
<!-- 只要是成員變量,都會在值棧中,保存相應的值 -->
<result>${r}</result><!--解析r的值,是一個地址,是在實體類中賦值的,這裏解析出來,上面是實體類寫法-->
</action>
</package>
<!--跳轉傳參-->
<package name="user" namespace="/user" extends="struts-default">
<action name="user" class="com.jaovo.struts2.user.action.UserAction">
<!-- 這裏是不能傳遞參數的,爲何? 接受方不是一個action,沒有一個action,就沒有成員變量這一說,因此沒有 -->
<result type="redirect">/user_success.jsp?t=${type}</result>
</action>
jsp中寫法 :
<s:property value="t"/>//訪問action(valuestack值棧)中的t屬性,(訪問不到)由於上面跳轉的是jsp,沒有action,就沒有t屬性
<s:property value="#parameters.t"/>//訪問jsp中(actioncontext(頁面全部信息,至關於堆內存))的t屬性,就能訪問到
</package>
</struts>
java